(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
bti-2.c
       1  /* { dg-do compile } */
       2  /* -Os to create jump table.  */
       3  /* { dg-options "-Os" } */
       4  /* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */
       5  /* { dg-options "-march=armv8.1-m.main -mthumb -mfloat-abi=softfp -mbranch-protection=bti --save-temps" } */
       6  
       7  extern int f1 (void);
       8  extern int f2 (void);
       9  extern int f3 (void);
      10  extern int f4 (void);
      11  extern int f5 (void);
      12  extern int f6 (void);
      13  extern int f7 (void);
      14  extern int f8 (void);
      15  extern int f9 (void);
      16  extern int f10 (void);
      17  
      18  int (*ptr) (void);
      19  
      20  int
      21  f_jump_table (int y, int n)
      22  {
      23    int i;
      24    for (i = 0; i < n ;i ++)
      25    {
      26      switch (y)
      27        {
      28        case 0 : ptr = f1; break;
      29        case 1 : ptr = f2; break;
      30        case 2 : ptr = f3; break;
      31        case 3 : ptr = f4; break;
      32        case 4 : ptr = f5; break;
      33        case 5 : ptr = f6; break;
      34        case 6 : ptr = f7; break;
      35        case 7 : ptr = f8; break;
      36        case 8 : ptr = f9; break;
      37        case 9 : ptr = f10; break;
      38        default: break;
      39        }
      40      y += ptr ();
      41    }
      42    return (y == 0)? y+1:4;
      43  }
      44  
      45  int
      46  f_label_address ()
      47  {
      48    static void * addr = &&lab1;
      49    goto *addr;
      50  lab1:
      51    addr = &&lab2;
      52    return 1;
      53  lab2:
      54    addr = &&lab1;
      55    return 2;
      56  }
      57  
      58  /* { dg-final { scan-assembler-times "bti" 15 } } */