From: Paolo Carlini Date: Wed, 14 Dec 2011 00:36:15 +0000 (+0000) Subject: re PR c++/51464 ([c++0x] ICE with invalid use of []) X-Git-Tag: releases/gcc-4.7.0~1549 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6fdc547369f2ae57120d8fa1eb91cbff24374a21;p=thirdparty%2Fgcc.git re PR c++/51464 ([c++0x] ICE with invalid use of []) /cp 2011-12-13 Paolo Carlini PR c++/51464 * semantics.c (begin_lambda_type): Check begin_class_definition return value for error_mark_node. * parser.c (cp_parser_lambda_expression): Check begin_lambda_type return value for error_mark_node. /testsuite 2011-12-13 Paolo Carlini PR c++/51464 * g++.dg/cpp0x/lambda/lambda-ice6.C: New. From-SVN: r182320 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3e7abcc0a359..23748d8bdd8e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2011-12-13 Paolo Carlini + + PR c++/51464 + * semantics.c (begin_lambda_type): Check begin_class_definition return + value for error_mark_node. + * parser.c (cp_parser_lambda_expression): Check begin_lambda_type + return value for error_mark_node. + 2011-12-13 Fabien Chêne PR c++/14258 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ae15eb17b8d0..49b508ce83a0 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -8033,6 +8033,8 @@ cp_parser_lambda_expression (cp_parser* parser) cp_parser_lambda_introducer (parser, lambda_expr); type = begin_lambda_type (lambda_expr); + if (type == error_mark_node) + return error_mark_node; record_lambda_scope (lambda_expr); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 4b1ec46cb983..7e1a396332c8 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -8623,6 +8623,8 @@ begin_lambda_type (tree lambda) /* Start the class. */ type = begin_class_definition (type, /*attributes=*/NULL_TREE); + if (type == error_mark_node) + return error_mark_node; /* Cross-reference the expression and the type. */ LAMBDA_EXPR_CLOSURE (lambda) = type; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7a66fa41251d..5011d2c10863 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-13 Paolo Carlini + + PR c++/51464 + * g++.dg/cpp0x/lambda/lambda-ice6.C: New. + 2011-12-13 Andrew Pinski Adam Nemet diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C new file mode 100644 index 000000000000..ddf352766eb7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C @@ -0,0 +1,4 @@ +// PR c++/51464 +// { dg-options "-std=c++0x" } + +template struct A {}; // { dg-error "lambda" }