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