gcc/ChangeLog:
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / safe-indirect-jump-2.c
blobd3d040fbbf09bc5f7ffe3dcfb9d75f07b86613d2
1 /* { dg-do compile } */
2 /* { dg-options "-mno-speculate-indirect-jumps" } */
3 /* { dg-warning "'-mno-speculate-indirect-jumps' is deprecated" "" { target *-*-* } 0 } */
5 /* Test for deliberate misprediction of computed goto. */
7 int bar (int);
8 int baz (int);
9 int spaz (int);
11 int foo (int x)
13 static void *labptr[] = { &&lab0, &&lab1, &&lab2 };
15 if (x < 0 || x > 2)
16 return -1;
18 goto *labptr[x];
20 lab0:
21 return bar (x);
23 lab1:
24 return baz (x) + 1;
26 lab2:
27 return spaz (x) / 2;
30 /* The following assumes CR7 as the first chosen volatile. */
32 /* { dg-final { scan-assembler "crset 30" } } */
33 /* { dg-final { scan-assembler "beqctr- 7" } } */
34 /* { dg-final { scan-assembler {b \$} } } */