diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-03-20 20:10:45 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-03-20 20:10:45 +0000 |
commit | bb9b2711ded08d39f9c9aa08b06ac5e288f32c62 (patch) | |
tree | a5d35ab986b1eda097b74dc905003237b7763db5 /lib/Analysis/SVals.cpp | |
parent | 9ecede735e6b180676846e95844a846ff7c251e0 (diff) |
GRExprEngine:
- Conjure symbols at '--' and '++' unary operations
- Add utility method SVal::GetConjuredSymbolVal() and constify some arguments
along the way.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67395 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/SVals.cpp')
-rw-r--r-- | lib/Analysis/SVals.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/Analysis/SVals.cpp b/lib/Analysis/SVals.cpp index 3762ae5ce6..12bf795972 100644 --- a/lib/Analysis/SVals.cpp +++ b/lib/Analysis/SVals.cpp @@ -338,6 +338,23 @@ SVal SVal::GetRValueSymbolVal(SymbolManager& SymMgr, const MemRegion* R) { return UnknownVal(); } +SVal SVal::GetConjuredSymbolVal(SymbolManager &SymMgr, 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); + } + + return UnknownVal(); +} + nonloc::LocAsInteger nonloc::LocAsInteger::Make(BasicValueFactory& Vals, Loc V, unsigned Bits) { return LocAsInteger(Vals.getPersistentSValWithData(V, Bits)); |