[PATCH improve early strlen range folding (PR 83671)

Martin Sebor msebor@gmail.com
Sat Jan 6 22:04:00 GMT 2018


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.

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gcc-83671.diff
Type: text/x-patch
Size: 21751 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20180106/fdf27162/attachment.bin>


More information about the Gcc-patches mailing list