소스 검색

* 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