kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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; }