From 58e9fc0368da36ccc856790d09fe18615735a950 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 17 Sep 2007 20:52:51 +0000 Subject: [PATCH] * only freetemp when there were registers saved git-svn-id: trunk@8531 - --- compiler/cgobj.pas | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas index 32525f7429..727ccd8ef9 100644 --- a/compiler/cgobj.pas +++ b/compiler/cgobj.pas @@ -3618,11 +3618,13 @@ implementation procedure tcg.g_restore_standard_registers(list:TAsmList); var - href : treference; - r : integer; - hreg : tregister; + href : treference; + r : integer; + hreg : tregister; + freetemp : boolean; begin { Copy registers from temp } + freetemp:=false; href:=current_procinfo.save_regs_ref; for r:=low(saved_standard_registers) to high(saved_standard_registers) do if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then @@ -3632,8 +3634,10 @@ implementation a_reg_alloc(list,hreg); a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg); inc(href.offset,sizeof(aint)); + freetemp:=true; end; - tg.UnGetTemp(list,current_procinfo.save_regs_ref); + if freetemp then + tg.UnGetTemp(list,current_procinfo.save_regs_ref); end;