From 8b299be64a9f9ba67a33c16f16302e77917afa62 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 14 Dec 2012 15:57:55 -0500 Subject: 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 (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ea4cfb2..ee9bf77 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 cdda2f4..64bd4b5 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 f5995a6..a02faa2 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 f41ce86..5438af1 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 0000000..06b27a94 --- /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 "" } -- cgit v1.1