This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: Florian Weimer <fw at deneb dot enyo dot de>, GCC Development <gcc at gcc dot gnu dot org>, cfe-commits <cfe-commits at lists dot llvm dot org>
- Date: Mon, 8 Feb 2016 15:02:34 +0000
- Subject: Re: RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOofYT89yzF6jxFZFG2=QVQuQpEC7DP0HV_epjeawCf_sA at mail dot gmail dot com> <87d1s8wc4w dot fsf at mid dot deneb dot enyo dot de> <CAMe9rOp_6ZpR1YSJZ7AiLpa+FPRGJoLm5fTPkiH5BgF4Tkg3RA at mail dot gmail dot com> <87r3gouvv2 dot fsf at mid dot deneb dot enyo dot de> <CAMe9rOo2tPZKZEgpgFbbSnkyBiONzS9vfntn_QsxRPbVHZGmUw at mail dot gmail dot com> <87k2mgutzr dot fsf at mid dot deneb dot enyo dot de> <CAMe9rOoMujhjExxKWrz-Dv8uE33X=Upvi_X_HZsfeN0GS+=56A at mail dot gmail dot com> <CAMe9rOruCOvtM2D2AmG94A1_8Og8Kfu7tYF4De=XNfzUG+eh5g at mail dot gmail dot com>
On 8 February 2016 at 13:54, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sun, Feb 7, 2016 at 12:52 PM, H.J. Lu <hjl.tools@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?
> 2. "empty collection". An empty collection is:
> a. A collection without member. Or
What about base classes?
What about bit-fields of length 0?
> b. A collection with only empty collections. Or
What does "with" mean? Only members, or bases too?
> 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.
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.
?
The C++ standard defines the std::is_empty<T> trait as true when:
"T is a class type, but not a union type, with no non-static data
members other than bit-fields of length 0, no virtual member
functions, no virtual base classes, and no base class B for which
is_empty<B>::value is false."
> 4. No memory slot nor register should be used to pass or return an object of
> empty record.