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