diff options
author | chriseth <chris@ethereum.org> | 2018-11-30 16:26:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-30 16:26:08 +0800 |
commit | d6d41b2bc7040bbae8d4d3b3522d637e37836a1d (patch) | |
tree | 4ce4bc3cf84ba8c67d288a3d45f2edd7f86ca52d /test | |
parent | a7ca4991df9fce4a27a402e9ab02bfb0c9b25910 (diff) | |
parent | 73a64da041efb2b64b1c89ed6012161cb278e24e (diff) | |
download | dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.tar dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.tar.gz dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.tar.bz2 dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.tar.lz dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.tar.xz dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.tar.zst dexon-solidity-d6d41b2bc7040bbae8d4d3b3522d637e37836a1d.zip |
Merge pull request #5548 from ethereum/fixMemberAccess
Fix bug related to state variables of function type accessed via base contract.
Diffstat (limited to 'test')
-rw-r--r-- | test/libsolidity/SolidityEndToEndTest.cpp | 20 | ||||
-rw-r--r-- | test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol | 7 |
2 files changed, 27 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 05bb7446..c6135a72 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -14213,6 +14213,26 @@ BOOST_AUTO_TEST_CASE(external_public_override) ABI_CHECK(callContractFunction("f()"), encodeArgs(2)); ABI_CHECK(callContractFunction("g()"), encodeArgs(2)); } + +BOOST_AUTO_TEST_CASE(base_access_to_function_type_variables) +{ + char const* sourceCode = R"( + contract C { + function () internal returns (uint) x; + function set() public { + C.x = g; + } + function g() public pure returns (uint) { return 2; } + function h() public returns (uint) { return C.x(); } + } + )"; + compileAndRun(sourceCode); + ABI_CHECK(callContractFunction("g()"), encodeArgs(2)); + ABI_CHECK(callContractFunction("h()"), encodeArgs()); + ABI_CHECK(callContractFunction("set()"), encodeArgs()); + ABI_CHECK(callContractFunction("h()"), encodeArgs(2)); +} + BOOST_AUTO_TEST_SUITE_END() } diff --git a/test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol b/test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol new file mode 100644 index 00000000..560a6c2a --- /dev/null +++ b/test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol @@ -0,0 +1,7 @@ +contract C { + function () internal returns (uint) x; + constructor() public { + C.x = g; + } + function g() public pure returns (uint) {} +} |