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 { i8*, i32 }* [[SRC:%.*]]
28// CHECK-NEXT:extractvalue
29// CHECK-NEXT:store
30// CHECK-NEXT:getelementptr { 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