* encode the result type of functions returning a zero-sized value

using their actual type (array/record) rather than using the
    simplified type (void), so we can also return an actual value and
    assign it to something (void means that nothing is returned and
    cannot be assigned to anything) (completes fixing
    tests/test/tnoext4.pp for llvm)

git-svn-id: trunk@34120 -
This commit is contained in:
Jonas Maebe 2016-07-14 15:19:45 +00:00
parent 2148a20d6a
commit 0cce590982

View File

@ -856,8 +856,13 @@ implementation
{ single location }
if not assigned(cgpara.location^.next) then
begin
{ def of the location, except in case of zero/sign-extension }
usedef:=cgpara.location^.def;
{ def of the location, except in case of zero/sign-extension and
zero-sized records }
if not is_special_array(cgpara.def) and
(cgpara.def.size=0) then
usedef:=cgpara.def
else
usedef:=cgpara.location^.def;
if beforevalueext then
llvmextractvalueextinfo(cgpara.def,usedef,valueext);
{ comp and currency are handled by the x87 in this case. They cannot