77 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| // RUN: %clang_cc1 -verify -o - %s
 | |
| 
 | |
| __attribute__((objc_root_class))
 | |
| @interface Root @end
 | |
| 
 | |
| // Test reference binding.
 | |
| 
 | |
| typedef struct {
 | |
|   int f0;
 | |
|   int f1;
 | |
| } T;
 | |
| 
 | |
| @interface A : Root
 | |
| @property (assign) T p0;
 | |
| @property (assign) T& p1; 
 | |
| @end
 | |
| 
 | |
| int f0(const T& t) {
 | |
|   return t.f0;
 | |
| }
 | |
| 
 | |
| int f1(A *a) {
 | |
|   return f0(a.p0);
 | |
| }
 | |
| 
 | |
| int f2(A *a) {
 | |
|   return f0(a.p1);	
 | |
| }
 | |
| 
 | |
| // PR7740
 | |
| @class NSString;
 | |
| 
 | |
| void f3(id);
 | |
| void f4(NSString &tmpstr) {
 | |
|   f3(&tmpstr);
 | |
| }
 | |
| 
 | |
| // PR7741
 | |
| @protocol P1 @end
 | |
| @protocol P2 @end
 | |
| @protocol P3 @end
 | |
| @interface foo<P1> {} @end
 | |
| @interface bar : foo <P1, P2, P3> {} @end
 | |
| typedef bar baz;
 | |
| 
 | |
| struct ToBar {
 | |
|   operator bar&() const;
 | |
| };
 | |
| 
 | |
| void f5(foo&);
 | |
| void f5b(foo<P1>&);
 | |
| void f5c(foo<P2>&);
 | |
| void f5d(foo<P3>&);
 | |
| void f6(baz* x) { 
 | |
|   f5(*x); 
 | |
|   f5b(*x); 
 | |
|   f5c(*x); 
 | |
|   f5d(*x);
 | |
|   (void)((foo&)*x);
 | |
|   f5(ToBar());
 | |
|   f5b(ToBar());
 | |
|   f5c(ToBar());
 | |
|   f5d(ToBar());
 | |
|   (void)((foo&)ToBar());
 | |
| }
 | |
| 
 | |
| // rdar://13794269
 | |
| @interface B : Root @end
 | |
| @implementation B {
 | |
|   unsigned bf : 4; // expected-note {{declared here}}
 | |
| }
 | |
| 
 | |
| - (void) foo {
 | |
|   unsigned &i = bf; // expected-error {{non-const reference cannot bind to bit-field 'bf'}}
 | |
| }
 | |
| @end
 |