aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-04-27 16:08:47 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-04-27 16:08:47 -0400
commitea8b8aa005a994ce5d3e5437c780a35a2c27ff4e (patch)
tree38a838d3c4a7c326547de8d51c9ab87cbce9f5f4 /gcc
parent4a5d353fa8b904fb64df60f68d7c7a542dd20aa6 (diff)
downloadgcc-ea8b8aa005a994ce5d3e5437c780a35a2c27ff4e.zip
gcc-ea8b8aa005a994ce5d3e5437c780a35a2c27ff4e.tar.gz
gcc-ea8b8aa005a994ce5d3e5437c780a35a2c27ff4e.tar.bz2
re PR c++/43790 ([C++0x] In lambda express, calling member function of non-captured class gives internal compiler error)
PR c++/43790 * tree.c (cv_unqualified): Handle error_mark_node. From-SVN: r158801
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/tree.c7
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C13
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index f7456bf..68c6b49 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2010-04-27 Jason Merrill <jason@redhat.com>
+ PR c++/43790
+ * tree.c (cv_unqualified): Handle error_mark_node.
+
PR c++/41468
* call.c (convert_like_real) [ck_ambig]: Just return error_mark_node
if we don't want errors.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 27ced53..0abc12c 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -934,7 +934,12 @@ cp_build_qualified_type_real (tree type,
tree
cv_unqualified (tree type)
{
- int quals = TYPE_QUALS (type);
+ int quals;
+
+ if (type == error_mark_node)
+ return type;
+
+ quals = TYPE_QUALS (type);
quals &= ~(TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE);
return cp_build_qualified_type (type, quals);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c48c0fe..3a32098 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2010-04-27 Jason Merrill <jason@redhat.com>
+ * g++.dg/cpp0x/lambda/lambda-ice1.C: New.
+
PR c++/41468
* g++.dg/template/sfinae17.C: New.
* g++.dg/template/sfinae18.C: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C
new file mode 100644
index 0000000..1ea8f4d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C
@@ -0,0 +1,13 @@
+// PR c++/43790
+// { dg-options "-std=c++0x" }
+
+struct A
+{
+ int f();
+};
+
+int main()
+{
+ A a;
+ auto l = [] () { return a.f(); }; // { dg-error "not captured|return" }
+}