On 01/10/2018 06:30 PM, H.J. Lu wrote:
On Sat, Jan 6, 2018 at 2:04 PM, Martin Sebor <mse...@gmail.com> wrote:
Bug 83671 - Fix for false positive reported by -Wstringop-overflow
does not work at -O1, points out that the string length range
optimization implemented as a solution for bug 83373 doesn't help
at -O1. The root cause is that the fix was added to the strlen
pass that doesn't run at -O1.
The string length range computation doesn't depend on the strlen
pass, and so the range can be set earlier, in gimple-fold, and
its results made available even at -O1. The attached patch
changes the gimple_fold_builtin_strlen() function to do that.
While testing the change I came across a number of other simple
strlen cases that currently aren't handled, some at -O1, others
at all. I added code to handle some of the simplest of them
and opened bugs to remind us/myself to get back to the rest in
the future (pr83693 and pr83702). The significant enhancement
is handling arrays of arrays with non-constant indices and
pointers to such things, such as in:
char a[2][7];
void f (int i)
{
if (strlen (a[i]) > 6) // eliminated with the patch
abort ();
}
Attached is a near-minimal patch to handle PR 83671.
This may have caused:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83781.
Yes, it did. I committed r256477 to fix the problem. With
it, plain x86_64 bootstrap as well as with --with-arch=corei7
--with-cpu=corei7 succeed.
Sorry for the breakage.
Martin