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