... this simple also passes testing. Paolo.
////////////////////
/cp 2012-03-20 Paolo Carlini <paolo.carl...@oracle.com> PR c++/52487 * class.c (check_field_decls): Call literal_type_p only on complete types. /testsuite 2012-03-20 Paolo Carlini <paolo.carl...@oracle.com> PR c++/52487 * g++.dg/cpp0x/lambda/lambda-ice7.C: New.
Index: testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C =================================================================== --- testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C (revision 0) +++ testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C (revision 0) @@ -0,0 +1,9 @@ +// PR c++/52487 +// { dg-options "-std=c++0x" } + +struct A; // { dg-error "forward declaration" } + +void foo(A& a) +{ + [=](){a;}; // { dg-error "invalid use of incomplete type" } +} Index: cp/class.c =================================================================== --- cp/class.c (revision 185588) +++ cp/class.c (working copy) @@ -3150,7 +3150,7 @@ check_field_decls (tree t, tree *access_decls, /* If at least one non-static data member is non-literal, the whole class becomes non-literal. */ - if (!literal_type_p (type)) + if (COMPLETE_TYPE_P (type) && !literal_type_p (type)) CLASSTYPE_LITERAL_P (t) = false; /* A standard-layout class is a class that: