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>
This commit is contained in:
Tom Tromey
2023-03-13 13:25:41 -06:00
parent 9e76b17aa5
commit 526648585c
4 changed files with 13 additions and 9 deletions

View File

@@ -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 ())

View File

@@ -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);

View File

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

View File

@@ -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: