tb0328.pp 1.4 KB

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