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. > 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. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits