Browse Source

* treat Objective-C metaclasses (classrefdefs) as voidpointertype at the
LLVM type level

git-svn-id: trunk@32884 -

Jonas Maebe 9 years ago
parent
commit
3f7169e250
2 changed files with 10 additions and 3 deletions
  1. 7 2
      compiler/llvm/llvmdef.pas
  2. 3 1
      compiler/llvm/llvmtype.pas

+ 7 - 2
compiler/llvm/llvmdef.pas

@@ -384,8 +384,13 @@ implementation
             end;
           classrefdef :
             begin
-              llvmaddencodedtype_intern(tobjectdef(tclassrefdef(def).pointeddef).vmt_def,flags,encodedstr);
-              encodedstr:=encodedstr+'*';
+              if is_class(tclassrefdef(def).pointeddef) then
+                begin
+                  llvmaddencodedtype_intern(tobjectdef(tclassrefdef(def).pointeddef).vmt_def,flags,encodedstr);
+                  encodedstr:=encodedstr+'*';
+                end
+              else
+                encodedstr:=encodedstr+'i8*'
             end;
           setdef :
             begin

+ 3 - 1
compiler/llvm/llvmtype.pas

@@ -697,7 +697,9 @@ implementation
     procedure TLLVMTypeInfo.appenddef_classref(list: TAsmList; def: tclassrefdef);
       begin
         record_def(def);
-        record_def(tobjectdef(tclassrefdef(def).pointeddef).vmt_def);
+        { can also be an objcclass, which doesn't have a vmt }
+        if is_class(tclassrefdef(def).pointeddef) then
+          record_def(tobjectdef(tclassrefdef(def).pointeddef).vmt_def);
       end;