diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-09-10 20:20:49 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-09-10 20:20:49 +0000 |
commit | 0853c7f840ee8e23c8271572e73ebab3d26b8fd5 (patch) | |
tree | 3c4ca92d454b3132ff3eb6caae8f9165ca539722 /lib/Checker/DereferenceChecker.cpp | |
parent | 0339d72d7f853d90088a4d8639fb50810533e791 (diff) |
Polish diagnostics for null dereferences via ObjC ivar accesses. Finishes up <rdar://problem/6352035>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113612 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/DereferenceChecker.cpp')
-rw-r--r-- | lib/Checker/DereferenceChecker.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Checker/DereferenceChecker.cpp b/lib/Checker/DereferenceChecker.cpp index af74c79558..50392b28cd 100644 --- a/lib/Checker/DereferenceChecker.cpp +++ b/lib/Checker/DereferenceChecker.cpp @@ -123,6 +123,19 @@ void DereferenceChecker::VisitLocation(CheckerContext &C, const Stmt *S, } break; } + case Stmt::ObjCIvarRefExprClass: { + const ObjCIvarRefExpr *IV = cast<ObjCIvarRefExpr>(S); + if (const DeclRefExpr *DR = + dyn_cast<DeclRefExpr>(IV->getBase()->IgnoreParenCasts())) { + if (const VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) { + llvm::raw_svector_ostream os(buf); + os << "Instance variable access (via '" << VD->getName() + << "') results in a null pointer dereference"; + } + } + Ranges.push_back(IV->getSourceRange()); + break; + } default: break; } |