1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s 2 3struct CGRect { 4 char* origin; 5 unsigned size; 6}; 7typedef struct CGRect CGRect; 8 9extern "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