Bad news!
sizeof(test1) is 12
offsetof(test1, more) is 8
offsetof(test1, dummy) is 10
I suppose this is the bit you are referring to:
the size
of the structure shall be equal to the offset of the last
element of an otherwise identical structure that replaces
the flexible array member with an array of unspecified
length.97)
That 'of unspecified length' might well account for this behaviour.
Cheers,
Steve
Joerg Schilling wrote:
Steve McIntyre <[EMAIL PROTECTED]> wrote:
And just in case you are wondering, I ran all those previous tests again
with -std=c99 with exactly the same results.
Thank you for the test!
So GCC is in clear violation with the C-99 standard.
Which part of the C-99 standard, exactly? Section 6.7.2.1, paragraph
#12,#14,#15 (see draft N869 from
http://cbfalconer.home.att.net/download/n869_txt.bz2) says the
following:
---------------------------------------
...
[#15] As a special case, the last element of a structure
with more than one named member may have an incomplete array
type. This is called a flexible array member, and the size
of the structure shall be equal to the offset of the last
element of an otherwise identical structure that replaces
the flexible array member with an array of unspecified
---------------------------------------
i.e. there may be no padding before the first member of a structure,
but there may be elsewhere within the structure including right at the
end. As a special case, if you specify the last member of your
structure as a "flexible array member" then there will be no padding
_at the end of the structure_. It does not affect padding _within_ the
structure.
I'm sorry, I don't see anything here to support your assertion that
gcc is behaving incorrectly.
Could you please run a final test?
I would like to see the offset of "dummy" in the structure (e.g. via
the offsetof() macro from <stddef.h>).
I am sure that GCC will _not_ introduce padding _before_ "dummy" and
the C-99 stanad requires that sizeof (struct test) == offsetof(struct test, dummy);
Jörg