http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55134
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Status|UNCONFIRMED |NEW Last reconfirmed| |2012-10-30 CC| |burnus at gcc dot gnu.org, | |janus at gcc dot gnu.org Ever Confirmed|0 |1 --- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-10-30 11:34:37 UTC --- >From the dump. gfortran first generates a deferred-shape array: a.data = (void * restrict) &i[0]; That's fine. But instead of passing foo (&a); it should pass foo (a.data); In resolve.c's resolve_assoc_var, one properly sets sym->as->type = AS_DEFERRED. The problem is that the code assumes that if the variable is not a pointer, it cannot be AS_DEFERRED. From trans-array.c's gfc_conv_array_parameter: 7017 if (!sym->attr.pointer 7018 && sym->as 7019 && sym->as->type != AS_ASSUMED_SHAPE 7020 && sym->as->type != AS_ASSUMED_RANK 7021 && !sym->attr.allocatable) 7022 { ...