On Fri, 12 Dec 2014, Jakub Jelinek wrote:

> Hi!
> 
> This testcase ICEs because I wasn't checking for overflow in the size
> computation.  Only max (diff + len2, len1) <= 1024 cases are considered,
> so this patch gives up if either len2 or diff is > 1024.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for 
trunk/4.9/4.8?

Ok.

Thanks,
Richard.

> 2014-12-12  Jakub Jelinek  <ja...@redhat.com>
> 
>       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);
> +}
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Jennifer Guild,
Dilip Upmanyu, Graham Norton HRB 21284 (AG Nuernberg)

Reply via email to