On Mon, Aug 27, 2012 at 3:16 PM,  <paul_kon...@dell.com> wrote:
> On Aug 27, 2012, at 4:05 PM, Gabriel Dos Reis wrote:
>
>> On Mon, Aug 27, 2012 at 1:48 PM,  <paul_kon...@dell.com> wrote:
>>> I'm doing some checking of data structure layouts in different releases of 
>>> our code -- which were produced by different releases of GCC (3.3.3 vs. 
>>> 4.5.4).
>>>
>>> One difference I'm seeing that is puzzling is in the handling of base 
>>> classes.  Specifically, the case where a base class has padding at the end 
>>> to fill it out to a multiple of the alignment.
>>>
>>> In GCC 3.3.3, when such a class is used as a base class, that padding is 
>>> omitted, and the first derived class data member starts right after the 
>>> last base class real (not pad) data member.  In GCC 4.5.4, the base class 
>>> is used padding and all, the first derived class data member starts after 
>>> the padding of the base class.
>>>
>>> Which is correct?  Or are both correct?  This sort of thing is a potential 
>>> cause of trouble if such a class is used as a container for persistent data.
>>>
>>>        paul
>>>
>>
>> Is this message
>>
>>             http://gcc.gnu.org/ml/gcc/2002-08/msg00874.html
>>
>> relevant to your case?
>>
>> -- Gaby
>
> Yes, that looks like the exact case.  And the mail thread seems to say that 
> the "3.3.3" behavior I'm seeing is what G++ was doing at that time, as was HP 
> -- but not Intel.  So now we have it done differently in later compilers.

Yes.

>
> I know this is changing data structure layouts in our code; I don't know yet 
> if that is a problem (i.e., if it applies to layouts used in persistent data 
> or in protocol messages).  I assume there isn't some compiler switch I can 
> use to control this behavior?
>

Normally, any changes like this is controlled by -fabi-version; you
can also get warnings
with -Wabi.  See the discussion at

    
http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wabi-168

if it is of any help.

-- Gaby

Reply via email to