From 0cce59098234f8524500081c16828801d8524c38 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Thu, 14 Jul 2016 15:19:45 +0000 Subject: [PATCH] * 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 - --- compiler/llvm/llvmdef.pas | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/llvm/llvmdef.pas b/compiler/llvm/llvmdef.pas index fb5b704b2b..35f4202389 100644 --- a/compiler/llvm/llvmdef.pas +++ b/compiler/llvm/llvmdef.pas @@ -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