(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
safe-indirect-jump-6.c
       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  
       7  void __attribute__((noinline)) bar ()
       8  {
       9  }
      10  
      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  
      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  }