public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Martin Sebor <msebor@gmail.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: PING 2 [PATCH] correct handling of variable offset minus constant in -Warray-bounds (PR 100137)
Date: Wed, 7 Jul 2021 14:38:11 -0600	[thread overview]
Message-ID: <91a3a6e6-7297-d7e2-5df2-e25fc5d18fac@gmail.com> (raw)
In-Reply-To: <CAFiYyc2RjYgoA6GMmVkXpuqVXw2N0=VxcoVbZMKgvZFdQobwhw@mail.gmail.com>

On 7/7/21 1:38 AM, Richard Biener wrote:
> On Tue, Jul 6, 2021 at 5:47 PM Martin Sebor via Gcc-patches
> <gcc-patches@gcc.gnu.org> wrote:
>>
>> Ping: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573349.html
> 
> +  if (TREE_CODE (axstype) != UNION_TYPE)
> 
> what about QUAL_UNION_TYPE?  (why constrain union type accesses
> here - note you don't seem to constrain accesses of union members here)

I didn't know a QUAL_UNION_TYPE was a thing.  Removing the test
doesn't seem to cause any regressions so let me do that in a followup.

> 
> +    if (tree access_size = TYPE_SIZE_UNIT (axstype))
> 
> +  /* The byte size of the array has already been determined above
> +     based on a pointer ARG.  Set ELTSIZE to the size of the type
> +     it points to and REFTYPE to the array with the size, rounded
> +     down as necessary.  */
> +  if (POINTER_TYPE_P (reftype))
> +    reftype = TREE_TYPE (reftype);
> +  if (TREE_CODE (reftype) == ARRAY_TYPE)
> +    reftype = TREE_TYPE (reftype);
> +  if (tree refsize = TYPE_SIZE_UNIT (reftype))
> +    if (TREE_CODE (refsize) == INTEGER_CST)
> +      eltsize = wi::to_offset (refsize);
> 
> probably pre-existing but the pointer indirection is definitely confusing
> me again and again given the variable is named 'reftype' - obviously
> an access to a pointer does not have any element size.  Possibly the
> paths arriving here ensure somehow that the only case is when
> reftype is not the access type but a pointer to the accessed memory.
> "jump-threading" the source might help me avoiding to trip over this
> again and again ...

I agree (it is confusing).  There's more to simplify here.  It's on
my to do list so let me see about this piece of code then.

> 
> The patch removes a lot of odd code, I like that.  You know this code best
> and it's hard to spot errors.
> 
> So OK, you'll deal with the fallout.

I certainly will.  Pushed in r12-2132.

Thanks
Martin

> 
> Thanks,
> Richard.
> 
>> On 6/28/21 1:33 PM, Martin Sebor wrote:
>>> Ping: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573349.html
>>>
>>> On 6/21/21 4:25 PM, Martin Sebor wrote:
>>>> -Warray-bounds relies on similar logic as -Wstringop-overflow et al.,
>>>> but using its own algorithm, including its own bugs such as PR 100137.
>>>> The attached patch takes the first step toward unifying the logic
>>>> between the warnings.  It changes a subset of -Warray-bounds to call
>>>> compute_objsize() to detect out-of-bounds indices.  Besides fixing
>>>> the bug this also nicely simplifies the code and improves
>>>> the consistency between the informational messages printed by both
>>>> classes of warnings.
>>>>
>>>> The changes to the test suite are extensive mainly because of
>>>> the different format of the diagnostics resulting from slightly
>>>> tighter bounds of offsets computed by the new algorithm, and in
>>>> smaller part because the change lets -Warray-bounds diagnose some
>>>> problems it previously missed due to the limitations of its own
>>>> solution.
>>>>
>>>> The false positive reported in PR 100137 is a 10/11/12 regression
>>>> but this change is too intrusive to backport.  I have a smaller
>>>> and more targeted patch I plan to backport in its stead.
>>>>
>>>> Tested on x86_64-linux.
>>>>
>>>> Martin
>>>
>>


  reply	other threads:[~2021-07-07 20:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-21 22:25 Martin Sebor
2021-06-28 19:33 ` [PING][PATCH] " Martin Sebor
2021-07-06 15:46   ` PING 2 [PATCH] " Martin Sebor
2021-07-07  7:38     ` Richard Biener
2021-07-07 20:38       ` Martin Sebor [this message]
2021-07-08  1:48         ` Marek Polacek
2021-07-08  3:12           ` Martin Sebor
2021-07-08  8:20             ` Richard Biener
2021-07-08 10:41           ` Andreas Schwab
2021-07-08 13:48             ` Christophe Lyon
2021-07-08 18:10             ` Martin Sebor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=91a3a6e6-7297-d7e2-5df2-e25fc5d18fac@gmail.com \
    --to=msebor@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).