http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60370
--- Comment #6 from Mikael Morin <mikael at gcc dot gnu.org> --- (In reply to janus from comment #5) > However, it also seems to introduce another ordering issue: In particular > the bounds of 'b' are now set as > > b.dim[1].lbound = 1; > b.dim[1].ubound = (D.2352 - D.2351) + 1; > > before those temps are actually set via > > D.2351 = a.dim[0].lbound; > D.2352 = a.dim[0].ubound; Hmm, no those are correctly ordered, but I see what you mean; and it's actually diagnosed by the compiler when warnings and optimizations are enabled: Namely this happens: D.2339 = b.dim[1].lbound; D.2340 = b.dim[1].ubound; before b has been initialized. So the reallocation code has to also happen before b's bounds are evaluated. Even more tricky... :-(