/* { dg-require-effective-target indirect_jumps } */ /* { dg-require-effective-target label_values } */ /* { dg-skip-if "label differences not supported" { avr-*-* } } */ /* PR rtl-optimization/70460 */ int c; __attribute__((noinline, noclone)) void foo (int x) { static int b[] = { &&lab1 - &&lab0, &&lab2 - &&lab0 }; void *a = &&lab0 + b[x]; goto *a; lab1: c += 2; lab2: c++; lab0: ; } int main () { foo (0); if (c != 3) __builtin_abort (); foo (1); if (c != 4) __builtin_abort (); return 0; }