[16/20] Use type allocator for set types

Message ID 20230313-split-objfile-type-allocator-2-v1-16-69ba773ac17b@tromey.com
State New
Headers
Series Remove objfile_type |

Commit Message

Tom Tromey March 13, 2023, 10:08 p.m. UTC
  This changes the set type creation function to accept a type
allocator, and updates all the callers.  Note that symbol readers
should generally allocate on the relevant objfile, regardless of the
underlying type of the set, which is what this patch implements.
---
 gdb/dwarf2/read.c |  3 ++-
 gdb/gdbtypes.c    |  5 ++---
 gdb/gdbtypes.h    |  2 +-
 gdb/stabsread.c   | 11 +++++++----
 4 files changed, 12 insertions(+), 9 deletions(-)
  

Patch

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index db5606c31cf..b1c895f0576 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -13825,7 +13825,8 @@  read_set_type (struct die_info *die, struct dwarf2_cu *cu)
   if (set_type)
     return set_type;
 
-  set_type = create_set_type (NULL, domain_type);
+  type_allocator alloc (cu->per_objfile->objfile);
+  set_type = create_set_type (alloc, domain_type);
 
   attr = dwarf2_attr (die, DW_AT_byte_size, cu);
   if (attr != nullptr && attr->form_is_unsigned ())
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 026f6492398..8093a3911d7 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -1446,10 +1446,9 @@  lookup_string_range_type (struct type *string_char_type,
 }
 
 struct type *
-create_set_type (struct type *result_type, struct type *domain_type)
+create_set_type (type_allocator &alloc, struct type *domain_type)
 {
-  if (result_type == NULL)
-    result_type = type_allocator (domain_type).new_type ();
+  struct type *result_type = alloc.new_type ();
 
   result_type->set_code (TYPE_CODE_SET);
   result_type->set_num_fields (1);
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index c1964b42e67..46261bbe4df 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -2533,7 +2533,7 @@  extern struct type *create_string_type (type_allocator &, struct type *,
 
 extern struct type *lookup_string_range_type (struct type *, LONGEST, LONGEST);
 
-extern struct type *create_set_type (struct type *, struct type *);
+extern struct type *create_set_type (type_allocator &, struct type *);
 
 extern struct type *lookup_unsigned_typename (const struct language_defn *,
 					      const char *);
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index c8c49e15403..89d778db1c2 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -2016,10 +2016,13 @@  read_type (const char **pp, struct objfile *objfile)
       break;
 
     case 'S':			/* Set type */
-      type1 = read_type (pp, objfile);
-      type = create_set_type (NULL, type1);
-      if (typenums[0] != -1)
-	*dbx_lookup_type (typenums, objfile) = type;
+      {
+	type1 = read_type (pp, objfile);
+	type_allocator alloc (objfile);
+	type = create_set_type (alloc, type1);
+	if (typenums[0] != -1)
+	  *dbx_lookup_type (typenums, objfile) = type;
+      }
       break;
 
     default: