OSDN Git Service

* c-typeck.c (really_start_incremental_init, push_init_level):
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Dec 2001 00:09:34 +0000 (00:09 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Dec 2001 00:09:34 +0000 (00:09 +0000)
Avoid constructor_max_index being other than an INTEGER_CST.

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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47539 138bc75d-0d04-0410-961f-82ee72b054a4

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

index c107502..12fba08 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 64f0f07..ff504dc 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 d3a4df6..7f71389 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" } */
+}