1// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2// CHECK-NOT: callq	_objc_msgSend_stret
3// CHECK: call void @_ZN1SC1ERKS_
4// CHECK: call %class.S* @_ZN1SaSERKS_
5// CHECK: call %struct.CGRect* @_ZN6CGRectaSERKS_
6
7class S {
8public:
9	S& operator = (const S&);
10	S (const S&);
11	S ();
12};
13
14struct CGRect {
15	CGRect & operator = (const CGRect &);
16};
17
18@interface I {
19  S position;
20  CGRect bounds;
21}
22@property(assign, nonatomic) S position;
23@property CGRect bounds;
24@property CGRect frame;
25- (void)setFrame:(CGRect)frameRect;
26- (CGRect)frame;
27- (void) initWithOwner;
28- (struct CGRect)extent;
29- (void)dealloc;
30@end
31
32@implementation I
33@synthesize position;
34@synthesize bounds;
35@synthesize frame;
36- (void)setFrame:(CGRect)frameRect {}
37- (CGRect)frame {return bounds;}
38
39- (void)initWithOwner {
40  I* _labelLayer;
41  CGRect labelLayerFrame = self.bounds;
42  labelLayerFrame = self.bounds;
43  _labelLayer.frame = labelLayerFrame;
44}
45// rdar://8366604
46- (void)dealloc
47  {
48      CGRect cgrect = self.extent;
49  }
50- (struct CGRect)extent {return bounds;}
51@end
52
53int main() {
54  I *i;
55  S s1;
56  i.position = s1;
57  return 0;
58}
59
60// rdar://8379892
61// CHECK: define void @_Z1fP1A
62// CHECK: @objc_msgSend to void
63struct X {
64  X();
65  X(const X&);
66  ~X();
67};
68
69@interface A {
70  X xval;
71}
72- (X)x;
73- (void)setX:(X)x;
74@end
75
76void f(A* a) {
77  a.x = X();
78}
79