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: Kerch Holt <kerch@xxxxxxxxxx>
  • Date: Fri, 24 Sep 2004 10:14:39 -0700

Mark -

Here is a test case that shows the difference.
Kerch
----------------------------------
struct S {  // POD after TC1 change
    int S::*pm;
    char c;
};
struct R {
};

struct T : public S , public R {
    char i;
    double d;
};

int main () {
    T t;
    return (((int)&t.i) - (int)&t); // aCC5 gets 5, aCC6 gets 8
}

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?


--
Kerch Holt                 kerch@xxxxxxxxxx
HP Java, Compilers, and Tools Lab (JCTL)
11000 Wolfe Rd. MS 4023
Cupertino, CA    95014     408-447-0421