/* { dg-require-effective-target indirect_jumps } */ /* { dg-require-effective-target label_values } */ static volatile int v = 0; static void benchmark(long runs) { void* labels[] = { &&l0, &&l1, &&l2 }; for(unsigned int mask = 0x1F; mask > 0; mask >>= 1) { unsigned lfsr = 0xACE1u; long n = 10000000; while(n > 0) { l2: v; l1: v; goto *labels[lfsr & mask]; l0: n--; } } } int f(void) { benchmark(10000000); }