}
namespace clang {
- class MemRegion;
- class TypedRegion;
class ASTContext;
class BasicValueFactory;
+ class MemRegion;
+ class TypedRegion;
+ class VarRegion;
}
namespace clang {
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);
// 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;
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;
}
return isa<SymbolRegionValue>(sym);
}
+bool SymbolReaper::isLive(const Stmt *Loc, const VarRegion *VR) const {
+ return Liveness.isLive(Loc, VR->getDecl());
+}
+
SymbolVisitor::~SymbolVisitor() {}