summaryrefslogtreecommitdiff
path: root/compiler/jvm
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-02-23 17:08:03 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-02-23 17:08:03 +0000
commit91dc0d9d441be26995b414c5f8d4fbcce50c9bc8 (patch)
tree27dfba3c0f61a635e535786722abb14936ed5745 /compiler/jvm
parent5cefd933e4a82dc0106a8faf32349c945a2a2b12 (diff)
parentd6d06e8bf4c2c3d1f71ef399241be6e1ff38ebd4 (diff)
downloadfpc-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.pas15
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;