summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/LiveVariables.cpp
diff options
context:
space:
mode:
authorJordy Rose <jediknil@belkadan.com>2011-06-09 05:44:04 +0000
committerJordy Rose <jediknil@belkadan.com>2011-06-09 05:44:04 +0000
commit891d61328910f41bf6471e0493561cba1d6b5987 (patch)
tree16e866d410802371663c79bb9c1d6e4726c397cf /clang/lib/Analysis/LiveVariables.cpp
parent0683a7212ee202297bf9b50e67ca8a2f56c28351 (diff)
downloadbcm5719-llvm-891d61328910f41bf6471e0493561cba1d6b5987.tar.gz
bcm5719-llvm-891d61328910f41bf6471e0493561cba1d6b5987.zip
[analyzer] Ignore parentheses around block-level expressions when computing liveness. Fixes the other half of PR8962.
llvm-svn: 132769
Diffstat (limited to 'clang/lib/Analysis/LiveVariables.cpp')
-rw-r--r--clang/lib/Analysis/LiveVariables.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/clang/lib/Analysis/LiveVariables.cpp b/clang/lib/Analysis/LiveVariables.cpp
index 303dc0f604d..0fe87e8719b 100644
--- a/clang/lib/Analysis/LiveVariables.cpp
+++ b/clang/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;
}
OpenPOWER on IntegriCloud