c++: tree walk into TYPENAME_TYPE.
authorJason Merrill <jason@redhat.com>
Mon, 11 May 2020 19:46:59 +0000 (15:46 -0400)
committerJason Merrill <jason@redhat.com>
Mon, 11 May 2020 20:18:11 +0000 (16:18 -0400)
commit0f50f6daa140186a048cbf33f54f4591eabf5f12
tree8f6ef8ad0d40a14488583b05c26a12f7fe23a7ad
parent42e9f80bf4f6a38733c221c03a512c432cdb784f
c++: tree walk into TYPENAME_TYPE.

While looking at 92583/92654 it occurred to me that typename types needed
the same fix.  So extract_locals_r also needs to see the TYPE_CONTEXT of a
TYPENAME_TYPE.  But it must not look through a typedef.

Most tree walking in the front end wants to walk through the syntactic form
of a type of expression, and doesn't care about the type referred to by a
typedef.  But min_vis_r does care.

gcc/cp/ChangeLog
2020-05-11  Jason Merrill  <jason@redhat.com>

PR c++/92583
PR c++/92654
* tree.c (cp_walk_subtrees): Stop at typedefs.
Handle TYPENAME_TYPE here.
* pt.c (find_parameter_packs_r): Not here.
(for_each_template_parm_r): Clear *walk_subtrees.
* decl2.c (min_vis_r): Look through typedefs.
gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/pt.c
gcc/cp/tree.c
gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda3.C