diff options
author | Anna Zaks <ganna@apple.com> | 2012-10-18 19:17:57 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-10-18 19:17:57 +0000 |
commit | 92898a79ebd327cce331e002d2940b402de85a92 (patch) | |
tree | ab67573dfb4abe2c6828f7db87f10f1545a981e5 /clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp | |
parent | 673d76b0bc31cddc357cf071aa55d21d32fb3f40 (diff) | |
download | bcm5719-llvm-92898a79ebd327cce331e002d2940b402de85a92.tar.gz bcm5719-llvm-92898a79ebd327cce331e002d2940b402de85a92.zip |
[analyzer] Ivar invalidation: identify properties declared in protocols.
llvm-svn: 166211
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp index e52e3d42e25..bf256cd9fa4 100644 --- a/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp @@ -327,10 +327,13 @@ void IvarInvalidationChecker::checkASTDecl(const ObjCMethodDecl *D, MethToIvarMapTy PropGetterToIvarMap; PropToIvarMapTy PropertyToIvarMap; IvarToPropMapTy IvarToPopertyMap; - for (ObjCInterfaceDecl::prop_iterator - I = InterfaceD->prop_begin(), - E = InterfaceD->prop_end(); I != E; ++I) { - const ObjCPropertyDecl *PD = *I; + + ObjCInterfaceDecl::PropertyMap PropMap; + InterfaceD->collectPropertiesToImplement(PropMap); + + for (ObjCInterfaceDecl::PropertyMap::iterator + I = PropMap.begin(), E = PropMap.end(); I != E; ++I) { + const ObjCPropertyDecl *PD = I->second; const ObjCIvarDecl *ID = findPropertyBackingIvar(PD, InterfaceD, Ivars); if (!ID) { @@ -386,7 +389,8 @@ void IvarInvalidationChecker::checkASTDecl(const ObjCMethodDecl *D, const ObjCPropertyDecl *PD = IvarToPopertyMap[IvarDecl]; assert(PD && "Do we synthesize ivars for something other than properties?"); - os << "Property "<< PD->getName() << " needs to be invalidated"; + os << "Property "<< PD->getName() << + " needs to be invalidated or set to nil"; } else { os << "Instance variable "<< IvarDecl->getName() << " needs to be invalidated or set to nil"; |