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