mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #5539 from ethereum/fix_deprecated_sha3_suicide
Report deprecation error on functions sha3 and suicide also without call
This commit is contained in:
commit
c541cd9db4
@ -22,6 +22,7 @@ Bugfixes:
|
|||||||
* Type Checker: Properly detect different return types when overriding an external interface function with a public contract function.
|
* Type Checker: Properly detect different return types when overriding an external interface function with a public contract function.
|
||||||
* Type Checker: Disallow struct return types for getters of public state variables unless the new ABI encoder is active.
|
* Type Checker: Disallow struct return types for getters of public state variables unless the new ABI encoder is active.
|
||||||
* Type Checker: Fix internal compiler error when a field of a struct used as a parameter in a function type has a non-existent type.
|
* Type Checker: Fix internal compiler error when a field of a struct used as a parameter in a function type has a non-existent type.
|
||||||
|
* Type Checker: Disallow functions ``sha3`` and ``suicide`` also without a function call.
|
||||||
|
|
||||||
Build System:
|
Build System:
|
||||||
* Emscripten: Upgrade to Emscripten SDK 1.37.21 and boost 1.67.
|
* Emscripten: Upgrade to Emscripten SDK 1.37.21 and boost 1.67.
|
||||||
|
@ -1824,26 +1824,6 @@ void TypeChecker::typeCheckFunctionCall(
|
|||||||
"\"staticcall\" is not supported by the VM version."
|
"\"staticcall\" is not supported by the VM version."
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check for deprecated function names
|
|
||||||
if (_functionType->kind() == FunctionType::Kind::KECCAK256)
|
|
||||||
{
|
|
||||||
if (auto functionName = dynamic_cast<Identifier const*>(&_functionCall.expression()))
|
|
||||||
if (functionName->name() == "sha3")
|
|
||||||
m_errorReporter.typeError(
|
|
||||||
_functionCall.location(),
|
|
||||||
"\"sha3\" has been deprecated in favour of \"keccak256\""
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (_functionType->kind() == FunctionType::Kind::Selfdestruct)
|
|
||||||
{
|
|
||||||
if (auto functionName = dynamic_cast<Identifier const*>(&_functionCall.expression()))
|
|
||||||
if (functionName->name() == "suicide")
|
|
||||||
m_errorReporter.typeError(
|
|
||||||
_functionCall.location(),
|
|
||||||
"\"suicide\" has been deprecated in favour of \"selfdestruct\""
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for event outside of emit statement
|
// Check for event outside of emit statement
|
||||||
if (!m_insideEmitStatement && _functionType->kind() == FunctionType::Kind::Event)
|
if (!m_insideEmitStatement && _functionType->kind() == FunctionType::Kind::Event)
|
||||||
m_errorReporter.typeError(
|
m_errorReporter.typeError(
|
||||||
@ -2639,6 +2619,23 @@ bool TypeChecker::visit(Identifier const& _identifier)
|
|||||||
else if (dynamic_cast<MagicVariableDeclaration const*>(annotation.referencedDeclaration))
|
else if (dynamic_cast<MagicVariableDeclaration const*>(annotation.referencedDeclaration))
|
||||||
if (dynamic_cast<FunctionType const*>(annotation.type.get()))
|
if (dynamic_cast<FunctionType const*>(annotation.type.get()))
|
||||||
annotation.isPure = true;
|
annotation.isPure = true;
|
||||||
|
|
||||||
|
// Check for deprecated function names.
|
||||||
|
// The check is done here for the case without an actual function call.
|
||||||
|
if (FunctionType const* fType = dynamic_cast<FunctionType const*>(_identifier.annotation().type.get()))
|
||||||
|
{
|
||||||
|
if (_identifier.name() == "sha3" && fType->kind() == FunctionType::Kind::KECCAK256)
|
||||||
|
m_errorReporter.typeError(
|
||||||
|
_identifier.location(),
|
||||||
|
"\"sha3\" has been deprecated in favour of \"keccak256\""
|
||||||
|
);
|
||||||
|
else if (_identifier.name() == "suicide" && fType->kind() == FunctionType::Kind::Selfdestruct)
|
||||||
|
m_errorReporter.typeError(
|
||||||
|
_identifier.location(),
|
||||||
|
"\"suicide\" has been deprecated in favour of \"selfdestruct\""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,5 +8,5 @@ contract test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// TypeError: (58-66): "sha3" has been deprecated in favour of "keccak256"
|
// TypeError: (58-62): "sha3" has been deprecated in favour of "keccak256"
|
||||||
// TypeError: (101-152): "suicide" has been deprecated in favour of "selfdestruct"
|
// TypeError: (101-108): "suicide" has been deprecated in favour of "selfdestruct"
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
contract C
|
||||||
|
{
|
||||||
|
function f(bytes memory data) public pure {
|
||||||
|
sha3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// TypeError: (60-64): "sha3" has been deprecated in favour of "keccak256"
|
@ -0,0 +1,11 @@
|
|||||||
|
contract C
|
||||||
|
{
|
||||||
|
function sha3() public pure returns (bool) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function f() public pure returns (bool) {
|
||||||
|
return sha3();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// Warning: (14-76): This declaration shadows a builtin symbol.
|
@ -0,0 +1,9 @@
|
|||||||
|
contract C
|
||||||
|
{
|
||||||
|
function f() public pure returns (bool) {
|
||||||
|
bool sha3 = true;
|
||||||
|
return sha3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// Warning: (58-67): This declaration shadows a builtin symbol.
|
@ -0,0 +1,8 @@
|
|||||||
|
contract C
|
||||||
|
{
|
||||||
|
function f(bytes memory data) public pure {
|
||||||
|
suicide;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// TypeError: (60-67): "suicide" has been deprecated in favour of "selfdestruct"
|
@ -0,0 +1,11 @@
|
|||||||
|
contract C
|
||||||
|
{
|
||||||
|
function suicide() public pure returns (bool) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function f() public pure returns (bool) {
|
||||||
|
return suicide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// Warning: (14-79): This declaration shadows a builtin symbol.
|
@ -0,0 +1,9 @@
|
|||||||
|
contract C
|
||||||
|
{
|
||||||
|
function f() public pure returns (bool) {
|
||||||
|
bool suicide = true;
|
||||||
|
return suicide;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// Warning: (58-70): This declaration shadows a builtin symbol.
|
Loading…
Reference in New Issue
Block a user