/* { 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; | |
} |