diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-12-14 00:36:15 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-12-14 00:36:15 +0000 |
commit | 6fdc547369f2ae57120d8fa1eb91cbff24374a21 (patch) | |
tree | d197ef935d53902daf9e61d3930064960868693a | |
parent | 639166b250def5cb1b57500193fc414f4f142142 (diff) | |
download | gcc-6fdc547369f2ae57120d8fa1eb91cbff24374a21.zip gcc-6fdc547369f2ae57120d8fa1eb91cbff24374a21.tar.gz gcc-6fdc547369f2ae57120d8fa1eb91cbff24374a21.tar.bz2 |
re PR c++/51464 ([c++0x] ICE with invalid use of [])
/cp
2011-12-13 Paolo Carlini <paolo.carlini@oracle.com>
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 <paolo.carlini@oracle.com>
PR c++/51464
* g++.dg/cpp0x/lambda/lambda-ice6.C: New.
From-SVN: r182320
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/parser.c | 2 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C | 4 |
5 files changed, 21 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3e7abcc..23748d8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2011-12-13 Paolo Carlini <paolo.carlini@oracle.com> + + 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 <fabien@gcc.gnu.org> PR c++/14258 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ae15eb1..49b508c 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 4b1ec46..7e1a396 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 7a66fa4..5011d2c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-13 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51464 + * g++.dg/cpp0x/lambda/lambda-ice6.C: New. + 2011-12-13 Andrew Pinski <apinski@cavium.com> Adam Nemet <anemet@caviumnetworks.com> 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 0000000..ddf3527 --- /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<int = sizeof([])> struct A {}; // { dg-error "lambda" } |