re PR c/8032 (GCC >= 3.0 incorrectly initializes static structs in the presence of flexible arrays)

PR c/8032
	* c-typeck.c (process_init_element) [RECORD_TYPE]: For
	an empty element, do not advance the pointer to unfilled
	fields if there are pending initializers.

From-SVN: r61092
This commit is contained in:
Eric Botcazou 2003-01-09 10:18:52 +01:00 committed by Eric Botcazou
parent eb27f449b6
commit bbb818c65a
4 changed files with 43 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2003-01-09 Eric Botcazou <ebotcazou@libertysurf.fr>
PR c/8032
* c-typeck.c (process_init_element) [RECORD_TYPE]: For
an empty element, do not advance the pointer to unfilled
fields if there are pending initializers.
2003-01-09 Christian Cornelssen <ccorn@cs.tu-berlin.de>
* Makefile.in (ORDINARY_FLAGS_TO_PASS): Also pass DESTDIR.

View File

@ -6609,13 +6609,18 @@ process_init_element (value)
bit_position (constructor_fields),
DECL_SIZE (constructor_fields));
constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
/* Skip any nameless bit fields. */
while (constructor_unfilled_fields != 0
&& DECL_C_BIT_FIELD (constructor_unfilled_fields)
&& DECL_NAME (constructor_unfilled_fields) == 0)
constructor_unfilled_fields =
TREE_CHAIN (constructor_unfilled_fields);
/* If the current field was the first one not yet written out,
it isn't now, so update. */
if (constructor_unfilled_fields == constructor_fields)
{
constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
/* Skip any nameless bit fields. */
while (constructor_unfilled_fields != 0
&& DECL_C_BIT_FIELD (constructor_unfilled_fields)
&& DECL_NAME (constructor_unfilled_fields) == 0)
constructor_unfilled_fields =
TREE_CHAIN (constructor_unfilled_fields);
}
}
constructor_fields = TREE_CHAIN (constructor_fields);

View File

@ -1,3 +1,7 @@
2003-01-09 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.c-torture/execute/20030109-1.c: New test.
2003-01-08 Larin Hennessey <larin@science.oregonstate.edu>
* g++.old-deja/g++.mike/dyncast1.C: Remove reference to AMD A29K

View File

@ -0,0 +1,20 @@
/* PR c/8032 */
/* Verify that an empty initializer inside a partial
parent initializer doesn't confuse GCC. */
struct X
{
int a;
int b;
int z[];
};
struct X x = { .b = 40, .z = {} };
int main ()
{
if (x.b != 40)
abort ();
return 0;
}