diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-02-26 02:15:56 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-02-26 02:15:56 +0000 |
commit | 06b671097d5e1f11b55442c36db5ec6b8b267280 (patch) | |
tree | 8732b2c779c64333abedd9d0a89d6ceb1a9a18da /clang/Analysis/SymbolManager.cpp | |
parent | 443018e55eb6c6cd4b1f0216279e4a54c1c26eae (diff) | |
download | bcm5719-llvm-06b671097d5e1f11b55442c36db5ec6b8b267280.tar.gz bcm5719-llvm-06b671097d5e1f11b55442c36db5ec6b8b267280.zip |
Added lazy "symbolication" of parameter variables and global variables.
Added recording of divide-by-zero and divide-by-uninitialized nodes.
llvm-svn: 47586
Diffstat (limited to 'clang/Analysis/SymbolManager.cpp')
-rw-r--r-- | clang/Analysis/SymbolManager.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/clang/Analysis/SymbolManager.cpp b/clang/Analysis/SymbolManager.cpp index ced5741f447..dd71dc9d04d 100644 --- a/clang/Analysis/SymbolManager.cpp +++ b/clang/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 @@ QualType SymbolData::getType(const SymbolManager& SymMgr) const { case ParmKind: return cast<SymbolDataParmVar>(this)->getDecl()->getType(); + + case GlobalKind: + return cast<SymbolDataGlobalVar>(this)->getDecl()->getType(); case ContentsOfKind: { SymbolID x = cast<SymbolDataContentsOf>(this)->getSymbol(); |