From: Jason Merrill Date: Fri, 14 Dec 2012 20:57:55 +0000 (-0500) Subject: re PR c++/42315 (ICE with invalid array initializer) X-Git-Tag: releases/gcc-4.8.0~1372 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b299be64a9f9ba67a33c16f16302e77917afa62;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ea4cfb203426..ee9bf7749efd 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 cdda2f427654..64bd4b5d2c0e 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 f5995a6da919..a02faa2a8d46 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 f41ce86b1d90..5438af1d4777 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 000000000000..06b27a94a8ac --- /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 "" }