diff options
Diffstat (limited to 'lib/Analysis/SVals.cpp')
| -rw-r--r-- | lib/Analysis/SVals.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Analysis/SVals.cpp b/lib/Analysis/SVals.cpp index 688b7ff6e1e3..d5d36e3b9090 100644 --- a/lib/Analysis/SVals.cpp +++ b/lib/Analysis/SVals.cpp @@ -63,7 +63,7 @@ const FunctionDecl *SVal::getAsFunctionDecl() const { // FIXME: should we consider SymbolRef wrapped in CodeTextRegion? SymbolRef SVal::getAsLocSymbol() const { if (const loc::MemRegionVal *X = dyn_cast<loc::MemRegionVal>(this)) { - const MemRegion *R = X->getBaseRegion(); + const MemRegion *R = X->StripCasts(); if (const SymbolicRegion *SymR = dyn_cast<SymbolicRegion>(R)) return SymR->getSymbol(); } @@ -100,9 +100,9 @@ const MemRegion *SVal::getAsRegion() const { return 0; } -const MemRegion *loc::MemRegionVal::getBaseRegion() const { +const MemRegion *loc::MemRegionVal::StripCasts() const { const MemRegion *R = getRegion(); - return R ? R->getBaseRegion() : NULL; + return R ? R->StripCasts() : NULL; } bool SVal::symbol_iterator::operator==(const symbol_iterator &X) const { @@ -173,6 +173,10 @@ nonloc::CompoundVal::iterator nonloc::CompoundVal::end() const { // Useful predicates. //===----------------------------------------------------------------------===// +bool SVal::isConstant() const { + return isa<nonloc::ConcreteInt>(this) || isa<loc::ConcreteInt>(this); +} + bool SVal::isZeroConstant() const { if (isa<loc::ConcreteInt>(*this)) return cast<loc::ConcreteInt>(*this).getValue() == 0; |
