// 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) @end @implementation NSArray(Additions) @end // Test2 @protocol NSProtocol - (int)count; @end @interface NSArray1 @end @interface NSArray1(Additions) @end @implementation NSArray1(Additions) @end // Test3 @interface Super @end @interface NSArray2 : Super @end @interface NSArray2(Additions) @end @implementation NSArray2(Additions) @end // Test3 @interface Super1 @property (readonly) int count; @end @protocol MyCountable1 @end @interface NSArray3 : Super1 @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) @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