> On Dec 1, 2022, at 11:42 AM, Kees Cook <keesc...@chromium.org> wrote:
> 
> On Wed, Nov 30, 2022 at 02:25:56PM +0000, Qing Zhao wrote:
>> '-Wstrict-flex-arrays'
>>     Warn about inproper usages of flexible array members according to
>>     the LEVEL of the 'strict_flex_array (LEVEL)' attribute attached to
>>     the trailing array field of a structure if it's available,
>>     otherwise according to the LEVEL of the option
>>     '-fstrict-flex-arrays=LEVEL'.
>> 
>>     This option is effective only when LEVEL is bigger than 0.
>>     Otherwise, it will be ignored with a warning.
>> 
>>     when LEVEL=1, warnings will be issued for a trailing array
>>     reference of a structure that have 2 or more elements if the
>>     trailing array is referenced as a flexible array member.
>> 
>>     when LEVEL=2, in addition to LEVEL=1, additional warnings will be
>>     issued for a trailing one-element array reference of a structure if
>>     the array is referenced as a flexible array member.
>> 
>>     when LEVEL=3, in addition to LEVEL=2, additional warnings will be
>>     issued for a trailing zero-length array reference of a structure if
>>     the array is referenced as a flexible array member.
>> 
>> At the same time, -Warray-bounds is updated:
> 
> Why is there both -Wstrict-flex-arrays and -Warray-bounds? I thought
> only the latter was going to exist?

Yes, It’s very easy to merge these two warnings into one: 

 -Warray-bounds, when combined with -fstrict-flex-arrays,  in addition to 
report all the out-of-bounds warnings, it also report 
the misuse of flexible array members according to the LEVEL of 
-fstrict-flex-arrays

The major question is, do we need one separate warning option to report the 
misuse of flexible array member only?
If so, then we need to add a new one. 

> 
> Are you trying to split code gen (-fstrict-flex-arrays) from warnings?

No.
After this patch, the -fstrict-flex-arrays will consistently control code gens 
and warnings in GCC except the default behavior without -fstrict-flex-arrays:

For code gen, the default behavior is treating all trailing arrays as FAM;
For warnings, the default behavior is treating [], [0],[1] trailing arrays as 
FAM;  [n] is not treated as FAM. 

Qing

> Is that needed?
> 
> -- 
> Kees Cook

Reply via email to