Strict aliasing rule je součástí C++ standardu myslím od verze 11. Od té doby standard zakazuje aliasing pointerů různého typu a programy, které tohle používají (a dřív fungovaly), najednou fungovat nemusí, protože je to undefined behavior. Gcc někdy řekne warning při překladu, ale ne vždy, heuristiky v kompilátoru nejsou schopny odhalit všechna porušení strict aliasingu. S architekturou to nemá nic společného.