From 0066ef9ce4ea5377b154cdc10ef6626033ede8b8 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 25 Mar 2004 16:46:53 -0800 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/c-typeck.c | 8 ++++---- gcc/testsuite/gcc.dg/gnu89-init-3.c | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/gnu89-init-3.c 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, + } +}; -- 2.30.2