This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PING^1: [PATCH] Add TYPE_EMPTY_RECORD for C++ empty class


On 03/15/2016 08:25 PM, Joseph Myers wrote:
On Tue, 15 Mar 2016, H.J. Lu wrote:

On Tue, Mar 15, 2016 at 3:34 PM, Joseph Myers <joseph@codesourcery.com> wrote:
On Tue, 15 Mar 2016, H.J. Lu wrote:

On Tue, Mar 15, 2016 at 2:39 PM, Joseph Myers <joseph@codesourcery.com> wrote:
I'm not sure if the zero-size arrays (a GNU extension) are considered to
make a struct non-empty, but in any case I think the tests should cover
such arrays as elements of structs.

There are couple tests for structs with members of array
of empty types.  testsuite/g++.dg/abi/empty14.h has

My concern is the other way round - structs with elements such as
"int a[0];", an array [0] of a nonempty type.  My reading of the subobject
definition is that such an array should not cause the struct to be
considered nonempty (it doesn't result in any int subobjects).

This is a test for struct with zero-size array, which isn't treated
as empty type.  C++ and C are compatible in its passing.

Where is the current definition of empty types you're proposing for use in
GCC?  Is the behavior of this case clear from that definition?

"An empty type is a type where it and all of its subobjects (recursively) are of structure, union, or array type. No memory slot nor register should be used to pass or return an object of empty type."

It seems to me that such a struct should be considered an empty type under this definition, since a zero-length array has no subobjects.

Jason


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]