aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/SolidityOptimizer.cpp
diff options
context:
space:
mode:
authorPaweł Bylica <chfast@gmail.com>2015-06-03 23:16:33 +0800
committerPaweł Bylica <chfast@gmail.com>2015-06-03 23:16:33 +0800
commit3bacb6f3776ffcf9cf13c1dbc733f24a430337fd (patch)
treed8a89f6d510a5b2eb52e9b1760c7b0a0b375879c /libsolidity/SolidityOptimizer.cpp
parent77dd832403a7f4dc11c60b25f6eec786a80c6e08 (diff)
parent0e8ce9d069b92f98fc4e96a75da11c63276b8cf7 (diff)
downloaddexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.tar
dexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.tar.gz
dexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.tar.bz2
dexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.tar.lz
dexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.tar.xz
dexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.tar.zst
dexon-solidity-3bacb6f3776ffcf9cf13c1dbc733f24a430337fd.zip
Merge remote-tracking branch 'upstream/develop' into refactor_executive
Conflicts: test/libsolidity/solidityExecutionFramework.h
Diffstat (limited to 'libsolidity/SolidityOptimizer.cpp')
-rw-r--r--libsolidity/SolidityOptimizer.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/libsolidity/SolidityOptimizer.cpp b/libsolidity/SolidityOptimizer.cpp
index 744fc48a..827d8833 100644
--- a/libsolidity/SolidityOptimizer.cpp
+++ b/libsolidity/SolidityOptimizer.cpp
@@ -1004,6 +1004,38 @@ BOOST_AUTO_TEST_CASE(block_deduplicator)
BOOST_CHECK_EQUAL(pushTags.size(), 2);
}
+BOOST_AUTO_TEST_CASE(block_deduplicator_loops)
+{
+ AssemblyItems input{
+ u256(0),
+ eth::Instruction::SLOAD,
+ AssemblyItem(PushTag, 1),
+ AssemblyItem(PushTag, 2),
+ eth::Instruction::JUMPI,
+ eth::Instruction::JUMP,
+ AssemblyItem(Tag, 1),
+ u256(5),
+ u256(6),
+ eth::Instruction::SSTORE,
+ AssemblyItem(PushTag, 1),
+ eth::Instruction::JUMP,
+ AssemblyItem(Tag, 2),
+ u256(5),
+ u256(6),
+ eth::Instruction::SSTORE,
+ AssemblyItem(PushTag, 2),
+ eth::Instruction::JUMP,
+ };
+ BlockDeduplicator dedup(input);
+ dedup.deduplicate();
+
+ set<u256> pushTags;
+ for (AssemblyItem const& item: input)
+ if (item.type() == PushTag)
+ pushTags.insert(item.data());
+ BOOST_CHECK_EQUAL(pushTags.size(), 1);
+}
+
BOOST_AUTO_TEST_SUITE_END()
}