diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2018-06-20 02:00:55 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-20 02:00:55 +0800 |
commit | c9ff67ca3e55ba46f6cb4332158328db0c1d2660 (patch) | |
tree | 70e1fb40266ffae1a0455b96b8674e91fd2ebaae | |
parent | 9d3b7ad586a800f1a9e576311076f486fc776ae3 (diff) | |
parent | a17059573fe2ffce115b5368e798a87ce07dc1cd (diff) | |
download | dexon-solidity-c9ff67ca3e55ba46f6cb4332158328db0c1d2660.tar.gz dexon-solidity-c9ff67ca3e55ba46f6cb4332158328db0c1d2660.tar.zst dexon-solidity-c9ff67ca3e55ba46f6cb4332158328db0c1d2660.zip |
Merge pull request #4313 from ethereum/remove-callcode
Disallow raw callcode (was deprecated in 0.4.12)
8 files changed, 9 insertions, 63 deletions
diff --git a/Changelog.md b/Changelog.md index 6a7c8da2..f77ab809 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,7 @@ Breaking Changes: * Commandline interface: Require ``-`` if standard input is used as source. * General: ``continue`` in a ``do...while`` loop jumps to the condition (it used to jump to the loop body). Warning: this may silently change the semantics of existing code. * General: Disallow declaring empty structs. + * General: Disallow raw ``callcode`` (was already deprecated in 0.4.12). It is still possible to use it via inline assembly. * General: Disallow ``sha3`` and ``suicide`` aliases. * General: Introduce ``emit`` as a keyword instead of parsing it as identifier. * General: New keywords: ``calldata`` diff --git a/libsolidity/analysis/StaticAnalyzer.cpp b/libsolidity/analysis/StaticAnalyzer.cpp index 00a581d0..dad4cc7f 100644 --- a/libsolidity/analysis/StaticAnalyzer.cpp +++ b/libsolidity/analysis/StaticAnalyzer.cpp @@ -193,18 +193,10 @@ bool StaticAnalyzer::visit(MemberAccess const& _memberAccess) if (_memberAccess.memberName() == "callcode") if (auto const* type = dynamic_cast<FunctionType const*>(_memberAccess.annotation().type.get())) if (type->kind() == FunctionType::Kind::BareCallCode) - { - if (v050) - m_errorReporter.typeError( - _memberAccess.location(), - "\"callcode\" has been deprecated in favour of \"delegatecall\"." - ); - else - m_errorReporter.warning( - _memberAccess.location(), - "\"callcode\" has been deprecated in favour of \"delegatecall\"." - ); - } + m_errorReporter.typeError( + _memberAccess.location(), + "\"callcode\" has been deprecated in favour of \"delegatecall\"." + ); if (m_constructor) { diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index c80aa8ba..2a24a1e3 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -3745,38 +3745,6 @@ BOOST_AUTO_TEST_CASE(generic_call) BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 50 - 2); } -BOOST_AUTO_TEST_CASE(generic_callcode) -{ - char const* sourceCode = R"**( - contract Receiver { - uint public received; - function receive(uint256 x) payable { received = x; } - } - contract Sender { - uint public received; - function Sender() payable { } - function doSend(address rec) returns (uint d) - { - bytes4 signature = bytes4(bytes32(keccak256("receive(uint256)"))); - rec.callcode.value(2)(signature, 23); - return Receiver(rec).received(); - } - } - )**"; - compileAndRun(sourceCode, 0, "Receiver"); - u160 const c_receiverAddress = m_contractAddress; - compileAndRun(sourceCode, 50, "Sender"); - u160 const c_senderAddress = m_contractAddress; - ABI_CHECK(callContractFunction("doSend(address)", c_receiverAddress), encodeArgs(0)); - ABI_CHECK(callContractFunction("received()"), encodeArgs(23)); - m_contractAddress = c_receiverAddress; - ABI_CHECK(callContractFunction("received()"), encodeArgs(0)); - BOOST_CHECK(storageEmpty(c_receiverAddress)); - BOOST_CHECK(!storageEmpty(c_senderAddress)); - BOOST_CHECK_EQUAL(balanceAt(c_receiverAddress), 0); - BOOST_CHECK_EQUAL(balanceAt(c_senderAddress), 50); -} - BOOST_AUTO_TEST_CASE(generic_delegatecall) { char const* sourceCode = R"**( @@ -11558,9 +11526,6 @@ BOOST_AUTO_TEST_CASE(bare_call_invalid_address) function f() external returns (bool) { return address(0x4242).call(); } - function g() external returns (bool) { - return address(0x4242).callcode(); - } function h() external returns (bool) { return address(0x4242).delegatecall(); } @@ -11568,7 +11533,6 @@ BOOST_AUTO_TEST_CASE(bare_call_invalid_address) )"; compileAndRun(sourceCode, 0, "C"); ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1))); - ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(1))); ABI_CHECK(callContractFunction("h()"), encodeArgs(u256(1))); } diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol deleted file mode 100644 index a5bda4f6..00000000 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol +++ /dev/null @@ -1,8 +0,0 @@ -contract test { - function f() public { - address(0x12).callcode("abc"); - } -} -// ---- -// Warning: (50-79): Return value of low-level calls not used. -// Warning: (50-72): "callcode" has been deprecated in favour of "delegatecall". diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol index 422de58c..554f2e11 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol @@ -4,4 +4,4 @@ contract test { } } // ---- -// Warning: (55-77): "callcode" has been deprecated in favour of "delegatecall". +// TypeError: (55-77): "callcode" has been deprecated in favour of "delegatecall". diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol index ee4acdcc..d0c3769c 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol @@ -3,13 +3,10 @@ contract C { address addr; uint balance = addr.balance; bool callRet = addr.call(); - bool callcodeRet = addr.callcode(); bool delegatecallRet = addr.delegatecall(); bool sendRet = addr.send(1); addr.transfer(1); - callRet; callcodeRet; delegatecallRet; sendRet; + balance; callRet; delegatecallRet; sendRet; } } // ---- -// Warning: (161-174): "callcode" has been deprecated in favour of "delegatecall". -// Warning: (69-81): Unused local variable. diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol index 04747e7f..43ee4d88 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol @@ -5,4 +5,4 @@ contract C { } // ---- // Warning: (52-65): Using contract member "callcode" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).callcode" instead. -// Warning: (52-65): "callcode" has been deprecated in favour of "delegatecall". +// TypeError: (52-65): "callcode" has been deprecated in favour of "delegatecall". diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol index 9ab6fb0c..3c1e0280 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol @@ -6,4 +6,4 @@ contract C { } // ---- // Warning: (65-75): Using contract member "callcode" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).callcode" instead. -// Warning: (65-75): "callcode" has been deprecated in favour of "delegatecall". +// TypeError: (65-75): "callcode" has been deprecated in favour of "delegatecall". |