modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/pr28489.c (about) 1 /* { dg-require-effective-target indirect_jumps } */ 2 /* { dg-require-effective-target label_values } */ 3 4 typedef int c_int; 5 union c_insn 6 { 7 void (*op) (); 8 c_int *mem; 9 c_int imm; 10 }; 11 static union c_insn c_stack[((0x100 + 4) * 4)]; 12 static struct c_ident *c_funcs; 13 static void (*c_op_bz) (); 14 static void c_direct (union c_insn *addr); 15 c_compile (int (*ext_getchar) (), void (*ext_rewind) (), 16 struct c_ident *externs) 17 { 18 c_direct (((void *) 0)); 19 } 20 static void 21 c_direct (union c_insn *addr) 22 { 23 union c_insn *pc = addr; 24 union c_insn *sp = c_stack; 25 c_int imm = 0; 26 static void *ops[] = { 27 &&op_index, &&op_assign, &&op_add_a, &&op_sub_a, &&op_mul_a, &&op_div_a, 28 &&op_mod_a, &&op_or_a, &&op_xor_a, &&op_and_a, &&op_shl_a, &&op_shr_a, 29 }; 30 { 31 c_op_bz = &&op_bz; 32 } 33 goto *(pc++)->op; 34 op_bz:if (imm) 35 { 36 } 37 op_push_imm_imm:(sp - 2)->imm = imm; 38 goto *(pc - 1)->op; 39 op_index:imm = *((sp - 3)->mem += imm); 40 op_assign:*(sp - 3)->mem = imm; 41 op_add_a:imm = *(sp - 3)->mem += imm; 42 op_sub_a:imm = *(sp - 3)->mem -= imm; 43 op_mul_a:imm = *(sp - 3)->mem *= imm; 44 op_div_a:imm = *(sp - 3)->mem /= imm; 45 op_mod_a:imm = *(sp - 3)->mem %= imm; 46 op_or_a:imm = *(sp - 3)->mem |= imm; 47 op_xor_a:imm = *(sp - 3)->mem ^= imm; 48 op_and_a:imm = *(sp - 3)->mem &= imm; 49 op_shl_a:imm = *(sp - 3)->mem <<= imm; 50 op_shr_a:imm = *(sp - 3)->mem >>= imm; 51 }