diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-07-22 00:46:16 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-07-22 00:46:16 +0000 |
commit | 584def7364f51e35bfcaf5c3c64673096533adda (patch) | |
tree | b10e4e6c8d4690ceefc2e1e34d5ff3a039301e45 /lib/Analysis/BasicObjCFoundationChecks.cpp | |
parent | 1caae959017b355e9bb61250d5a0d04edbf468b0 (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.cpp | 9 |
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); |