1 /* PR tree-optimization/45830 */
2 /* { dg-do run } */
3 /* { dg-additional-options "-fno-tree-switch-conversion" { target avr-*-* } } */
4 
5 extern void abort (void);
6 
7 long long va, vb, vc, vd, ve;
8 
9 __attribute__((noinline)) int
foo(int x)10 foo (int x)
11 {
12   long long a, b, c, d, e;
13   switch (x)
14     {
15     case 0:
16     case 3:
17     case 1:
18     case 2:
19     case 4:
20       a = 1;
21       b = 129;
22       c = -12;
23       d = -4;
24       e = 128;
25       break;
26     case 23:
27     case 26:
28     case 19:
29     case 65:
30     case 5:
31       a = 2;
32       b = 138;
33       c = 115;
34       d = 128;
35       e = -16;
36       break;
37     case 21:
38     case 20:
39     case 22:
40     case 38:
41     case 27:
42     case 66:
43     case 45:
44     case 47:
45       a = 3;
46       b = 6;
47       c = 127;
48       d = 25;
49       e = 257;
50       break;
51     default:
52       a = 0;
53       b = 18;
54       c = 0;
55       d = 64;
56       e = 32768L;
57       break;
58     }
59   va = a;
60   vb = b;
61   vc = c;
62   vd = d;
63   ve = e;
64 }
65 
66 int
bar(int x)67 bar (int x)
68 {
69   if (x < 0)
70     return 3;
71   if (x < 5)
72     return 0;
73   if (x == 5 || x == 19 || x == 23 | x == 26 || x == 65)
74     return 1;
75   if ((x >= 20 && x <= 22) || x == 27 || x == 38
76       || x == 45 || x == 47 || x == 66)
77     return 2;
78   return 3;
79 }
80 
81 long long expected[] =
82 { 1, 129, -12, -4, 128, 2, 138, 115, 128, -16,
83   3, 6, 127, 25, 257, 0, 18, 0, 64, 32768L };
84 
85 int
main(void)86 main (void)
87 {
88   int i, v;
89   for (i = -4; i < 70; i++)
90     {
91       foo (i);
92       v = bar (i);
93       if (va != expected[5 * v] || vb != expected[5 * v + 1]
94 	  || vc != expected[5 * v + 2] || vd != expected[5 * v + 3]
95 	  || ve != expected[5 * v + 4])
96 	abort ();
97     }
98   return 0;
99 }
100