c++: Fix use of local in constexpr if.
authorJason Merrill <jason@redhat.com>
Fri, 7 Feb 2020 15:31:30 +0000 (10:31 -0500)
committerJason Merrill <jason@redhat.com>
Fri, 7 Feb 2020 19:20:46 +0000 (14:20 -0500)
commit1e042b396e2a84e3ee17bc52def1bf241cb7d248
tree4bedd89b18a63e06634d0705233eac45ce1c1244
parentc8dd2446f597e6d1581414a9c02ff329285181a9
c++: Fix use of local in constexpr if.

extract_local_specs wasn't finding the mention of 'an' as a template
argument because we weren't walking into template arguments.  So here I
changed cp_walk_subtrees to do so--only walking into template arguments in
the spelling of the type or expression, not any hidden behind typedefs.  The
change to use typedef_variant_p avoids looking through typedefs spelled with
'typedef' as well as those spelled with 'using'.  And then I removed some
now-redundant code for walking into template arguments in a couple of
walk_tree callbacks.

PR c++/92654
* tree.c (cp_walk_subtrees): Walk into type template arguments.
* cp-tree.h (TYPE_TEMPLATE_INFO_MAYBE_ALIAS): Use typedef_variant_p
instead of TYPE_ALIAS_P.
* pt.c (push_template_decl_real): Likewise.
(find_parameter_packs_r): Likewise.  Remove dead code.
* error.c (find_typenames_r): Remove dead code.
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/error.c
gcc/cp/pt.c
gcc/cp/tree.c
gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda2.C [new file with mode: 0644]