瀏覽代碼

* 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 -

Jonas Maebe 9 年之前
父節點
當前提交
0cce590982
共有 1 個文件被更改,包括 7 次插入2 次删除
  1. 7 2
      compiler/llvm/llvmdef.pas

+ 7 - 2
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