http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56123
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|major |normal
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-01-28
01:20:38 UTC ---
You're making invalid assumptions about implementation-defined behaviour.
struct { // Bits
uint signal_handler_index : 24;
uint unused1 : 24;
uint orbid_connection : 16;
};
Here the bit-fields take up three "allocation units" i.e. sizeof the struct is
3*sizeof(uint)
I believe this is because the platform ABI says unused1 cannot straddle two
4-byte units.
struct { // Bits
uint signal_handler_index : 24;
uint unused1 : 8;
uint unused2 : 16;
uint orbid_connection : 16;
};
Here the first two bit-fields both fit into an int, and so do the last two, so
sizeof the struct is only 2*sizeof(uint)
http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Structures-unions-enumerations-and-bit_002dfields-implementation.html
Other compilers on the same platform do the same thing.