OSDN Git Service

PR 11527
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Mar 2004 00:46:53 +0000 (00:46 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Mar 2004 00:46:53 +0000 (00:46 +0000)
        * c-typeck.c (pop_init_level): Emit pending init elements earlier
        rather than later.
* gcc.dg/gnu89-init-3.c: New.

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

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

index c83ca7c..c06551f 100644 (file)
@@ -1,3 +1,9 @@
+2004-03-25  Richard Henderson  <rth@redhat.com>
+
+       PR 11527
+        * c-typeck.c (pop_init_level): Emit pending init elements earlier
+        rather than later.
+
 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * builtins.c (fold_builtin): Fix error in last change.
index 2e57ba7..2a40258 100644 (file)
@@ -4655,6 +4655,10 @@ pop_init_level (int implicit)
        abort ();
     }
 
+  /* Now output all pending elements.  */
+  constructor_incremental = 1;
+  output_pending_init_elements (1);
+
   p = constructor_stack;
 
   /* Error for initializing a flexible array member, or a zero-length
@@ -4709,10 +4713,6 @@ pop_init_level (int implicit)
          }
     }
 
-  /* Now output all pending elements.  */
-  constructor_incremental = 1;
-  output_pending_init_elements (1);
-
   /* Pad out the end of the structure.  */
   if (p->replacement_value)
     /* If this closes a superfluous brace pair,
diff --git a/gcc/testsuite/gcc.dg/gnu89-init-3.c b/gcc/testsuite/gcc.dg/gnu89-init-3.c
new file mode 100644 (file)
index 0000000..bd4283e
--- /dev/null
@@ -0,0 +1,18 @@
+/* PR 11527 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu89" } */
+
+typedef struct smrdd_memory_blocks_s
+{
+  int blocks;
+  int block[];
+} smrdd_memory_blocks_t;
+
+const smrdd_memory_blocks_t smrdd_memory_blocks =
+{
+  3,
+  {
+    [5] = 5,
+    [1] = 2,
+  }
+};