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