Home | History | Annotate | Download | only in SemaObjC
      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;
     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;	
     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