diff --git a/gcc/diagnostics/html-sink.cc b/gcc/diagnostics/html-sink.cc
index f2d5917e2ed..58442e9a62b 100644
--- a/gcc/diagnostics/html-sink.cc
+++ b/gcc/diagnostics/html-sink.cc
@@ -1093,10 +1093,13 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
enum logical_locations::kind kind
= logical_loc_mgr->get_kind (logical_loc);;
if (const char *label = get_label_for_logical_location_kind (kind))
- if (const char *name_with_scope
- = logical_loc_mgr->get_name_with_scope (logical_loc))
- add_labelled_value (xp, "logical-location",
- label, name_with_scope, true);
+ {
+ label_text name_with_scope
+ = logical_loc_mgr->get_name_with_scope (logical_loc);
+ if (name_with_scope.get ())
+ add_labelled_value (xp, "logical-location",
+ label, name_with_scope.get (), true);
+ }
m_last_logical_location = logical_loc;
}
diff --git a/gcc/diagnostics/logical-locations.h b/gcc/diagnostics/logical-locations.h
index 847843bc800..b91f7282525 100644
--- a/gcc/diagnostics/logical-locations.h
+++ b/gcc/diagnostics/logical-locations.h
@@ -155,15 +155,15 @@ public:
/* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation
"name" property (SARIF v2.1.0 section 3.33.4). */
- virtual const char *get_short_name (key k) const = 0;
+ virtual label_text get_short_name (key k) const = 0;
/* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation
"fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5). */
- virtual const char *get_name_with_scope (key k) const = 0;
+ virtual label_text get_name_with_scope (key k) const = 0;
/* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation
"decoratedName" property (SARIF v2.1.0 section 3.33.6). */
- virtual const char *get_internal_name (key k) const = 0;
+ virtual label_text get_internal_name (key k) const = 0;
/* Get what kind of SARIF logicalLocation K is (if any). */
virtual enum kind get_kind (key k) const = 0;
diff --git a/gcc/diagnostics/sarif-sink.cc b/gcc/diagnostics/sarif-sink.cc
index 2cd64d65112..1e25b459c64 100644
--- a/gcc/diagnostics/sarif-sink.cc
+++ b/gcc/diagnostics/sarif-sink.cc
@@ -3063,16 +3063,20 @@ ensure_sarif_logical_location_for (logical_locations::key k)
auto sarif_logical_loc = std::make_unique ();
- if (const char *short_name = logical_loc_mgr->get_short_name (k))
- sarif_logical_loc->set_string ("name", short_name);
+ label_text short_name = logical_loc_mgr->get_short_name (k);
+ if (short_name.get ())
+ sarif_logical_loc->set_string ("name", short_name.get ());
/* "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5). */
- if (const char *name_with_scope = logical_loc_mgr->get_name_with_scope (k))
- sarif_logical_loc->set_string ("fullyQualifiedName", name_with_scope);
+ label_text name_with_scope = logical_loc_mgr->get_name_with_scope (k);
+ if (name_with_scope.get ())
+ sarif_logical_loc->set_string ("fullyQualifiedName",
+ name_with_scope.get ());
/* "decoratedName" property (SARIF v2.1.0 section 3.33.6). */
- if (const char *internal_name = logical_loc_mgr->get_internal_name (k))
- sarif_logical_loc->set_string ("decoratedName", internal_name);
+ label_text internal_name = logical_loc_mgr->get_internal_name (k);
+ if (internal_name.get ())
+ sarif_logical_loc->set_string ("decoratedName", internal_name.get ());
/* "kind" property (SARIF v2.1.0 section 3.33.7). */
enum logical_locations::kind kind = logical_loc_mgr->get_kind (k);
@@ -3118,9 +3122,11 @@ make_minimal_sarif_logical_location (logical_locations::key logical_loc)
sarif_logical_loc->set_integer ("index", index);
/* "fullyQualifiedName" property (SARIF v2.1.0 section 3.33.5). */
- if (const char *name_with_scope
- = logical_loc_mgr->get_name_with_scope (logical_loc))
- sarif_logical_loc->set_string ("fullyQualifiedName", name_with_scope);
+ label_text name_with_scope
+ = logical_loc_mgr->get_name_with_scope (logical_loc);
+ if (name_with_scope.get ())
+ sarif_logical_loc->set_string ("fullyQualifiedName",
+ name_with_scope.get ());
return sarif_logical_loc;
}
diff --git a/gcc/diagnostics/selftest-logical-locations.cc b/gcc/diagnostics/selftest-logical-locations.cc
index f2176e33133..3a0ee7f20dd 100644
--- a/gcc/diagnostics/selftest-logical-locations.cc
+++ b/gcc/diagnostics/selftest-logical-locations.cc
@@ -45,27 +45,27 @@ test_manager::dump (FILE *outfile, int indent) const
dumping::emit_heading (outfile, indent, "test_manager");
}
-const char *
+label_text
test_manager::get_short_name (key k) const
{
auto item = item_from_key (k);
if (!item)
- return nullptr;
- return item->m_name;
+ return label_text ();
+ return label_text::borrow (item->m_name);
}
-const char *
+label_text
test_manager::get_name_with_scope (key k) const
{
auto item = item_from_key (k);
- return item->m_name;
+ return label_text::borrow (item->m_name);
}
-const char *
+label_text
test_manager::get_internal_name (key k) const
{
auto item = item_from_key (k);
- return item->m_name;
+ return label_text::borrow (item->m_name);
}
enum diagnostics::logical_locations::kind
@@ -118,8 +118,8 @@ selftest_logical_locations_cc_tests ()
ASSERT_NE (loc_foo, loc_bar);
- ASSERT_STREQ (mgr.get_short_name (loc_foo), "foo");
- ASSERT_STREQ (mgr.get_short_name (loc_bar), "bar");
+ ASSERT_STREQ (mgr.get_short_name (loc_foo).get (), "foo");
+ ASSERT_STREQ (mgr.get_short_name (loc_bar).get (), "bar");
}
} // namespace diagnostics::logical_locations::selftest
diff --git a/gcc/diagnostics/selftest-logical-locations.h b/gcc/diagnostics/selftest-logical-locations.h
index bc01894df82..2d00871fc21 100644
--- a/gcc/diagnostics/selftest-logical-locations.h
+++ b/gcc/diagnostics/selftest-logical-locations.h
@@ -41,9 +41,9 @@ public:
void dump (FILE *out, int indent) const final override;
- const char *get_short_name (key) const final override;
- const char *get_name_with_scope (key) const final override;
- const char *get_internal_name (key) const final override;
+ label_text get_short_name (key) const final override;
+ label_text get_name_with_scope (key) const final override;
+ label_text get_internal_name (key) const final override;
kind get_kind (key) const final override;
label_text get_name_for_path_output (key) const final override;
key get_parent (key) const final override
diff --git a/gcc/diagnostics/state-graphs-to-dot.cc b/gcc/diagnostics/state-graphs-to-dot.cc
index fe5a07fd02d..a0ccec71ed2 100644
--- a/gcc/diagnostics/state-graphs-to-dot.cc
+++ b/gcc/diagnostics/state-graphs-to-dot.cc
@@ -324,12 +324,15 @@ private:
break;
case state_node_properties::kind_t::stack_frame:
if (auto logical_loc = state_node.get_logical_loc ())
- if (const char *function
- = m_logical_loc_mgr.get_short_name (logical_loc))
- add_title_tr (id_of_dot_node, xp, num_columns, state_node,
- std::string ("Frame: ") + function,
- style::h2,
- state_node_properties::dynalloc_state_t::unknown);
+ {
+ label_text function
+ = m_logical_loc_mgr.get_short_name (logical_loc);
+ if (function.get ())
+ add_title_tr (id_of_dot_node, xp, num_columns, state_node,
+ std::string ("Frame: ") + function.get (),
+ style::h2,
+ state_node_properties::dynalloc_state_t::unknown);
+ }
break;
case state_node_properties::kind_t::dynalloc_buffer:
{
diff --git a/gcc/libgdiagnostics.cc b/gcc/libgdiagnostics.cc
index 98e15bfec11..eb2d0ac4cac 100644
--- a/gcc/libgdiagnostics.cc
+++ b/gcc/libgdiagnostics.cc
@@ -485,28 +485,31 @@ public:
(outfile, indent, "impl_logical_location_manager");
}
- const char *get_short_name (key k) const final override
+ label_text
+ get_short_name (key k) const final override
{
if (auto loc = ptr_from_key (k))
- return loc->m_short_name.get_str ();
+ return label_text::borrow (loc->m_short_name.get_str ());
else
- return nullptr;
+ return label_text ();
}
- const char *get_name_with_scope (key k) const final override
+ label_text
+ get_name_with_scope (key k) const final override
{
if (auto loc = ptr_from_key (k))
- return loc->m_fully_qualified_name.get_str ();
+ return label_text::borrow (loc->m_fully_qualified_name.get_str ());
else
- return nullptr;
+ return label_text ();
}
- const char *get_internal_name (key k) const final override
+ label_text
+ get_internal_name (key k) const final override
{
if (auto loc = ptr_from_key (k))
- return loc->m_decorated_name.get_str ();
+ return label_text::borrow (loc->m_decorated_name.get_str ());
else
- return nullptr;
+ return label_text ();
}
kind get_kind (key k) const final override
diff --git a/gcc/tree-logical-location.cc b/gcc/tree-logical-location.cc
index 71294875c99..b741b4e8af3 100644
--- a/gcc/tree-logical-location.cc
+++ b/gcc/tree-logical-location.cc
@@ -48,33 +48,35 @@ tree_logical_location_manager::dump (FILE *outfile, int indent) const
"tree_logical_location_manager");
}
-const char *
+label_text
tree_logical_location_manager::get_short_name (key k) const
{
tree node = tree_from_key (k);
assert_valid_tree (node);
if (DECL_P (node))
- return identifier_to_locale (lang_hooks.decl_printable_name (node, 0));
+ return label_text::borrow
+ (identifier_to_locale (lang_hooks.decl_printable_name (node, 0)));
if (TYPE_P (node))
- return IDENTIFIER_POINTER (TYPE_IDENTIFIER (node));
- return nullptr;
+ return label_text::borrow (IDENTIFIER_POINTER (TYPE_IDENTIFIER (node)));
+ return label_text ();
}
-const char *
+label_text
tree_logical_location_manager::get_name_with_scope (key k) const
{
tree node = tree_from_key (k);
assert_valid_tree (node);
if (DECL_P (node))
- return identifier_to_locale (lang_hooks.decl_printable_name (node, 1));
+ return label_text::borrow
+ (identifier_to_locale (lang_hooks.decl_printable_name (node, 1)));
if (TYPE_P (node))
- return nullptr;
- return nullptr;
+ return label_text ();
+ return label_text ();
}
-const char *
+label_text
tree_logical_location_manager::get_internal_name (key k) const
{
tree node = tree_from_key (k);
@@ -85,11 +87,11 @@ tree_logical_location_manager::get_internal_name (key k) const
if (HAS_DECL_ASSEMBLER_NAME_P (node)
&& TREE_CODE (node) != NAMESPACE_DECL) // FIXME
if (tree id = DECL_ASSEMBLER_NAME (node))
- return IDENTIFIER_POINTER (id);
+ return label_text::borrow (IDENTIFIER_POINTER (id));
}
else if (TYPE_P (node))
- return nullptr;
- return NULL;
+ return label_text ();
+ return label_text ();
}
enum kind
diff --git a/gcc/tree-logical-location.h b/gcc/tree-logical-location.h
index 03749601050..7a37480bee0 100644
--- a/gcc/tree-logical-location.h
+++ b/gcc/tree-logical-location.h
@@ -36,9 +36,9 @@ public:
void dump (FILE *out, int indent) const final override;
- const char *get_short_name (key) const final override;
- const char *get_name_with_scope (key) const final override;
- const char *get_internal_name (key) const final override;
+ label_text get_short_name (key) const final override;
+ label_text get_name_with_scope (key) const final override;
+ label_text get_internal_name (key) const final override;
kind get_kind (key) const final override;
label_text get_name_for_path_output (key) const final override;
key get_parent (key) const final override;