diff options
author | Paweł Bylica <chfast@gmail.com> | 2015-06-03 23:16:33 +0800 |
---|---|---|
committer | Paweł Bylica <chfast@gmail.com> | 2015-06-03 23:16:33 +0800 |
commit | 3bacb6f3776ffcf9cf13c1dbc733f24a430337fd (patch) | |
tree | d8a89f6d510a5b2eb52e9b1760c7b0a0b375879c /libsolidity/SolidityOptimizer.cpp | |
parent | 77dd832403a7f4dc11c60b25f6eec786a80c6e08 (diff) | |
parent | 0e8ce9d069b92f98fc4e96a75da11c63276b8cf7 (diff) | |
download | dexon-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.cpp | 32 |
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() } |