aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp')
-rw-r--r--lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp b/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
index e52e3d42e2..bf256cd9fa 100644
--- a/lib/StaticAnalyzer/Checkers/IvarInvalidationChecker.cpp
+++ b/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";