aboutsummaryrefslogtreecommitdiffstats
path: root/libyul/optimiser/UnusedPruner.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-10-28 19:58:21 +0800
committerchriseth <chris@ethereum.org>2018-11-09 01:14:36 +0800
commitfa44d2072116fa818282a173f011b30d61c89995 (patch)
tree4dc78dca786b550875584519240690997f6a9955 /libyul/optimiser/UnusedPruner.cpp
parent20481055e3b439657bd44ea66b05a633477eeaf8 (diff)
downloaddexon-solidity-fa44d2072116fa818282a173f011b30d61c89995.tar.gz
dexon-solidity-fa44d2072116fa818282a173f011b30d61c89995.tar.zst
dexon-solidity-fa44d2072116fa818282a173f011b30d61c89995.zip
Remove side-effect-free statements.
Diffstat (limited to 'libyul/optimiser/UnusedPruner.cpp')
-rw-r--r--libyul/optimiser/UnusedPruner.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/libyul/optimiser/UnusedPruner.cpp b/libyul/optimiser/UnusedPruner.cpp
index a7b32873..71e86798 100644
--- a/libyul/optimiser/UnusedPruner.cpp
+++ b/libyul/optimiser/UnusedPruner.cpp
@@ -85,6 +85,16 @@ void UnusedPruner::operator()(Block& _block)
}};
}
}
+ else if (statement.type() == typeid(ExpressionStatement))
+ {
+ ExpressionStatement& exprStmt = boost::get<ExpressionStatement>(statement);
+ if (MovableChecker(exprStmt.expression).movable())
+ {
+ // pop(x) should be movable!
+ subtractReferences(ReferencesCounter::countReferences(exprStmt.expression));
+ statement = Block{std::move(exprStmt.location), {}};
+ }
+ }
removeEmptyBlocks(_block);