From a8551849716c2b29e59547212e3aa69b8f4e2ad8 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 26 Aug 2024 11:10:54 -0600 Subject: 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. --- gdb/ada-lang.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index aef2b1d..d26139b 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); -- cgit v1.1