summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/SVals.cpp
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2008-12-20 06:32:12 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2008-12-20 06:32:12 +0000
commitaf7415ffb1b01b91f9abf190f32766514156db5a (patch)
treec063372b7ad54a40a986ebdb70281b90f6440c6b /clang/lib/Analysis/SVals.cpp
parentab66b87f7f008e5314003512d6c3f4214b905484 (diff)
downloadbcm5719-llvm-af7415ffb1b01b91f9abf190f32766514156db5a.tar.gz
bcm5719-llvm-af7415ffb1b01b91f9abf190f32766514156db5a.zip
Lazy bingding for region-store manager.
* Now Bind() methods take and return GRState* because binding could also alter GDM. * No variables are initialized except those declared with initial values. * failed C test cases are due to bugs in RemoveDeadBindings(), which removes constraints that is still alive. This will be fixed in later patch. * default value of array and struct regions will be implemented in later patch. llvm-svn: 61274
Diffstat (limited to 'clang/lib/Analysis/SVals.cpp')
-rw-r--r--clang/lib/Analysis/SVals.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp
index 3288b74a993..6cc5e914f40 100644
--- a/clang/lib/Analysis/SVals.cpp
+++ b/clang/lib/Analysis/SVals.cpp
@@ -242,6 +242,11 @@ NonLoc Loc::NE(BasicValueFactory& BasicVals, const Loc& R) const {
//===----------------------------------------------------------------------===//
// Utility methods for constructing Non-Locs.
//===----------------------------------------------------------------------===//
+
+NonLoc NonLoc::MakeVal(SymbolRef sym) {
+ return nonloc::SymbolVal(sym);
+}
+
NonLoc NonLoc::MakeVal(BasicValueFactory& BasicVals, unsigned X,
bool isUnsigned) {
return nonloc::ConcreteInt(BasicVals.getValue(X, sizeof(unsigned)*8,
@@ -281,6 +286,14 @@ NonLoc NonLoc::MakeCompoundVal(QualType T, llvm::ImmutableList<SVal> Vals,
return nonloc::CompoundVal(BasicVals.getCompoundValData(T, Vals));
}
+SVal SVal::MakeSymbolValue(SymbolManager& SymMgr, const MemRegion* R,
+ QualType T) {
+ if (Loc::IsLocType(T))
+ return Loc::MakeVal(SymMgr.getSymbol(R));
+ else
+ return NonLoc::MakeVal(SymMgr.getSymbol(R));
+}
+
SVal SVal::GetSymbolValue(SymbolManager& SymMgr, VarDecl* D) {
QualType T = D->getType();
@@ -320,6 +333,8 @@ Loc Loc::MakeVal(const MemRegion* R) { return loc::MemRegionVal(R); }
Loc Loc::MakeVal(AddrLabelExpr* E) { return loc::GotoLabel(E->getLabel()); }
+Loc Loc::MakeVal(SymbolRef sym) { return loc::SymbolVal(sym); }
+
//===----------------------------------------------------------------------===//
// Pretty-Printing.
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud