Hi, Joseph, I modified the gcc/doc/extend.texi per your suggestion as following:
Let me know if you have further comment and suggestion on this patch. I will send out the V8 of the patch after some testing. Thanks. Qing. ============================================ diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 6425ba57e88..9aedaa802e0 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1754,7 +1754,7 @@ structure or an element of an array. (However, these uses are permitted by GCC as extensions, see details below.) @end itemize -GCC extension accepts a structure containing an ISO C99 @dfn{flexible array +The GCC extension accepts a structure containing an ISO C99 @dfn{flexible array member}, or a union containing such a structure (possibly recursively) to be a member of a structure. @@ -1776,10 +1776,9 @@ struct out_flex_union @{ int n; union union_flex flex_data; @}; In the above, both @code{out_flex_struct.flex_data.data[]} and @code{out_flex_union.flex_data.f.data[]} are considered as flexible arrays too. - @item A structure containing a C99 flexible array member, or a union containing -such a structure, is the middle field of another structure, for example: +such a structure, is not the last field of another structure, for example: @smallexample struct flex @{ int length; char data[]; @}; @@ -1787,12 +1786,12 @@ struct flex @{ int length; char data[]; @}; struct mid_flex @{ int m; struct flex flex_data; int n; @}; @end smallexample -In the above, @code{mid_flex.flex_data.data[]} has undefined behavior. -Compilers do not handle such case consistently, Any code relying on -such case should be modified to ensure that flexible array members -only end up at the ends of structures. +In the above, accessing a member of the array @code{mid_flex.flex_data.data[]} +might have undefined behavior. Compilers do not handle such a case +consistently. Any code relying on this case should be modified to ensure +that flexible array members only end up at the ends of structures. -Please use warning option @option{-Wflex-array-member-not-at-end} to +Please use the warning option @option{-Wflex-array-member-not-at-end} to identify all such cases in the source code and modify them. This warning will be on by default starting from GCC 15. @end itemize > On May 19, 2023, at 5:12 PM, Joseph Myers <jos...@codesourcery.com> wrote: > > On Fri, 19 May 2023, Qing Zhao via Gcc-patches wrote: > >> +GCC extension accepts a structure containing an ISO C99 @dfn{flexible array > > "The GCC extension" or "A GCC extension". > >> +@item >> +A structure containing a C99 flexible array member, or a union containing >> +such a structure, is the middle field of another structure, for example: > > There might be more than one middle field, and I think this case also > includes where it's the *first* field - any field other than the last. > >> +@smallexample >> +struct flex @{ int length; char data[]; @}; >> + >> +struct mid_flex @{ int m; struct flex flex_data; int n; @}; >> +@end smallexample >> + >> +In the above, @code{mid_flex.flex_data.data[]} has undefined behavior. > > And it's not literally mid_flex.flex_data.data[] that has undefined > behavior, but trying to access a member of that array. > >> +Compilers do not handle such case consistently, Any code relying on > > "such a case", and "," should be "." at the end of a sentence. > > -- > Joseph S. Myers > jos...@codesourcery.com