summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2009-04-09 05:57:11 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2009-04-09 05:57:11 +0000
commitcb5d3ced7037f89ee10c3769f10c6cea94d05d6c (patch)
treec26d666ff53a1c7bc5575f84c7cdbe24dc88d2a7 /clang/lib
parentfc8b2b9ff9938167e8007c599fd992f0b62e7ddf (diff)
downloadbcm5719-llvm-cb5d3ced7037f89ee10c3769f10c6cea94d05d6c.tar.gz
bcm5719-llvm-cb5d3ced7037f89ee10c3769f10c6cea94d05d6c.zip
Create a symbolic region instead of a loc::SymbolVal. This is a continued step
to eliminate the use of loc::SymbolVal. llvm-svn: 68685
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Analysis/GRExprEngine.cpp3
-rw-r--r--clang/lib/Analysis/SVals.cpp23
2 files changed, 12 insertions, 14 deletions
diff --git a/clang/lib/Analysis/GRExprEngine.cpp b/clang/lib/Analysis/GRExprEngine.cpp
index 7e3fd45ab94..1fb7e5d9663 100644
--- a/clang/lib/Analysis/GRExprEngine.cpp
+++ b/clang/lib/Analysis/GRExprEngine.cpp
@@ -2536,7 +2536,8 @@ void GRExprEngine::VisitUnaryOperator(UnaryOperator* U, NodeTy* Pred,
// Conjure a new symbol if necessary to recover precision.
if (Result.isUnknown() || !getConstraintManager().canReasonAbout(Result))
- Result = SVal::GetConjuredSymbolVal(SymMgr, Ex,
+ Result = SVal::GetConjuredSymbolVal(SymMgr,
+ getStoreManager().getRegionManager(),Ex,
Builder->getCurrentBlockCount());
state = BindExpr(state, U, U->isPostfix() ? V2 : Result);
diff --git a/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp
index c5900b30cd8..cf3e800d994 100644
--- a/clang/lib/Analysis/SVals.cpp
+++ b/clang/lib/Analysis/SVals.cpp
@@ -291,26 +291,23 @@ SVal SVal::GetRValueSymbolVal(SymbolManager& SymMgr, MemRegionManager& MRMgr,
return Loc::MakeVal(MRMgr.getSymbolicRegion(sym));
// Only handle integers for now.
- if (T->isIntegerType())
+ if (T->isIntegerType() && T->isScalarType())
return NonLoc::MakeVal(sym);
}
return UnknownVal();
}
-SVal SVal::GetConjuredSymbolVal(SymbolManager &SymMgr, const Expr* E,
- unsigned Count) {
-
+SVal SVal::GetConjuredSymbolVal(SymbolManager &SymMgr, MemRegionManager& MRMgr,
+ const Expr* E, unsigned Count) {
QualType T = E->getType();
-
- if (Loc::IsLocType(T)) {
- SymbolRef Sym = SymMgr.getConjuredSymbol(E, Count);
- return loc::SymbolVal(Sym);
- }
- else if (T->isIntegerType() && T->isScalarType()) {
- SymbolRef Sym = SymMgr.getConjuredSymbol(E, Count);
- return nonloc::SymbolVal(Sym);
- }
+ SymbolRef sym = SymMgr.getConjuredSymbol(E, Count);
+
+ if (Loc::IsLocType(T))
+ return Loc::MakeVal(MRMgr.getSymbolicRegion(sym));
+
+ if (T->isIntegerType() && T->isScalarType())
+ return NonLoc::MakeVal(sym);
return UnknownVal();
}
OpenPOWER on IntegriCloud