[analyzer] IvarInvalidation: track synthesized ivars and allow escape
through property getters.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164802 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Analysis/objc_invalidation.m b/test/Analysis/objc_invalidation.m
index e0ce28b..ededae6 100644
--- a/test/Analysis/objc_invalidation.m
+++ b/test/Analysis/objc_invalidation.m
@@ -50,6 +50,7 @@
SomeInvalidationImplementingObject *_propIvar;
Invalidation1Class *MultipleProtocols;
Invalidation2Class *MultInheritance;
+ SomeInvalidationImplementingObject *_Prop5; // invalidate via getter method
// No warnings on these.
NSObject *NObj1;
@@ -63,6 +64,10 @@
@property (assign) SomeInvalidationImplementingObject* Prop2;
@property (assign) SomeInvalidationImplementingObject* Prop3;
@property (assign) SomeInvalidationImplementingObject* Prop4;
+@property (assign) SomeInvalidationImplementingObject* Prop5;
+@property (assign) SomeInvalidationImplementingObject *SynthIvarProp;
+
+
@property (assign) NSObject* NProp0;
@property (nonatomic, assign) NSObject* NProp1;
@property (assign) NSObject* NProp2;
@@ -98,13 +103,16 @@
- (void) invalidate {
[Obj3 invalidate];
+ self.Prop0 = 0;
self.Prop1 = 0;
[self setProp2:0];
[self setProp3:0];
self.Prop4 = 0;
+ [[self Prop5] invalidate];
[super invalidate];
}// expected-warning {{Instance variable Obj1 needs to be invalidated}}
// expected-warning@-1 {{Instance variable Obj2 needs to be invalidated}}
// expected-warning@-2 {{Instance variable MultipleProtocols needs to be invalidated}}
// expected-warning@-3 {{Instance variable MultInheritance needs to be invalidated}}
+ // expected-warning@-4 {{Property SynthIvarProp needs to be invalidated}}
@end