Jason Merrill wrote:
> Jason Merrill wrote:
>> Note that when I fix build_duplicate_type to work properly, the C++
>> compiler rejects the first usage because U doesn't refer to the
>> original type, so it isn't used for linkage.  Perhaps that's why
>> build_duplicate_type got broken.
> 
> Actually, this happens regardless.  So I guess I'll just leave
> transparent_union alone; current usage won't be any more or less broken
> than it is already.

That seems reasonable to me.

>From a language design point of view:

typedef union { ... } U __attribute ((transparent_union));

seems like ti should be an error to me (as with all other attributes),
but I agree that not breaking code (including, in particular, GLIBC's
<stdlib.h>) is important.  I do think we could detect the difference
between this case and:

union U2_ { ... };
typedef union U_ U2 __attribute ((transparent_union));

in the compiler.  For example, in the parser, we could skip over the
union body, scan the attributes, notice transparent_union, and pretend
that the user had written:

typedef union __attribute((transparent_union) { ... } U;

if we wanted.  That would be ugly, but I think it's technically feasible.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713

Reply via email to