https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100171
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hubicka at gcc dot gnu.org, | |rguenth at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Well, the issue is that we end up with (for the simplest case): <bb 2> [local count: 357878152]: _15 = MEM <const double[2]> [(const value_type &)arg_3(D)][0]; _16 = MEM <const double[2]> [(value_type &)out_2(D)][0]; _17 = _15 + _16; MEM <const double[2]> [(value_type &)out_2(D)][0] = _17; _22 = MEM <const double[2]> [(const value_type &)arg_3(D)][1]; _23 = MEM <const double[2]> [(value_type &)out_2(D)][1]; _24 = _22 + _23; MEM <const double[2]> [(value_type &)out_2(D)][1] = _24; return; and the first store into out[0] can end up writing to arg[1]. I don't see what we can easily do here. Path based disambiguation could maybe argue that partial overlaps of value_type are not allowed.