[cfe-commits] r153235 - /cfe/trunk/lib/AST/ExprConstant.cpp
Argyrios Kyrtzidis
akyrtzi at gmail.com
Wed Mar 21 19:13:07 PDT 2012
Author: akirtzidis
Date: Wed Mar 21 21:13:06 2012
New Revision: 153235
URL: http://llvm.org/viewvc/llvm-project?rev=153235&view=rev
Log:
Simplify DataRecursiveIntBinOpEvaluator::VisitBinOp() a bit and make sure we don't
evaluate RHS if LHS could not be evaluated and keepEvaluatingAfterFailure() is false.
Modified:
cfe/trunk/lib/AST/ExprConstant.cpp
Modified: cfe/trunk/lib/AST/ExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=153235&r1=153234&r2=153235&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Wed Mar 21 21:13:06 2012
@@ -4537,8 +4537,8 @@
return Info.CCEDiag(E, D);
}
- bool VisitBinOpLHSOnly(const EvalResult &LHSResult, const BinaryOperator *E,
- bool &IgnoreRHS, APValue &Result,
+ // \brief Returns true if visiting the RHS is necessary, false otherwise.
+ bool VisitBinOpLHSOnly(EvalResult &LHSResult, const BinaryOperator *E,
bool &SuppressRHSDiags);
bool VisitBinOp(const EvalResult &LHSResult, const EvalResult &RHSResult,
@@ -4563,8 +4563,7 @@
}
bool DataRecursiveIntBinOpEvaluator::
- VisitBinOpLHSOnly(const EvalResult &LHSResult, const BinaryOperator *E,
- bool &IgnoreRHS, APValue &Result,
+ VisitBinOpLHSOnly(EvalResult &LHSResult, const BinaryOperator *E,
bool &SuppressRHSDiags) {
if (E->getOpcode() == BO_Comma) {
// Ignore LHS but note if we could not evaluate it.
@@ -4579,8 +4578,8 @@
// We were able to evaluate the LHS, see if we can get away with not
// evaluating the RHS: 0 && X -> 0, 1 || X -> 1
if (lhsResult == (E->getOpcode() == BO_LOr)) {
- IgnoreRHS = true;
- return Success(lhsResult, E, Result);
+ Success(lhsResult, E, LHSResult.Val);
+ return false; // Ignore RHS
}
} else {
// Since we weren't able to evaluate the left hand side, it
@@ -4600,8 +4599,8 @@
E->getRHS()->getType()->isIntegralOrEnumerationType());
if (LHSResult.Failed && !Info.keepEvaluatingAfterFailure())
- return false;
-
+ return false; // Ignore RHS;
+
return true;
}
@@ -4803,17 +4802,14 @@
case Job::BinOpKind: {
const BinaryOperator *Bop = cast<BinaryOperator>(job.E);
- job.LHSResult.swap(Result);
- bool IgnoreRHS = false;
bool SuppressRHSDiags = false;
- Result.Failed = !VisitBinOpLHSOnly(job.LHSResult, Bop, IgnoreRHS,
- Result.Val, SuppressRHSDiags);
- if (IgnoreRHS) {
+ if (!VisitBinOpLHSOnly(Result, Bop, SuppressRHSDiags)) {
Queue.pop_back();
return;
}
if (SuppressRHSDiags)
job.startSpeculativeEval(Info);
+ job.LHSResult.swap(Result);
job.Kind = Job::BinOpVisitedLHSKind;
enqueue(Bop->getRHS());
return;
More information about the cfe-commits
mailing list