mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 06:49:27 +02:00
* fixed returning results from functions that have a zero-sized result
(e.g. an empty record): return an "undefined" instance of the result type (since it's empty, its contents are irrelevant). Before, we returned "void", but that means returning nothing rather than returning something empty (part of fixing test/tnoext4 for llvm) git-svn-id: trunk@34119 -
This commit is contained in:
parent
5541fb3f6d
commit
2148a20d6a
@ -71,6 +71,9 @@ interface
|
||||
{ dst = bitcast size undef to size }
|
||||
constructor op_reg_size_undef(op: tllvmop; dst: tregister; size: tdef);
|
||||
|
||||
{ return size undef }
|
||||
constructor op_size_undef(op: tllvmop; size: tdef);
|
||||
|
||||
{ e.g. dst = bitcast fromsize src to tosize }
|
||||
constructor op_reg_size_ref_size(op:tllvmop;dst:tregister;fromsize:tdef;const src:treference;tosize:tdef);
|
||||
{ e.g. store fromsize src, ptrsize toref}
|
||||
@ -762,6 +765,14 @@ uses
|
||||
loaddef(3,size);
|
||||
end;
|
||||
|
||||
constructor taillvm.op_size_undef(op: tllvmop; size: tdef);
|
||||
begin
|
||||
create_llvm(op);
|
||||
ops:=2;
|
||||
loaddef(0,size);
|
||||
loadundef(1);
|
||||
end;
|
||||
|
||||
|
||||
constructor taillvm.op_reg_size_ref_size(op: tllvmop; dst: tregister; fromsize: tdef; const src: treference; tosize: tdef);
|
||||
begin
|
||||
|
@ -1277,6 +1277,12 @@ implementation
|
||||
end;
|
||||
end;
|
||||
list.concat(taillvm.op_size_reg(la_ret,retdef,retreg))
|
||||
end;
|
||||
LOC_VOID:
|
||||
begin
|
||||
{ zero-sized records: return an undefined zero-sized record of
|
||||
the correct type }
|
||||
list.concat(taillvm.op_size_undef(la_ret,retdef));
|
||||
end
|
||||
else
|
||||
{ todo: complex returns }
|
||||
|
Loading…
Reference in New Issue
Block a user