Actions

icon Post
text/html Subscribe
text/html Unsubscribe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: Nathan Sidwell <nathan@xxxxxxxxxxxxxxxx>
  • Subject: Re: [cxx-abi-dev] What is a POD? TC1 or first C++ Standard
  • From: Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
  • Date: Fri, 24 Sep 2004 10:31:42 -0700

Nathan Sidwell wrote:

Mark Mitchell wrote:

Dennis Handly wrote:

GCC is not going to change back to the pre-TC1 definition, even for
return values



What do you mean by "return values"?  I said it only affects layout.
I first thought it also affects them but 3.1.4 Return Values, says nothing
about PODs.
You are correct. I thought it said that non-PODs could not be passed/returned in registers, but, in fact, it is more specific: it talks about non-trivial copy constructors and destructors.

That makes things somewhat simpler.

It seems to me that a POD with a pointer-to-member data member should not be a "POD for purpose of layout" because the layout of a "POD for the purpose of layout" is supposed to be whatever the C ABI would require -- and the C ABI does not specify the layout of a type containing a pointer-to-member.

Now, the question is, when would this make a difference? Dennis, can you post a small test case showing where the layout is different depending on whether you use the TC1 or pre-TC1 definition of POD?

I would have thought it'd change when the tail padding of such a class could
be used by a derived class. Something like,

struct A {
  int A::*ptr;
  char f;
};

struct B : A {
  char g;
};

Where is B::g placed?

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.

--
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@xxxxxxxxxxxxxxxx