aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libyul/optimiser/SimplificationRules.cpp3
-rw-r--r--test/libyul/yulOptimizerTests/expressionSimplifier/unassigned_vars.yul14
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)
+// }