From 526648585ca87251acdda0a271f7c4b4591231ae Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 13 Mar 2023 13:25:41 -0600 Subject: [PATCH] Use type allocator for set types 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. Reviewed-By: Simon Marchi --- gdb/dwarf2/read.c | 3 ++- gdb/gdbtypes.c | 5 ++--- gdb/gdbtypes.h | 3 ++- gdb/stabsread.c | 11 +++++++---- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 3019bbd78b0..e1ae98fe910 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 3c2fdc625e4..1b0adbdbe05 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1445,10 +1445,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 e664c2c35ef..f26eff4770e 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -2547,7 +2547,8 @@ extern struct type *create_string_type (type_allocator &alloc, 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 &alloc, + struct type *domain_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 @@ again: 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: -- 2.30.2