summaryrefslogtreecommitdiffstats
path: root/clang/Analysis/SymbolManager.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-02-26 02:15:56 +0000
committerTed Kremenek <kremenek@apple.com>2008-02-26 02:15:56 +0000
commit06b671097d5e1f11b55442c36db5ec6b8b267280 (patch)
tree8732b2c779c64333abedd9d0a89d6ceb1a9a18da /clang/Analysis/SymbolManager.cpp
parent443018e55eb6c6cd4b1f0216279e4a54c1c26eae (diff)
downloadbcm5719-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.cpp18
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();
OpenPOWER on IntegriCloud