summaryrefslogtreecommitdiff
path: root/compiler/arm/cpupara.pas
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-07-23 13:49:29 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-07-23 13:49:29 +0000
commite934bcd3a21fdd546051c176077014d17a9d0b71 (patch)
tree74401984b0c17dc0c07865b532d028fd85f6bece /compiler/arm/cpupara.pas
parent9960ad2d43cf2d3665e709f506ff1383c4785e87 (diff)
downloadfpc-e934bcd3a21fdd546051c176077014d17a9d0b71.tar.gz
* fixed memory leaks in the compiler introduced in r21862 by marking and
releasing temporarily created function result locations git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@21953 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/arm/cpupara.pas')
-rw-r--r--compiler/arm/cpupara.pas15
1 files changed, 4 insertions, 11 deletions
diff --git a/compiler/arm/cpupara.pas b/compiler/arm/cpupara.pas
index 2d6f2e5b9d..3b07404bbb 100644
--- a/compiler/arm/cpupara.pas
+++ b/compiler/arm/cpupara.pas
@@ -42,12 +42,11 @@ unit cpupara;
procedure getintparaloc(calloption : tproccalloption; nr : longint; def : tdef; var cgpara : tcgpara);override;
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
function create_varargs_paraloc_info(p : tabstractprocdef; varargspara:tvarargsparalist):longint;override;
- function get_funcretloc(p : tabstractprocdef; side: tcallercallee; def: tdef): tcgpara;override;
+ function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
private
procedure init_values(var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword; var sparesinglereg: tregister);
function create_paraloc_info_intern(p : tabstractprocdef; side: tcallercallee; paras: tparalist;
var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword; var sparesinglereg: tregister; isvariadic: boolean):longint;
- procedure create_funcretloc_info(p : tabstractprocdef; side: tcallercallee);
end;
implementation
@@ -576,23 +575,17 @@ unit cpupara;
end;
- procedure tarmparamanager.create_funcretloc_info(p : tabstractprocdef; side: tcallercallee);
- begin
- p.funcretloc[side]:=get_funcretloc(p,side,p.returndef);
- end;
-
-
- function tarmparamanager.get_funcretloc(p : tabstractprocdef; side: tcallercallee; def: tdef): tcgpara;
+ function tarmparamanager.get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;
var
paraloc : pcgparalocation;
retcgsize : tcgsize;
begin
- if set_common_funcretloc_info(p,def,retcgsize,result) then
+ if set_common_funcretloc_info(p,forcetempdef,retcgsize,result) then
exit;
paraloc:=result.add_location;
{ Return in FPU register? }
- if def.typ=floatdef then
+ if result.def.typ=floatdef then
begin
if target_info.abi = abi_eabihf then
begin