On Sat, Jan 17, 2026 at 04:31:09PM +0800, Jason Merrill wrote:
> 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?
I added code to check if we now return false for something that we
used to return true for, and found nothing. I ran dg.exp and old-deja.exp.
> > 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
>
Marek