mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-09 21:48:35 +02:00
* avoid overflows of execution weight
git-svn-id: trunk@39623 -
This commit is contained in:
parent
75251913b1
commit
ea32ddd5b2
@ -42,9 +42,11 @@ interface
|
||||
{# Returns the minimal value between @var(a) and @var(b) }
|
||||
function min(a,b : longint) : longint;{$ifdef USEINLINE}inline;{$endif}
|
||||
function min(a,b : int64) : int64;{$ifdef USEINLINE}inline;{$endif}
|
||||
function min(a,b : qword) : qword;{$ifdef USEINLINE}inline;{$endif}
|
||||
{# Returns the maximum value between @var(a) and @var(b) }
|
||||
function max(a,b : longint) : longint;{$ifdef USEINLINE}inline;{$endif}
|
||||
function max(a,b : int64) : int64;{$ifdef USEINLINE}inline;{$endif}
|
||||
function max(a,b : qword) : qword;{$ifdef USEINLINE}inline;{$endif}
|
||||
|
||||
{ These functions are intenionally put here and not in the constexp unit.
|
||||
Since Tconstexprint may be automatically converted to int, which causes
|
||||
@ -227,6 +229,18 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function min(a,b : qword) : qword;
|
||||
{
|
||||
return the minimal of a and b
|
||||
}
|
||||
begin
|
||||
if a<=b then
|
||||
min:=a
|
||||
else
|
||||
min:=b;
|
||||
end;
|
||||
|
||||
|
||||
function max(a,b : longint) : longint;{$ifdef USEINLINE}inline;{$endif}
|
||||
{
|
||||
return the maximum of a and b
|
||||
@ -251,6 +265,18 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function max(a,b : qword) : qword;{$ifdef USEINLINE}inline;{$endif}
|
||||
{
|
||||
return the maximum of a and b
|
||||
}
|
||||
begin
|
||||
if a>=b then
|
||||
max:=a
|
||||
else
|
||||
max:=b;
|
||||
end;
|
||||
|
||||
|
||||
function max(const a,b : Tconstexprint) : Tconstexprint;{$ifdef USEINLINE}inline;{$endif}
|
||||
{
|
||||
return the maximum of a and b
|
||||
|
@ -58,9 +58,7 @@ procedure secondpass(p : tnode);
|
||||
implementation
|
||||
|
||||
uses
|
||||
{$ifdef EXTDEBUG}
|
||||
cutils,
|
||||
{$endif}
|
||||
globtype,verbose,
|
||||
globals,
|
||||
aasmdata,
|
||||
@ -194,7 +192,7 @@ implementation
|
||||
current_settings.localswitches:=p.localswitches;
|
||||
codegenerror:=false;
|
||||
if assigned(p.optinfo) then
|
||||
cg.executionweight:=p.optinfo^.executionweight
|
||||
cg.executionweight:=min(p.optinfo^.executionweight,QWord(high(cg.executionweight)))
|
||||
else
|
||||
cg.executionweight:=100;
|
||||
{$ifdef EXTDEBUG}
|
||||
|
@ -830,8 +830,12 @@ unit rgobj;
|
||||
if supreg>=first_imaginary then
|
||||
with reginfo[supreg] do
|
||||
begin
|
||||
// if aweight>weight then
|
||||
inc(weight,aweight);
|
||||
{ avoid overflow }
|
||||
if high(weight)-aweight<weight then
|
||||
weight:=high(weight)
|
||||
else
|
||||
inc(weight,aweight);
|
||||
|
||||
if (live_range_direction=rad_forward) then
|
||||
begin
|
||||
if not assigned(live_start) then
|
||||
|
Loading…
Reference in New Issue
Block a user