diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Analysis/PathSensitive/SVals.h | 21 | ||||
-rw-r--r-- | clang/lib/Analysis/BasicStore.cpp | 3 | ||||
-rw-r--r-- | clang/lib/Analysis/GRState.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Analysis/MemRegion.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Analysis/RegionStore.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Analysis/SVals.cpp | 89 |
6 files changed, 59 insertions, 68 deletions
diff --git a/clang/include/clang/Analysis/PathSensitive/SVals.h b/clang/include/clang/Analysis/PathSensitive/SVals.h index dd7c93639f7..0a425482009 100644 --- a/clang/include/clang/Analysis/PathSensitive/SVals.h +++ b/clang/include/clang/Analysis/PathSensitive/SVals.h @@ -18,7 +18,11 @@ #include "clang/Analysis/PathSensitive/SymbolManager.h" #include "llvm/Support/Casting.h" #include "llvm/ADT/ImmutableList.h" - + +namespace llvm { + class raw_ostream; +} + //==------------------------------------------------------------------------==// // Base SVal types. //==------------------------------------------------------------------------==// @@ -113,8 +117,8 @@ public: const MemRegion *getAsRegion() const; - void print(llvm::raw_ostream& OS) const; - void printStdErr() const; + void dumpToStream(llvm::raw_ostream& OS) const; + void dump() const; // Iterators. class symbol_iterator { @@ -171,7 +175,7 @@ protected: NonLoc(unsigned SubKind, const void* d) : SVal(d, false, SubKind) {} public: - void print(llvm::raw_ostream& Out) const; + void dumpToStream(llvm::raw_ostream& Out) const; // Implement isa<T> support. static inline bool classof(const SVal* V) { @@ -185,7 +189,7 @@ protected: : SVal(const_cast<void*>(D), true, SubKind) {} public: - void print(llvm::raw_ostream& Out) const; + void dumpToStream(llvm::raw_ostream& Out) const; Loc(const Loc& X) : SVal(X.Data, true, X.getSubKind()) {} Loc& operator=(const Loc& X) { memcpy(this, &X, sizeof(Loc)); return *this; } @@ -418,4 +422,11 @@ public: } // end clang::loc namespace } // end clang namespace +namespace llvm { +static inline llvm::raw_ostream& operator<<(llvm::raw_ostream& os, + clang::SVal V) { + V.dumpToStream(os); + return os; +} +} // end llvm namespace #endif diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp index ba1ccf1f900..f1f051f244c 100644 --- a/clang/lib/Analysis/BasicStore.cpp +++ b/clang/lib/Analysis/BasicStore.cpp @@ -611,8 +611,7 @@ void BasicStoreManager::print(Store store, llvm::raw_ostream& Out, else Out << nl; - Out << ' ' << I.getKey() << " : "; - I.getData().print(Out); + Out << ' ' << I.getKey() << " : " << I.getData(); } } diff --git a/clang/lib/Analysis/GRState.cpp b/clang/lib/Analysis/GRState.cpp index 54c0afbff33..b849bea0b59 100644 --- a/clang/lib/Analysis/GRState.cpp +++ b/clang/lib/Analysis/GRState.cpp @@ -168,8 +168,7 @@ void GRState::print(llvm::raw_ostream& Out, const char* nl, Out << " (" << (void*) I.getKey() << ") "; LangOptions LO; // FIXME. I.getKey()->printPretty(Out, 0, PrintingPolicy(LO)); - Out << " : "; - I.getData().print(Out); + Out << " : " << I.getData(); } // Print block-expression bindings. @@ -186,8 +185,7 @@ void GRState::print(llvm::raw_ostream& Out, const char* nl, Out << " (" << (void*) I.getKey() << ") "; LangOptions LO; // FIXME. I.getKey()->printPretty(Out, 0, PrintingPolicy(LO)); - Out << " : "; - I.getData().print(Out); + Out << " : " << I.getData(); } Mgr->getConstraintManager().print(this, Out, nl, sep); diff --git a/clang/lib/Analysis/MemRegion.cpp b/clang/lib/Analysis/MemRegion.cpp index 8a40e4ae523..6a531b99179 100644 --- a/clang/lib/Analysis/MemRegion.cpp +++ b/clang/lib/Analysis/MemRegion.cpp @@ -178,7 +178,7 @@ void CompoundLiteralRegion::dumpToStream(llvm::raw_ostream& os) const { } void ElementRegion::dumpToStream(llvm::raw_ostream& os) const { - os << superRegion << '['; Index.print(os); os << ']'; + os << superRegion << '[' << Index << ']'; } void FieldRegion::dumpToStream(llvm::raw_ostream& os) const { diff --git a/clang/lib/Analysis/RegionStore.cpp b/clang/lib/Analysis/RegionStore.cpp index 2999225a433..c59d935c3d6 100644 --- a/clang/lib/Analysis/RegionStore.cpp +++ b/clang/lib/Analysis/RegionStore.cpp @@ -1438,8 +1438,6 @@ void RegionStoreManager::print(Store store, llvm::raw_ostream& OS, RegionBindingsTy B = GetRegionBindings(store); OS << "Store:" << nl; - for (RegionBindingsTy::iterator I = B.begin(), E = B.end(); I != E; ++I) { - OS << ' ' << I.getKey() << " : "; - I.getData().print(OS); OS << nl; - } + for (RegionBindingsTy::iterator I = B.begin(), E = B.end(); I != E; ++I) + OS << ' ' << I.getKey() << " : " << I.getData() << nl; } diff --git a/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp index d711ce0a225..e5657ff6b61 100644 --- a/clang/lib/Analysis/SVals.cpp +++ b/clang/lib/Analysis/SVals.cpp @@ -239,98 +239,83 @@ SVal loc::ConcreteInt::EvalBinOp(BasicValueFactory& BasicVals, // Pretty-Printing. //===----------------------------------------------------------------------===// -void SVal::printStdErr() const { print(llvm::errs()); } +void SVal::dump() const { dumpToStream(llvm::errs()); } -void SVal::print(llvm::raw_ostream& Out) const { - - switch (getBaseKind()) { - +void SVal::dumpToStream(llvm::raw_ostream& os) const { + switch (getBaseKind()) { case UnknownKind: - Out << "Invalid"; break; - + os << "Invalid"; + break; case NonLocKind: - cast<NonLoc>(this)->print(Out); break; - + cast<NonLoc>(this)->dumpToStream(os); + break; case LocKind: - cast<Loc>(this)->print(Out); break; - + cast<Loc>(this)->dumpToStream(os); + break; case UndefinedKind: - Out << "Undefined"; break; - + os << "Undefined"; + break; default: assert (false && "Invalid SVal."); } } -void NonLoc::print(llvm::raw_ostream& Out) const { - +void NonLoc::dumpToStream(llvm::raw_ostream& os) const { switch (getSubKind()) { - case nonloc::ConcreteIntKind: - Out << cast<nonloc::ConcreteInt>(this)->getValue().getZExtValue(); - + os << cast<nonloc::ConcreteInt>(this)->getValue().getZExtValue(); if (cast<nonloc::ConcreteInt>(this)->getValue().isUnsigned()) - Out << 'U'; - - break; - + os << 'U'; + break; case nonloc::SymbolValKind: - Out << '$' << cast<nonloc::SymbolVal>(this)->getSymbol(); - break; - + os << '$' << cast<nonloc::SymbolVal>(this)->getSymbol(); + break; case nonloc::SymExprValKind: { const nonloc::SymExprVal& C = *cast<nonloc::SymExprVal>(this); const SymExpr *SE = C.getSymbolicExpression(); - Out << SE; + os << SE; break; - } - + } case nonloc::LocAsIntegerKind: { const nonloc::LocAsInteger& C = *cast<nonloc::LocAsInteger>(this); - C.getLoc().print(Out); - Out << " [as " << C.getNumBits() << " bit integer]"; + os << C.getLoc() << " [as " << C.getNumBits() << " bit integer]"; break; } - case nonloc::CompoundValKind: { const nonloc::CompoundVal& C = *cast<nonloc::CompoundVal>(this); - Out << " {"; + os << " {"; bool first = true; for (nonloc::CompoundVal::iterator I=C.begin(), E=C.end(); I!=E; ++I) { - if (first) { Out << ' '; first = false; } - else Out << ", "; - (*I).print(Out); + if (first) { + os << ' '; first = false; + } + else + os << ", "; + + (*I).dumpToStream(os); } - Out << " }"; + os << " }"; break; - } - + } default: assert (false && "Pretty-printed not implemented for this NonLoc."); break; } } -void Loc::print(llvm::raw_ostream& Out) const { - +void Loc::dumpToStream(llvm::raw_ostream& os) const { switch (getSubKind()) { - case loc::ConcreteIntKind: - Out << cast<loc::ConcreteInt>(this)->getValue().getZExtValue() - << " (Loc)"; - break; - + os << cast<loc::ConcreteInt>(this)->getValue().getZExtValue() << " (Loc)"; + break; case loc::GotoLabelKind: - Out << "&&" - << cast<loc::GotoLabel>(this)->getLabel()->getID()->getName(); + os << "&&" << cast<loc::GotoLabel>(this)->getLabel()->getID()->getName(); break; - case loc::MemRegionKind: - Out << '&' << cast<loc::MemRegionVal>(this)->getRegion()->getString(); - break; - + os << '&' << cast<loc::MemRegionVal>(this)->getRegion()->getString(); + break; default: - assert (false && "Pretty-printing not implemented for this Loc."); + assert(false && "Pretty-printing not implemented for this Loc."); break; } } |