http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55118
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2012-10-30 11:11:35 UTC --- We can't really do much here without breaking type-based alias analysis and data dependence analysis (which depends on seeing only array-refs when they were present in the original source). Which means that it is eventually worth considering to lower the address forms some more (even the rare case we combine them with dereferences in forwprop is suspicious). Thus, lower <bb 3>: # i_66 = PHI <i_16(3), 0(2)> _12 = &MEM[(const struct Domain *)_10 + 32B].D.119657.domain_m[i_66].D.114927; _13 = &MEM[(struct Domain *)this_1(D) + 8B].D.119657.domain_m[i_66].D.114927; _14 = MEM[(const Element_t[2] &)_12]; MEM[(Element_t[2] &)_13][0] = _14; _15 = MEM[(const Element_t[2] &)_12 + 4]; MEM[(Element_t[2] &)_13][1] = _15; i_16 = i_66 + 1; if (i_16 != 3) goto <bb 3>; to sth like tem = i_66 * 4; tem = tem + 32; _12 = _10 + tem; nothing for 4.8 though. And it will badly interact with __builtin_object_size again.