124 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
 | |
| 
 | |
| @interface IDELogNavigator
 | |
| {
 | |
|   id selectedObjects;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface IDELogNavigator (CAT)
 | |
|   @property (readwrite, retain) id selectedObjects; // expected-note {{property declared here}}
 | |
|   @property (readwrite, retain) id d_selectedObjects; // expected-note {{property declared here}}
 | |
| @end
 | |
| 
 | |
| @implementation IDELogNavigator 
 | |
| @synthesize selectedObjects = _selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}}
 | |
| @dynamic d_selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}}
 | |
| @end
 | |
| 
 | |
| 
 | |
| // rdar://13713098
 | |
| // Test1
 | |
| @interface NSArray 
 | |
| - (int)count;
 | |
| @end
 | |
| 
 | |
| @protocol MyCountable
 | |
| @property  (readonly) int count;
 | |
| @end
 | |
| 
 | |
| 
 | |
| @interface NSArray(Additions) <MyCountable>
 | |
| @end
 | |
| 
 | |
| @implementation NSArray(Additions)
 | |
| @end
 | |
| 
 | |
| // Test2
 | |
| @protocol NSProtocol
 | |
| - (int)count;
 | |
| @end
 | |
| 
 | |
| @interface NSArray1 <NSProtocol>
 | |
| @end
 | |
| 
 | |
| @interface NSArray1(Additions) <MyCountable>
 | |
| @end
 | |
| 
 | |
| @implementation NSArray1(Additions)
 | |
| @end
 | |
| 
 | |
| // Test3
 | |
| @interface Super <NSProtocol>
 | |
| @end
 | |
| 
 | |
| @interface NSArray2 : Super @end
 | |
| 
 | |
| @interface NSArray2(Additions) <MyCountable>
 | |
| @end
 | |
| 
 | |
| @implementation NSArray2(Additions)
 | |
| @end
 | |
| 
 | |
| // Test3
 | |
| @interface Super1 <NSProtocol>
 | |
| @property  (readonly) int count;
 | |
| @end
 | |
| 
 | |
| @protocol MyCountable1
 | |
| @end
 | |
| 
 | |
| @interface NSArray3 : Super1 <MyCountable1>
 | |
| @end
 | |
| 
 | |
| @implementation NSArray3
 | |
| @end
 | |
| 
 | |
| // Test4
 | |
| @interface I
 | |
| @property int d1;
 | |
| @end
 | |
| 
 | |
| @interface I(CAT)
 | |
| @property int d1;
 | |
| @end
 | |
| 
 | |
| @implementation I(CAT)
 | |
| @end
 | |
| 
 | |
| // Test5 
 | |
| @interface C @end
 | |
| 
 | |
| @interface C (CAT)
 | |
| - (int) p;
 | |
| @end
 | |
| 
 | |
| 
 | |
| @interface C (Category)
 | |
| @property (readonly) int p;  // no warning for this property - a getter is declared in another category
 | |
| @property (readonly) int p1; // expected-note {{property declared here}}
 | |
| @property (readonly) int p2;  // no warning for this property - a getter is declared in this category
 | |
| - (int) p2;
 | |
| @end
 | |
| 
 | |
| @implementation C (Category)  // expected-warning {{property 'p1' requires method 'p1' to be defined - use @dynamic or provide a method implementation in this category}}
 | |
| @end
 | |
| 
 | |
| // Test6
 | |
| @protocol MyProtocol
 | |
| @property (readonly) float  anotherFloat; // expected-note {{property declared here}}
 | |
| @property (readonly) float  Float; // no warning for this property - a getter is declared in this protocol
 | |
| - (float) Float;
 | |
| @end
 | |
| 
 | |
| @interface MyObject 
 | |
| { float anotherFloat; }
 | |
| @end
 | |
| 
 | |
| @interface MyObject (CAT) <MyProtocol>
 | |
| @end
 | |
| 
 | |
| @implementation MyObject (CAT) // expected-warning {{property 'anotherFloat' requires method 'anotherFloat' to be defined - use @dynamic or provide a method implementation in this category}}
 | |
| @end
 | |
| 
 |