RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct

Jonathan Wakely via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 8 07:59:22 PST 2016


On 8 February 2016 at 15:42, H.J. Lu <hjl.tools at gmail.com> wrote:
> On Mon, Feb 8, 2016 at 7:02 AM, Jonathan Wakely <jwakely.gcc at gmail.com> wrote:
>> On 8 February 2016 at 13:54, H.J. Lu <hjl.tools at gmail.com> wrote:
>>> On Sun, Feb 7, 2016 at 12:52 PM, H.J. Lu <hjl.tools at gmail.com> wrote:
>>>
>>> The standard-layout POD is well defined:
>>>
>>> https://en.wikipedia.org/wiki/C%2B%2B11#Modification_to_the_definition_of_plain_old_data
>>>
>>> Here is the updated proposal for  Intel386, x86-64 and IA MCU psABIs:
>>>
>>> 1. "collection".  A collection is a structure, union or C++ class.
>>
>> These are all "class types". Why invent a new term?
>
> Because it applies to both C and C++.  There is no class in C.

Then you could use the term "class type" in the ABI, defining it to
mean structure or union in C, or class type in C++. No need for a new
term.


>>> 2. "empty collection".  An empty collection is:
>>>    a. A collection without member.  Or
>>
>> What about base classes?
>>
>> What about bit-fields of length 0?
>
> Is a collection with them standard-layout POD type?

(I'm not sure what the "bit-fields of length 0" part is for, but my
point is it would be useful to examine similar concepts in the
standard and align with them, not just make up entirely new
classifications.)

For base classes, yes. A standard-layout class can have base classes
of standard-layout type.

struct A { };
struct B { };
struct C : A, B { };

C is a standard-layout type. Is it an empty collection?


>>>    b. A collection with only empty collections.  Or
>>
>> What does "with" mean? Only members, or bases too?
>
> Is "A collection with only members of empty collections" better?

Should it mention base classes?


>>>    c. An array of empty collections.
>>> 3. "empty record".  An empty record is Plain Old Data (POD) for the purpose
>>>    of standard-layout and
>>
>> "For the purposes of standard-layout" doesn't mean anything.
>>
>> A type is a standard-layout type, or it isn't.
>
> How about "An empty record is standard-layout Plain Old Data (POD)
> type and ..."?

That's redundant, all POD types are standard-layout types.


>> Do you mean "An empty record is a standard-layout type and..."
>>
>>>    a. A collection without member.  Or
>>>    b. A collection with only empty collections.
>>
>> ?
>>
>
> Is "A collection with only members of empty collections" better?
>
>>
>>> 4. No memory slot nor register should be used to pass or return an object of
>>> empty record.
>
>
>
> --
> H.J.


More information about the cfe-commits mailing list