c-typeck.c (really_start_incremental_init, [...]): Avoid constructor_max_index being...
authorJoseph Myers <jsm28@cam.ac.uk>
Mon, 3 Dec 2001 00:09:34 +0000 (00:09 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Mon, 3 Dec 2001 00:09:34 +0000 (00:09 +0000)
* c-typeck.c (really_start_incremental_init, push_init_level):
Avoid constructor_max_index being other than an INTEGER_CST.

testsuite:
* gcc.dg/vla-init-1.c: New test.

From-SVN: r47539

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vla-init-1.c [new file with mode: 0644]

index c10750270ac5451e128fe65100410631ce52c11e..12fba08a05dd4d1fa1288599d8a2bd3ead4b48cb 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-03  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+       * c-typeck.c (really_start_incremental_init, push_init_level):
+       Avoid constructor_max_index being other than an INTEGER_CST.
+
 2001-12-02  David Edelsohn  <edelsohn@gnu.org>
 
        * config/rs6000/xcoff.h (ASM_OUTPUT_INTERNAL_LABEL): Display count
index 64f0f07d89ad6e34e657cf79d3fa9c8768c8336a..ff504dc1d0520c2388ce9274bd5ad5ab2dd17f4e 100644 (file)
@@ -5259,6 +5259,13 @@ really_start_incremental_init (type)
              && TYPE_SIZE (constructor_type))
            constructor_max_index = build_int_2 (-1, -1);
 
+         /* constructor_max_index needs to be an INTEGER_CST.  Attempts
+            to initialize VLAs will cause an proper error; avoid tree
+            checking errors as well by setting a safe value.  */
+         if (constructor_max_index
+             && TREE_CODE (constructor_max_index) != INTEGER_CST)
+           constructor_max_index = build_int_2 (-1, -1);
+
          constructor_index
            = convert (bitsizetype,
                       TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
@@ -5426,6 +5433,13 @@ push_init_level (implicit)
              && TYPE_SIZE (constructor_type))
            constructor_max_index = build_int_2 (-1, -1);
 
+         /* constructor_max_index needs to be an INTEGER_CST.  Attempts
+            to initialize VLAs will cause an proper error; avoid tree
+            checking errors as well by setting a safe value.  */
+         if (constructor_max_index
+             && TREE_CODE (constructor_max_index) != INTEGER_CST)
+           constructor_max_index = build_int_2 (-1, -1);
+
          constructor_index
            = convert (bitsizetype, 
                       TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
index d3a4df6b5a1ee55ce818d2b2e05cc8ac5a99fa95..7f7138990e13bc9ce3a44da01bfabadd610011d6 100644 (file)
@@ -1,3 +1,7 @@
+2001-12-03  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+       * gcc.dg/vla-init-1.c: New test.
+
 2001-12-01  Geoff Keating  <geoffk@redhat.com>
 
        * gcc.c-torture/compile/structs.c: New testcase from GDB.
diff --git a/gcc/testsuite/gcc.dg/vla-init-1.c b/gcc/testsuite/gcc.dg/vla-init-1.c
new file mode 100644 (file)
index 0000000..61d2357
--- /dev/null
@@ -0,0 +1,13 @@
+/* Test for tree-checking error when initializing a variable-length array
+   (not allowed): constructor_max_index needs to be an INTEGER_CST.  */
+/* Origin: Joseph Myers <jsm28@cam.ac.uk>.  */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int a;
+
+void
+foo (void)
+{
+  int x[a] = { 1 }; /* { dg-error "init" "VLA init" } */
+}