[cxx-abi-dev] Mangling of anonymous unions?
Mark Mitchell
mark at codesourcery.com
Thu Dec 19 00:38:24 UTC 2002
--On Wednesday, December 18, 2002 04:24:45 PM -0800 Kerch Holt
<kerch at cup.hp.com> wrote:
> Jason Merrill wrote:
>> On Wed, 18 Dec 2002 15:32:04 -0800, Kerch Holt <kerch at cup.hp.com> wrote:
>>
>>
>>> Wouldn't you need some type of factoring of all the members of the union
>>> (instead of first/last) to avoid collisions (of similar unions in the
>>> same inline)?
>>
>>
>> I'm not sure what you mean. You would mangle it like any other local
>> variable; if there are more than one with the same name, you need to use
>> a discriminator to distinguish between them. The only question is which
>> name to use.
>>
> Never mind. I was concerned that two different anonymous union types
> would have the same mangling, but, as you point out if the variable is
> always factored in the mangling will differ.
> Perhaps depending on the ordering (first, last) is problematical... are
> these the same type:
> union { int a; char b; }
> union ( char b; int a; }
They're not the same type, but they can't both be declared in the same
scope, so we're OK.
I can never remember if a union has to have any named members. Is:
union { int : 7; };
legal? I think so -- but there's no way to talk about such a thing,
so I suppose its mangled name doesn't matter, but it would be nice
if we had one.
This case:
union { union { int i; }; };
is legal, so the name-based approach needs a recursive formulation.
I think that the first name found in a pre-order, depth-first,
declaration-order walk is a reasonable choice.
--
Mark Mitchell mark at codesourcery.com
CodeSourcery, LLC http://www.codesourcery.com
More information about the cxx-abi-dev
mailing list