http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48351
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pault at gcc dot gnu.org --- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-03-30 08:32:55 UTC --- (In reply to comment #1) > The reason is that the CLASS wrapper does not set: > (gdb) p expr->symtree->n.sym->ts.u.derived->attr.alloc_comp If I set that variable manually in the debugger, the generated code contains (re)assignment calls, but the program crashes nevertheless :-( [I do not want to rule out issues with my local tree, which has some scalarizer coarray patches, though they should not affect this result.] Admittedly, I also do not understand the dump (with explicit size "4" to make the dump easier to read): if ((real(kind=8)[0:] * restrict) this->_data->u.data == 0B) goto L.1; L.1:; D.1608 = MAX_EXPR <(this->_data->u.dim[0].ubound - this->_data->u.dim[0].lbound) + 1, 0>; [...] if ((real(kind=8)[0:] * restrict) this->_data->u.data == 0B) { this->_data->u.data = (void * restrict) __builtin_malloc (32); What's D.1608 for? If u.data == NULL, the bounds should not be looked at -- admittedly, this information is only used later in the else branch of the "if" shown above. Other than that, the dump looks OK as far as I could see. Valgrind claims - before the crash - "Invalid write of size 8" in the assignment line of "make". (Write 8 could be a pointer or an array index.) The actual crash is in the same line - and valgrind shows: "Access not within mapped region at address 0x0", which means something like "(NULL).value" or "(NULL)->value" access.