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.