Use ada_identical_enum_types_p in ada_atr_enum_rep

With the coming changes to GNAT, we may see two distinct but
equivalent enum types in the DWARF.  In this case, it's better to use
ada_identical_enum_types_p rather than types_equal when comparing
these types... something that matters when using 'Enum_Rep.
This commit is contained in:
Tom Tromey
2024-08-26 11:10:54 -06:00
parent 7253760b5a
commit a855184971

View File

@@ -8758,7 +8758,14 @@ ada_atr_enum_rep (struct expression *exp, enum noside noside, struct type *type,
type = type->target_type ();
if (type->code () != TYPE_CODE_ENUM)
error (_("'Enum_Rep only defined on enum types"));
if (!types_equal (type, arg->type ()))
/* In some scenarios, GNAT will emit two distinct-but-equivalent
enum types. For example, this can happen with an artificial
range type like the index type in:
type AR is array (Enum_With_Gaps range <>) of MyWord;
This is why types_equal is not used here. */
if (!ada_identical_enum_types_p (type, arg->type ()))
error (_("'Enum_Rep requires argument to have same type as enum"));
return value_cast (inttype, arg);