IRGen. Fix IR when message returns reference type.

// rdar://8604515.

llvm-svn: 126869
This commit is contained in:
Fariborz Jahanian 2011-03-02 20:09:49 +00:00
parent 843d20aa7a
commit ff9890302c
2 changed files with 23 additions and 0 deletions

View File

@ -245,6 +245,9 @@ public:
return EmitLoadOfLValue(E);
}
Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {
if (E->getMethodDecl() &&
E->getMethodDecl()->getResultType()->isReferenceType())
return EmitLoadOfLValue(E);
return CGF.EmitObjCMessageExpr(E).getScalarVal();
}

View File

@ -0,0 +1,20 @@
// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
// rdar://8604515
@interface I {}
-(unsigned int&)referenceCount;
@end
@interface MyClass
+(int)writeBlip:(I*)srcBlip;
@end
@implementation MyClass
+(int)writeBlip:(I*)srcBlip{
return ([srcBlip referenceCount] == 0);
}
@end
// CHECK: [[T:%.*]] = call i32* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
// CHECK: [[U:%.*]] = load i32* [[T]]
// CHECK [[V:%.*]] = icmp eq i32 [[U]], 0