diff options
author | Tom Tromey <tom@tromey.com> | 2023-03-13 13:25:41 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2023-03-18 11:12:38 -0600 |
commit | 526648585ca87251acdda0a271f7c4b4591231ae (patch) | |
tree | bbcc884596ed6954dcc9be6ff57591cd973530ee | |
parent | 9e76b17aa5a62d866d9446bcc397e35748596193 (diff) | |
download | binutils-526648585ca87251acdda0a271f7c4b4591231ae.zip binutils-526648585ca87251acdda0a271f7c4b4591231ae.tar.gz binutils-526648585ca87251acdda0a271f7c4b4591231ae.tar.bz2 |
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 <simon.marchi@efficios.com>
-rw-r--r-- | gdb/dwarf2/read.c | 3 | ||||
-rw-r--r-- | gdb/gdbtypes.c | 5 | ||||
-rw-r--r-- | gdb/gdbtypes.h | 3 | ||||
-rw-r--r-- | gdb/stabsread.c | 11 |
4 files changed, 13 insertions, 9 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 3019bbd..e1ae98f 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 3c2fdc6..1b0adbd 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 e664c2c..f26eff4 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 c8c49e1..89d778d 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: |