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
[email protected]