c++: Fix ICE with CTAD in concept [PR98611]
authorPatrick Palka <ppalka@redhat.com>
Tue, 12 Jan 2021 14:34:41 +0000 (09:34 -0500)
committerPatrick Palka <ppalka@redhat.com>
Tue, 12 Jan 2021 14:34:41 +0000 (09:34 -0500)
commite0bec6ceac47752616dd9fe0801344ed45db2fd3
tree9b880f8e69f5ffa5e057206f31886579c42782a0
parent52a170b1a1818b7521c25e76271638a448b3f630
c++: Fix ICE with CTAD in concept [PR98611]

This patch teaches cp_walk_subtrees to visit the template represented
by a CTAD placeholder, which would otherwise be not visited during
find_template_parameters.  The template may be a template template
parameter (as in the first testcase), or it may implicitly use the
template parameters of an enclosing class template (as in the second
testcase), and in either case we need to visit this tree to record the
template parameters used therein for later satisfaction.

gcc/cp/ChangeLog:

PR c++/98611
* tree.c (cp_walk_subtrees) <case TEMPLATE_TYPE_PARM>: Visit
the template of a CTAD placeholder.

gcc/testsuite/ChangeLog:

PR c++/98611
* g++.dg/cpp2a/concepts-ctad1.C: New test.
* g++.dg/cpp2a/concepts-ctad2.C: New test.
gcc/cp/tree.c
gcc/testsuite/g++.dg/cpp2a/concepts-ctad1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp2a/concepts-ctad2.C [new file with mode: 0644]