re PR tree-optimization/86572 (unsafe strlen folding of const arguments with non-const offset)
gcc: 2018-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de> PR tree-optimization/86572 * builtins.c (c_strlen): Handle negative offsets in a safe way. testsuite: 2018-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de> PR tree-optimization/86572 * gcc.dg/pr86572.c: New test. From-SVN: r265778
This commit is contained in:
parent
770fe3a364
commit
e8bf3d5ed9
|
@ -1,3 +1,8 @@
|
|||
2018-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
PR tree-optimization/86572
|
||||
* builtins.c (c_strlen): Handle negative offsets in a safe way.
|
||||
|
||||
2018-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
PR tree-optimization/87672
|
||||
|
|
|
@ -734,11 +734,14 @@ c_strlen (tree src, int only_value, c_strlen_data *data, unsigned eltsize)
|
|||
of the string subtract the offset from the length of the string,
|
||||
and return that. Otherwise the length is zero. Take care to
|
||||
use SAVE_EXPR in case the OFFSET has side-effects. */
|
||||
tree offsave = TREE_SIDE_EFFECTS (byteoff) ? save_expr (byteoff) : byteoff;
|
||||
offsave = fold_convert (ssizetype, offsave);
|
||||
tree offsave = TREE_SIDE_EFFECTS (byteoff) ? save_expr (byteoff)
|
||||
: byteoff;
|
||||
offsave = fold_convert_loc (loc, sizetype, offsave);
|
||||
tree condexp = fold_build2_loc (loc, LE_EXPR, boolean_type_node, offsave,
|
||||
build_int_cst (ssizetype, len));
|
||||
tree lenexp = size_diffop_loc (loc, ssize_int (len), offsave);
|
||||
size_int (len));
|
||||
tree lenexp = fold_build2_loc (loc, MINUS_EXPR, sizetype, size_int (len),
|
||||
offsave);
|
||||
lenexp = fold_convert_loc (loc, ssizetype, lenexp);
|
||||
return fold_build3_loc (loc, COND_EXPR, ssizetype, condexp, lenexp,
|
||||
build_zero_cst (ssizetype));
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
PR tree-optimization/86572
|
||||
* gcc.dg/pr86572.c: New test.
|
||||
|
||||
2018-11-04 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
PR tree-optimization/87672
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized" } */
|
||||
|
||||
const char buf[40] = "test";
|
||||
void test (int x)
|
||||
{
|
||||
if (__builtin_strlen (buf + x) > 4)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-not "abort" "optimized" } } */
|
Loading…
Reference in New Issue