]> granicus.if.org Git - clang/commitdiff
Added support from retrieving stored values to variables.
authorTed Kremenek <kremenek@apple.com>
Wed, 16 Jan 2008 19:47:19 +0000 (19:47 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 16 Jan 2008 19:47:19 +0000 (19:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46087 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/GRConstants.cpp

index 1502fd4fb87b14fb90d7cc9b585866d8ea3b9b08..50950ce68b6a99b4c2d53ce9932e763ee4e28084 100644 (file)
@@ -40,7 +40,7 @@ using llvm::cast;
 //===----------------------------------------------------------------------===//
 namespace {
 class VISIBILITY_HIDDEN DSPtr {
-  const uintptr_t Raw;
+  uintptr_t Raw;
 public:
   enum  VariantKind { IsDecl=0x1, IsBlkLvl=0x2, IsSubExp=0x3, Flags=0x3 };
   inline void* getPtr() const { return reinterpret_cast<void*>(Raw & ~Flags); }
@@ -218,7 +218,11 @@ void GRConstants::ProcessStmt(Stmt* S, NodeBuilder& builder) {
 }
 
 ExprVariantTy GRConstants::GetBinding(Expr* E) {
-  DSPtr P(E, getCFG().isBlkExpr(E));
+  DSPtr P(NULL);
+  
+  if (DeclRefExpr* D = dyn_cast<DeclRefExpr>(E)) P = DSPtr(D->getDecl());
+  else P = DSPtr(E, getCFG().isBlkExpr(E));
+
   StateTy::iterator I = CurrentState.find(P);
 
   if (I == CurrentState.end())