Egyértelműen unaligned access -t csinálsz, ekkor pedig implementation defined mi történik. A baj azzal van, hogy a kódon nem látszik mi imp.def. és mi nem, így könnyű elrontani. Esetleg egy -m strict-align jellegű kapcsoló vagy egy static analyzer segíthet.
Amúgy az optimizer nem érti mit akarsz, hanem véletlenül megjavította. Gondolom a transzformációk során van valahol egy unaligned access ellenőrzés amit aktiválódott. Nem fogadnék rá nagy tételben, hogy a következő compiler verzió is így fog működni erre az esetre.
De gondolom ezekkel tisztában vagy te is.