http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50050
--- Comment #2 from Mikael Morin <mikael at gcc dot gnu.org> 2011-08-12 11:54:27 UTC --- In gfc_expr_to_initialize, we copy an expression, result = gfc_copy_expr (e); and then change it to something else: /* Change the last array reference from AR_ELEMENT to AR_FULL. */ for (ref = result->ref; ref; ref = ref->next) if (ref->type == REF_ARRAY && ref->next == NULL) { ref->u.ar.type = AR_FULL; for (i = 0; i < ref->u.ar.dimen; i++) ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL; result->rank = ref->u.ar.dimen; break; } Not very surprising that it fails.