diff options
-rw-r--r-- | libyul/optimiser/SimplificationRules.cpp | 3 | ||||
-rw-r--r-- | test/libyul/yulOptimizerTests/expressionSimplifier/unassigned_vars.yul | 14 |
2 files changed, 16 insertions, 1 deletions
diff --git a/libyul/optimiser/SimplificationRules.cpp b/libyul/optimiser/SimplificationRules.cpp index b3190fef..8ed63fa8 100644 --- a/libyul/optimiser/SimplificationRules.cpp +++ b/libyul/optimiser/SimplificationRules.cpp @@ -114,7 +114,8 @@ bool Pattern::matches(Expression const& _expr, map<YulString, Expression const*> { YulString varName = boost::get<Identifier>(_expr).name; if (_ssaValues.count(varName)) - expr = _ssaValues.at(varName); + if (Expression const* new_expr = _ssaValues.at(varName)) + expr = new_expr; } assertThrow(expr, OptimizerException, ""); diff --git a/test/libyul/yulOptimizerTests/expressionSimplifier/unassigned_vars.yul b/test/libyul/yulOptimizerTests/expressionSimplifier/unassigned_vars.yul new file mode 100644 index 00000000..87391b8c --- /dev/null +++ b/test/libyul/yulOptimizerTests/expressionSimplifier/unassigned_vars.yul @@ -0,0 +1,14 @@ +// c & d can't be optimized as expression simplifier doesn't handle default +// values yet +{ + let c + let d + let y := add(d, add(c, 7)) +} +// ---- +// expressionSimplifier +// { +// let c +// let d +// let y := add(add(d, c), 7) +// } |