[prev in list] [next in list] [prev in thread] [next in thread]
List: cfe-commits
Subject: Re: RFC: Update Intel386, x86-64 and IA MCU psABIs for passing/returning empty struct
From: Richard Smith via cfe-commits <cfe-commits () lists ! llvm ! org>
Date: 2016-02-21 5:47:32
Message-ID: CAOfiQq=zf9Ge3aBYGcKwvzLN9uZJ7n19UL43_VGAasR7ADZVOA () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
On 20 Feb 2016 6:54 p.m., "H.J. Lu" <hjl.tools@gmail.com> wrote:
>
> On Sat, Feb 20, 2016 at 4:57 PM, Matthijs van Duin
> <matthijsvanduin@gmail.com> wrote:
> > On 20 February 2016 at 23:35, H.J. Lu <hjl.tools@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.
[Attachment #5 (text/html)]
<p dir="ltr">On 20 Feb 2016 6:54 p.m., "H.J. Lu" <<a \
href="mailto:hjl.tools@gmail.com">hjl.tools@gmail.com</a>> wrote:<br> ><br>
> On Sat, Feb 20, 2016 at 4:57 PM, Matthijs van Duin<br>
> <<a href="mailto:matthijsvanduin@gmail.com">matthijsvanduin@gmail.com</a>> \
wrote:<br> > > On 20 February 2016 at 23:35, H.J. Lu <<a \
href="mailto:hjl.tools@gmail.com">hjl.tools@gmail.com</a>> wrote:<br> > \
>> Can a compiler tell if a copy constructor or destructor is trivial<br> > \
>> from the class declaration without function body?<br> > ><br>
> > Yes, the mere presence of the declaration suffices to render it<br>
> > non-trivial (unless explicitly declared "= default" like I did \
with<br> > > the default constructor, in which case there's no function \
body).<br> ><br>
> How about this?<br>
><br>
> An empty type is a type where it and all of its subobjects (recursively)<br>
> are of class, structure, union, or array type. An empty type may only<br>
> have static member functions, default constructor, default copy<br>
> constructor, default copy assignment operator or default destructor.</p>
<p dir="ltr">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.</p> <p dir="ltr">> No memory slot nor register should be used to pass or \
return an<br> > object of empty type.<br>
><br>
> --<br>
> H.J.<br>
</p>
[Attachment #6 (text/plain)]
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic