Revert "[analyzer] Refactor conditional expression evaluating code"

This reverts commit r189090.

The original patch introduced regressions (see the added live-variables.* tests). The patch depends on the correctness of live variable analyses, which are not computed correctly. I've opened PR18159 to track the proper resolution to this problem.

The patch was a stepping block to r189746. This is why part of the patch reverts temporary destructor tests that started crashing. The temporary destructors feature is disabled by default.

llvm-svn: 196593
This commit is contained in:
Anna Zaks
2013-12-06 18:56:29 +00:00
parent ba0aea16e1
commit cf8d2165ff
6 changed files with 128 additions and 101 deletions

View File

@@ -211,8 +211,6 @@ class TransferFunctions : public StmtVisitor<TransferFunctions> {
LiveVariables::LivenessValues &val;
LiveVariables::Observer *observer;
const CFGBlock *currentBlock;
void markLogicalExprLeaves(const Expr *E);
public:
TransferFunctions(LiveVariablesImpl &im,
LiveVariables::LivenessValues &Val,
@@ -369,25 +367,9 @@ void TransferFunctions::VisitBinaryOperator(BinaryOperator *B) {
if (observer)
observer->observerKill(DR);
}
} else if (B->isLogicalOp()) {
// Leaf expressions in the logical operator tree are live until we reach the
// outermost logical operator. Static analyzer relies on this behaviour.
markLogicalExprLeaves(B->getLHS()->IgnoreParens());
markLogicalExprLeaves(B->getRHS()->IgnoreParens());
}
}
void TransferFunctions::markLogicalExprLeaves(const Expr *E) {
const BinaryOperator *B = dyn_cast<BinaryOperator>(E);
if (!B || !B->isLogicalOp()) {
val.liveStmts = LV.SSetFact.add(val.liveStmts, E);
return;
}
markLogicalExprLeaves(B->getLHS()->IgnoreParens());
markLogicalExprLeaves(B->getRHS()->IgnoreParens());
}
void TransferFunctions::VisitBlockExpr(BlockExpr *BE) {
AnalysisDeclContext::referenced_decls_iterator I, E;
llvm::tie(I, E) =