diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-02-23 17:08:03 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-02-23 17:08:03 +0000 |
commit | 91dc0d9d441be26995b414c5f8d4fbcce50c9bc8 (patch) | |
tree | 27dfba3c0f61a635e535786722abb14936ed5745 /compiler/jvm | |
parent | 5cefd933e4a82dc0106a8faf32349c945a2a2b12 (diff) | |
parent | d6d06e8bf4c2c3d1f71ef399241be6e1ff38ebd4 (diff) | |
download | fpc-91dc0d9d441be26995b414c5f8d4fbcce50c9bc8.tar.gz |
* synchronised with trunk till r41423
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/debug_eh@41424 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/jvm')
-rw-r--r-- | compiler/jvm/cpupara.pas | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/compiler/jvm/cpupara.pas b/compiler/jvm/cpupara.pas index 929abfe184..e12a1a143b 100644 --- a/compiler/jvm/cpupara.pas +++ b/compiler/jvm/cpupara.pas @@ -46,7 +46,7 @@ interface @param(nr Parameter number of routine, starting from 1)} procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; 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 create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override; function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override; function param_use_paraloc(const cgpara: tcgpara): boolean; override; function ret_in_param(def:tdef;pd:tabstractprocdef):boolean;override; @@ -209,15 +209,22 @@ implementation end; - function tcpuparamanager.create_varargs_paraloc_info(p : tabstractprocdef; varargspara:tvarargsparalist):longint; + function tcpuparamanager.create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint; var parasize : longint; begin parasize:=0; { calculate the registers for the normal parameters } - create_paraloc_info_intern(p,callerside,p.paras,parasize); + create_paraloc_info_intern(p,side,p.paras,parasize); { append the varargs } - create_paraloc_info_intern(p,callerside,varargspara,parasize); + if assigned(varargspara) then + begin + if side=callerside then + create_paraloc_info_intern(p,side,varargspara,parasize) + else + internalerror(2019021924); + end; + create_funcretloc_info(p,side); result:=parasize; end; |