On Wed, 23 May 2018, Martin Sebor wrote:

On 05/23/2018 08:57 AM, Jeff Law wrote:
On 05/10/2018 04:05 PM, Marc Glisse wrote:
On Thu, 10 May 2018, Martin Sebor wrote:

Can you please comment/respond to Jeff's question below and
confirm whether my understanding of the restriction (below)
is correct?

I don't remember it at all, I really should have expanded that comment...

The documentation of nonzero_chars seems to indicate that, unless
full_string_p, it is only a lower bound on the length of the string, so
not suitable for this kind of alias check. I don't know if we also have
easy access to some upper bound.

(I noticed while looking at this pass that it could probably use
POINTER_DIFF_EXPR more)
So ISTM that we'd need to guard the code that uses si->nonzero_chars in
maybe_invalidate to also check FULL_STRING_P since it appears we're
using si->nonzero_chars as a string length.

I'm not sure I see why.  Can you explain?

Here's my explanation of the current approach.  si->nonzero_chars
is the lower bound on si's length.  maybe_invalidate() invalidates
the string length which is only necessary when something overwrites
one of the first si->nonzero_chars of the array.  It doesn't matter
whether si is nul-terminated at that point.

When you say "invalidates the string length", does that mean it only invalidates nonzero_chars (the lower bound), or does that also determine if you can CSE a call to strlen before and after this instruction? Your argument only applies in the first case.

--
Marc Glisse

Reply via email to