1 /* { dg-require-effective-target indirect_jumps } */ 2 /* { dg-require-effective-target label_values } */ 3 4 static volatile int v = 0; 5 static benchmark(long runs)6void benchmark(long runs) { 7 void* labels[] = { 8 &&l0, &&l1, &&l2 9 }; 10 for(unsigned int mask = 0x1F; mask > 0; mask >>= 1) { 11 unsigned lfsr = 0xACE1u; 12 long n = 10000000; 13 while(n > 0) { 14 l2: v; 15 l1: v; 16 goto *labels[lfsr & mask]; 17 l0: n--; 18 } 19 } 20 } f(void)21int f(void) { 22 benchmark(10000000); 23 } 24