Casting of a property reference to 'void' did not

generate the necessary code. This patch fixes it.
// rdar://8389655

llvm-svn: 113079
This commit is contained in:
Fariborz Jahanian 2010-09-04 19:49:18 +00:00
parent f20ca8028d
commit 60babfb8a1
2 changed files with 25 additions and 2 deletions

View File

@ -1038,8 +1038,13 @@ Value *ScalarExprEmitter::EmitCastExpr(CastExpr *CE) {
return Builder.CreatePtrToInt(Src, ConvertType(DestTy));
}
case CK_ToVoid: {
if (E->Classify(CGF.getContext()).isGLValue())
CGF.EmitLValue(E);
if (E->Classify(CGF.getContext()).isGLValue()) {
LValue LV = CGF.EmitLValue(E);
if (LV.isPropertyRef())
CGF.EmitLoadOfPropertyRefLValue(LV, E->getType());
else if (LV.isKVCRef())
CGF.EmitLoadOfKVCRefLValue(LV, E->getType());
}
else
CGF.EmitAnyExpr(E, 0, false, true);
return 0;

View File

@ -0,0 +1,18 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin9 -emit-llvm -o - %s | FileCheck %s
// rdar: // 8399655
@interface TestClass
@property (readonly) int myProperty;
- (int)myProperty;
- (double)myGetter;
@end
void FUNC () {
TestClass *obj;
(void)obj.myProperty;
(void)obj.myGetter;
}
// CHECK: call i32 bitcast
// CHECK: call double bitcast