1 /* { dg-skip-if "requires indirect jumps" { ! indirect_jumps } { "-O0" } { "" } } */
2 /* { dg-skip-if "requires label values" { ! label_values } { "-O0" } { "" } } */
3 int expect_do1 = 1, expect_do2 = 2;
4 
doit(int x)5 static 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];
17 lbl1:
18   return 1;
19 lbl2:
20   return 2;
21 }
22 
do1(void)23 static void do1(void) {
24   if (doit(0) != expect_do1)
25     abort ();
26 }
27 
do2(void)28 static void do2(void){
29   if (doit(1) != expect_do2)
30     abort ();
31 }
32 
main(void)33 int main(void){
34 #ifndef NO_LABEL_VALUES
35   do1();
36   do2();
37 #endif
38   exit(0);
39 }
40