mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-30 15:40:16 +02:00
* fixed adjustments of lower/upper bounds in range test optimization in case
of strictly smaller/greater comparisons (mantis #34385) git-svn-id: trunk@40344 -
This commit is contained in:
parent
4dfb738130
commit
d1361ca6ed
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -16415,6 +16415,7 @@ tests/webtbs/tw3433.pp svneol=native#text/plain
|
|||||||
tests/webtbs/tw34332.pp svneol=native#text/pascal
|
tests/webtbs/tw34332.pp svneol=native#text/pascal
|
||||||
tests/webtbs/tw3435.pp svneol=native#text/plain
|
tests/webtbs/tw3435.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw34380.pp svneol=native#text/plain
|
tests/webtbs/tw34380.pp svneol=native#text/plain
|
||||||
|
tests/webtbs/tw34385.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw3441.pp svneol=native#text/plain
|
tests/webtbs/tw3441.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw3443.pp svneol=native#text/plain
|
tests/webtbs/tw3443.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw34438.pp svneol=native#text/pascal
|
tests/webtbs/tw34438.pp svneol=native#text/pascal
|
||||||
|
@ -377,11 +377,11 @@ implementation
|
|||||||
|
|
||||||
function taddnode.simplify(forinline : boolean) : tnode;
|
function taddnode.simplify(forinline : boolean) : tnode;
|
||||||
|
|
||||||
function is_range_test(nodel, noder: taddnode; var value: tnode; var cl,cr: Tconstexprint): boolean;
|
function is_range_test(nodel, noder: taddnode; out value: tnode; var cl,cr: Tconstexprint): boolean;
|
||||||
const
|
const
|
||||||
is_upper_test: array[ltn..gten] of boolean = (true,true,false,false);
|
is_upper_test: array[ltn..gten] of boolean = (true,true,false,false);
|
||||||
inclusive_adjust: array[boolean,ltn..gten] of integer = ((1,0,-1,0),
|
inclusive_adjust: array[boolean,ltn..gten] of integer = ((-1,0,1,0),
|
||||||
(-1,0,1,0));
|
(1,0,-1,0));
|
||||||
var
|
var
|
||||||
swapl, swapr: Boolean;
|
swapl, swapr: Boolean;
|
||||||
valuer: tnode;
|
valuer: tnode;
|
||||||
@ -1056,7 +1056,7 @@ implementation
|
|||||||
if is_boolean(left.resultdef) and is_boolean(right.resultdef) then
|
if is_boolean(left.resultdef) and is_boolean(right.resultdef) then
|
||||||
begin
|
begin
|
||||||
{ transform unsigned comparisons of (v>=x) and (v<=y)
|
{ transform unsigned comparisons of (v>=x) and (v<=y)
|
||||||
into (v-x)<(y-x)
|
into (v-x)<=(y-x)
|
||||||
}
|
}
|
||||||
if (nodetype=andn) and
|
if (nodetype=andn) and
|
||||||
(left.nodetype in [ltn,lten,gtn,gten]) and
|
(left.nodetype in [ltn,lten,gtn,gten]) and
|
||||||
|
23
tests/webtbs/tw34385.pp
Normal file
23
tests/webtbs/tw34385.pp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
program rangeTest;
|
||||||
|
const
|
||||||
|
w : dword = 123;
|
||||||
|
n : dword = 48;
|
||||||
|
begin
|
||||||
|
if (w<=1) and (w>=10) then
|
||||||
|
begin
|
||||||
|
writeln('error 1-10');
|
||||||
|
halt(1);
|
||||||
|
end;
|
||||||
|
if (w>=1) and (w<=1000) then
|
||||||
|
writeln('ok')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
writeln('error 1-1000');
|
||||||
|
halt(2);
|
||||||
|
end;
|
||||||
|
if (n>44)and(n<48) then
|
||||||
|
begin
|
||||||
|
writeln('error 48');
|
||||||
|
halt(3);
|
||||||
|
end;
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user