1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep " } */
       3  /* { dg-additional-options "-fno-pic" { target { ! *-*-darwin* } } } */
       4  
       5  void func0 (void);
       6  void func1 (void);
       7  void func2 (void);
       8  void func3 (void);
       9  void func4 (void);
      10  void func4 (void);
      11  void func5 (void);
      12  
      13  __attribute__ ((indirect_branch("thunk-extern")))
      14  void
      15  bar (int i)
      16  {
      17    switch (i)
      18      {
      19      default:
      20        func0 ();
      21        break;
      22      case 1:
      23        func1 ();
      24        break;
      25      case 2:
      26        func2 ();
      27        break;
      28      case 3:
      29        func3 ();
      30        break;
      31      case 4:
      32        func4 ();
      33        break;
      34      case 5:
      35        func5 ();
      36        break;
      37      }
      38  }
      39  
      40  /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
      41  /* { dg-final { scan-assembler {leaq[ \t]*L[0-9]+\(%rip\)} { target { lp64 && *-*-darwin* } } } } */
      42  /* { dg-final { scan-assembler {addl[ \t]*L[0-9]+-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */
      43  /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk(_nt|)_(r|e)ax" } } */
      44  /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
      45  /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */
      46  /* { dg-final { scan-assembler-not {call[ \t]*\.?LIND} } } */