]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++/reflection: refactor type_linkage_name
authorMarek Polacek <polacek@redhat.com>
Wed, 21 Jan 2026 17:30:37 +0000 (12:30 -0500)
committerMarek Polacek <polacek@redhat.com>
Thu, 22 Jan 2026 14:37:51 +0000 (09:37 -0500)
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>
gcc/cp/reflect.cc

index 788c00c6f305a6c607f3be964815b16c7f47300e..9f979b5c0e7324a2965f47bfa135fc8e7f6914bd 100644 (file)
@@ -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;
     }