On Wed, 21 Dec 2022, Qing Zhao wrote:

> Hi, Richard,
> 
> Thanks a lot for your comments.
> 
> > On Dec 21, 2022, at 2:12 AM, Richard Biener <rguent...@suse.de> wrote:
> > 
> > On Tue, 20 Dec 2022, Qing Zhao wrote:
> > 
> >> Hi,
> >> 
> >> This is the patch for mentioning -fstrict-flex-arrays and -Warray-bounds=2 
> >> changes in gcc-13/changes.html.
> >> 
> >> Let me know if you have any comment or suggestions.
> > 
> > Some copy editing below
> > 
> >> Thanks.
> >> 
> >> Qing.
> >> 
> >> =======================================
> >> From c022076169b4f1990b91f7daf4cc52c6c5535228 Mon Sep 17 00:00:00 2001
> >> From: Qing Zhao <qing.z...@oracle.com>
> >> Date: Tue, 20 Dec 2022 16:13:04 +0000
> >> Subject: [PATCH] gcc-13/changes: Mention -fstrict-flex-arrays and its 
> >> impact.
> >> 
> >> ---
> >> htdocs/gcc-13/changes.html | 15 +++++++++++++++
> >> 1 file changed, 15 insertions(+)
> >> 
> >> diff --git a/htdocs/gcc-13/changes.html b/htdocs/gcc-13/changes.html
> >> index 689178f9..47b3d40f 100644
> >> --- a/htdocs/gcc-13/changes.html
> >> +++ b/htdocs/gcc-13/changes.html
> >> @@ -39,6 +39,10 @@ a work-in-progress.</p>
> >>     <li>Legacy debug info compression option <code>-gz=zlib-gnu</code> was 
> >> removed
> >>       and the option is ignored right now.</li>
> >>     <li>New debug info compression option value <code>-gz=zstd</code> has 
> >> been added.</li>
> >> +    <li><code>-Warray-bounds=2</code> will no longer issue warnings for 
> >> out of bounds
> >> +      accesses to trailing struct members of one-element array type 
> >> anymore. Please
> >> +      add <code>-fstrict-flex-arrays=level</code> to control how the 
> >> compiler treat
> >> +      trailing arrays of structures as flexible array members. </li>
> > 
> > "Instead it diagnoses accesses to trailing arrays according to 
> > <code>-fstrict-flex-arrays</code>."
> 
> Okay.
> > 
> >> </ul>
> >> 
> >> 
> >> @@ -409,6 +413,17 @@ a work-in-progress.</p>
> >> <h2>Other significant improvements</h2>
> >> 
> >> <!-- <h3 id="uninitialized">Eliminating uninitialized variables</h3> -->
> >> +<h3 id="flexible array">Treating trailing arrays as flexible array 
> >> members</h3>
> >> +
> >> +<ul>
> >> + <li>GCC can now control when to treat the trailing array of a structure 
> >> as a 
> >> +     flexible array member for the purpose of accessing the elements of 
> >> such
> >> +     an array. By default, all trailing arrays of structures are treated 
> >> as
> > 
> > all trailing arrays in aggregates are treated
> Okay.
> > 
> >> +     flexible array members. Use the new command-line option
> >> +     <code>-fstrict-flex-array=level</code> to control how GCC treats the 
> >> trailing
> >> +     array of a structure as a flexible array member at different levels.
> > 
> > <code>-fstrict-flex-arrays</code> to control which trailing array
> > members are streated as flexible arrays.
> 
> Okay.
> 
> > 
> > I've also just now noticed that there's now a flag_strict_flex_arrays
> > check in the middle-end (in array bound diagnostics) but this option
> > isn't streamed or handled with LTO.  I think you want to replace that
> > with the appropriate DECL_NOT_FLEXARRAY check.
> 
> We need to know the level value of the strict_flex_arrays on the struct 
> field to issue proper warnings at different levels. DECL_NOT_FLEXARRAY 
> does not include such info. So, what should I do? Streaming the 
> flag_strict_flex_arrays with LTO?

But you do

  if (compref)
    {
      /* Try to determine special array member type for this 
COMPONENT_REF.  */
      sam = component_ref_sam_type (arg);
      /* Get the level of strict_flex_array for this array field.  */
      tree afield_decl = TREE_OPERAND (arg, 1);
      strict_flex_array_level = strict_flex_array_level_of (afield_decl);

I see that function doesn't look at DECL_NOT_FLEXARRAY but just
checks attributes (those are streamed in LTO).

OK, so I suppose the diagnostic itself would become just less precise
as in "trailing array %qT should not be used as a flexible array member"
without the "for level N and above" part of the diagnostic?

> >  We might also want
> > to see how inlining accesses from TUs with different -fstrict-flex-arrays
> > setting behaves when accessing the same structure (and whether we might
> > want to issue an ODR style diagnostic there).

This mixing also means streaming -fstrict-flex-arrays won't be of much
help in general.

> Yes, good point, I will check on this part.
> 
> BTW, a stupid question: what does ODR mean?

It's the One-Definition-Rule (of C++).  Basically we'd diagnose
same struct declarations with different -fstrict-flex-arrays setting.
I see we miss comparing DECL_NOT_FLEXARRAY for tree merging, I'm
testing a patch to fix that now.

Richard.

> thanks.
> 
> Qing
> > 
> > Thanks,
> > Richard.
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)

Reply via email to