On Sat, 4 May 2024, Sebastian Huber wrote: > On 07.08.23 16:22, Qing Zhao via Gcc-patches wrote: > > Hi, > > > > This is the 2nd version of the patch. > > Comparing to the 1st version, the only change is to address Richard's > > comment on refering a warning option for diagnosing deprecated behavior. > > > > > > Okay for committing? > > > > thanks. > > > > Qing > > > > ====== > > > > *htdocs/gcc-14/changes.html (Caveats): Add notice about deprecating a C > > extension about flexible array members. > > --- > > htdocs/gcc-14/changes.html | 13 ++++++++++++- > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > diff --git a/htdocs/gcc-14/changes.html b/htdocs/gcc-14/changes.html > > index dad1ba53..eae25f1a 100644 > > --- a/htdocs/gcc-14/changes.html > > +++ b/htdocs/gcc-14/changes.html > > @@ -30,7 +30,18 @@ a work-in-progress.</p> > > <!-- .................................................................. > > --> > > <h2>Caveats</h2> > > <ul> > > - <li>...</li> > > + <li><strong>C:</strong> > > + Support for the GCC extension, a structure containing a C99 flexible > > array > > + member, or a union containing such a structure, is not the last field > > of > > + another structure, is deprecated. Refer to > > + <a href="https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html";> > > + Zero Length Arrays</a>. > > + Any code relying on this extension should be modifed to ensure that > > + C99 flexible array members only end up at the ends of structures. > > + Please use the warning option > > + <a > > href="https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wflex-array-member-not-at-end";><code>-Wflex-array-member-not-at-end</code></a> > > to > > + identify all such cases in the source code and modify them. > > + </li> > > </ul> > > I have a question with respect to the static initialization of flexible array > members. According to the documentation this is supported by GCC: > > https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html > > "GCC allows static initialization of flexible array members. This is > equivalent to defining a new structure containing the original structure > followed by an array of sufficient size to contain the data. E.g. in the > following, f1 is constructed as if it were declared like f2. > > struct f1 { > int x; int y[]; > } f1 = { 1, { 2, 3, 4 } }; > > struct f2 { > struct f1 f1; int data[3]; > } f2 = { { 1 }, { 2, 3, 4 } }; > " > > However, when I compile this code, I get a warning like this: > > flex-array.c:6:13: warning: structure containing a flexible array member is > not at the end of another structure [-Wflex-array-member-not-at-end] > 6 | struct f1 f1; int data[3]; > | > > In general, I agree that flexible array members should be at the end, however > the support for static initialization is quite important from my point of view > especially for applications for embedded systems. Here, dynamic allocations > may not be allowed or feasible.
I do not get a diagnostic for this on trunk? And I agree there shouldn't be any. Richard.