Explorar el Código

* Release register of by value parameter after making its local copy. It fixes bug when local stack location is referenced using big (>4k) PC relative offset by ARM CPU. In this case temp register is needed and wrong temp register is allocated.

git-svn-id: trunk@5488 -
yury hace 18 años
padre
commit
319d92fe9a
Se han modificado 1 ficheros con 1 adiciones y 1 borrados
  1. 1 1
      compiler/ncgutil.pas

+ 1 - 1
compiler/ncgutil.pas

@@ -1618,7 +1618,6 @@ implementation
                       sizeleft:=currpara.paraloc[calleeside].intsize;
                       sizeleft:=currpara.paraloc[calleeside].intsize;
                       while assigned(paraloc) do
                       while assigned(paraloc) do
                         begin
                         begin
-                          unget_para(paraloc^);
                           if (paraloc^.size=OS_NO) then
                           if (paraloc^.size=OS_NO) then
                             begin
                             begin
                               { Can only be a reference that contains the rest
                               { Can only be a reference that contains the rest
@@ -1636,6 +1635,7 @@ implementation
                               inc(href.offset,TCGSize2Size[paraloc^.size]);
                               inc(href.offset,TCGSize2Size[paraloc^.size]);
                               dec(sizeleft,TCGSize2Size[paraloc^.size]);
                               dec(sizeleft,TCGSize2Size[paraloc^.size]);
                             end;
                             end;
+                          unget_para(paraloc^);
                           paraloc:=paraloc^.next;
                           paraloc:=paraloc^.next;
                         end;
                         end;
                     end;
                     end;