1 // RUN: %clang_cc1 %s -fsyntax-only -verify 2 // RUN: %clang_cc1 -x objective-c++ %s -fsyntax-only -verify 3 4 // rdar://6497242 Inherited overridden protocol declared objects don't work 5 // rdar://9740328 Case for c++ 6 7 @protocol NSObject @end 8 @interface NSObject @end 9 10 @protocol FooDelegate<NSObject> 11 @optional 12 - (void)fooTask; 13 @end 14 15 @protocol BarDelegate<NSObject, FooDelegate> 16 @optional 17 - (void)barTask; 18 @end 19 20 @interface Foo : NSObject { 21 id _delegate; 22 } 23 @property(nonatomic, assign) id<FooDelegate> delegate; 24 @property(nonatomic, assign) id<BarDelegate> delegate2; // expected-note {{property declared here}} 25 @end 26 @interface Bar : Foo { 27 } 28 @property(nonatomic, assign) id<BarDelegate> delegate; 29 @property(nonatomic, assign) id<FooDelegate> delegate2; // expected-warning{{property type 'id<FooDelegate>' is incompatible with type 'id<BarDelegate>' inherited from 'Foo'}} 30 @end 31 32 @interface NSData @end 33 34 @interface NSMutableData : NSData @end 35 36 @interface Base : NSData 37 @property(assign) id ref; 38 @property(assign) Base *p_base; 39 @property(assign) NSMutableData *p_data; // expected-note {{property declared here}} 40 @end 41 42 @interface Data : Base 43 @property(assign) NSData *ref; 44 @property(assign) Data *p_base; 45 @property(assign) NSData *p_data; // expected-warning{{property type 'NSData *' is incompatible with type 'NSMutableData *' inherited from 'Base'}} 46 @end 47 48 // rdar://15967517 49 @protocol P1 50 @property (nonatomic) void* selected; 51 @end 52 53 @protocol P2 54 @property (nonatomic) void* selected; // expected-note {{property declared here}} 55 @end 56 57 @interface MKAnnotationView <P1> 58 @property (nonatomic) void* selected; // expected-note {{property declared here}} 59 @property (nonatomic) char selected2; 60 @end 61 62 @interface Parent : MKAnnotationView <P2> 63 @property (nonatomic) void* selected1; // expected-note {{property declared here}} 64 @property (nonatomic) char selected2; 65 @end 66 67 @interface Child : Parent 68 @property (nonatomic) char selected; // expected-warning {{property type 'char' is incompatible with type 'void *' inherited from 'MKAnnotationView'}} \ 69 // expected-warning {{property type 'char' is incompatible with type 'void *' inherited from 'P2'}} 70 @property (nonatomic) char selected1; // expected-warning {{property type 'char' is incompatible with type 'void *' inherited from 'Parent'}} 71 @property (nonatomic) char selected2; 72 @end 73