mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:40:55 +08:00
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:
parent
e9cd655135
commit
1c195d2a8f
@ -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.
|
||||
|
@ -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);
|
||||
|
12
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C
Normal file
12
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C
Normal 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 "" }
|
||||
}
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user