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

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Sat Feb 20 21:47:32 PST 2016


On 20 Feb 2016 6:54 p.m., "H.J. Lu" <hjl.tools at gmail.com> wrote:
>
> On Sat, Feb 20, 2016 at 4:57 PM, Matthijs van Duin
> <matthijsvanduin at gmail.com> wrote:
> > On 20 February 2016 at 23:35, H.J. Lu <hjl.tools at gmail.com> wrote:
> >> Can a compiler tell if a copy constructor or destructor is trivial
> >> from the class declaration without function body?
> >
> > Yes, the mere presence of the declaration suffices to render it
> > non-trivial (unless explicitly declared "= default" like I did with
> > the default constructor, in which case there's no function body).
>
> How about this?
>
> An empty type is a type where it and all of its subobjects (recursively)
> are of class, structure, union, or array type.  An empty type may only
> have static member functions, default  constructor, default copy
> constructor, default copy assignment operator or default destructor.

No, that's the wrong rule still. Please leave the C++ rule here to the C++
ABI rather than trying to reinvent it. Whether a type is empty is
completely orthogonal to whether it must be passed through memory for C++
ABI / semantics reasons.

> No memory slot nor register should be used to pass or return an
> object of empty type.
>
> --
> H.J.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160220/dd8fcc9c/attachment.html>


More information about the cfe-commits mailing list