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
Tue Feb 23 08:15:51 PST 2016


On Tue, 23 Feb 2016, H.J. Lu wrote:

> I thought
> ---
> An empty type is a type where it and all of its subobjects (recursively)
> are of class, structure, union, or array type.
> ---
> excluded
> struct empty
> {
> empty () = default;
> };

Why would that be excluded?  There are no subobjects, hence all of them 
are of class, structure, union or array type, hence this is an empty type. 
(And that's good, it indeed looks quite empty to me).  Even if you would 
add a non-trivial copy ctor, making this thing not trivially copyable 
anymore, it would still be empty.  Hence, given your proposed language in 
the psABI, without reference to any other ABI (in particular not to the 
Itanium C++ ABI), you would then need to pass it without registers.  That 
can't be done, and that's exactly why I find that wording incomplete.  It 
needs implicit references to other languages ABIs to work.

> Adding "trivially copyable" extends, not limiting, the scope of
> empty type.

Huh?  Adding (as in ANDing, not ORing) anything to a positive condition 
necessarily restricts it.  But also note, that my wording does _not_ add 
the restriction to the definition of "empty type", but rather only to when 
they can be passed/returned by nothing.


More information about the cfe-commits mailing list