Browse Source

* only freetemp when there were registers saved

git-svn-id: trunk@8531 -
peter 18 years ago
parent
commit
58e9fc0368
1 changed files with 8 additions and 4 deletions
  1. 8 4
      compiler/cgobj.pas

+ 8 - 4
compiler/cgobj.pas

@@ -3618,11 +3618,13 @@ implementation
 
 
     procedure tcg.g_restore_standard_registers(list:TAsmList);
     procedure tcg.g_restore_standard_registers(list:TAsmList);
       var
       var
-        href : treference;
-        r : integer;
-        hreg : tregister;
+        href     : treference;
+        r        : integer;
+        hreg     : tregister;
+        freetemp : boolean;
       begin
       begin
         { Copy registers from temp }
         { Copy registers from temp }
+        freetemp:=false;
         href:=current_procinfo.save_regs_ref;
         href:=current_procinfo.save_regs_ref;
         for r:=low(saved_standard_registers) to high(saved_standard_registers) do
         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
           if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
@@ -3632,8 +3634,10 @@ implementation
               a_reg_alloc(list,hreg);
               a_reg_alloc(list,hreg);
               a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg);
               a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg);
               inc(href.offset,sizeof(aint));
               inc(href.offset,sizeof(aint));
+              freetemp:=true;
             end;
             end;
-        tg.UnGetTemp(list,current_procinfo.save_regs_ref);
+        if freetemp then
+          tg.UnGetTemp(list,current_procinfo.save_regs_ref);
       end;
       end;