On Tue, Feb 16, 2016 at 12:22 PM, Richard Smith <rich...@metafoo.co.uk> wrote: > On Tue, Feb 16, 2016 at 10:24 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >> >> On Fri, Feb 12, 2016 at 11:39 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >> > On Fri, Feb 12, 2016 at 6:58 AM, Matthijs van Duin >> > <matthijsvand...@gmail.com> wrote: >> >> On 11 February 2016 at 16:31, H.J. Lu <hjl.to...@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.
Can it be considered as padding? >> 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. -- H.J. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits