1*67e74705SXin Li// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Listruct A { ~A(); }; 4*67e74705SXin Li 5*67e74705SXin Li@interface B { 6*67e74705SXin Li A a; 7*67e74705SXin Li} 8*67e74705SXin Li 9*67e74705SXin Li- (const A&)getA; 10*67e74705SXin Li@end 11*67e74705SXin Li 12*67e74705SXin Li@implementation B 13*67e74705SXin Li 14*67e74705SXin Li- (const A&)getA { 15*67e74705SXin Li return a; 16*67e74705SXin Li} 17*67e74705SXin Li 18*67e74705SXin Li@end 19*67e74705SXin Li 20*67e74705SXin Li// CHECK-LABEL: define void @_Z1fP1B 21*67e74705SXin Li// CHECK: objc_msgSend to 22*67e74705SXin Li// CHECK-NOT: call void @_ZN1AD1Ev 23*67e74705SXin Li// CHECK: ret void 24*67e74705SXin Livoid f(B* b) { 25*67e74705SXin Li (void)[b getA]; 26*67e74705SXin Li} 27*67e74705SXin Li 28*67e74705SXin Li// PR7741 29*67e74705SXin Li@protocol P1 @end 30*67e74705SXin Li@protocol P2 @end 31*67e74705SXin Li@protocol P3 @end 32*67e74705SXin Li@interface foo<P1> {} @end 33*67e74705SXin Li@interface bar : foo <P1, P2, P3> {} @end 34*67e74705SXin Litypedef bar baz; 35*67e74705SXin Livoid f5(foo&); 36*67e74705SXin Livoid f5b(foo<P1>&); 37*67e74705SXin Livoid f5c(foo<P2>&); 38*67e74705SXin Livoid f5d(foo<P3>&); 39*67e74705SXin Livoid f6(baz* x) { 40*67e74705SXin Li f5(*x); 41*67e74705SXin Li f5b(*x); 42*67e74705SXin Li f5c(*x); 43*67e74705SXin Li f5d(*x); 44*67e74705SXin Li (void)((foo&)*x); 45*67e74705SXin Li} 46