https://gcc.gnu.org/g:397b0827bcd40eb9b0c5c4bfae7a3dcb2030cef2

commit r16-7142-g397b0827bcd40eb9b0c5c4bfae7a3dcb2030cef2
Author: Marek Polacek <[email protected]>
Date:   Wed Jan 28 15:43:35 2026 -0500

    c++/reflection: tweak for eval_has_template_arguments
    
    As discussed in
    <https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705756.html>:
    
    > For reflection it's probably best to go with
    >
    > if (TYPE_P (r) && typedef_variant_p (r))
    >   return alias_template_specialization_p (r, nt_opaque);
    >
    > and not get into primary_template_specialization_p at all.
    
    Here in a patch form.
    
    gcc/cp/ChangeLog:
    
            * reflect.cc (eval_has_template_arguments): Return immediately after
            checking alias_template_specialization_p.
    
    Reviewed-by: Jason Merrill <[email protected]>

Diff:
---
 gcc/cp/reflect.cc | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc
index 141294dd2b2c..78990ce414d2 100644
--- a/gcc/cp/reflect.cc
+++ b/gcc/cp/reflect.cc
@@ -2805,13 +2805,12 @@ static tree
 eval_has_template_arguments (tree r)
 {
   r = MAYBE_BASELINK_FUNCTIONS (r);
-  /* Presumably for
+  /* For
        typedef cls_tmpl<int> TYPE;
-     'has_template_arguments (^^TYPE)' should be false?  */
-  if (TYPE_P (r)
-      && typedef_variant_p (r)
-      && !alias_template_specialization_p (r, nt_opaque))
-    return boolean_false_node;
+     'has_template_arguments (^^TYPE)' should be false.  */
+  if (TYPE_P (r) && typedef_variant_p (r))
+    return (alias_template_specialization_p (r, nt_opaque)
+           ? boolean_true_node : boolean_false_node);
   if (primary_template_specialization_p (r)
       || variable_template_specialization_p (r))
     return boolean_true_node;

Reply via email to