aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/BasicObjCFoundationChecks.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-07-22 00:46:16 +0000
committerTed Kremenek <kremenek@apple.com>2008-07-22 00:46:16 +0000
commit584def7364f51e35bfcaf5c3c64673096533adda (patch)
treeb10e4e6c8d4690ceefc2e1e34d5ff3a039301e45 /lib/Analysis/BasicObjCFoundationChecks.cpp
parent1caae959017b355e9bb61250d5a0d04edbf468b0 (diff)
Added path-sensitive checking for null pointer values passed to function arguments marked nonnull.
This implements <rdar://problem/6069935> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53891 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BasicObjCFoundationChecks.cpp')
-rw-r--r--lib/Analysis/BasicObjCFoundationChecks.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/Analysis/BasicObjCFoundationChecks.cpp b/lib/Analysis/BasicObjCFoundationChecks.cpp
index 4475ed2bc5..37cfc280b8 100644
--- a/lib/Analysis/BasicObjCFoundationChecks.cpp
+++ b/lib/Analysis/BasicObjCFoundationChecks.cpp
@@ -126,7 +126,7 @@ public:
delete *I;
}
- virtual bool Audit(ExplodedNode<ValueState>* N);
+ virtual bool Audit(ExplodedNode<ValueState>* N, ValueStateManager&);
virtual void EmitWarnings(BugReporter& BR);
@@ -153,7 +153,8 @@ clang::CreateBasicObjCFoundationChecks(ASTContext& Ctx,
-bool BasicObjCFoundationChecks::Audit(ExplodedNode<ValueState>* N) {
+bool BasicObjCFoundationChecks::Audit(ExplodedNode<ValueState>* N,
+ ValueStateManager&) {
ObjCMessageExpr* ME =
cast<ObjCMessageExpr>(cast<PostStmt>(N->getLocation()).getStmt());
@@ -348,7 +349,7 @@ public:
virtual ~AuditCFNumberCreate() {}
- virtual bool Audit(ExplodedNode<ValueState>* N);
+ virtual bool Audit(ExplodedNode<ValueState>* N, ValueStateManager&);
virtual void EmitWarnings(BugReporter& BR) {
Desc.EmitWarnings(BR);
@@ -454,7 +455,7 @@ static const char* GetCFNumberTypeStr(uint64_t i) {
}
#endif
-bool AuditCFNumberCreate::Audit(ExplodedNode<ValueState>* N) {
+bool AuditCFNumberCreate::Audit(ExplodedNode<ValueState>* N,ValueStateManager&){
CallExpr* CE = cast<CallExpr>(cast<PostStmt>(N->getLocation()).getStmt());
Expr* Callee = CE->getCallee();
RVal CallV = GetRVal(N->getState(), Callee);