diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-04-09 05:57:11 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-04-09 05:57:11 +0000 |
| commit | cb5d3ced7037f89ee10c3769f10c6cea94d05d6c (patch) | |
| tree | c26d666ff53a1c7bc5575f84c7cdbe24dc88d2a7 /clang/lib | |
| parent | fc8b2b9ff9938167e8007c599fd992f0b62e7ddf (diff) | |
| download | bcm5719-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.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Analysis/SVals.cpp | 23 |
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(); } |

