On Tue, 7 Feb 2023, Qing Zhao via Gcc-patches wrote: > 1. Structure with flexible array member embedded into other structures > recursively, for example: > > struct A { > int n; > char data[]; > }; > > struct B { > int m; > struct A a; > }; > > struct C { > int q; > struct B b; > }; > > In the above, “struct C” will not be caught by this routine. Because struct B is diagnosed with -pedantic when it embed struct A, there is no need for -pedantic to diagnose struct C as well when it embeds struct B. > 2. Only C99 standard flexible array member be included, [0] and [1] are > not included, for example: Obviously we can't diagnose use of structures with [1] trailing members, because it's perfectly valid to embed those structures at any position inside other structures. And the same is the case for the [0] extension when it's used to mean "empty array" rather than "flexible array". Note that my comments above are about what diagnostics are appropriate under the standard. They are *not* about how code generation might allow for possible uses of certain source code constructs as if they were flexible array members. The two contexts may very well require different notions of what counts as a flexible array member. -- Joseph S. Myers joseph@codesourcery.com