> On Feb 1, 2023, at 11:55 AM, Siddhesh Poyarekar <siddh...@gotplt.org> wrote:
>
> On 2023-01-31 09:11, Qing Zhao wrote:
>> Update documentation to clarify a GCC extension on structure with
>> flexible array member being nested in another structure.
>> gcc/ChangeLog:
>> * doc/extend.texi: Document GCC extension on a structure containing
>> a flexible array member to be a member of another structure.
>
> Should this resolve pr#77650 since the proposed action there appears to be to
> document these semantics?
My understanding of pr77650 is specifically for documentation on the following
case:
The structure with a flexible array member is the middle field of another
structure.
Which I added in the documentation as the 2nd situation.
However, I am still not very comfortable on my current clarification on this
situation: how should we document on
the expected gcc behavior to handle such situation?
Qing
>
> Thanks,
> Sid
>
>> ---
>> gcc/doc/extend.texi | 35 ++++++++++++++++++++++++++++++++++-
>> 1 file changed, 34 insertions(+), 1 deletion(-)
>> diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
>> index 4a89a3eae7c..54e4baf49a9 100644
>> --- a/gcc/doc/extend.texi
>> +++ b/gcc/doc/extend.texi
>> @@ -1748,7 +1748,40 @@ Flexible array members may only appear as the last
>> member of a
>> A structure containing a flexible array member, or a union containing
>> such a structure (possibly recursively), may not be a member of a
>> structure or an element of an array. (However, these uses are
>> -permitted by GCC as extensions.)
>> +permitted by GCC as extensions, see details below.)
>> +@end itemize
>> +
>> +GCC extension accepts a structure containing a flexible array member, or
>> +a union containing such a structure (possibly recursively) to be a member
>> +of a structure.
>> +
>> +There are two situations:
>> +
>> +@itemize @bullet
>> +@item
>> +The structure with a flexible array member is the last field of another
>> +structure, for example:
>> +
>> +@smallexample
>> +struct flex @{ int length; char data[]; @};
>> +
>> +struct out_flex @{ int m; struct flex flex_data; @};
>> +@end smallexample
>> +
>> +In the above, @code{flex_data.data[]} is considered as a flexible array too.
>> +
>> +@item
>> +The structure with a flexible array member is the middle field of another
>> +structure, for example:
>> +
>> +@smallexample
>> +struct flex @{ int length; char data[]; @};
>> +
>> +struct mid_flex @{ int m; struct flex flex_data; int n; @};
>> +@end smallexample
>> +
>> +In the above, @code{flex_data.data[]} is allowed to be extended flexibly to
>> +the padding. E.g, up to 4 elements.
>> @end itemize
>> Non-empty initialization of zero-length