1  /* PR middle-end/80421 */
       2  
       3  __attribute__ ((noinline, noclone)) void
       4  baz (const char *t, ...)
       5  {
       6    asm volatile (""::"r" (t):"memory");
       7    if (*t == 'T')
       8      __builtin_abort ();
       9  }
      10  
      11  unsigned int
      12  foo (char x)
      13  {
      14    baz ("x %c\n", x);
      15    switch (x)
      16      {
      17      default:
      18        baz ("case default\n");
      19        if (x == 'D' || x == 'I')
      20  	baz ("This should never be reached.\n");
      21        return 0;
      22      case 'D':
      23        baz ("case 'D'\n");
      24        return 0;
      25      case 'I':
      26        baz ("case 'I'\n");
      27        return 0;
      28      }
      29  }
      30  
      31  void
      32  bar (void)
      33  {
      34    int a = 2;
      35    int b = 5;
      36    char c[] = {
      37      2, 4, 1, 2, 5, 5, 2, 4, 4, 0, 0, 0, 0, 0, 0, 3, 4, 4, 2, 4,
      38      1, 2, 5, 5, 2, 4, 1, 0, 0, 0, 2, 4, 4, 3, 4, 3, 3, 5, 1, 3,
      39      5, 5, 2, 4, 4, 2, 4, 1, 3, 5, 3, 3, 5, 1, 3, 5, 1, 2, 4, 4,
      40      2, 4, 2, 3, 5, 1, 3, 5, 1, 3, 5, 5, 2, 4, 1, 2, 4, 2, 3, 5,
      41      3, 3, 5, 1, 3, 5, 5, 2, 4, 1, 2, 4, 1, 3, 5, 3, 3, 5, 1, 3,
      42      5, 5, 2, 4, 4, 2, 4, 1, 3, 5, 3, 3, 5, 1, 3, 5, 1, 2, 4, 1,
      43      2, 4, 2, 3, 5, 1, 3, 5, 1, 3, 5, 1, 2, 4, 1, 2, 4, 1, 3, 5,
      44      1, 3, 5, 1, 3, 5, 1, 2, 4, 4, 2, 4, 1, 3, 5, 1, 3, 5, 1, 3,
      45      5, 5, 2, 4, 4, 2, 4, 2, 3, 5, 3, 3, 5, 1, 3, 5, 5, 2, 4, 4,
      46      2, 4, 1, 3, 5, 3, 3, 5, 1, 3, 5, 1, 2, 5, 5, 2, 4, 2, 3, 5,
      47      1, 3, 4, 1, 3, 5, 1, 2, 5, 5, 2, 4, 1, 2, 5, 1, 3, 5, 3, 3,
      48      5, 1, 2, 5, 5, 2, 4, 2, 2, 5, 1, 3, 5, 3, 3, 5, 1, 2, 5, 1,
      49      2, 4, 1, 2, 5, 2, 3, 5, 1, 3, 5, 1, 2, 5, 1, 2, 4, 2, 2, 5,
      50      1, 3, 5, 1, 3, 5, 1, 2, 5, 5, 2, 4, 2, 2, 5, 2, 3, 5, 3, 3,
      51      5, 1, 2, 5, 5, 2, 4, 2, 2, 5, 2, 3, 5, 3, 3, 5, 1, 2, 5, 5,
      52      2, 4, 2, 2, 5, 1, 3, 5, 3, 3, 5, 1, 2, 5, 5, 2, 4, 2, 2, 5,
      53      1, 3, 5, 3, 3, 5, 1, 2, 5, 1, 2, 4, 1, 2, 5, 2, 3, 5, 1, 3,
      54      5, 1, 2, 5, 5, 2, 4, 2, 2, 5, 2, 3, 5, 3, 3, 5, 1, 2, 5, 5,
      55      2, 4, 1, 2, 5, 1, 3, 5, 3, 3, 5, 1, 2, 5, 5, 2, 4, 2, 2, 5,
      56      1, 3, 5, 3, 3, 5, 1, 2, 5, 5, 2, 4, 2, 2, 5, 1, 3, 5, 3, 3,
      57      5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
      58    };
      59    char *f = c + 390;
      60    int i, j, e, g, h;
      61    char k, l;
      62    i = 26;
      63    j = 25;
      64    k = l = 'M';
      65    h = 2;
      66    while (i > 0)
      67      {
      68        int x = i - a;
      69        x = x > 0 ? x : 0;
      70        x = j - x;
      71        g = x * 3 + h;
      72        switch (f[g])
      73  	{
      74  	case 1:
      75  	  --i;
      76  	  --j;
      77  	  h = 2;
      78  	  f -= b * 3;
      79  	  k = 'M';
      80  	  break;
      81  	case 2:
      82  	  --i;
      83  	  h = 0;
      84  	  f -= b * 3;
      85  	  k = 'I';
      86  	  break;
      87  	case 3:
      88  	  --i;
      89  	  h = 2;
      90  	  f -= b * 3;
      91  	  k = 'I';
      92  	  break;
      93  	case 4:
      94  	  --j;
      95  	  h = 1;
      96  	  k = 'D';
      97  	  break;
      98  	case 5:
      99  	  --j;
     100  	  h = 2;
     101  	  k = 'D';
     102  	  break;
     103  	}
     104        if (k == l)
     105  	++e;
     106        else
     107  	{
     108  	  foo (l);
     109  	  l = k;
     110  	}
     111      }
     112  }
     113  
     114  int
     115  main ()
     116  {
     117    char l = 'D';
     118    foo (l);
     119    bar ();
     120    return 0;
     121  }