[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