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.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index 6233e25f..9df64cdc 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -6710,6 +6710,31 @@ BOOST_AUTO_TEST_CASE(internal_library_function_bound)
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
}
+BOOST_AUTO_TEST_CASE(internal_library_function_return_var_size)
+{
+ char const* sourceCode = R"(
+ library L {
+ struct S { uint[] data; }
+ function f(S _s) internal returns (uint[]) {
+ _s.data[3] = 2;
+ return _s.data;
+ }
+ }
+ contract C {
+ using L for L.S;
+ function f() returns (uint) {
+ L.S memory x;
+ x.data = new uint[](7);
+ x.data[3] = 8;
+ return x.f()[3];
+ }
+ }
+ )";
+ // This has to work without linking, because everything will be inlined.
+ compileAndRun(sourceCode, 0, "C");
+ BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2)));
+}
+
BOOST_AUTO_TEST_SUITE_END()
}