From 8b299be64a9f9ba67a33c16f16302e77917afa62 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 14 Dec 2012 15:57:55 -0500 Subject: [PATCH] re PR c++/42315 (ICE with invalid array initializer) PR c++/42315 * decl.c (maybe_deduce_size_from_array_init): Don't change the variable type. From-SVN: r194509 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 3 --- gcc/testsuite/g++.dg/gomp/pr34964.C | 2 +- gcc/testsuite/g++.dg/init/array21.C | 2 +- gcc/testsuite/g++.dg/init/array32.C | 7 +++++++ 5 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/init/array32.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ea4cfb20342..ee9bf7749ef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-12-14 Jason Merrill + + PR c++/42315 + * decl.c (maybe_deduce_size_from_array_init): Don't change the + variable type. + 2012-12-13 Jakub Jelinek PR c++/55652 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index cdda2f42765..64bd4b5d2c0 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4834,14 +4834,12 @@ maybe_deduce_size_from_array_init (tree decl, tree init) if (failure == 1) { error ("initializer fails to determine size of %qD", decl); - TREE_TYPE (decl) = error_mark_node; } else if (failure == 2) { if (do_default) { error ("array size missing in %qD", decl); - TREE_TYPE (decl) = error_mark_node; } /* If a `static' var's size isn't known, make it extern as well as static, so it does not get allocated. If it's not @@ -4853,7 +4851,6 @@ maybe_deduce_size_from_array_init (tree decl, tree init) else if (failure == 3) { error ("zero-size array %qD", decl); - TREE_TYPE (decl) = error_mark_node; } } diff --git a/gcc/testsuite/g++.dg/gomp/pr34964.C b/gcc/testsuite/g++.dg/gomp/pr34964.C index f5995a6da91..a02faa2a8d4 100644 --- a/gcc/testsuite/g++.dg/gomp/pr34964.C +++ b/gcc/testsuite/g++.dg/gomp/pr34964.C @@ -2,5 +2,5 @@ // { dg-do compile } // { dg-options "-fopenmp" } -char x[] = 0; // { dg-error "initializer fails to determine size" } +char x[] = 0; // { dg-error "initializer" } #pragma omp threadprivate (x) diff --git a/gcc/testsuite/g++.dg/init/array21.C b/gcc/testsuite/g++.dg/init/array21.C index f41ce86b1d9..5438af1d477 100644 --- a/gcc/testsuite/g++.dg/init/array21.C +++ b/gcc/testsuite/g++.dg/init/array21.C @@ -2,6 +2,6 @@ void foo() { - const int x[] = 0; // { dg-error "size" } + const int x[] = 0; // { dg-error "initializer" } ++x; } diff --git a/gcc/testsuite/g++.dg/init/array32.C b/gcc/testsuite/g++.dg/init/array32.C new file mode 100644 index 00000000000..06b27a94a8a --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array32.C @@ -0,0 +1,7 @@ +// PR c++/42315 + +extern int x[]; + +int i = x[0]; + +int x[] = 0; // { dg-error "" } -- 2.30.2