summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-09-03 01:07:02 +0000
committerTed Kremenek <kremenek@apple.com>2010-09-03 01:07:02 +0000
commit6d4c022695c2d780ccb63ce43a50588412b80813 (patch)
tree4d5bf68fa1578b4f249a712c094009ae9d1a1778 /include
parent124f5d5fa4c6b348b4ca5876762fc5eb3864a39b (diff)
Add optional record of "location" SVals in the environment. When we analyzing loads/stores, we lose the location SVal, which makes it difficult to recover in some cases (e.g., for post diagnostics). This is prep for pending changes to GRExprEngine.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112930 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/clang/Checker/PathSensitive/Environment.h8
-rw-r--r--include/clang/Checker/PathSensitive/GRState.h7
2 files changed, 14 insertions, 1 deletions
diff --git a/include/clang/Checker/PathSensitive/Environment.h b/include/clang/Checker/PathSensitive/Environment.h
index 2981731f86..611f507945 100644
--- a/include/clang/Checker/PathSensitive/Environment.h
+++ b/include/clang/Checker/PathSensitive/Environment.h
@@ -83,8 +83,14 @@ public:
return Environment(F.GetEmptyMap());
}
- Environment BindExpr(Environment Env, const Stmt *S, SVal V,
+ /// Bind the value 'V' to the statement 'S'.
+ Environment bindExpr(Environment Env, const Stmt *S, SVal V,
bool Invalidate);
+
+ /// Bind the location 'location' and value 'V' to the statement 'S'. This
+ /// is used when simulating loads/stores.
+ Environment bindExprAndLocation(Environment Env, const Stmt *S, SVal location,
+ SVal V);
Environment RemoveDeadBindings(Environment Env,
SymbolReaper &SymReaper, const GRState *ST,
diff --git a/include/clang/Checker/PathSensitive/GRState.h b/include/clang/Checker/PathSensitive/GRState.h
index 7d998905de..d72d63ab3c 100644
--- a/include/clang/Checker/PathSensitive/GRState.h
+++ b/include/clang/Checker/PathSensitive/GRState.h
@@ -201,8 +201,15 @@ public:
const LocationContext *LC,
SVal V) const;
+ /// Create a new state by binding the value 'V' to the statement 'S' in the
+ /// state's environment.
const GRState *BindExpr(const Stmt *S, SVal V, bool Invalidate = true) const;
+ /// Create a new state by binding the value 'V' and location 'locaton' to the
+ /// statement 'S' in the state's environment.
+ const GRState *bindExprAndLocation(const Stmt *S, SVal location, SVal V)
+ const;
+
const GRState *bindDecl(const VarRegion *VR, SVal V) const;
const GRState *bindDeclWithNoInit(const VarRegion *VR) const;