aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-10 17:45:07 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-10 17:45:07 -0500
commit2cb95a6ade9618f6056c251d07617a7a4c9c51e2 (patch)
treea4a0aac725577272bb6dd69372cebef058daf4e0 /gcc
parentf1c3cf3c931a57f565ea7d4fe117875bc8701cd9 (diff)
downloadgcc-2cb95a6ade9618f6056c251d07617a7a4c9c51e2.zip
gcc-2cb95a6ade9618f6056c251d07617a7a4c9c51e2.tar.gz
gcc-2cb95a6ade9618f6056c251d07617a7a4c9c51e2.tar.bz2
re PR c++/41896 ([c++0x] Segfault because of a nested lambda function)
PR c++/41896 * semantics.c (outer_lambda_capture_p): Use current_function_decl instead of current_class_type. From-SVN: r156673
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C12
4 files changed, 24 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 11ec213..7a6e78a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,11 @@
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.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index f8ced6f..796b789 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2714,8 +2714,9 @@ outer_lambda_capture_p (tree decl)
{
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,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1ddd791..b7ea3a2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
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.
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C
new file mode 100644
index 0000000..2cc6f96
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C
@@ -0,0 +1,12 @@
+// PR c++/41896
+// { dg-options "-std=c++0x" }
+
+void nested_lambda()
+{
+ float val;
+
+ [val]()
+ {
+ [val](){};
+ };
+}