diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-01-18 00:40:21 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-01-18 00:40:21 +0000 |
commit | 2a9da9c85fbe559299a3d123180ed07a53b533c6 (patch) | |
tree | b41da6561f3d8beb6ac4b45606d423bb6f57efb9 | |
parent | d3cd1e56d19474ac785e54c3915d82d2ad7f7fa9 (diff) |
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
-rw-r--r-- | Analysis/LiveVariables.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Analysis/LiveVariables.cpp b/Analysis/LiveVariables.cpp index 5bd72b42af..b96f7fc4bb 100644 --- a/Analysis/LiveVariables.cpp +++ b/Analysis/LiveVariables.cpp @@ -77,10 +77,9 @@ void TransferFuncs::Visit(Stmt *S) { 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 @@ bool LiveVariables::isLive(const Stmt* Loc, const Stmt* StmtVal) const { 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 // |