diff options
| author | Steve Naroff <snaroff@apple.com> | 2009-03-03 15:43:24 +0000 |
|---|---|---|
| committer | Steve Naroff <snaroff@apple.com> | 2009-03-03 15:43:24 +0000 |
| commit | 3e1181e2e9b7b849621dc5d75723b3fd1abf3873 (patch) | |
| tree | 8a1fda0b6c7e1eb610423d7f4f5dd578183dda81 /clang/test/SemaObjC/property-inherited.m | |
| parent | 157599fe1cc7ba669dc81174db708fab025023fb (diff) | |
| download | bcm5719-llvm-3e1181e2e9b7b849621dc5d75723b3fd1abf3873.tar.gz bcm5719-llvm-3e1181e2e9b7b849621dc5d75723b3fd1abf3873.zip | |
Fix <rdar://problem/6497242> Inherited overridden protocol declared objects don't work.
Change Sema::DiagnosePropertyMismatch() to check for type compatibility (rather than type equivalence, which is too strict).
llvm-svn: 65949
Diffstat (limited to 'clang/test/SemaObjC/property-inherited.m')
| -rw-r--r-- | clang/test/SemaObjC/property-inherited.m | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/property-inherited.m b/clang/test/SemaObjC/property-inherited.m new file mode 100644 index 00000000000..7669e44dab8 --- /dev/null +++ b/clang/test/SemaObjC/property-inherited.m @@ -0,0 +1,44 @@ +// RUN: clang %s -fsyntax-only -verify + +// <rdar://problem/6497242> Inherited overridden protocol declared objects don't work + +@protocol NSObject @end +@interface NSObject @end + +@protocol FooDelegate<NSObject> +@optional +- (void)fooTask; +@end + +@protocol BarDelegate<NSObject, FooDelegate> +@optional +- (void)barTask; +@end + +@interface Foo : NSObject { + id _delegate; +} +@property(nonatomic, assign) id<FooDelegate> delegate; +@property(nonatomic, assign) id<BarDelegate> delegate2; +@end +@interface Bar : Foo { +} +@property(nonatomic, assign) id<BarDelegate> delegate; +@property(nonatomic, assign) id<FooDelegate> delegate2; // expected-warning{{property type 'id<FooDelegate>' is incompatible with type 'id<BarDelegate>' inherited from 'Foo'}} +@end + +@interface NSData @end + +@interface NSMutableData : NSData @end + +@interface Base : NSData +@property(assign) id ref; +@property(assign) Base *p_base; +@property(assign) NSMutableData *p_data; +@end + +@interface Data : Base +@property(assign) NSData *ref; +@property(assign) Data *p_base; +@property(assign) NSData *p_data; // expected-warning{{property type 'NSData *' is incompatible with type 'NSMutableData *' inherited from 'Base'}} +@end |

