aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/BasicStore.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-11-12 19:18:35 +0000
committerTed Kremenek <kremenek@apple.com>2008-11-12 19:18:35 +0000
commit42577d145e2c6c3f77731645d442faa716f4c852 (patch)
tree628f564ac0c50efee088c8c215d4973d47be5e45 /lib/Analysis/BasicStore.cpp
parenteb8f3063257a392f15aea48d42fb73ec51afc548 (diff)
StoreManager::BindDecl now takes an SVal* for the initialization value instead of an Expr* (which can be null). Lazy symbolication of conjured symbols is now the sole responsibility of GRExprEngine.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59151 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BasicStore.cpp')
-rw-r--r--lib/Analysis/BasicStore.cpp27
1 files changed, 8 insertions, 19 deletions
diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp
index be9f4fdd12..16c35ea7ac 100644
--- a/lib/Analysis/BasicStore.cpp
+++ b/lib/Analysis/BasicStore.cpp
@@ -76,8 +76,7 @@ public:
void iterBindings(Store store, BindingsHandler& f);
- Store BindDecl(Store store, const VarDecl* VD, Expr* Ex,
- SVal InitVal = UndefinedVal(), unsigned Count = 0);
+ Store BindDecl(Store store, const VarDecl* VD, SVal* InitVal, unsigned Count);
static inline VarBindingsTy GetVarBindings(Store store) {
return VarBindingsTy(static_cast<const VarBindingsTy::TreeTy*>(store));
@@ -358,11 +357,11 @@ Store BasicStoreManager::getInitialStore() {
return St;
}
-Store BasicStoreManager::BindDecl(Store store, const VarDecl* VD, Expr* Ex,
- SVal InitVal, unsigned Count) {
+Store BasicStoreManager::BindDecl(Store store, const VarDecl* VD,
+ SVal* InitVal, unsigned Count) {
+
BasicValueFactory& BasicVals = StateMgr.getBasicVals();
- SymbolManager& SymMgr = StateMgr.getSymbolManager();
-
+
// BasicStore does not model arrays and structs.
if (VD->getType()->isArrayType() || VD->getType()->isStructureType())
return store;
@@ -386,7 +385,7 @@ Store BasicStoreManager::BindDecl(Store store, const VarDecl* VD, Expr* Ex,
// —if it has pointer type, it is initialized to a null pointer;
// —if it has arithmetic type, it is initialized to (positive or
// unsigned) zero;
- if (!Ex) {
+ if (!InitVal) {
QualType T = VD->getType();
if (Loc::IsLocType(T))
store = Bind(store, getLoc(VD),
@@ -398,24 +397,14 @@ Store BasicStoreManager::BindDecl(Store store, const VarDecl* VD, Expr* Ex,
// assert(0 && "ignore other types of variables");
}
} else {
- store = Bind(store, getLoc(VD), InitVal);
+ store = Bind(store, getLoc(VD), *InitVal);
}
}
} else {
// Process local scalar variables.
QualType T = VD->getType();
if (Loc::IsLocType(T) || T->isIntegerType()) {
- SVal V = Ex ? InitVal : UndefinedVal();
-
- if (Ex && InitVal.isUnknown()) {
- // EXPERIMENTAL: "Conjured" symbols.
- SymbolID Sym = SymMgr.getConjuredSymbol(Ex, Count);
-
- V = Loc::IsLocType(Ex->getType())
- ? cast<SVal>(loc::SymbolVal(Sym))
- : cast<SVal>(nonloc::SymbolVal(Sym));
- }
-
+ SVal V = InitVal ? *InitVal : UndefinedVal();
store = Bind(store, getLoc(VD), V);
}
}