From f501341978079e3f868d8404d409d6ca6f5929de Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 27 Apr 2010 20:08:47 +0000 Subject: [PATCH 1/1] PR c++/43790 * tree.c (cv_unqualified): Handle error_mark_node. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158801 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/tree.c | 7 ++++++- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C | 13 +++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f7456bf3d52..68c6b498b74 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2010-04-27 Jason Merrill + 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 27ced53a2b4..0abc12ccd57 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 c48c0fe8bbb..3a320983f65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2010-04-27 Jason Merrill + * 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 00000000000..1ea8f4d7b58 --- /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" } +} -- 2.11.0