{ This test explicity generates calculation with results outside tsub range, so range checks generate errors. Thus, we need an explicit $R- } {$R-} {$mode objfpc} type tsub = 1..19; function test(s: tsub): longint; begin { use different number of instructions for several cases so wrongly calculated jump table offsets are more likely to wreak havoc } case s of 1: result:=1; 2: begin writeln('two'); result:=2; end; 3: begin s:=4; result:=3; end; 4: begin result:=4; s:=s*s+result; end; 5: result:=5; 6: result:=6; 7: begin s:=s+s*s div s; result:=7; end; 8: result:=8; 9: result:=9; 10: result:=10; 11: result:=11; 12: result:=12; 13: result:=13; 14: result:=14; 15: result:=15; 16: result:=16; 17: result:=17; 18: result:=18; 19: result:=19; end; end; var i: tsub; begin for i:=low(tsub) to high(tsub) do if test(i)<>i then halt(i); end.