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 <[email protected]> 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
> [email protected]