1 /* { dg-do run } */
2 /* { dg-additional-options "-mno-speculate-indirect-jumps" } */
3 /* { dg-warning "'-mno-speculate-indirect-jumps' is deprecated" "" { target *-*-* } 0 } */
4 
5 /* Test for deliberate misprediction of jump tables.  */
6 
bar()7 void __attribute__((noinline)) bar ()
8 {
9 }
10 
foo(int x)11 int foo (int x)
12 {
13   int a;
14 
15   switch (x)
16     {
17     default:
18       a = -1;
19       break;
20     case 0:
21       a = x * x + 3;
22       break;
23     case 1:
24       a = x + 1;
25       break;
26     case 2:
27       a = x + x;
28       break;
29     case 3:
30       a = x << 3;
31       break;
32     case 4:
33       a = x >> 1;
34       break;
35     case 5:
36       a = x;
37       break;
38     case 6:
39       a = 0;
40       break;
41     case 7:
42       a = x * x + x;
43       break;
44     }
45 
46   bar();
47 
48   return a;
49 }
50 
main()51 int main ()
52 {
53   if (foo (0) != 3)
54     __builtin_abort ();
55 
56   if (foo (1) != 2)
57     __builtin_abort ();
58 
59   if (foo (2) != 4)
60     __builtin_abort ();
61 
62   if (foo (3) != 24)
63     __builtin_abort ();
64 
65   if (foo (4) != 2)
66     __builtin_abort ();
67 
68   if (foo (5) != 5)
69     __builtin_abort ();
70 
71   if (foo (6) != 0)
72     __builtin_abort ();
73 
74   if (foo (7) != 56)
75     __builtin_abort ();
76 
77   if (foo (8) != -1)
78     __builtin_abort ();
79 
80   return 0;
81 }
82