diff --git a/tests/ts/ts010033.pp b/tests/ts/ts010033.pp new file mode 100644 index 0000000000..4026cad370 --- /dev/null +++ b/tests/ts/ts010033.pp @@ -0,0 +1,76 @@ +{$OPT -Or} +{ test for full boolean eval and register usage with b+ } + +{$b+} + +var + funcscalled: byte; + ok: boolean; + +function function1: boolean; +begin + writeln('function1 called!'); + inc(funcscalled); + function1 := false; +end; + +function function2: boolean; +begin + writeln('function2 called!'); + inc(funcscalled); + function2 := false; +end; + +function function3: boolean; +begin + writeln('function3 called!'); + inc(funcscalled); + function3 := false; +end; + +function function4: boolean; +begin + writeln('function4 called!'); + inc(funcscalled); + function4 := false; +end; + +function test2: boolean; +var j, k, l, m: longint; +begin + test2 := true; + m := 0; +{ get as much regvars occupied as possible } + for j := 1 to 1000 do + for k := 1 to 100 do + for l := k downto 0 do + inc(m,j - k + l); + if (j = 5) and (k = 0) and (l = 100) and function1 then + begin + test2 := false; + writeln('bug'); + end; +end; + +begin + ok := true; + funcscalled := 0; + if function1 and function2 and function3 and function4 then + begin + writeln('bug!'); + end; + ok := funcscalled = 4; + if ok then + writeln('all functions called!') + else + writeln('not all functions called'); + ok := test2 and (funcscalled = 5); + if ok then + writeln('test2 passed') + else writeln('test2 not passed'); + if not ok then + begin + writeln('full boolean evaluation is not working!'); + halt(1); + end; +end.