https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66119
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. We expand from <bb 2>: a$data_13 = MEM[(struct Vec2 *)&a]; a$32$data_14 = MEM[(struct Vec2 *)&a + 32B]; b = b; v2_15 = MEM[(struct Vec2 *)&b]; v2$32_16 = MEM[(struct Vec2 *)&b + 32B]; _7 = a$32$data_14 + v2$32_16; _10 = a$data_13 + v2_15; MEM[(struct Vec2 *)&<retval>] = _10; MEM[(struct Vec2 *)&<retval> + 32B] = _7; return <retval>; in GCC 5 (note the b = b assignment) while 4.9 sees <bb 2>: a$data_4 = MEM[(struct Vec2 *)&a]; a$32$data_13 = MEM[(struct Vec2 *)&a + 32B]; v2_14 = MEM[(struct Vec2 *)&b]; v2$32_15 = MEM[(struct Vec2 *)&b + 32B]; _7 = a$32$data_13 + v2$32_15; _10 = a$data_4 + v2_14; MEM[(struct Vec2 *)&<retval>] = _10; MEM[(struct Vec2 *)&<retval> + 32B] = _7; return <retval>;