On Fri, 11 Mar 2016, Jakub Jelinek wrote:

> Hi!
> 
> As the testcase shows, we can get a FUNCTION_DECL or LABEL_DECL (on
> questionable code).  The patch also removes the default gcc_unreachable (),
> as this is just a debugging aid function, nothing bad happens if we ignore
> some other tree code.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.

Richard.

> 2016-03-11  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/70169
>       * tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and
>       LABEL_DECL like VAR_DECL.  Emit nothing instead of gcc_unreachable
>       for unknown codes.
> 
>       * gcc.dg/pr70169.c: New test.
> 
> --- gcc/tree-ssa-loop.c.jj    2016-02-23 20:43:49.000000000 +0100
> +++ gcc/tree-ssa-loop.c       2016-03-11 10:00:18.792578125 +0100
> @@ -769,6 +769,8 @@ gen_lsm_tmp_name (tree ref)
>      case SSA_NAME:
>      case VAR_DECL:
>      case PARM_DECL:
> +    case FUNCTION_DECL:
> +    case LABEL_DECL:
>        name = get_name (ref);
>        if (!name)
>       name = "D";
> @@ -784,11 +786,9 @@ gen_lsm_tmp_name (tree ref)
>        break;
>  
>      case INTEGER_CST:
> +    default:
>        /* Nothing.  */
>        break;
> -
> -    default:
> -      gcc_unreachable ();
>      }
>  }
>  
> --- gcc/testsuite/gcc.dg/pr70169.c.jj 2016-03-11 09:51:59.139304653 +0100
> +++ gcc/testsuite/gcc.dg/pr70169.c    2016-03-11 10:02:12.956050092 +0100
> @@ -0,0 +1,40 @@
> +/* PR tree-optimization/70169 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fno-strict-aliasing -fno-tree-dce" } */
> +
> +int printf (const char *, ...); 
> +
> +void
> +foo ()
> +{
> +  unsigned char *p = (unsigned char *) &printf;
> +  for (;;)
> +    (*p)++;
> +}
> +
> +void
> +bar (int x)
> +{
> +  unsigned char *p = (unsigned char *) &printf;
> +  int i;
> +  for (i = 0; i < x; i++)
> +    (*p)++;
> +}
> +
> +void
> +baz (int x, int y)
> +{
> +  unsigned char *p = (unsigned char *) &&lab;
> +  int i;
> +  if (y)
> +    {
> +      for (i = 0; i < x; i++)
> +     (*p)++;
> +    }
> +  else
> +    {
> +     lab:
> +      asm volatile ("");
> +      foo ();
> +    }
> +}
> 
>       Jakub
> 
> 

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

Reply via email to