2010-02-10 Jason Merrill <jason@redhat.com>
+ PR c++/41896
+ * semantics.c (outer_lambda_capture_p): Use current_function_decl
+ instead of current_class_type.
+
+2010-02-10 Jason Merrill <jason@redhat.com>
+
PR c++/42983, core issue 906
* method.c (defaultable_fn_check): Check virtualness.
{
return (TREE_CODE (decl) == FIELD_DECL
&& LAMBDA_TYPE_P (DECL_CONTEXT (decl))
- && (!current_class_type
- || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
+ /* Using current_class_type here causes problems with uses in a
+ nested lambda-introducer; see 41896. */
+ && DECL_CONTEXT (current_function_decl) != DECL_CONTEXT (decl));
}
/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2010-02-10 Jason Merrill <jason@redhat.com>
+ PR c++/41896
+ * g++.dg/cpp0x/lambda/lambda-nested3.C: New.
+
PR c++/42983, core issue 906
* g++.dg/cpp0x/defaulted15.C: Add virtualness test.
* g++.dg/cpp0x/defaulted9.C: Move virtual default outside class.
--- /dev/null
+// PR c++/41896
+// { dg-options "-std=c++0x" }
+
+void nested_lambda()
+{
+ float val;
+
+ [val]()
+ {
+ [val](){};
+ };
+}