On Wed, 3 Feb 2021, Martin Sebor via Gcc-patches wrote:

> +/* Return true of T1 and T2 are matching types for the purposes of
> +   redeclaring a variable or a function without a prototype (i.e.,
> +   considering just its return type).  */

I think this comment is confusing (it suggests it's checking something 
looser than the notion of compatibility checked by comptypes, but it's 
actually checking something stricter).  But I also think it's wrong to do 
anything restricted to the return type.

For example, I think the following should be rejected, as enum E and 
unsigned int end up incompatible and quite likely ABI-incompatible.

enum E;
void f(enum E);
void f(unsigned int);
enum E { x = 1ULL << 63 };

Maybe the ICE is specific to the case of return types, but I think the 
same rules about type compatibility should apply regardless of precisely 
where the incomplete enum type appears.

I'd expect the natural fix for this PR to involve making 
comptypes_internal treat an incomplete enum as incompatible with an 
integer type.  Only if that causes too many problems should we then look 
at other approaches.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to