* fixed popping the unused function results of methods returning implicit

function pointer type results (records, shorstrings, ...): always pop a
    single stack slot in that case

git-svn-id: branches/jvmbackend@19598 -
This commit is contained in:
Jonas Maebe 2011-11-06 14:01:12 +00:00
parent 8bca3e9b0b
commit 1401c4e573

View File

@ -415,19 +415,19 @@ implementation
if (tabstractprocdef(procdefinition).proctypeoption=potype_constructor) and if (tabstractprocdef(procdefinition).proctypeoption=potype_constructor) and
(current_procinfo.procdef.proctypeoption=potype_constructor) then (current_procinfo.procdef.proctypeoption=potype_constructor) then
exit; exit;
if is_void(resultdef) then
exit;
if (location.loc=LOC_REFERENCE) then if (location.loc=LOC_REFERENCE) then
tg.ungetiftemp(current_asmdata.CurrAsmList,location.reference); tg.ungetiftemp(current_asmdata.CurrAsmList,location.reference);
if assigned(funcretnode) then if assigned(funcretnode) then
exit; exit;
case resultdef.size of if jvmimplicitpointertype(resultdef) or
0: (resultdef.size in [1..4]) then
;
1..4:
begin begin
current_asmdata.CurrAsmList.concat(taicpu.op_none(a_pop)); current_asmdata.CurrAsmList.concat(taicpu.op_none(a_pop));
thlcgjvm(hlcg).decstack(current_asmdata.CurrAsmList,1); thlcgjvm(hlcg).decstack(current_asmdata.CurrAsmList,1);
end; end
8: else if resultdef.size=8 then
begin begin
current_asmdata.CurrAsmList.concat(taicpu.op_none(a_pop2)); current_asmdata.CurrAsmList.concat(taicpu.op_none(a_pop2));
thlcgjvm(hlcg).decstack(current_asmdata.CurrAsmList,2); thlcgjvm(hlcg).decstack(current_asmdata.CurrAsmList,2);
@ -435,7 +435,6 @@ implementation
else else
internalerror(2011010305); internalerror(2011010305);
end; end;
end;
procedure tjvmcallnode.extra_post_call_code; procedure tjvmcallnode.extra_post_call_code;