Commit bbb818c6 by Eric Botcazou Committed by Eric Botcazou

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
parent eb27f449
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.
......
......@@ -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);
......
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
......
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment