diff options
author | chriseth <chris@ethereum.org> | 2016-11-15 18:25:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-15 18:25:12 +0800 |
commit | 028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687 (patch) | |
tree | bfa5124e20eda18203314d25ce6db711ad1c6e25 /test/libsolidity/InlineAssembly.cpp | |
parent | c1b1efafdb30f11c9482e3ba95c5321790762215 (diff) | |
parent | dce80911e198fe5d6317a9a4d155f929789fdea6 (diff) | |
download | dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.tar dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.tar.gz dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.tar.bz2 dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.tar.lz dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.tar.xz dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.tar.zst dexon-solidity-028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687.zip |
Merge pull request #1375 from ethereum/inline-assembly-stack-height
Fix inline assembly stack warnings when using variables
Diffstat (limited to 'test/libsolidity/InlineAssembly.cpp')
-rw-r--r-- | test/libsolidity/InlineAssembly.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/test/libsolidity/InlineAssembly.cpp b/test/libsolidity/InlineAssembly.cpp index 6c04367f..a80a44a2 100644 --- a/test/libsolidity/InlineAssembly.cpp +++ b/test/libsolidity/InlineAssembly.cpp @@ -41,7 +41,7 @@ namespace test namespace { -bool successParse(std::string const& _source, bool _assemble = false) +bool successParse(std::string const& _source, bool _assemble = false, bool _allowWarnings = true) { assembly::InlineAssemblyStack stack; try @@ -51,8 +51,9 @@ bool successParse(std::string const& _source, bool _assemble = false) if (_assemble) { stack.assemble(); - if (!stack.errors().empty() && !Error::containsOnlyWarnings(stack.errors())) - return false; + if (!stack.errors().empty()) + if (!_allowWarnings || !Error::containsOnlyWarnings(stack.errors())) + return false; } } catch (FatalError const&) @@ -67,9 +68,9 @@ bool successParse(std::string const& _source, bool _assemble = false) return true; } -bool successAssemble(string const& _source) +bool successAssemble(string const& _source, bool _allowWarnings = true) { - return successParse(_source, true); + return successParse(_source, true, _allowWarnings); } } @@ -169,6 +170,13 @@ BOOST_AUTO_TEST_CASE(magic_variables) BOOST_CHECK(successAssemble("{ let ecrecover := 1 ecrecover }")); } +BOOST_AUTO_TEST_CASE(imbalanced_stack) +{ + BOOST_CHECK(successAssemble("{ 1 2 mul pop }", false)); + BOOST_CHECK(!successAssemble("{ 1 }", false)); + BOOST_CHECK(successAssemble("{ let x := 4 7 add }", false)); +} + BOOST_AUTO_TEST_SUITE_END() } |