Remove some uses of DW_STRING_IS_CANONICAL

This removes the rvalue uses of DW_STRING_IS_CANONICAL, replacing them
with an accessor method.

gdb/ChangeLog
2020-09-29  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (anonymous_struct_prefix, dwarf2_name)
	(dump_die_shallow): Use canonical_string_p.
	* dwarf2/attribute.h (struct attribute) <canonical_string_p>: New
	method.
This commit is contained in:
Tom Tromey
2020-09-29 18:49:08 -06:00
parent 2c830f5475
commit 3b64bf15bc
3 changed files with 21 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2020-09-29 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (anonymous_struct_prefix, dwarf2_name)
(dump_die_shallow): Use canonical_string_p.
* dwarf2/attribute.h (struct attribute) <canonical_string_p>: New
method.
2020-09-29 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (partial_die_info::read)

View File

@ -115,6 +115,16 @@ struct attribute
LONGEST constant_value (int default_value) const;
/* Return true if this attribute holds a canonical string. In some
cases, like C++ names, gdb will rewrite the name of a DIE to a
canonical form. This makes lookups robust when a name can be
spelled different ways (e.g., "signed" or "signed int"). This
flag indicates whether the value has been canonicalized. */
bool canonical_string_p () const
{
return string_is_canonical;
}
ENUM_BITFIELD(dwarf_attribute) name : 16;
ENUM_BITFIELD(dwarf_form) form : 15;

View File

@ -22312,7 +22312,7 @@ anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu)
return NULL;
/* dwarf2_name had to be already called. */
gdb_assert (DW_STRING_IS_CANONICAL (attr));
gdb_assert (attr->canonical_string_p ());
/* Strip the base name, keep any leading namespaces/classes. */
base = strrchr (attr_name, ':');
@ -22638,7 +22638,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
/* Avoid demangling attr_name the second time on a second
call for the same DIE. */
if (!DW_STRING_IS_CANONICAL (attr))
if (!attr->canonical_string_p ())
{
gdb::unique_xmalloc_ptr<char> demangled
(gdb_demangle (attr_name, DMGL_TYPES));
@ -22664,7 +22664,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
break;
}
if (!DW_STRING_IS_CANONICAL (attr))
if (!attr->canonical_string_p ())
{
DW_STRING (attr) = dwarf2_canonicalize_name (attr_name, cu,
objfile);
@ -22786,7 +22786,7 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)",
DW_STRING (&die->attrs[i])
? DW_STRING (&die->attrs[i]) : "",
DW_STRING_IS_CANONICAL (&die->attrs[i]) ? "is" : "not");
die->attrs[i].canonical_string_p () ? "is" : "not");
break;
case DW_FORM_flag:
if (DW_UNSND (&die->attrs[i]))