LiveVariables now updates the liveness state of block-level expressions that
are referenced by CFGBlock terminators. llvm-svn: 49798
This commit is contained in:
parent
2e4d0ecaa3
commit
ed30e8da56
|
@ -143,22 +143,59 @@ void TransferFuncs::Visit(Stmt *S) {
|
|||
}
|
||||
|
||||
void TransferFuncs::VisitTerminator(Stmt* S) {
|
||||
return;
|
||||
|
||||
for (Stmt::child_iterator I = S->child_begin(), E = S->child_end();
|
||||
I != E; ++I) {
|
||||
|
||||
Stmt* Child = *I;
|
||||
if (!Child) continue;
|
||||
|
||||
if (getCFG().isBlkExpr(Child)) {
|
||||
LiveState(Child, AD) = Alive;
|
||||
return; // Only one "condition" expression.
|
||||
}
|
||||
Expr* E = NULL;
|
||||
|
||||
switch (S->getStmtClass()) {
|
||||
default:
|
||||
return;
|
||||
|
||||
case Stmt::ForStmtClass:
|
||||
E = cast<ForStmt>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::WhileStmtClass:
|
||||
E = cast<WhileStmt>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::DoStmtClass:
|
||||
E = cast<DoStmt>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::IfStmtClass:
|
||||
E = cast<IfStmt>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::ChooseExprClass:
|
||||
E = cast<ChooseExpr>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::IndirectGotoStmtClass:
|
||||
E = cast<IndirectGotoStmt>(S)->getTarget();
|
||||
break;
|
||||
|
||||
case Stmt::SwitchStmtClass:
|
||||
E = cast<SwitchStmt>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::ConditionalOperatorClass:
|
||||
E = cast<ConditionalOperator>(S)->getCond();
|
||||
break;
|
||||
|
||||
case Stmt::BinaryOperatorClass: // '&&' and '||'
|
||||
E = cast<BinaryOperator>(S)->getLHS();
|
||||
break;
|
||||
}
|
||||
|
||||
if (!E)
|
||||
return;
|
||||
|
||||
E = E->IgnoreParens();
|
||||
|
||||
assert (getCFG().isBlkExpr(E));
|
||||
LiveState(E, AD) = Alive;
|
||||
}
|
||||
|
||||
|
||||
void TransferFuncs::VisitDeclRefExpr(DeclRefExpr* DR) {
|
||||
if (VarDecl* V = dyn_cast<VarDecl>(DR->getDecl()))
|
||||
LiveState(V,AD) = Alive;
|
||||
|
|
Loading…
Reference in New Issue