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.

Reply via email to