IRGen. Fix IR when message returns reference type.
// rdar://8604515. llvm-svn: 126869
This commit is contained in:
parent
843d20aa7a
commit
ff9890302c
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue