127_switch_forced_jump_table.toy (1328B)
1 // Forced .jump_table over a dense non-zero 16-case range with no default. 2 // Stresses the table-emission path: when no default is given, every 3 // in-range value must reach a case, and out-of-range values must fall 4 // through past the switch (the synthesized default). The non-zero vmin 5 // catches regressions where table addressing accidentally uses the original 6 // selector instead of selector - vmin. 7 8 fn pick(x: i64): i64 { 9 var r: i64 = -1; 10 switch @[.jump_table] x { 11 10 { r = 1000; } 12 11 { r = 1001; } 13 12 { r = 1002; } 14 13 { r = 1003; } 15 14 { r = 1004; } 16 15 { r = 1005; } 17 16 { r = 1006; } 18 17 { r = 1007; } 19 18 { r = 1008; } 20 19 { r = 1009; } 21 20 { r = 1010; } 22 21 { r = 1011; } 23 22 { r = 1012; } 24 23 { r = 1013; } 25 24 { r = 1014; } 26 25 { r = 1015; } 27 } 28 return r; 29 } 30 31 fn __user_main(): i64 { 32 var s: i64 = 0; 33 s = s + pick(10); // vmin in-range -> 1000 34 s = s + pick(25); // vmax in-range -> 1015 35 s = s + pick(17); // interior -> 1007 36 s = s + pick(9); // below vmin -> -1 (synthesized default) 37 s = s + pick(26); // above vmax -> -1 (synthesized default) 38 s = s + pick(100); // far out -> -1 (synthesized default) 39 return s; // 1000+1015+1007 - 3 = 3019 40 } 41 42 fn main(): i32 { return __user_main() as i32; }