c++: constrained lambda inside template [PR92633]
authorPatrick Palka <ppalka@redhat.com>
Tue, 2 Jun 2020 01:37:04 +0000 (21:37 -0400)
committerPatrick Palka <ppalka@redhat.com>
Tue, 2 Jun 2020 01:37:04 +0000 (21:37 -0400)
commitc2449995ca36ea955e3c6d4ee7f0d401b512c897
tree5e828f15585a6625a8755ae0e91d6c2ffed80daf
parent4a9aa9dec7fc413654807890061a4d7df8a1c5e7
c++: constrained lambda inside template [PR92633]

When regenerating a constrained lambda during instantiation of an
enclosing template, we are forgetting to substitute into the lambda's
constraints.  Fix this by substituting through the constraints during
tsubst_lambda_expr.

gcc/cp/ChangeLog:

PR c++/92633
PR c++/92838
* pt.c (tsubst_function_decl): Don't do set_constraints when
regenerating a lambda.
(tsubst_lambda_expr): Substitute into the lambda's constraints
and do set_constraints here.

gcc/testsuite/ChangeLog:

PR c++/92633
PR c++/92838
* g++.dg/cpp2a/concepts-lambda11.C: New test.
* g++.dg/cpp2a/concepts-lambda12.C: New test.
gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp2a/concepts-lambda11.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp2a/concepts-lambda12.C [new file with mode: 0644]