[PATCH] Fix PR57980

Jakub Jelinek jakub@redhat.com
Tue Aug 13 11:53:00 GMT 2013


On Tue, Aug 13, 2013 at 01:51:27PM +0200, Marek Polacek wrote:
> Sure.  Ok to apply this one if it passes regtesting?

Yes, thanks.

> 2013-08-13  Marek Polacek  <polacek@redhat.com>
> 	    Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR tree-optimization/57980
> 	* tree-tailcall.c (process_assignment): Return false
> 	when not dealing with integers or floats.
> 
> 	* gcc.dg/pr57980.c: New test.
> 
> --- gcc/tree-tailcall.c.mp	2013-08-13 13:42:33.969568463 +0200
> +++ gcc/tree-tailcall.c	2013-08-13 13:44:57.288121663 +0200
> @@ -328,8 +328,10 @@ process_assignment (gimple stmt, gimple_
>      case NEGATE_EXPR:
>        if (FLOAT_TYPE_P (TREE_TYPE (op0)))
>          *m = build_real (TREE_TYPE (op0), dconstm1);
> -      else
> +      else if (INTEGRAL_TYPE_P (TREE_TYPE (op0)))
>          *m = build_int_cst (TREE_TYPE (op0), -1);
> +      else
> +        return false;
>  
>        *ass_var = dest;
>        return true;
> @@ -341,8 +343,10 @@ process_assignment (gimple stmt, gimple_
>          {
>            if (FLOAT_TYPE_P (TREE_TYPE (non_ass_var)))
>              *m = build_real (TREE_TYPE (non_ass_var), dconstm1);
> -          else
> +          else if (INTEGRAL_TYPE_P (TREE_TYPE (non_ass_var)))
>              *m = build_int_cst (TREE_TYPE (non_ass_var), -1);
> +	  else
> +	    return false;
>  
>            *a = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var);
>          }
> --- gcc/testsuite/gcc.dg/pr57980.c.mp	2013-08-13 13:41:55.216418468 +0200
> +++ gcc/testsuite/gcc.dg/pr57980.c	2013-08-13 13:41:33.116333703 +0200
> @@ -0,0 +1,19 @@
> +/* PR tree-optimization/57980 */
> +/* { dg-do compile } */
> +/* { dg-options "-O -foptimize-sibling-calls -w" } */
> +
> +typedef int V __attribute__ ((vector_size (2 * sizeof (int))));
> +extern V f (void);
> +
> +V
> +bar (void)
> +{
> +  return -f ();
> +}
> +
> +V
> +foo (void)
> +{
> +  V v = { };
> +  return v - f ();
> +}

	Jakub



More information about the Gcc-patches mailing list