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: Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
  • Subject: Re: [cxx-abi-dev] What is a POD? TC1 or first C++ Standard
  • From: Nathan Sidwell <nathan@xxxxxxxxxxxxxxxx>
  • Date: Fri, 24 Sep 2004 17:59:42 +0100

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?

nathan

--
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
nathan@xxxxxxxxxxxxxxxx    ::     http://www.planetfall.pwp.blueyonder.co.uk