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
Tue Feb 16 12:22:55 PST 2016


On Tue, Feb 16, 2016 at 10:24 AM, H.J. Lu <hjl.tools at gmail.com> wrote:
>
> On Fri, Feb 12, 2016 at 11:39 AM, H.J. Lu <hjl.tools at gmail.com> wrote:
> > On Fri, Feb 12, 2016 at 6:58 AM, Matthijs van Duin
> > <matthijsvanduin at gmail.com> wrote:
> >> On 11 February 2016 at 16:31, H.J. Lu <hjl.tools at gmail.com> wrote:
> >>> struct A {
> >>> static void foo (void) ();
> >>> static int xxx;
> >>> };
> >>
> >> What about it? It's an empty struct.  (And it declares a function and
> >> a variable in the namespace of A, which however do not have any
> >> relevant impact here.)
> >>
> >
> > Thanks for all the feedbacks.  Here is the new proposal:
> >
> > 1. "empty type".  An empty type is a trivially-copyable aggregate
> > occupying zero bytes (excluding any padding).
> > 2. No memory slot nor register should be used to pass or return an object
> > of empty type.
> >
> > Footnote: Array of empty type can only passed by reference in C/C++.
> >
>
> I updated intel386, x86-64 and IA MCU psABIs:
>
> https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
>
> to specify:
>
> Empty type is defined as a trivially-copyable aggregate occupying zero bytes
> (excluding any padding).

I think this is now extremely unclear. Does an empty struct in C++
occupy zero bytes? sizeof applied to it will produce at least 1.

> No memory slot nor register should be used to pass or
> return an object object of empty type.
>
> with footnote: Array of empty type can only passed by reference in C and C++.
>
> Any comments?
>
> Thanks.
>
>
> --
> H.J.


More information about the cfe-commits mailing list