From 837b433abc0378039d91f0f03061d982b2cbcc9d Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 28 Apr 2021 18:32:48 +0000 Subject: [PATCH] * avoid overflow during register allocation git-svn-id: trunk@49285 - --- compiler/rgobj.pas | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/rgobj.pas b/compiler/rgobj.pas index b4ad622ae1..b0d344f5ae 100644 --- a/compiler/rgobj.pas +++ b/compiler/rgobj.pas @@ -2846,8 +2846,10 @@ unit rgobj; set weigth of the newly allocated register higher than the old one, so it will selected for spilling with a lower priority than the original one, this prevents an endless spilling loop if orgreg - is short living, see e.g. tw25164.pp } - add_reg_instruction(instr,loadreg,reginfo[orgreg].weight+1); + is short living, see e.g. tw25164.pp + + the min trick is needed to avoid an overflow in case weight=high(weight which might happen } + add_reg_instruction(instr,loadreg,min(high(reginfo[orgreg].weight)-1,reginfo[orgreg].weight)+1); ungetregisterinline(list,loadreg); end; end; @@ -2878,8 +2880,10 @@ unit rgobj; set weigth of the newly allocated register higher than the old one, so it will selected for spilling with a lower priority than the original one, this prevents an endless spilling loop if orgreg - is short living, see e.g. tw25164.pp } - add_reg_instruction(instr,storereg,reginfo[orgreg].weight+1); + is short living, see e.g. tw25164.pp + + the min trick is needed to avoid an overflow in case weight=high(weight which might happen } + add_reg_instruction(instr,storereg,min(high(reginfo[orgreg].weight)-1,reginfo[orgreg].weight)+1); end; end;