]> granicus.if.org Git - clang/commitdiff
[analyzer]Recognize ivar invalidation protocol even if it was redeclared
authorAnna Zaks <ganna@apple.com>
Fri, 11 Jan 2013 03:52:40 +0000 (03:52 +0000)
committerAnna Zaks <ganna@apple.com>
Fri, 11 Jan 2013 03:52:40 +0000 (03:52 +0000)
This will get rid of some false positives as well as false negatives.

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

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

index 527470a17c5f373e4f3b934cf054912280d69bb7..4f2a9097b4f2cd5514d2490609599ee752112aed 100644 (file)
@@ -233,7 +233,7 @@ void IvarInvalidationChecker::containsInvalidationMethod(
     for (ObjCInterfaceDecl::protocol_iterator
         I = InterfD->protocol_begin(),
         E = InterfD->protocol_end(); I != E; ++I) {
-      containsInvalidationMethod(*I, OutInfo);
+      containsInvalidationMethod((*I)->getDefinition(), OutInfo);
     }
 
     // Visit all categories in case the invalidation method is declared in
@@ -252,7 +252,7 @@ void IvarInvalidationChecker::containsInvalidationMethod(
     for (ObjCInterfaceDecl::protocol_iterator
         I = ProtD->protocol_begin(),
         E = ProtD->protocol_end(); I != E; ++I) {
-      containsInvalidationMethod(*I, OutInfo);
+      containsInvalidationMethod((*I)->getDefinition(), OutInfo);
     }
     return;
   }
index 15bcabec69a3941e84e59bca68fbeaa462ab5ccb..84028ddc2ec5fbdec23cea72acd49f2bc06f525c 100644 (file)
@@ -35,6 +35,9 @@ extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1,
 - (void) invalidate2 __attribute__((annotate("objc_instance_variable_invalidator")));
 @end
 
+@protocol Invalidation3;
+@protocol Invalidation2;
+
 @interface Invalidation2Class <Invalidation2>
 @end