1*67e74705SXin Li// RUN: %clang_cc1 -verify -o - %s 2*67e74705SXin Li 3*67e74705SXin Li__attribute__((objc_root_class)) 4*67e74705SXin Li@interface Root @end 5*67e74705SXin Li 6*67e74705SXin Li// Test reference binding. 7*67e74705SXin Li 8*67e74705SXin Litypedef struct { 9*67e74705SXin Li int f0; 10*67e74705SXin Li int f1; 11*67e74705SXin Li} T; 12*67e74705SXin Li 13*67e74705SXin Li@interface A : Root 14*67e74705SXin Li@property (assign) T p0; 15*67e74705SXin Li@property (assign) T& p1; 16*67e74705SXin Li@end 17*67e74705SXin Li 18*67e74705SXin Liint f0(const T& t) { 19*67e74705SXin Li return t.f0; 20*67e74705SXin Li} 21*67e74705SXin Li 22*67e74705SXin Liint f1(A *a) { 23*67e74705SXin Li return f0(a.p0); 24*67e74705SXin Li} 25*67e74705SXin Li 26*67e74705SXin Liint f2(A *a) { 27*67e74705SXin Li return f0(a.p1); 28*67e74705SXin Li} 29*67e74705SXin Li 30*67e74705SXin Li// PR7740 31*67e74705SXin Li@class NSString; 32*67e74705SXin Li 33*67e74705SXin Livoid f3(id); 34*67e74705SXin Livoid f4(NSString &tmpstr) { 35*67e74705SXin Li f3(&tmpstr); 36*67e74705SXin Li} 37*67e74705SXin Li 38*67e74705SXin Li// PR7741 39*67e74705SXin Li@protocol P1 @end 40*67e74705SXin Li@protocol P2 @end 41*67e74705SXin Li@protocol P3 @end 42*67e74705SXin Li@interface foo<P1> {} @end 43*67e74705SXin Li@interface bar : foo <P1, P2, P3> {} @end 44*67e74705SXin Litypedef bar baz; 45*67e74705SXin Li 46*67e74705SXin Listruct ToBar { 47*67e74705SXin Li operator bar&() const; 48*67e74705SXin Li}; 49*67e74705SXin Li 50*67e74705SXin Livoid f5(foo&); 51*67e74705SXin Livoid f5b(foo<P1>&); 52*67e74705SXin Livoid f5c(foo<P2>&); 53*67e74705SXin Livoid f5d(foo<P3>&); 54*67e74705SXin Livoid f6(baz* x) { 55*67e74705SXin Li f5(*x); 56*67e74705SXin Li f5b(*x); 57*67e74705SXin Li f5c(*x); 58*67e74705SXin Li f5d(*x); 59*67e74705SXin Li (void)((foo&)*x); 60*67e74705SXin Li f5(ToBar()); 61*67e74705SXin Li f5b(ToBar()); 62*67e74705SXin Li f5c(ToBar()); 63*67e74705SXin Li f5d(ToBar()); 64*67e74705SXin Li (void)((foo&)ToBar()); 65*67e74705SXin Li} 66*67e74705SXin Li 67*67e74705SXin Li// rdar://13794269 68*67e74705SXin Li@interface B : Root @end 69*67e74705SXin Li@implementation B { 70*67e74705SXin Li unsigned bf : 4; // expected-note {{declared here}} 71*67e74705SXin Li} 72*67e74705SXin Li 73*67e74705SXin Li- (void) foo { 74*67e74705SXin Li unsigned &i = bf; // expected-error {{non-const reference cannot bind to bit-field 'bf'}} 75*67e74705SXin Li} 76*67e74705SXin Li@end 77