ts010033.pp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. {$OPT -Or}
  2. { test for full boolean eval and register usage with b+ }
  3. {$b+}
  4. var
  5. funcscalled: byte;
  6. ok: boolean;
  7. function function1: boolean;
  8. begin
  9. writeln('function1 called!');
  10. inc(funcscalled);
  11. function1 := false;
  12. end;
  13. function function2: boolean;
  14. begin
  15. writeln('function2 called!');
  16. inc(funcscalled);
  17. function2 := false;
  18. end;
  19. function function3: boolean;
  20. begin
  21. writeln('function3 called!');
  22. inc(funcscalled);
  23. function3 := false;
  24. end;
  25. function function4: boolean;
  26. begin
  27. writeln('function4 called!');
  28. inc(funcscalled);
  29. function4 := false;
  30. end;
  31. function test2: boolean;
  32. var j, k, l, m: longint;
  33. begin
  34. test2 := true;
  35. m := 0;
  36. { get as much regvars occupied as possible }
  37. for j := 1 to 1000 do
  38. for k := 1 to 1000 do
  39. for l := k downto 0 do
  40. inc(m,j - k + l);
  41. if (j = 5) and (k = 0) and (l = 100) and function1 then
  42. begin
  43. test2 := false;
  44. writeln('bug');
  45. end;
  46. end;
  47. begin
  48. ok := true;
  49. funcscalled := 0;
  50. if function1 and function2 and function3 and function4 then
  51. begin
  52. writeln('bug!');
  53. end;
  54. ok := funcscalled = 4;
  55. if ok then
  56. writeln('all functions called!')
  57. else
  58. writeln('not all functions called');
  59. ok := test2 and (funcscalled = 5);
  60. if ok then
  61. writeln('test2 passed')
  62. else writeln('test2 not passed');
  63. if not ok then
  64. begin
  65. writeln('full boolean evaluation is not working!');
  66. halt(1);
  67. end;
  68. end.