1 /* { dg-do compile } */
2 /* { dg-options "-mno-speculate-indirect-jumps" } */
3 /* { dg-warning "'-mno-speculate-indirect-jumps' is deprecated" "" { target *-*-* } 0 } */
4 
5 /* Test for deliberate misprediction of computed goto.  */
6 
7 int bar (int);
8 int baz (int);
9 int spaz (int);
10 
foo(int x)11 int foo (int x)
12 {
13   static void *labptr[] = { &&lab0, &&lab1, &&lab2 };
14 
15   if (x < 0 || x > 2)
16     return -1;
17 
18   goto *labptr[x];
19 
20  lab0:
21   return bar (x);
22 
23  lab1:
24   return baz (x) + 1;
25 
26  lab2:
27   return spaz (x) / 2;
28 }
29 
30 /* { dg-final { scan-assembler "crset" } } */
31 /* { dg-final { scan-assembler "beqctr-" } } */
32 /* { dg-final { scan-assembler {b \$} } } */
33