re PR c++/60252 ([c++11] ICE with invalid variable-length array in lambda parameter)

PR c++/60252
	* lambda.c (maybe_resolve_dummy): Don't try to capture this
	in declaration context.

From-SVN: r207999
This commit is contained in:
Jason Merrill 2014-02-21 09:56:31 -05:00 committed by Jason Merrill
parent e9cd655135
commit 1c195d2a8f
3 changed files with 20 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2014-02-21 Jason Merrill <jason@redhat.com>
PR c++/60252
* lambda.c (maybe_resolve_dummy): Don't try to capture this
in declaration context.
DR 1591
PR c++/60051
* pt.c (unify): Only unify if deducible. Handle 0-length list.

View File

@ -749,7 +749,10 @@ maybe_resolve_dummy (tree object)
if (type != current_class_type
&& current_class_type
&& LAMBDA_TYPE_P (current_class_type)
&& DERIVED_FROM_P (type, current_nonlambda_class_type ()))
&& DERIVED_FROM_P (type, current_nonlambda_class_type ())
/* If we get here while parsing the parameter list of a lambda, it
will fail, so don't even try (c++/60252). */
&& current_binding_level->kind != sk_function_parms)
{
/* In a lambda, need to go through 'this' capture. */
tree lam = CLASSTYPE_LAMBDA_EXPR (current_class_type);

View File

@ -0,0 +1,12 @@
// PR c++/60252
// { dg-require-effective-target c++11 }
struct A
{
int i; // { dg-message "" }
void foo()
{
[&](){ [&](int[i]){}; }; // { dg-error "" }
}
};