RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct
Michael Matz via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 19 05:35:46 PST 2016
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();}
};
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.
More information about the cfe-commits
mailing list