summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaObjC/property-inherited.m
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2009-03-03 15:43:24 +0000
committerSteve Naroff <snaroff@apple.com>2009-03-03 15:43:24 +0000
commit3e1181e2e9b7b849621dc5d75723b3fd1abf3873 (patch)
tree8a1fda0b6c7e1eb610423d7f4f5dd578183dda81 /clang/test/SemaObjC/property-inherited.m
parent157599fe1cc7ba669dc81174db708fab025023fb (diff)
downloadbcm5719-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.m44
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
OpenPOWER on IntegriCloud