[cxx-abi-dev] Passing an empty class by value
John McCall
rjmccall at apple.com
Fri Dec 11 00:17:07 UTC 2015
> On Dec 10, 2015, at 4:15 PM, John McCall <rjmccall at apple.com> wrote:
>> On Dec 10, 2015, at 4:11 PM, Nelson, Clark <clark.nelson at intel.com> wrote:
>>
>> It has come to my attention that GCC and clang generate incompatible code
>> for passing an argument of an empty class type.
>>
>> clang seems to completely ignore arguments and parameters of empty class
>> type -- which seems to make a certain amount of sense.
>>
>> OTOH, as far as I understand it, GCC effectively treats an empty class
>> equivalently to a class containing a single member with some character
>> type -- which also seems pretty reasonable.
>>
>> Should the C++ ABI come down on one side or the other of this question?
>>
>> This is really the sort of question a psABI should settle. But of course
>> the C language doesn't actually support a structure with no members, so
>> it's not too surprising if a psABI doesn't nail down what should happen
>> for this.
>
> It’s valid as a C extension in GCC. If there are platforms where we use a
> different rule from GCC, we should come to some understanding with them.
Sorry, that was me wearing my “clang” hat.
The C++ ABI answer is that, because of this:
> Because of the GCC extension, C++ can’t really use different rules from C.
this has to be resolved in the psABI, or at least in the system compiler’s
filling-in of the psABI’s details.
John.
More information about the cxx-abi-dev
mailing list