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)6 void 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)21 int f(void) {
22   benchmark(10000000);
23 }
24