From: Anna Zaks Date: Fri, 11 Jan 2013 03:52:40 +0000 (+0000) Subject: [analyzer]Recognize ivar invalidation protocol even if it was redeclared X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b8f6678bdd54d4dabac416476993343837dd229c;p=clang [analyzer]Recognize ivar invalidation protocol even if it was redeclared 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 --- diff --git a/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp b/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp index 527470a17c..4f2a9097b4 100644 --- a/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp @@ -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; } diff --git a/test/Analysis/objc_invalidation.m b/test/Analysis/objc_invalidation.m index 15bcabec69..84028ddc2e 100644 --- a/test/Analysis/objc_invalidation.m +++ b/test/Analysis/objc_invalidation.m @@ -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 @end