[cxx-abi-dev] What is a POD? TC1 or first C++ Standard

Mark Mitchell mark at codesourcery.com
Mon Sep 27 15:29:00 UTC 2004


Nathan Sidwell wrote:

> Mark Mitchell wrote:
>
>>
>> Right, good.  Again, it looks like G++ 3.4 will treat A as a POD, 
>> following TC1, and will therefore not place B::g in the tail padding 
>> for A.
>>
>>  From what Dennis, says that sounds like G++ and aCC are incompatible 
>> in this respect, but that G++ is probably compatible with (recent 
>> versions of) EDG.  I'm not sure what the most equitable way to 
>> resolve the ambiguity in the ABI specification is.
>
>
> I recall some example along the lines of,
>
> struct A
> {
>     T m;
>     double d;
>     char c;
>     void copy_me (A const *s)
>     {
>         std::memcpy (this, s, sizeof (*this));
>     }
> };
>
> being valid, so long as A is a POD -- i.e. T does not make it a non-pod.
> If that is the case, we should not be reusing the tail padding of
> any base class that the _language_ says should be POD.  For instance
> when T is a ptr-to-member, or for that matter, when it is an overlong
> bitfield.

Yes, you're correct, the standard does guarantee that you can do bitwise 
copies for PODs  using their size. 

In other words, your point is that unless we interpret the ABI as 
meaning "TC1 POD", it is not the ABI for a correct C++ compiler, because 
it will fall afoul of this rule.  This is [basic.types]/3, for reference.

I think that's a pretty compelling agument that we should clarify the 
ABI to indicate that POD means "POD as defined by TC1".  Any objections 
to that proposal?  Are there any compilers other than aCC implementing 
the pre-TC1 definition?

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark at codesourcery.com




More information about the cxx-abi-dev mailing list