summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-10-18 19:17:57 +0000
committerAnna Zaks <ganna@apple.com>2012-10-18 19:17:57 +0000
commit92898a79ebd327cce331e002d2940b402de85a92 (patch)
treeab67573dfb4abe2c6828f7db87f10f1545a981e5 /clang/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
parent673d76b0bc31cddc357cf071aa55d21d32fb3f40 (diff)
downloadbcm5719-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.cpp14
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";
OpenPOWER on IntegriCloud