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()7void __attribute__((noinline)) bar () 8 { 9 } 10 foo(int x)11int 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()51int 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