On Tue, Mar 15, 2016 at 7:51 PM, Jason Merrill <ja...@redhat.com> wrote:
> 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 <jos...@codesourcery.com>
>>> wrote:
>>>>
>>>> On Tue, 15 Mar 2016, H.J. Lu wrote:
>>>>
>>>>> On Tue, Mar 15, 2016 at 2:39 PM, Joseph Myers <jos...@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.
>

Since zero-size array is GCC extension, we can change it.   Do we
want to change its passing for C?

-- 
H.J.

Reply via email to