https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87373
--- Comment #21 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- (In reply to Murat Ursavaş from comment #20) > By the way, the hardware peripheral registers are aligned to 32bits. So why don't you define your struct as struct TestStructType { volatile unsigned one; unsigned char two; unsigned short three __attribute__((packed)); }; And get rid of the pragma entirely?