aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity/SolidityEndToEndTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/libsolidity/SolidityEndToEndTest.cpp')
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index 2db2aadd..42f69099 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -7610,6 +7610,33 @@ BOOST_AUTO_TEST_CASE(multi_variable_declaration)
ABI_CHECK(callContractFunction("f()", encodeArgs()), encodeArgs(true));
}
+BOOST_AUTO_TEST_CASE(typed_multi_variable_declaration)
+{
+ char const* sourceCode = R"(
+ contract C {
+ struct S { uint x; }
+ S s;
+ function g() internal returns (uint, S storage, uint) {
+ s.x = 7;
+ return (1, s, 2);
+ }
+ function f() returns (bool) {
+ (uint x1, S storage y1, uint z1) = g();
+ if (x1 != 1 || y1.x != 7 || z1 != 2) return false;
+ (, S storage y2,) = g();
+ if (y2.x != 7) return false;
+ (uint x2,,) = g();
+ if (x2 != 1) return false;
+ (,,uint z2) = g();
+ if (z2 != 2) return false;
+ return true;
+ }
+ }
+ )";
+ compileAndRun(sourceCode);
+ ABI_CHECK(callContractFunction("f()", encodeArgs()), encodeArgs(true));
+}
+
BOOST_AUTO_TEST_CASE(tuples)
{
char const* sourceCode = R"(