[cfe-commits] r126869 - in /cfe/trunk: lib/CodeGen/CGExprScalar.cpp test/CodeGenObjCXX/message-reference.mm

Fariborz Jahanian fjahanian at apple.com
Wed Mar 2 12:09:49 PST 2011


Author: fjahanian
Date: Wed Mar  2 14:09:49 2011
New Revision: 126869

URL: http://llvm.org/viewvc/llvm-project?rev=126869&view=rev
Log:
IRGen. Fix IR when message returns reference type.
// rdar://8604515.


Added:
    cfe/trunk/test/CodeGenObjCXX/message-reference.mm
Modified:
    cfe/trunk/lib/CodeGen/CGExprScalar.cpp

Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=126869&r1=126868&r2=126869&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Wed Mar  2 14:09:49 2011
@@ -245,6 +245,9 @@
     return EmitLoadOfLValue(E);
   }
   Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {
+    if (E->getMethodDecl() && 
+        E->getMethodDecl()->getResultType()->isReferenceType())
+      return EmitLoadOfLValue(E);
     return CGF.EmitObjCMessageExpr(E).getScalarVal();
   }
 

Added: cfe/trunk/test/CodeGenObjCXX/message-reference.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/message-reference.mm?rev=126869&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenObjCXX/message-reference.mm (added)
+++ cfe/trunk/test/CodeGenObjCXX/message-reference.mm Wed Mar  2 14:09:49 2011
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
+// rdar://8604515
+
+ at interface I {}
+-(unsigned int&)referenceCount;
+ at end
+
+ at interface MyClass
++(int)writeBlip:(I*)srcBlip;
+ at end
+
+ at implementation MyClass
++(int)writeBlip:(I*)srcBlip{
+  return ([srcBlip referenceCount] == 0);
+}
+ at end
+
+// CHECK: [[T:%.*]] = call i32* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
+// CHECK: [[U:%.*]] = load i32* [[T]]
+// CHECK  [[V:%.*]] = icmp eq i32 [[U]], 0





More information about the cfe-commits mailing list