Remove TYPE_TAG_NAME
TYPE_TAG_NAME has been an occasional source of confusion and bugs. It seems to me that it is only useful for C and C++ -- but even there, not so much, because at least with DWARF there doesn't seem to be any way to wind up with a type where the name and the tag name are both non-NULL and different. So, this patch removes TYPE_TAG_NAME entirely. This should save a little memory, but more importantly, it simplifies this part of gdb. A few minor test suite adjustments were needed. In some situations the new code does not yield identical output to the old code. gdb/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * valops.c (enum_constant_from_type, value_namespace_elt) (value_maybe_namespace_elt): Update. * valarith.c (find_size_for_pointer_math): Update. * target-descriptions.c (make_gdb_type): Update. * symmisc.c (print_symbol): Update. * stabsread.c (define_symbol, read_type) (complain_about_struct_wipeout, add_undefined_type) (cleanup_undefined_types_1): Update. * rust-lang.c (rust_tuple_type_p, rust_slice_type_p) (rust_range_type_p, val_print_struct, rust_print_struct_def) (rust_internal_print_type, rust_composite_type) (rust_evaluate_funcall, rust_evaluate_subexp) (rust_inclusive_range_type_p): Update. * python/py-type.c (typy_get_tag): Update. * p-typeprint.c (pascal_type_print_base): Update. * mdebugread.c (parse_symbol, parse_type): Update. * m2-typeprint.c (m2_long_set, m2_record_fields, m2_enum): Update. * guile/scm-type.c (gdbscm_type_tag): Update. * go-lang.c (sixg_string_p): Update. * gnu-v3-abi.c (build_gdb_vtable_type, build_std_type_info_type): Update. * gdbtypes.h (struct main_type) <tag_name>: Remove. (TYPE_TAG_NAME): Remove. * gdbtypes.c (type_name_no_tag): Simplify. (check_typedef, check_types_equal, recursive_dump_type) (copy_type_recursive, arch_composite_type): Update. * f-typeprint.c (f_type_print_base): Update. Print "Type" prefix in summary mode when needed. * eval.c (evaluate_funcall): Update. * dwarf2read.c (fixup_go_packaging, read_structure_type) (process_structure_scope, read_enumeration_type) (read_namespace_type, read_module_type, determine_prefix): Update. * cp-support.c (inspect_type): Update. * coffread.c (process_coff_symbol, decode_base_type): Update. * c-varobj.c (c_is_path_expr_parent): Update. * c-typeprint.c (c_type_print_base_struct_union): Update. (c_type_print_base_1): Update. Print struct/class/union/enum in summary when using C language. * ax-gdb.c (gen_struct_ref, gen_namespace_elt) (gen_maybe_namespace_elt): Update. * ada-lang.c (ada_type_name): Simplify. (empty_record, ada_template_to_fixed_record_type_1) (template_to_static_fixed_type) (to_record_with_fixed_variant_part, ada_check_typedef): Update. gdb/testsuite/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * gdb.xml/tdesc-regs.exp (load_description): Update expected results. * gdb.dwarf2/method-ptr.exp: Set language to C++. * gdb.dwarf2/member-ptr-forwardref.exp: Set language to C++. * gdb.cp/typeid.exp (do_typeid_tests): Update type_re. * gdb.base/maint.exp (maint_pass_if): Update.
This commit is contained in:
parent
c1ec8cea7f
commit
e86ca25fd6
31 changed files with 221 additions and 209 deletions
|
@ -1469,12 +1469,6 @@ smash_to_method_type (struct type *type, struct type *self_type,
|
|||
const char *
|
||||
type_name_no_tag (const struct type *type)
|
||||
{
|
||||
if (TYPE_TAG_NAME (type) != NULL)
|
||||
return TYPE_TAG_NAME (type);
|
||||
|
||||
/* Is there code which expects this to return the name if there is
|
||||
no tag name? My guess is that this is mainly used for C++ in
|
||||
cases where the two will always be the same. */
|
||||
return TYPE_NAME (type);
|
||||
}
|
||||
|
||||
|
@ -2445,10 +2439,8 @@ check_typedef (struct type *type)
|
|||
return make_qualified_type (type, instance_flags, NULL);
|
||||
|
||||
name = type_name_no_tag (type);
|
||||
/* FIXME: shouldn't we separately check the TYPE_NAME and
|
||||
the TYPE_TAG_NAME, and look in STRUCT_DOMAIN and/or
|
||||
VAR_DOMAIN as appropriate? (this code was written before
|
||||
TYPE_NAME and TYPE_TAG_NAME were separate). */
|
||||
/* FIXME: shouldn't we look in STRUCT_DOMAIN and/or
|
||||
VAR_DOMAIN as appropriate? */
|
||||
if (name == NULL)
|
||||
{
|
||||
stub_noname_complaint ();
|
||||
|
@ -2534,10 +2526,8 @@ check_typedef (struct type *type)
|
|||
else if (TYPE_STUB (type) && !currently_reading_symtab)
|
||||
{
|
||||
const char *name = type_name_no_tag (type);
|
||||
/* FIXME: shouldn't we separately check the TYPE_NAME and the
|
||||
TYPE_TAG_NAME, and look in STRUCT_DOMAIN and/or VAR_DOMAIN
|
||||
as appropriate? (this code was written before TYPE_NAME and
|
||||
TYPE_TAG_NAME were separate). */
|
||||
/* FIXME: shouldn't we look in STRUCT_DOMAIN and/or VAR_DOMAIN
|
||||
as appropriate? */
|
||||
struct symbol *sym;
|
||||
|
||||
if (name == NULL)
|
||||
|
@ -3669,8 +3659,7 @@ check_types_equal (struct type *type1, struct type *type2,
|
|||
|| TYPE_NFIELDS (type1) != TYPE_NFIELDS (type2))
|
||||
return false;
|
||||
|
||||
if (!compare_maybe_null_strings (TYPE_TAG_NAME (type1),
|
||||
TYPE_TAG_NAME (type2)))
|
||||
if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2)))
|
||||
return false;
|
||||
if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2)))
|
||||
return false;
|
||||
|
@ -4530,10 +4519,6 @@ recursive_dump_type (struct type *type, int spaces)
|
|||
TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
|
||||
gdb_print_host_address (TYPE_NAME (type), gdb_stdout);
|
||||
printf_filtered (")\n");
|
||||
printfi_filtered (spaces, "tagname '%s' (",
|
||||
TYPE_TAG_NAME (type) ? TYPE_TAG_NAME (type) : "<NULL>");
|
||||
gdb_print_host_address (TYPE_TAG_NAME (type), gdb_stdout);
|
||||
printf_filtered (")\n");
|
||||
printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
|
||||
switch (TYPE_CODE (type))
|
||||
{
|
||||
|
@ -4917,8 +4902,6 @@ copy_type_recursive (struct objfile *objfile,
|
|||
|
||||
if (TYPE_NAME (type))
|
||||
TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type));
|
||||
if (TYPE_TAG_NAME (type))
|
||||
TYPE_TAG_NAME (new_type) = xstrdup (TYPE_TAG_NAME (type));
|
||||
|
||||
TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
|
||||
TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
|
||||
|
@ -5256,7 +5239,7 @@ arch_composite_type (struct gdbarch *gdbarch, const char *name,
|
|||
|
||||
gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
|
||||
t = arch_type (gdbarch, code, 0, NULL);
|
||||
TYPE_TAG_NAME (t) = name;
|
||||
TYPE_NAME (t) = name;
|
||||
INIT_CPLUS_SPECIFIC (t);
|
||||
return t;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue