[cxx-abi-dev] How to layout the class (with bitfield members) in the inheritance hierarchy on GCC 3.3
Mark Mitchell
mark at codesourcery.com
Wed Jun 2 01:12:01 UTC 2004
Yan Shi wrote:
>
>
>
> Hi,
>
> According to C++ ABI 2.4 Non-POD Class Types defintion:
> "Allocation of Members Other Than Virtual Bases
> For each data component D (first the primary base of C, if any, then the
> non-primary, non-virtual direct base classes in declaration order, then the
> non-static data members in declaration order), allocate as follows:
>
> For the following test cases, the bitfield members (b0, b1, b2, b3, b4),
> should all be allocated together in 4 bytes, therefore the total size of
> struct B4 (test2.C) should be 8 bytes and the alignment of struct B4 is 4
> bytes.
>
> However, I tried both test cases with GCC 3.3 on SLES9 Linux, the size of
> struct B4 (test2.C) is 12 bytes, while the alignment of struct B4 is 4
> bytes on 32-bit mode, which does not agree with the ABI definition. Could
> some one please explain what the rules/algorithm for such behavior in GCC
> 3.3?
G++ 3.3 has known bugs in this area of the ABI. We believe that those
bugs have been corrected in GCC 3.4.0. You might also try
"-fabi-version=0" with G++ 3.3, which eliminates some of the bugs.
(Some of the bugs were preservedin 3.3 for backwards compatibility with
earlier versions of G++.)
--
Mark Mitchell
CodeSourcery, LLC
mark at codesourcery.com
More information about the cxx-abi-dev
mailing list