Browse Source

* corrected llvm level type of interfaces

git-svn-id: trunk@32425 -
Jonas Maebe 9 years ago
parent
commit
8cebb76572
2 changed files with 12 additions and 3 deletions
  1. 8 2
      compiler/llvm/llvmdef.pas
  2. 4 1
      compiler/llvm/llvmtype.pas

+ 8 - 2
compiler/llvm/llvmdef.pas

@@ -478,10 +478,16 @@ implementation
                     encodedstr:=encodedstr+'*'
                 end;
               odt_interfacecom,
+              odt_interfacecorba,
+              odt_dispinterface:
+                begin
+                  { type is a pointer to the vmt }
+                  llvmaddencodedtype_intern(tobjectdef(def).vmt_def,flags,encodedstr);
+                  if ([lef_typedecl,lef_noimplicitderef]*flags=[]) then
+                    encodedstr:=encodedstr+'*';
+                end;
               odt_interfacecom_function,
               odt_interfacecom_property,
-              odt_interfacecorba,
-              odt_dispinterface,
               odt_objcprotocol:
                 begin
                   { opaque for now }

+ 4 - 1
compiler/llvm/llvmtype.pas

@@ -669,7 +669,10 @@ implementation
 
     procedure TLLVMTypeInfo.appenddef_object(list:TAsmList;def: tobjectdef);
       begin
-        appenddef_abstractrecord(list,def);
+        if is_any_interface_kind(def) then
+          record_def(def.vmt_def)
+        else
+          appenddef_abstractrecord(list,def);
       end;