aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Analysis/PathSensitive/SymbolManager.h11
-rw-r--r--lib/Analysis/BasicStore.cpp2
-rw-r--r--lib/Analysis/RegionStore.cpp2
-rw-r--r--lib/Analysis/SymbolManager.cpp4
4 files changed, 11 insertions, 8 deletions
diff --git a/include/clang/Analysis/PathSensitive/SymbolManager.h b/include/clang/Analysis/PathSensitive/SymbolManager.h
index 167a102e94..8dbbaace4f 100644
--- a/include/clang/Analysis/PathSensitive/SymbolManager.h
+++ b/include/clang/Analysis/PathSensitive/SymbolManager.h
@@ -28,10 +28,11 @@ namespace llvm {
}
namespace clang {
- class MemRegion;
- class TypedRegion;
class ASTContext;
class BasicValueFactory;
+ class MemRegion;
+ class TypedRegion;
+ class VarRegion;
}
namespace clang {
@@ -345,10 +346,8 @@ public:
return Liveness.isLive(Loc, ExprVal);
}
- bool isLive(const Stmt* Loc, const VarDecl* VD) const {
- return Liveness.isLive(Loc, VD);
- }
-
+ bool isLive(const Stmt* Loc, const VarRegion *VR) const;
+
void markLive(SymbolRef sym);
bool maybeDead(SymbolRef sym);
diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp
index 45fc11a534..c2bf7a8d71 100644
--- a/lib/Analysis/BasicStore.cpp
+++ b/lib/Analysis/BasicStore.cpp
@@ -368,7 +368,7 @@ BasicStoreManager::RemoveDeadBindings(GRState &state, Stmt* Loc,
// Iterate over the variable bindings.
for (BindingsTy::iterator I=B.begin(), E=B.end(); I!=E ; ++I) {
if (const VarRegion *VR = dyn_cast<VarRegion>(I.getKey())) {
- if (SymReaper.isLive(Loc, VR->getDecl()))
+ if (SymReaper.isLive(Loc, VR))
RegionRoots.push_back(VR);
else
continue;
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp
index 13462f4785..4a84eea42f 100644
--- a/lib/Analysis/RegionStore.cpp
+++ b/lib/Analysis/RegionStore.cpp
@@ -1697,7 +1697,7 @@ void RegionStoreManager::RemoveDeadBindings(GRState &state, Stmt* Loc,
IntermediateVisited.insert(R);
if (const VarRegion* VR = dyn_cast<VarRegion>(R)) {
- if (SymReaper.isLive(Loc, VR->getDecl()))
+ if (SymReaper.isLive(Loc, VR))
WorkList.push_back(std::make_pair(&state, VR));
continue;
}
diff --git a/lib/Analysis/SymbolManager.cpp b/lib/Analysis/SymbolManager.cpp
index 22e1101929..da91f55bc0 100644
--- a/lib/Analysis/SymbolManager.cpp
+++ b/lib/Analysis/SymbolManager.cpp
@@ -220,4 +220,8 @@ bool SymbolReaper::isLive(SymbolRef sym) {
return isa<SymbolRegionValue>(sym);
}
+bool SymbolReaper::isLive(const Stmt *Loc, const VarRegion *VR) const {
+ return Liveness.isLive(Loc, VR->getDecl());
+}
+
SymbolVisitor::~SymbolVisitor() {}