Rework use of loc::SymbolVal in the retain/release checker to use the new method
SVal::getAsLocSymbol(). This simplifies the code and allows the retain/release
checker to (I believe) also correctly reason about location symbols wrapped in
SymbolicRegions.
Along the way I cleaned up SymbolRef a little, disallowing implicit casts to
'unsigned'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65972 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/SymbolManager.cpp b/lib/Analysis/SymbolManager.cpp
index f1c1cc0..45e1aae 100644
--- a/lib/Analysis/SymbolManager.cpp
+++ b/lib/Analysis/SymbolManager.cpp
@@ -18,8 +18,23 @@
using namespace clang;
-void SymbolRef::print(llvm::raw_ostream& os) const {
- os << getNumber();
+llvm::raw_ostream& llvm::operator<<(llvm::raw_ostream& os,
+ clang::SymbolRef sym) {
+ if (sym.isValid())
+ os << sym.getNumber();
+ else
+ os << "(Invalid)";
+
+ return os;
+}
+
+std::ostream& std::operator<<(std::ostream& os, clang::SymbolRef sym) {
+ if (sym.isValid())
+ os << sym.getNumber();
+ else
+ os << "(Invalid)";
+
+ return os;
}
SymbolRef SymbolManager::getRegionRValueSymbol(const MemRegion* R) {
@@ -35,7 +50,6 @@
DataSet.InsertNode(SD, InsertPos);
DataMap[SymbolCounter] = SD;
return SymbolCounter++;
-
}
SymbolRef SymbolManager::getConjuredSymbol(Stmt* E, QualType T, unsigned Count){