------- Comment #5 from rguenth at gcc dot gnu dot org 2008-11-15 21:40 -------
The argument boils down to 6.5.6/8 which restricts pointer arithmetic on
objects
and 6.7.2.1/2 which forbids structures with an incomplete array at the end to
be a member of a structure or element of an array. (This is all from the C99
standard - I do not have a C89 equivalent at hands)
GCC explicitly supports [0] for C89 as a way to get the C99 [] semantics. GCC
also tries to support arbitrary trailing arrays as of flexible length for
legacy purposes.
Certainly
struct {
struct { char x[]; };
char space[32];
};
is not allowed by C99. Replacing x[] with x[1] doesn't make it more valid.
If using a union doesn't work that's too bad - but the standard doesn't
explicitly allow that as an exception either (I now checked).
Note that for analyzing why we do not support this usage for legacy reasons
a (small) testcase to reproduce the failure is needed.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38136