From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id 51E483858D1E for ; Thu, 22 Dec 2022 07:09:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 51E483858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id 067C18CD34; Thu, 22 Dec 2022 07:09:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1671692972; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=wvS5WbpRISZ2eE+yUcKKxCM8fPuSx8wik2nrHhA1K1Q=; b=VvIdv5yZ2F9FiVtbbxrx886cZ19QX2Lw/BJzna9h5JiwW6RBTHbXelBkeBFgHhYth6mSEM tTJtfX3TOAepOQ/B5Ei2G8VEGp8nuNfpJJOpXYWs5OM0Pm/adsoKURV1OWRLcDLpmvDiBk jbwffguHReex3qUYoNlAFDBFuT/P8Ik= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1671692972; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=wvS5WbpRISZ2eE+yUcKKxCM8fPuSx8wik2nrHhA1K1Q=; b=vI/l3NjL3C9xfk5eAPw6cOfndmVASjaMbN53bZgnz/kVqcRFSC01E4b8ICttk5x2b5S+8t kkrnler0fADeA1Bw== Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id DE0852C141; Thu, 22 Dec 2022 07:09:31 +0000 (UTC) Date: Thu, 22 Dec 2022 07:09:31 +0000 (UTC) From: Richard Biener To: Qing Zhao cc: gcc Patches Subject: Re: gcc-13/changes.html: Mention -fstrict-flex-arrays and its impact In-Reply-To: <7EE40B3B-7A01-48A1-B4BE-B0E3103C31A3@oracle.com> Message-ID: References: <7EE40B3B-7A01-48A1-B4BE-B0E3103C31A3@oracle.com> User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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 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 > >> 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.

> >>
  • Legacy debug info compression option -gz=zlib-gnu was removed > >> and the option is ignored right now.
  • > >>
  • New debug info compression option value -gz=zstd has been added.
  • > >> +
  • -Warray-bounds=2 will no longer issue warnings for out of bounds > >> + accesses to trailing struct members of one-element array type anymore. Please > >> + add -fstrict-flex-arrays=level to control how the compiler treat > >> + trailing arrays of structures as flexible array members.
  • > > > > "Instead it diagnoses accesses to trailing arrays according to > > -fstrict-flex-arrays." > > Okay. > > > >> > >> > >> > >> @@ -409,6 +413,17 @@ a work-in-progress.

    > >>

    Other significant improvements

    > >> > >> > >> +

    Treating trailing arrays as flexible array members

    > >> + > >> +
      > >> +
    • 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 > >> + -fstrict-flex-array=level to control how GCC treats the trailing > >> + array of a structure as a flexible array member at different levels. > > > > -fstrict-flex-arrays 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 SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; HRB 36809 (AG Nuernberg)