[binutils-gdb] Allow for anonymous Ada enumeration types

Tom Tromey tromey@sourceware.org
Thu Mar 6 21:24:03 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=29faeceaa8a7833c1234f9980266c84c7c6b9d02

commit 29faeceaa8a7833c1234f9980266c84c7c6b9d02
Author: Tom Tromey <tromey@adacore.com>
Date:   Mon Sep 9 10:57:56 2024 -0600

    Allow for anonymous Ada enumeration types
    
    With some forthcoming changes to GNAT, gdb might see a nameless enum
    in ada_resolve_enum, causing a crash.  This patch allows an anonymous
    enum type to be considered identical to a named type when the contents
    are identical.

Diff:
---
 gdb/ada-lang.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index b7e24ef6b2c..95ceb10d3ab 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -3796,7 +3796,10 @@ ada_resolve_enum (std::vector<struct block_symbol> &syms,
   for (int i = 0; i < syms.size (); ++i)
     {
       struct type *type2 = ada_check_typedef (syms[i].symbol->type ());
-      if (strcmp (type1->name (), type2->name ()) != 0)
+      /* We let an anonymous enum type match a non-anonymous one.  */
+      if (type1->name () != nullptr
+	  && type2->name () != nullptr
+	  && strcmp (type1->name (), type2->name ()) != 0)
 	continue;
       if (ada_identical_enum_types_p (type1, type2))
 	return i;


More information about the Gdb-cvs mailing list