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.

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?

        paul

Reply via email to