RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct
H.J. Lu via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 19 07:27:14 PST 2016
On Fri, Feb 19, 2016 at 5:35 AM, Michael Matz <matz at suse.de> wrote:
> Hi,
>
> On Thu, 18 Feb 2016, Richard Smith wrote:
>
>> >> An empty type is a type where it and all of its subobjects
>> >> (recursively) are of class, structure, union, or array type. No
>> >> memory slot nor register should be used to pass or return an object
>> >> of empty type.
>> >
>> > The trivially copyable is gone again. Why is it not necessary?
>>
>> The C++ ABI doesn't defer to the C psABI for types that aren't
>> trivially-copyable. See
>> http://mentorembedded.github.io/cxx-abi/abi.html#normal-call
>
> Hmm, yes, but we don't want to define something for only C and C++, but
> language independend (so far as possible). And given only the above
> language I think this type:
>
> struct S {
> S() {something();}
> };
Does "a type where it and all of its subobjects (recursively) are of
class, structure, union, or array type." exclude the above? If not,
we need better
wording. We want to include static member functions and exclude
non-static member functions.
> would be an empty type, and that's not what we want. "Trivially copyable"
> is a reasonably common abstraction (if in doubt we could even define it in
> the ABI), and captures the idea that we need well (namely that a bit-copy
> is enough).
>
>
> Ciao,
> Michael.
--
H.J.
More information about the cfe-commits
mailing list