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
This commit is contained in:
Richard Henderson 2004-03-25 16:46:53 -08:00 committed by Richard Henderson
parent 8bd22a3ceb
commit 0066ef9ce4
3 changed files with 28 additions and 4 deletions

View 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.

View 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,

View File

@ -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,
}
};