diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-09-17 00:05:15 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-09-17 00:05:15 +0200 |
commit | 326a4d4ef1c3b80f4cfbf17f52a42c263abb25df (patch) | |
tree | d9d2e309acc892504ceaae7258e97d76c4d9fb0b | |
parent | 08222495cc9ea47746057e95002b7a467309964c (diff) | |
download | gcc-326a4d4ef1c3b80f4cfbf17f52a42c263abb25df.zip gcc-326a4d4ef1c3b80f4cfbf17f52a42c263abb25df.tar.gz gcc-326a4d4ef1c3b80f4cfbf17f52a42c263abb25df.tar.bz2 |
re PR c++/37531 (ICE with invalid array initialization)
PR c++/37531
* semantics.c (finish_compound_literal): Return error_mark_node if
type is errorneous.
* g++.dg/parse/crash47.C: New test.
From-SVN: r140400
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash47.C | 9 |
4 files changed, 19 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1bc8596..a78e5f4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2008-09-16 Jakub Jelinek <jakub@redhat.com> + PR c++/37531 + * semantics.c (finish_compound_literal): Return error_mark_node if + type is errorneous. + PR c++/37532 * lex.c (init_reswords): Don't populate ridpointers for D_CONLY reserved words. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index cfd06bb..c6f921a 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2105,6 +2105,9 @@ finish_unary_op_expr (enum tree_code code, tree expr) tree finish_compound_literal (tree type, tree compound_literal) { + if (type == error_mark_node) + return error_mark_node; + if (!TYPE_OBJ_P (type)) { error ("compound literal of non-object type %qT", type); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 40b58f4..eb26941f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-09-16 Jakub Jelinek <jakub@redhat.com> + PR c++/37531 + * g++.dg/parse/crash47.C: New test. + PR c++/37532 * g++.dg/parse/crash46.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/crash47.C b/gcc/testsuite/g++.dg/parse/crash47.C new file mode 100644 index 0000000..e77c49f --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash47.C @@ -0,0 +1,9 @@ +// PR c++/37531 +// { dg-do compile } +// { dg-options "-std=gnu++98" } + +void +foo () +{ + (int[i]) { 0 }; // { dg-error "was not declared in this scope" } +} |