Added lazy "symbolication" of parameter variables and global variables.
Added recording of divide-by-zero and divide-by-uninitialized nodes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47586 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/SymbolManager.cpp b/Analysis/SymbolManager.cpp
index ced5741..dd71dc9 100644
--- a/Analysis/SymbolManager.cpp
+++ b/Analysis/SymbolManager.cpp
@@ -16,17 +16,24 @@
using namespace clang;
-SymbolID SymbolManager::getSymbol(ParmVarDecl* D) {
+SymbolID SymbolManager::getSymbol(VarDecl* D) {
+
+ assert (isa<ParmVarDecl>(D) || D->hasGlobalStorage());
+
SymbolID& X = DataToSymbol[getKey(D)];
if (!X.isInitialized()) {
X = SymbolToData.size();
- SymbolToData.push_back(SymbolDataParmVar(D));
+
+ if (ParmVarDecl* VD = dyn_cast<ParmVarDecl>(D))
+ SymbolToData.push_back(SymbolDataParmVar(VD));
+ else
+ SymbolToData.push_back(SymbolDataGlobalVar(D));
}
return X;
-}
-
+}
+
SymbolID SymbolManager::getContentsOfSymbol(SymbolID sym) {
SymbolID& X = DataToSymbol[getKey(sym)];
@@ -45,6 +52,9 @@
case ParmKind:
return cast<SymbolDataParmVar>(this)->getDecl()->getType();
+
+ case GlobalKind:
+ return cast<SymbolDataGlobalVar>(this)->getDecl()->getType();
case ContentsOfKind: {
SymbolID x = cast<SymbolDataContentsOf>(this)->getSymbol();