[cfe-commits] r103965 - in /cfe/trunk: lib/CodeGen/CGObjC.cpp test/CodeGenObjC/protocols.m

John McCall rjmccall at apple.com
Mon May 17 13:12:43 PDT 2010


Author: rjmccall
Date: Mon May 17 15:12:43 2010
New Revision: 103965

URL: http://llvm.org/viewvc/llvm-project?rev=103965&view=rev
Log:
Correctly generate IR for ObjC messages sends to protocol-qualified types.
Fixes rdar://problem/7992749


Modified:
    cfe/trunk/lib/CodeGen/CGObjC.cpp
    cfe/trunk/test/CodeGenObjC/protocols.m

Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=103965&r1=103964&r2=103965&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Mon May 17 15:12:43 2010
@@ -64,10 +64,11 @@
     break;
 
   case ObjCMessageExpr::Class: {
-    const ObjCInterfaceType *IFace
-      = E->getClassReceiver()->getAs<ObjCInterfaceType>();
-    assert(IFace && "Invalid Objective-C class message send");
-    OID = IFace->getDecl();
+    const ObjCObjectType *ObjTy
+      = E->getClassReceiver()->getAs<ObjCObjectType>();
+    assert(ObjTy && "Invalid Objective-C class message send");
+    OID = ObjTy->getInterface();
+    assert(OID && "Invalid Objective-C class message send");
     Receiver = Runtime.GetClass(Builder, OID);
     isClassMessage = true;
     break;

Modified: cfe/trunk/test/CodeGenObjC/protocols.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/protocols.m?rev=103965&r1=103964&r2=103965&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjC/protocols.m (original)
+++ cfe/trunk/test/CodeGenObjC/protocols.m Mon May 17 15:12:43 2010
@@ -1,8 +1,9 @@
-// RUN: %clang_cc1 -emit-llvm %s -o %t
+// RUN: %clang_cc1 -emit-llvm-only %s
 
 void p(const char*, ...);
 
 @interface Root
++(int) maxValue;
 -(int) conformsTo: (id) x;
 @end
 
@@ -48,3 +49,9 @@
 
   return 0;
 }
+
+// rdar://problem/7992749
+typedef Root<P1> P1Object;
+int test10() {
+  return [P1Object maxValue];
+}





More information about the cfe-commits mailing list