[gcc r16-6983] c++/reflection: refactor type_linkage_name
Marek Polacek
mpolacek@gcc.gnu.org
Thu Jan 22 14:38:09 GMT 2026
https://gcc.gnu.org/g:8f9034c840c2ff9063e04ba52520065c90ff56ad
commit r16-6983-g8f9034c840c2ff9063e04ba52520065c90ff56ad
Author: Marek Polacek <polacek@redhat.com>
Date: Wed Jan 21 12:30:37 2026 -0500
c++/reflection: refactor type_linkage_name
This patch simplifies and renames type_linkage_name as per
<https://gcc.gnu.org/pipermail/gcc-patches/2026-January/706420.html>.
gcc/cp/ChangeLog:
* reflect.cc (type_linkage_name): Rename to...
(reflection_type_linkage_name): ...this.
(eval_has_internal_linkage): Call reflection_type_linkage_name instead
of type_linkage_name.
(eval_has_module_linkage): Likewise.
(eval_has_external_linkage): Likewise.
(eval_has_c_language_linkage): Likewise.
(eval_has_linkage): Likewise.
Co-authored-by: Jason Merrill <jason@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
Diff:
---
gcc/cp/reflect.cc | 26 +++++++++++---------------
1 file changed, 11 insertions(+), 15 deletions(-)
diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc
index 788c00c6f305..9f979b5c0e73 100644
--- a/gcc/cp/reflect.cc
+++ b/gcc/cp/reflect.cc
@@ -1849,19 +1849,15 @@ eval_is_enumerator (const_tree r)
return boolean_false_node;
}
-/* Get the linkage name for T, or NULL_TREE, if N/A. */
+/* Get the linkage name for T, or NULL_TREE for types with no name
+ or for typedefs. */
static tree
-type_linkage_name (tree t)
+reflection_type_linkage_name (tree t)
{
- if (TYPE_NAME (t) == NULL_TREE
- || !DECL_P (TYPE_NAME (t))
- || (!DECL_IMPLICIT_TYPEDEF_P (TYPE_NAME (t))
- && TYPE_NAME (t) == TYPE_NAME (TYPE_MAIN_VARIANT (t))
- && !TYPE_MAIN_DECL (t)))
- return NULL_TREE;
-
- return TYPE_NAME (t);
+ if (OVERLOAD_TYPE_P (t) && !typedef_variant_p (t))
+ return TYPE_NAME (t);
+ return NULL_TREE;
}
/* Process std::meta::has_internal_linkage.
@@ -1881,7 +1877,7 @@ eval_has_internal_linkage (tree r, reflect_kind kind)
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
@@ -1908,7 +1904,7 @@ eval_has_module_linkage (tree r, reflect_kind kind)
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
@@ -1938,7 +1934,7 @@ eval_has_external_linkage (tree r, reflect_kind kind)
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
@@ -1966,7 +1962,7 @@ eval_has_c_language_linkage (tree r, reflect_kind kind)
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
@@ -1993,7 +1989,7 @@ eval_has_linkage (tree r, reflect_kind kind)
r = STRIP_TEMPLATE (r);
if (TYPE_P (r))
{
- r = type_linkage_name (r);
+ r = reflection_type_linkage_name (r);
if (!r)
return boolean_false_node;
}
More information about the Gcc-cvs
mailing list