]> granicus.if.org Git - clang/commitdiff
[analyzer] Ivar Invalidation: track ivars in continuations and
authorAnna Zaks <ganna@apple.com>
Tue, 16 Oct 2012 19:36:37 +0000 (19:36 +0000)
committerAnna Zaks <ganna@apple.com>
Tue, 16 Oct 2012 19:36:37 +0000 (19:36 +0000)
@implementation.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166047 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
test/Analysis/objc_invalidation.m

index 462066af5771e5502d0fecd0b5fcee1563311776..e52e3d42e25179c61032b7932618c9a8d0717170 100644 (file)
@@ -314,12 +314,12 @@ void IvarInvalidationChecker::checkASTDecl(const ObjCMethodDecl *D,
   // Collect all ivars that need cleanup.
   IvarSet Ivars;
   const ObjCInterfaceDecl *InterfaceD = D->getClassInterface();
-  for (ObjCInterfaceDecl::ivar_iterator
-      II = InterfaceD->ivar_begin(),
-      IE = InterfaceD->ivar_end(); II != IE; ++II) {
-    const ObjCIvarDecl *Iv = *II;
+
+  // Collect ivars declared in this class, its extensions and its implementation
+  ObjCInterfaceDecl *IDecl = const_cast<ObjCInterfaceDecl *>(InterfaceD);
+  for (const ObjCIvarDecl *Iv = IDecl->all_declared_ivar_begin(); Iv;
+       Iv= Iv->getNextIvar())
     trackIvar(Iv, Ivars);
-  }
 
   // Construct Property/Property Accessor to Ivar maps to assist checking if an
   // ivar which is backing a property has been reset.
index adcbbd62af2c0cd47cf495017bd6bc67f9ef1e52..17b74e90c50ee6629b2474303ab4a463cee7bc2c 100644 (file)
@@ -93,7 +93,14 @@ extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1,
 
 @end
 
-@implementation SomeSubclassInvalidatableObject
+@interface SomeSubclassInvalidatableObject()
+@property (assign) SomeInvalidationImplementingObject* Prop8;
+@end
+
+@implementation SomeSubclassInvalidatableObject{
+  @private
+  SomeInvalidationImplementingObject *Ivar5;
+}
 
 @synthesize Prop7 = _propIvar;
 @synthesize Prop3 = _Prop3;
@@ -139,4 +146,6 @@ extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1,
  // expected-warning@-4 {{Property SynthIvarProp needs to be invalidated}}
  // expected-warning@-5 {{Instance variable _Ivar3 needs to be invalidated}}
  // expected-warning@-6 {{Instance variable _Ivar4 needs to be invalidated}}
+ // expected-warning@-7 {{Instance variable Ivar5 needs to be invalidated or set to nil}}
+ // expected-warning@-8 {{Property Prop8 needs to be invalidated}}
 @end