Return type of a setter call caused by

use of property-dot syntax using 'super' as receiver
is 'void'. This fixes a bug in generating correct
API for setter call. Fixes radar 8203426.

llvm-svn: 109297
This commit is contained in:
Fariborz Jahanian 2010-07-24 00:34:08 +00:00
parent 536f091f95
commit 72cdffa401
2 changed files with 48 additions and 1 deletions

View File

@ -572,7 +572,7 @@ void CodeGenFunction::EmitObjCSuperPropertySet(const Expr *Exp,
Args.push_back(std::make_pair(Src, Exp->getType()));
CGM.getObjCRuntime().GenerateMessageSendSuper(*this,
ReturnValueSlot(),
Exp->getType(),
getContext().VoidTy,
S,
OMD->getClassInterface(),
isCategoryImpl,

View File

@ -0,0 +1,47 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-nonfragile-abi -emit-llvm %s -o - | FileCheck %s
// rdar: // 8203426
typedef double CGFloat;
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
@interface UIView {
}
@property CGRect frame;
@end
@interface crashclass : UIView {
}
@end
@implementation crashclass
- (void)setFrame:(CGRect)frame
{
super.frame = frame;
[super setFrame:frame];
}
@end
// CHECK-NOT: declare void @objc_msgSendSuper2_stret
// CHECK: declare i8* @objc_msgSendSuper2