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