https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105141
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- To be precise, with pragma pack(1) c has alignof == 1, so it really depends on what is before it in the section. In the #c0 case, the diagnostic said 0x0000004040ca which means that ((uintptr_t) &c.b % 4) == 2 and so ((uintptr_t) &c % 4) == 1 (either there is some 1 byter var before it or something similar). If you increase the size, if the preceeding var is the same, then still ((uintptr_t) &c % 4) == 1 and for 3 byte a ((uintptr_t) &c.b % 4) == 0.