https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66804
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- CCP computes this precisely: Visiting PHI node: # PT = { D.1842 } (nonlocal, escaped) p_3 = PHI <&MEM[(void *)&xxx + 2444B](2), p_4(3)> Argument #0 (2 -> 4 executable) &MEM[(void *)&xxx + 2444B] Value: CONSTANT &MEM[(void *)&xxx + 2444B] Argument #1 (3 -> 4 executable) p_4 Value: CONSTANT 0x0 (0x0ffffffffffffffff) PHI node value: CONSTANT 0x0 (0x0ffffffffffffffff) but we don't record the alignment (because it looks useless to know - it's byte alignment). So the alignment on the access (invalid due to your use of a bogus aligned type) prevails.