https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117256
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I thought I've guarded that in main with if (__builtin_offsetof (A, c) == 0 && __builtin_offsetof (A, i) != 1 && __builtin_offsetof (B, a) == 0 && sizeof (A) == sizeof (B)) so the testing is only done if A.c is at offset 0, A.i is not at offset 1 (I assume it can't be at offset 0 either) and B.a is at offset 0 and A is the same size as B. Perhaps the third check is redundant with the 4th.