tbs0185.pp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. Program bug0185;
  2. {shows some bugs with rangechecks}
  3. { readln from input changed to from a file to render it non-interactive }
  4. var s: String;
  5. i: integer;
  6. code: word;
  7. e: 0..10;
  8. f : text;
  9. should_generate_error : boolean;
  10. oldexit : pointer;
  11. procedure myexit;
  12. begin
  13. exitproc:=oldexit;
  14. if should_generate_error and (exitcode=201) then
  15. begin
  16. Writeln('Program generates a range check error correctly');
  17. errorcode:=0;
  18. exitcode:=0;
  19. erroraddr:=nil;
  20. close(f);
  21. erase(f);
  22. end;
  23. end;
  24. Begin
  25. oldexit:=exitproc;
  26. exitproc:=@myexit;
  27. should_generate_error:=false;
  28. {$R-}
  29. s := '$fffff';
  30. val(s, i, code); {no range check error may occur here}
  31. Writeln('Integer($fffff) = ',i);
  32. assign(f,'tbs0185.tmp');
  33. rewrite(f);
  34. Writeln(f,'20');
  35. Writeln(f,'34');
  36. close(f);
  37. reset(f);
  38. Write('Enter the value 20 (should not give a rangecheck error): ');
  39. Readln(f,e);
  40. {$R+}
  41. s := '$ffff';
  42. val(s, i, code); {no range check error may occur here}
  43. Writeln('integer($ffff) = ', i,'(should not give range check error)');
  44. Writeln('Enter value from 0-10 to test Val rangecheck, another for subrange rangecheck: ');
  45. should_generate_error:=true;
  46. Readln(f,e);
  47. Writeln('If you entered a value different from 0-10, subrange range checks don''t work!');
  48. s := '65535';
  49. val(s, i, code); {must give a range check error}
  50. Writeln('Val range check failed!');
  51. close(f);
  52. erase(f);
  53. Halt(1);
  54. End.