From: Tom Tromey Date: Mon, 26 Aug 2024 17:10:54 +0000 (-0600) Subject: Use ada_identical_enum_types_p in ada_atr_enum_rep X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a8551849716c2b29e59547212e3aa69b8f4e2ad8;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index aef2b1debba..d26139b802f 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -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);