https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70733
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- LLVM does effectively int main() { b.member.member = 4; a = -(unsigned long)b.member.member; if (a != -4) abort(); and if you write that then GCC behavior agrees with that of LLVM.