modernc.org/cc@v1.0.1/testdata/gcc-6.3.0/gcc/testsuite/gcc.c-torture/execute/980526-1.c (about)

     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   
     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   
    23  static void do1(void) {
    24    if (doit(0) != expect_do1)
    25      abort ();
    26  }
    27   
    28  static void do2(void){
    29    if (doit(1) != expect_do2)
    30      abort ();
    31  }
    32   
    33  int main(void){
    34  #ifndef NO_LABEL_VALUES
    35    do1();
    36    do2();
    37  #endif
    38    exit(0);
    39  }