diff --git a/compiler/ncgrtti.pas b/compiler/ncgrtti.pas
index 01a8b3f7b6..963a66cf39 100644
--- a/compiler/ncgrtti.pas
+++ b/compiler/ncgrtti.pas
@@ -1591,7 +1591,10 @@ implementation
                { total element count }
                tcb.emit_tai(Tai_const.Create_sizeint(asizeint(totalcount)),sizeuinttype);
                { last dimension element type }
-               tcb.emit_tai(Tai_const.Create_sym(get_rtti_label(curdef.elementdef,rt,true)),voidpointertype);
+               if is_objc_class_or_protocol(curdef.elementdef) then
+                 tcb.emit_tai(Tai_const.Create_sym(get_rtti_label(voidpointertype,rt,true)),voidpointertype)
+               else
+                 tcb.emit_tai(Tai_const.Create_sym(get_rtti_label(curdef.elementdef,rt,true)),voidpointertype);
                { dimension count }
                tcb.emit_ord_const(dimcount,u8inttype);
                finaldef:=def;
@@ -2635,6 +2638,10 @@ implementation
         rttidef: tdef;
         s: TIDString;
       begin
+        { Objective-C has its own RTTI system }
+        if is_objc_class_or_protocol(def) then
+          exit;
+
         { only write rtti of definitions from the current module }
         if not findunitsymtable(def.owner).iscurrentunit then
           exit;