The LiveVariables analysis no longer requires a FunctionDecl&; this allows it
to be run on other declarations of blocks of code (e.g., Objective-C methods.)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48339 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/DeadStores.cpp b/Analysis/DeadStores.cpp
index 0c05484..0848336 100644
--- a/Analysis/DeadStores.cpp
+++ b/Analysis/DeadStores.cpp
@@ -76,13 +76,12 @@
namespace clang {
-void CheckDeadStores(CFG& cfg, FunctionDecl& FD, ASTContext &Ctx,
- Diagnostic &Diags) {
+void CheckDeadStores(CFG& cfg, ASTContext &Ctx, Diagnostic &Diags) {
- LiveVariables L(cfg, FD);
+ LiveVariables L(cfg);
L.runOnCFG(cfg);
DeadStoreObs A(Ctx, Diags);
- L.runOnAllBlocks(cfg,&A);
+ L.runOnAllBlocks(cfg, &A);
}
} // end namespace clang
diff --git a/Analysis/LiveVariables.cpp b/Analysis/LiveVariables.cpp
index 52f7f4d..e59a488 100644
--- a/Analysis/LiveVariables.cpp
+++ b/Analysis/LiveVariables.cpp
@@ -43,14 +43,9 @@
} // end anonymous namespace
-LiveVariables::LiveVariables(CFG& cfg, FunctionDecl& FD) {
+LiveVariables::LiveVariables(CFG& cfg) {
+ // Register all referenced VarDecls.
getAnalysisData().setCFG(&cfg);
-
- for (FunctionDecl::param_iterator I=FD.param_begin(), E=FD.param_end();
- I !=E; ++I)
- getAnalysisData().Register(*I);
-
- // Now register all the other VarDecls;
RegisterDecls R(getAnalysisData());
cfg.VisitBlockStmts(R);
}
@@ -201,11 +196,13 @@
//
bool LiveVariables::isLive(const CFGBlock* B, const VarDecl* D) const {
- return getBlockData(B)(D,getAnalysisData());
+ DeclBitVector_Types::Idx i = getAnalysisData().getIdx(D);
+ return i.isValid() ? getBlockData(B).getBit(i) : false;
}
bool LiveVariables::isLive(const ValTy& Live, const VarDecl* D) const {
- return Live(D,getAnalysisData());
+ DeclBitVector_Types::Idx i = getAnalysisData().getIdx(D);
+ return i.isValid() ? Live.getBit(i) : false;
}
bool LiveVariables::isLive(const Stmt* Loc, const Stmt* StmtVal) const {