http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56078



Jakub Jelinek <jakub at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |jsm28 at gcc dot gnu.org



--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-01-23 
14:23:30 UTC ---

Note, the code is not valid ISO C99, which forbids initialization of flexible

array members, but a GNU extension, apparently not sufficiently well defined.

E.g. in struct T t2 = { .a = 1, .b[0] = 'a' }; the .b[0] initializer is ignored

with a warning, only initializing it as whole, whether as in #c3 without that

extra ", .b[0] = '2'", or e.g. as in

struct T t3 = { .a = 1, .b = { [0] = 'a', [1] = 'b', [2] = 'c' } };

So the question is how exactly we want to handle the flexible array members vs.

designated initializers, if we take the size from the first initializer and all

further ones will be either ignored (if beyond that size) or overwrite the

initializer, or if we e.g. take the highest array index ever seen anywhere.

So, say, is

struct T t4 = { .a = 1, .b[5] = '5', .b[7] = '7' };

the same as

struct T t4 = { .a = 1, .b = { 0, 0, 0, 0, 0, '5' };

with warning or:

struct T t4 = { .a = 1, .b = { 0, 0, 0, 0, 0, '5', 0, '7' };

?

Reply via email to