[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