From 96b77a4a211745cdee375b38ce4313dfc70efe8f Mon Sep 17 00:00:00 2001 From: Dan Liew Date: Thu, 29 Sep 2016 21:04:27 +0100 Subject: Fix bug in `AssignmentEvaluator` where NotOptimizedExpr would not (#466) * Add unittest to check that the `Assignment` class can evaluate expressions containing a `NotOptimizedExpr`. * Fix the `AssignmentTest.FoldNotOptimized` unit test by teaching the `ExprEvaluator` to fold `NotOptimizedExpr` nodes. --- lib/Expr/ExprEvaluator.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib/Expr/ExprEvaluator.cpp') diff --git a/lib/Expr/ExprEvaluator.cpp b/lib/Expr/ExprEvaluator.cpp index 1a146641..6b84cd6f 100644 --- a/lib/Expr/ExprEvaluator.cpp +++ b/lib/Expr/ExprEvaluator.cpp @@ -97,3 +97,12 @@ ExprVisitor::Action ExprEvaluator::visitURem(const URemExpr &e) { ExprVisitor::Action ExprEvaluator::visitSRem(const SRemExpr &e) { return protectedDivOperation(e); } + +ExprVisitor::Action ExprEvaluator::visitExprPost(const Expr& e) { + // When evaluating an assignment we should fold NotOptimizedExpr + // nodes so we can fully evaluate. + if (e.getKind() == Expr::NotOptimized) { + return Action::changeTo(static_cast(e).src); + } + return Action::skipChildren(); +} -- cgit 1.4.1