aboutsummaryrefslogtreecommitdiff
path: root/include/clang/Analysis
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-11-04 00:09:15 +0000
committerTed Kremenek <kremenek@apple.com>2009-11-04 00:09:15 +0000
commitf6f56d4fc8ebce17e7b83eb2c35f57a055c22283 (patch)
tree2f3ae83f9b82522171da9305a2ea0d2aa0c66cf0 /include/clang/Analysis
parent9bef4d7d127c2f10a8c0535f371f8a06d5ba6b4a (diff)
Refactor StoreManager::BindDecl() to take a VarRegion* instead of a VarDecl*, and modify GRExprEngine::EvalBind() to handle decl initialization as well. This paves the way for adding "checker" visitation in EvalBind().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@85983 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/Analysis')
-rw-r--r--include/clang/Analysis/PathSensitive/GRExprEngine.h5
-rw-r--r--include/clang/Analysis/PathSensitive/GRState.h17
-rw-r--r--include/clang/Analysis/PathSensitive/Store.h7
3 files changed, 12 insertions, 17 deletions
diff --git a/include/clang/Analysis/PathSensitive/GRExprEngine.h b/include/clang/Analysis/PathSensitive/GRExprEngine.h
index cfb9ce95ea..1d2b08711c 100644
--- a/include/clang/Analysis/PathSensitive/GRExprEngine.h
+++ b/include/clang/Analysis/PathSensitive/GRExprEngine.h
@@ -562,8 +562,9 @@ protected:
/// EvalBind - Handle the semantics of binding a value to a specific location.
/// This method is used by EvalStore, VisitDeclStmt, and others.
- void EvalBind(ExplodedNodeSet& Dst, Expr* Ex, ExplodedNode* Pred,
- const GRState* St, SVal location, SVal Val);
+ void EvalBind(ExplodedNodeSet& Dst, Stmt* Ex, ExplodedNode* Pred,
+ const GRState* St, SVal location, SVal Val,
+ bool atDeclInit = false);
public:
void EvalLoad(ExplodedNodeSet& Dst, Expr* Ex, ExplodedNode* Pred,
diff --git a/include/clang/Analysis/PathSensitive/GRState.h b/include/clang/Analysis/PathSensitive/GRState.h
index 3f6fb8e242..8678ca9b5b 100644
--- a/include/clang/Analysis/PathSensitive/GRState.h
+++ b/include/clang/Analysis/PathSensitive/GRState.h
@@ -219,11 +219,9 @@ public:
const GRState *BindExpr(const Stmt *S, SVal V, bool Invalidate = true) const;
- const GRState *bindDecl(const VarDecl *VD, const LocationContext *LC,
- SVal V) const;
+ const GRState *bindDecl(const VarRegion *VR, SVal V) const;
- const GRState *bindDeclWithNoInit(const VarDecl *VD,
- const LocationContext *LC) const;
+ const GRState *bindDeclWithNoInit(const VarRegion *VR) const;
const GRState *bindLoc(Loc location, SVal V) const;
@@ -602,15 +600,12 @@ inline const GRState *GRState::bindCompoundLiteral(const CompoundLiteralExpr* CL
return getStateManager().StoreMgr->BindCompoundLiteral(this, CL, V);
}
-inline const GRState *GRState::bindDecl(const VarDecl* VD,
- const LocationContext *LC,
- SVal IVal) const {
- return getStateManager().StoreMgr->BindDecl(this, VD, LC, IVal);
+inline const GRState *GRState::bindDecl(const VarRegion* VR, SVal IVal) const {
+ return getStateManager().StoreMgr->BindDecl(this, VR, IVal);
}
-inline const GRState *GRState::bindDeclWithNoInit(const VarDecl* VD,
- const LocationContext *LC) const {
- return getStateManager().StoreMgr->BindDeclWithNoInit(this, VD, LC);
+inline const GRState *GRState::bindDeclWithNoInit(const VarRegion* VR) const {
+ return getStateManager().StoreMgr->BindDeclWithNoInit(this, VR);
}
inline const GRState *GRState::bindLoc(Loc LV, SVal V) const {
diff --git a/include/clang/Analysis/PathSensitive/Store.h b/include/clang/Analysis/PathSensitive/Store.h
index 7a462c579f..6ca2e9e9aa 100644
--- a/include/clang/Analysis/PathSensitive/Store.h
+++ b/include/clang/Analysis/PathSensitive/Store.h
@@ -134,12 +134,11 @@ public:
SymbolReaper& SymReaper,
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots) = 0;
- virtual const GRState *BindDecl(const GRState *ST, const VarDecl *VD,
- const LocationContext *LC, SVal initVal) = 0;
+ virtual const GRState *BindDecl(const GRState *ST, const VarRegion *VR,
+ SVal initVal) = 0;
virtual const GRState *BindDeclWithNoInit(const GRState *ST,
- const VarDecl *VD,
- const LocationContext *LC) = 0;
+ const VarRegion *VR) = 0;
typedef llvm::DenseSet<SymbolRef> InvalidatedSymbols;