PR c++/85214 - ICE with alias, generic lambda, constexpr if.
authorJason Merrill <jason@redhat.com>
Fri, 6 Apr 2018 18:09:53 +0000 (14:09 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 6 Apr 2018 18:09:53 +0000 (14:09 -0400)
commit96975b1159808defb222a57b369db02a0eab5fee
tree09a519ef6a26c4fc39366f1fd44d9701a19e00ba
parente1c7971b81abab836f2fc4f0b8d0f7964f8a6e13
PR c++/85214 - ICE with alias, generic lambda, constexpr if.

Here, since the condition for the constexpr if depends on the type of 'j',
it's still dependent when we are partially instantiating the inner lambda,
so we need to defer instantiating the constexpr if.  When we instantiated
the inner lambda, we tried to substitute into the typename, which failed
because we didn't have a declaration of 'i' available.

Fixed by teaching extract_locals_r to capture local typedefs such as 'ar';
if we have the typedef handy, we don't need to substitute into its
definition.

* pt.c (extract_locals_r): Remember local typedefs.

From-SVN: r259185
gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp1z/constexpr-if20.C [new file with mode: 0644]