1/* { dg-skip-if "requires indirect jumps" { ! indirect_jumps } { "-O0" } { "" } } */ 2/* { dg-skip-if "requires label values" { ! label_values } { "-O0" } { "" } } */ 3int expect_do1 = 1, expect_do2 = 2; 4 5static int doit(int x){ 6 __label__ lbl1; 7 __label__ lbl2; 8 static int jtab_init = 0; 9 static void *jtab[2]; 10 11 if(!jtab_init) { 12 jtab[0] = &&lbl1; 13 jtab[1] = &&lbl2; 14 jtab_init = 1; 15 } 16 goto *jtab[x]; 17lbl1: 18 return 1; 19lbl2: 20 return 2; 21} 22 23static void do1(void) { 24 if (doit(0) != expect_do1) 25 abort (); 26} 27 28static void do2(void){ 29 if (doit(1) != expect_do2) 30 abort (); 31} 32 33int main(void){ 34#ifndef NO_LABEL_VALUES 35 do1(); 36 do2(); 37#endif 38 exit(0); 39} 40