aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2013-01-07 19:12:56 +0000
committerAnna Zaks <ganna@apple.com>2013-01-07 19:12:56 +0000
commit5879fb3f6d559863c18df7132ee3d5fdb62b6ae5 (patch)
treeafae0bdfc95790f73e7b0687a9edda9c9f7934e4 /test
parent975b1203baeb04b13cdaa017b7fdd384f5adcad0 (diff)
[analyzer] Fix a false positive in the ivar invalidation checker.
When a property is "inherited" through both a parent class and directly through a protocol, we should not require the child to invalidate it since the backing ivar belongs to the parent class. (Fixes radar://12913734) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171769 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Analysis/objc_invalidation.m29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/Analysis/objc_invalidation.m b/test/Analysis/objc_invalidation.m
index 357c5e8f60..cf6bcd5aa3 100644
--- a/test/Analysis/objc_invalidation.m
+++ b/test/Analysis/objc_invalidation.m
@@ -151,3 +151,32 @@ extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1,
// expected-warning@-6 {{Instance variable _Ivar4 needs to be invalidated}}
// expected-warning@-7 {{Instance variable Ivar5 needs to be invalidated or set to nil}}
@end
+
+// Example, where the same property is inherited through
+// the parent and directly through a protocol. If a property backing ivar is
+// synthesized in the parent, let the parent invalidate it.
+
+@protocol IDEBuildable <NSObject>
+@property (readonly, strong) id <Invalidation2> ObjB;
+@end
+
+@interface Parent : NSObject <IDEBuildable, Invalidation2> {
+ Invalidation2Class *_ObjB; // Invalidation of ObjB happens in the parent.
+}
+@end
+
+@interface Child: Parent <Invalidation2, IDEBuildable>
+@end
+
+@implementation Parent
+@synthesize ObjB = _ObjB;
+- (void)invalidate{
+ _ObjB = ((void*)0);
+}
+@end
+
+@implementation Child
+- (void)invalidate{
+ // no-warning
+}
+@end