[PATCH][RFC] Fix PR61473, inline small memcpy/memmove during tree opts

Richard Biener rguenther@suse.de
Mon Jul 14 11:12:00 GMT 2014


On Mon, 14 Jul 2014, Richard Biener wrote:

> On Fri, 11 Jul 2014, Jakub Jelinek wrote:
> 
> > On Fri, Jul 11, 2014 at 03:36:15PM +0200, Richard Biener wrote:
> > > *************** c_strlen (tree src, int only_value)
> > > *** 606,612 ****
> > >   
> > >     /* If the offset is known to be out of bounds, warn, and call strlen at
> > >        runtime.  */
> > > !   if (offset < 0 || offset > max)
> > >       {
> > >        /* Suppress multiple warnings for propagated constant strings.  */
> > >         if (! TREE_NO_WARNING (src))
> > > --- 610,617 ----
> > >   
> > >     /* If the offset is known to be out of bounds, warn, and call strlen at
> > >        runtime.  */
> > > !   if (only_value != 2
> > > !       && (offset < 0 || offset > max))
> > >       {
> > >        /* Suppress multiple warnings for propagated constant strings.  */
> > >         if (! TREE_NO_WARNING (src))
> > 
> > This looks wrong.  I'd say you only want to disable the warning for
> > only_value != 2, but still return NULL_TREE, otherwise the strlen call will
> > be out of bounds in the compiler.  So move only_value != 2 down to the
> > second if ?
> 
> Hmm, yeah.  Probably doesn't matter for this use but I'm testing the
> obvious fix.

Fixed like so, bootstrapped and tested on x86_64-unknown-linux-gnu.

Richard.

2014-07-14  Richard Biener  <rguenther@suse.de>

	* builtins.c (c_strlen): Make only_value == 2 really only
	affect warning generation.

Index: gcc/builtins.c
===================================================================
--- gcc/builtins.c	(revision 212513)
+++ gcc/builtins.c	(working copy)
@@ -610,11 +610,11 @@ c_strlen (tree src, int only_value)
 
   /* If the offset is known to be out of bounds, warn, and call strlen at
      runtime.  */
-  if (only_value != 2
-      && (offset < 0 || offset > max))
+  if (offset < 0 || offset > max)
     {
      /* Suppress multiple warnings for propagated constant strings.  */
-      if (! TREE_NO_WARNING (src))
+      if (only_value != 2
+	  && !TREE_NO_WARNING (src))
         {
           warning_at (loc, 0, "offset outside bounds of constant string");
           TREE_NO_WARNING (src) = 1;



More information about the Gcc-patches mailing list