1 // RUN: %clang_cc1 -verify -o - %s 2 3 __attribute__((objc_root_class)) 4 @interface Root @end 5 6 // Test reference binding. 7 8 typedef 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 18 int f0(const T& t) { 19 return t.f0; 20 } 21 22 int f1(A *a) { 23 return f0(a.p0); 24 } 25 26 int f2(A *a) { 27 return f0(a.p1); 28 } 29 30 // PR7740 31 @class NSString; 32 33 void f3(id); 34 void 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 44 typedef bar baz; 45 46 struct ToBar { 47 operator bar&() const; 48 }; 49 50 void f5(foo&); 51 void f5b(foo<P1>&); 52 void f5c(foo<P2>&); 53 void f5d(foo<P3>&); 54 void 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