https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118997
Bug ID: 118997 Summary: Wrong struct padding or documentation is misleading Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: vincenzo.romano at gmail dot com Target Milestone: --- Created attachment 60572 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60572&action=edit ZIP archive containing: output from gcc -v, simple test code, *.i file Consider this "non decorated" struct definition and variable declaration: typedef struct _test { void* one; long double two[0]; } _test; test _test; sizeof(test) should evaluate as the same as sizeof(test.one), which is 8 on my architecture. Instead, it is reported as that of sizeof(long double), which is 16 on m my architecture, while sizeof(test.two) yields 0. The first example of the documentation at "6.18 Arrays of Length Zero" [1] would actually allocate more memory than needed in case the argument "this_length" evaluates to zero. Either sizeof(test) is wrong or the referred documentation should mention that: "The struct and size will be computed as if the zero-sized array was union-ed to the preceding list of fields and being actually 1-sized". Maybe other interpretations can better fit this behavior. I am not sure which one would be better, while personally leaning towards a solution where the results of the function sizeof() can be predicted by reading the code and not the documentation. [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html