Fixed bug in 'LiveVariables' analysis where we incorrectly marked a variable
dead at an assignment without taking into account if the variable was used in
the RHS of the assignment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46153 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/LiveVariables.cpp b/Analysis/LiveVariables.cpp
index 5bd72b4..b96f7fc 100644
--- a/Analysis/LiveVariables.cpp
+++ b/Analysis/LiveVariables.cpp
@@ -77,10 +77,9 @@
if (AD.Observer)
AD.Observer->ObserveStmt(S,AD,LiveState);
-
if (S == getCurrentBlkStmt()) {
- StmtVisitor<TransferFuncs,void>::Visit(S);
if (getCFG().isBlkExpr(S)) LiveState(S,AD) = Dead;
+ StmtVisitor<TransferFuncs,void>::Visit(S);
}
else if (!getCFG().isBlkExpr(S))
StmtVisitor<TransferFuncs,void>::Visit(S);
@@ -199,6 +198,10 @@
return getStmtData(Loc)(StmtVal,getAnalysisData());
}
+bool LiveVariables::isLive(const Stmt* Loc, const VarDecl* D) const {
+ return getStmtData(Loc)(D,getAnalysisData());
+}
+
//===----------------------------------------------------------------------===//
// printing liveness state for debugging
//