Tested x86_64-pc-linux-gnu, applying to trunk.
-- 8< --
in r12-1100 we stopped printing template bindings like T = T. The check for
this relied on TREE_CHAIN of a TEMPLATE_TYPE_PARM holding the declaration of
that type-parameter. This should be written as TYPE_STUB_DECL. In
addition, TYPE_STUB_DECL is only set on the TYPE_MAIN_VARIANT, so we need to
check that as well. Which is also desirable because volatile T is visibly
distinct from T.
gcc/cp/ChangeLog:
* error.cc (dump_template_bindings): Correct skipping of
redundant bindings.
---
gcc/cp/error.cc | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc
index 75bf7dcef62..305064d476c 100644
--- a/gcc/cp/error.cc
+++ b/gcc/cp/error.cc
@@ -541,12 +541,13 @@ dump_template_bindings (cxx_pretty_printer *pp, tree
parms, tree args,
/* If the template argument repeats the template parameter (T = T),
skip the parameter.*/
if (arg && TREE_CODE (arg) == TEMPLATE_TYPE_PARM
- && TREE_CODE (parm_i) == TREE_LIST
- && TREE_CODE (TREE_VALUE (parm_i)) == TYPE_DECL
- && TREE_CODE (TREE_TYPE (TREE_VALUE (parm_i)))
- == TEMPLATE_TYPE_PARM
- && DECL_NAME (TREE_VALUE (parm_i))
- == DECL_NAME (TREE_CHAIN (arg)))
+ && arg == TYPE_MAIN_VARIANT (arg)
+ && TREE_CODE (parm_i) == TREE_LIST
+ && TREE_CODE (TREE_VALUE (parm_i)) == TYPE_DECL
+ && (TREE_CODE (TREE_TYPE (TREE_VALUE (parm_i)))
+ == TEMPLATE_TYPE_PARM)
+ && (DECL_NAME (TREE_VALUE (parm_i))
+ == DECL_NAME (TYPE_STUB_DECL (arg))))
continue;
semicolon_or_introducer ();
base-commit: e3d3d6d7d2c8ab73ff597f4c82514c3217256567
--
2.49.0