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(-)
@@ -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 ())
@@ -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);
@@ -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 *);
@@ -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: