1 /* PR middle-end/80421 */
2 
3 __attribute__ ((noinline, noclone)) void
baz(const char * t,...)4 baz (const char *t, ...)
5 {
6   asm volatile (""::"r" (t):"memory");
7   if (*t == 'T')
8     __builtin_abort ();
9 }
10 
11 unsigned int
foo(char x)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
bar(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
main()115 main ()
116 {
117   char l = 'D';
118   foo (l);
119   bar ();
120   return 0;
121 }
122