On 1/17/26 8:47 AM, Marek Polacek wrote:
I suppose this could/should wait till GCC 17.

Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk?

-- >8 --
During Reflection review it came up that is_std_substitution
handles NAMESPACE_DECLs accidentally: it wants either a class or a
class template, but is looking at the type of any decl.

Are there testcases affected by this?

gcc/cp/ChangeLog:

        * mangle.cc (is_std_substitution): Instead of any _DECL, only
        accept TYPE_DECL and DECL_CLASS_TEMPLATE_P.  Use NULL_TREE
        instead of NULL.
---
  gcc/cp/mangle.cc | 8 ++++----
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc
index 06bd396c03e..4887b7900de 100644
--- a/gcc/cp/mangle.cc
+++ b/gcc/cp/mangle.cc
@@ -478,7 +478,7 @@ add_substitution (tree node)
  }
/* Helper function for find_substitution. Returns nonzero if NODE,
-   which may be a decl or a CLASS_TYPE, is a template-id with template
+   which may be a class or a class template, is a template-id with template
     name of substitution_index[INDEX] in the ::std namespace, with
     global module attachment.  */
@@ -486,10 +486,10 @@ static bool
  is_std_substitution (const tree node,
                     const substitution_identifier_index_t index)
  {
-  tree type = NULL;
-  tree decl = NULL;
+  tree type = NULL_TREE;
+  tree decl = NULL_TREE;
- if (DECL_P (node))
+  if (TREE_CODE (node) == TYPE_DECL || DECL_CLASS_TEMPLATE_P (node))
      {
        type = TREE_TYPE (node);
        decl = node;

base-commit: e6532f870a741f15082122eaa1120c72569fe6cf

Reply via email to