From: Tom Tromey Date: Mon, 13 Mar 2023 19:25:41 +0000 (-0600) Subject: Use type allocator for set types X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=526648585ca87251acdda0a271f7c4b4591231ae;p=binutils-gdb.git 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 --- 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: