From 8abe3bde01dc29094149660258c8727f184871e4 Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 13 Apr 2010 17:24:52 +0000 Subject: [PATCH] * call.c (type_decays_to): Check MAYBE_CLASS_TYPE_P instead of CLASS_TYPE_P. * parser.c (cp_parser_lambda_expression): Complain about lambda in unevaluated context. * pt.c (iterative_hash_template_arg): Don't crash on lambda. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158277 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/call.c | 2 +- gcc/cp/pt.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C | 15 --------------- 5 files changed, 20 insertions(+), 16 deletions(-) delete mode 100644 gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0bb6cbb2c74..d6be4b47734 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2010-04-13 Jason Merrill + + * call.c (type_decays_to): Check MAYBE_CLASS_TYPE_P instead of + CLASS_TYPE_P. + * parser.c (cp_parser_lambda_expression): Complain about lambda in + unevaluated context. + * pt.c (iterative_hash_template_arg): Don't crash on lambda. + 2010-04-12 Jason Merrill PR c++/43641 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 1ed320cc03a..90f84e020ae 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -2263,7 +2263,7 @@ type_decays_to (tree type) return build_pointer_type (TREE_TYPE (type)); if (TREE_CODE (type) == FUNCTION_TYPE) return build_pointer_type (type); - if (!CLASS_TYPE_P (type)) + if (!MAYBE_CLASS_TYPE_P (type)) type = cv_unqualified (type); return type; } diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 367608fb908..29489b6337c 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1563,6 +1563,12 @@ iterative_hash_template_arg (tree arg, hashval_t val) val = iterative_hash_template_arg (TREE_TYPE (arg), val); return iterative_hash_template_arg (TYPE_DOMAIN (arg), val); + case LAMBDA_EXPR: + /* A lambda can't appear in a template arg, but don't crash on + erroneous input. */ + gcc_assert (errorcount > 0); + return val; + default: switch (tclass) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dcc08f501e0..04274bad79c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-13 Jason Merrill + + * g++.dg/cpp0x/lambda/lambda-deduce2.C: Remove. + * g++.dg/cpp0x/lambda/lambda-uneval.C: New. + 2010-04-13 Manuel López-Ibáñez * gcc.dg/cpp/cpp.exp: Test also c-c++-common/cpp. diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C deleted file mode 100644 index e92f6f2752c..00000000000 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C +++ /dev/null @@ -1,15 +0,0 @@ -// Test that cv-quals are dropped from non-class return type -// { dg-options "-std=c++0x" } - -template -struct assert_same_type; -template -struct assert_same_type { }; - -struct A -{ - int i; -}; - -extern const int i; -assert_same_type x; -- 2.11.0