aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2007-04-15 00:59:15 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2007-04-14 17:59:15 -0700
commitaa24028daf64ebdec03da6094b60c49f0823a16b (patch)
tree52cf0d33d0e98569dafb400e481d8efe4dec1998
parentf8b8c6d76d48edf5109e5af12d7ca4105534ccb4 (diff)
downloadgcc-aa24028daf64ebdec03da6094b60c49f0823a16b.zip
gcc-aa24028daf64ebdec03da6094b60c49f0823a16b.tar.gz
gcc-aa24028daf64ebdec03da6094b60c49f0823a16b.tar.bz2
re PR c/31520 (Latent bug in finish_decl causing an errorous "array subscript is above array bounds")
2007-04-14 Andrew Pinski <andrew_pinski@playstation.sony.com> PR c/31520 * c-del.c (finish_decl): Grab the type of the decl after the call to store_init_value. 2007-04-14 Andrew Pinski <andrew_pinski@playstation.sony.com> PR C/31520 * testsuite/gcc.dg/gnu89-init-4.c: New testcase. From-SVN: r123835
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-decl.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/gnu89-init-4.c12
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1bd9b3e..43eff0c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-04-14 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR c/31520
+ * c-del.c (finish_decl): Grab the type of the decl after the call
+ to store_init_value.
+
2007-04-14 Steven Bosscher <steven@gcc.gnu.org>
* common.opt (fforward-propagate): Fix "Optimization" annotation.
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index eaef0a5..5839fc2 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -3383,7 +3383,7 @@ c_maybe_initialize_eh (void)
void
finish_decl (tree decl, tree init, tree asmspec_tree)
{
- tree type = TREE_TYPE (decl);
+ tree type;
int was_incomplete = (DECL_SIZE (decl) == 0);
const char *asmspec = 0;
@@ -3410,6 +3410,8 @@ finish_decl (tree decl, tree init, tree asmspec_tree)
|| TREE_CODE (decl) == FIELD_DECL))
objc_check_decl (decl);
+ type = TREE_TYPE (decl);
+
/* Deduce size of array from initialization, if not already known. */
if (TREE_CODE (type) == ARRAY_TYPE
&& TYPE_DOMAIN (type) == 0
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2d2c891..7bec6e8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-04-14 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C/31520
+ * testsuite/gcc.dg/gnu89-init-4.c: New testcase.
+
2007-04-14 Jakub Jelinek <jakub@redhat.com>
PR c++/25874
diff --git a/gcc/testsuite/gcc.dg/gnu89-init-4.c b/gcc/testsuite/gcc.dg/gnu89-init-4.c
new file mode 100644
index 0000000..4ccfbd1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gnu89-init-4.c
@@ -0,0 +1,12 @@
+/* Test for GNU extensions to compound literals are giving the correct array bounds */
+/* { dg-do run } */
+/* { dg-options "-std=gnu89 -W -Wall -O2" } */
+
+int a[] = (int[4]){1, 1, 2};
+int f(void)
+{
+ int sum = 0; int i;
+ for(i = 0;i<4;i++)
+ sum = a[i];
+ return sum;
+}