2014-12-12 Jakub Jelinek PR tree-optimization/64269 * tree-ssa-forwprop.c (simplify_builtin_call): Bail out if len2 or diff are too large. * gcc.c-torture/compile/pr64269.c: New test. --- gcc/tree-ssa-forwprop.c.jj 2014-12-01 14:57:30.000000000 +0100 +++ gcc/tree-ssa-forwprop.c 2014-12-12 09:46:05.790053928 +0100 @@ -1288,7 +1288,8 @@ simplify_builtin_call (gimple_stmt_itera use_operand_p use_p; if (!tree_fits_shwi_p (val2) - || !tree_fits_uhwi_p (len2)) + || !tree_fits_uhwi_p (len2) + || compare_tree_int (len2, 1024) == 1) break; if (is_gimple_call (stmt1)) { @@ -1354,7 +1355,8 @@ simplify_builtin_call (gimple_stmt_itera is not constant, or is bigger than memcpy length, bail out. */ if (diff == NULL || !tree_fits_uhwi_p (diff) - || tree_int_cst_lt (len1, diff)) + || tree_int_cst_lt (len1, diff) + || compare_tree_int (diff, 1024) == 1) break; /* Use maximum of difference plus memset length and memcpy length --- gcc/testsuite/gcc.c-torture/compile/pr64269.c.jj 2014-12-12 09:47:04.795015479 +0100 +++ gcc/testsuite/gcc.c-torture/compile/pr64269.c 2014-12-12 09:46:51.000000000 +0100 @@ -0,0 +1,9 @@ +/* PR tree-optimization/64269 */ + +void +foo (char *p) +{ + __SIZE_TYPE__ s = ~(__SIZE_TYPE__)0; + *p = 0; + __builtin_memset (p + 1, 0, s); +}