diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-07-23 13:49:29 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-07-23 13:49:29 +0000 |
commit | e934bcd3a21fdd546051c176077014d17a9d0b71 (patch) | |
tree | 74401984b0c17dc0c07865b532d028fd85f6bece /compiler/arm/cpupara.pas | |
parent | 9960ad2d43cf2d3665e709f506ff1383c4785e87 (diff) | |
download | fpc-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.pas | 15 |
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 |