1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Listruct CGRect { 4*67e74705SXin Li char* origin; 5*67e74705SXin Li unsigned size; 6*67e74705SXin Li}; 7*67e74705SXin Litypedef struct CGRect CGRect; 8*67e74705SXin Li 9*67e74705SXin Liextern "C" bool CGRectIsEmpty(CGRect); 10*67e74705SXin Li 11*67e74705SXin Li@interface Foo { 12*67e74705SXin Li CGRect out; 13*67e74705SXin Li} 14*67e74705SXin Li@property CGRect bounds; 15*67e74705SXin Li- (CGRect) out; 16*67e74705SXin Li@end 17*67e74705SXin Li 18*67e74705SXin Li 19*67e74705SXin Li@implementation Foo 20*67e74705SXin Li 21*67e74705SXin Li- (void)bar { 22*67e74705SXin Li CGRect dataRect; 23*67e74705SXin Li CGRect virtualBounds; 24*67e74705SXin Li 25*67e74705SXin Li// CHECK: [[SRC:%.*]] = call { i8*, i32 } bitcast (i8* (i8*, i8*, ...)* @objc_msgSend 26*67e74705SXin Li// CHECK-NEXT: bitcast 27*67e74705SXin Li// CHECK-NEXT:getelementptr inbounds { i8*, i32 }, { i8*, i32 }* [[SRC:%.*]] 28*67e74705SXin Li// CHECK-NEXT:extractvalue 29*67e74705SXin Li// CHECK-NEXT:store 30*67e74705SXin Li// CHECK-NEXT:getelementptr inbounds { i8*, i32 }, { i8*, i32 }* [[SRC:%.*]] 31*67e74705SXin Li// CHECK-NEXT:extractvalue 32*67e74705SXin Li// CHECK-NEXT:store 33*67e74705SXin Li dataRect = CGRectIsEmpty(virtualBounds) ? self.bounds : virtualBounds; 34*67e74705SXin Li dataRect = CGRectIsEmpty(virtualBounds) ? [self bounds] : virtualBounds; 35*67e74705SXin Li dataRect = CGRectIsEmpty(virtualBounds) ? virtualBounds : self.bounds; 36*67e74705SXin Li 37*67e74705SXin Li dataRect = CGRectIsEmpty(virtualBounds) ? self.out : virtualBounds; 38*67e74705SXin Li dataRect = CGRectIsEmpty(virtualBounds) ? [self out] : virtualBounds; 39*67e74705SXin Li dataRect = CGRectIsEmpty(virtualBounds) ? virtualBounds : self.out; 40*67e74705SXin Li} 41*67e74705SXin Li 42*67e74705SXin Li@dynamic bounds; 43*67e74705SXin Li- (CGRect) out { return out; } 44*67e74705SXin Li@end 45