diff options
author | Jordy Rose <jediknil@belkadan.com> | 2011-06-09 05:44:04 +0000 |
---|---|---|
committer | Jordy Rose <jediknil@belkadan.com> | 2011-06-09 05:44:04 +0000 |
commit | 7fead31dbee1a1349d360eff7b56dc6571449443 (patch) | |
tree | 25587efd990ca6579215abce4a9f944e1cb11334 /lib/Analysis/LiveVariables.cpp | |
parent | 22043b5ad4278cba814608f0368813acfcf24b67 (diff) |
[analyzer] Ignore parentheses around block-level expressions when computing liveness. Fixes the other half of PR8962.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132769 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/LiveVariables.cpp')
-rw-r--r-- | lib/Analysis/LiveVariables.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/Analysis/LiveVariables.cpp b/lib/Analysis/LiveVariables.cpp index 303dc0f604..0fe87e8719 100644 --- a/lib/Analysis/LiveVariables.cpp +++ b/lib/Analysis/LiveVariables.cpp @@ -142,8 +142,12 @@ void TransferFuncs::Visit(Stmt *S) { if (AD.Observer) AD.Observer->ObserveStmt(S, currentBlock, AD, LiveState); - if (getCFG().isBlkExpr(S)) - LiveState(S, AD) = Dead; + if (getCFG().isBlkExpr(S)) { + if (Expr *E = dyn_cast<Expr>(S)) + LiveState(E->IgnoreParens(), AD) = Dead; + else + LiveState(S, AD) = Dead; + } StmtVisitor<TransferFuncs,void>::Visit(S); } @@ -157,7 +161,10 @@ void TransferFuncs::Visit(Stmt *S) { } else { // For block-level expressions, mark that they are live. - LiveState(S,AD) = Alive; + if (Expr *E = dyn_cast<Expr>(S)) + LiveState(E->IgnoreParens(), AD) = Alive; + else + LiveState(S, AD) = Alive; } } @@ -174,6 +181,9 @@ void TransferFuncs::VisitTerminator(CFGBlock* B) { return; assert (getCFG().isBlkExpr(E)); + + if (const Expr *Ex = dyn_cast<Expr>(E)) + E = Ex->IgnoreParens(); LiveState(E, AD) = Alive; } |