From: Richard Henderson Date: Fri, 26 Mar 2004 00:46:53 +0000 (-0800) Subject: re PR c/11527 (If an array "designated intializer" in a struct causes a segv.) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0066ef9ce4ea5377b154cdc10ef6626033ede8b8;p=gcc.git re PR c/11527 (If an array "designated intializer" in a struct causes a segv.) PR 11527 * c-typeck.c (pop_init_level): Emit pending init elements earlier rather than later. * gcc.dg/gnu89-init-3.c: New. From-SVN: r79978 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c83ca7cf0e2..c06551f69f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-03-25 Richard Henderson + + PR 11527 + * c-typeck.c (pop_init_level): Emit pending init elements earlier + rather than later. + 2004-03-25 Kaveh R. Ghazi * builtins.c (fold_builtin): Fix error in last change. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 2e57ba7cceb..2a40258f57b 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -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 index 00000000000..bd4283ec875 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gnu89-init-3.c @@ -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, + } +};