mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Issue warning for using public visibility for interface functions
This commit is contained in:
parent
cc1c461fc0
commit
b545987ec7
@ -8,6 +8,7 @@ Features:
|
|||||||
* Inline Assembly: Support some restricted tokens (return, byte, address) as identifiers in Julia mode.
|
* Inline Assembly: Support some restricted tokens (return, byte, address) as identifiers in Julia mode.
|
||||||
* SMT Checker: If-else branch conditions are taken into account in the SMT encoding of the program
|
* SMT Checker: If-else branch conditions are taken into account in the SMT encoding of the program
|
||||||
variables.
|
variables.
|
||||||
|
* Type Checker: Issue warning for using ``public`` visibility for interface functions.
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Parser: Disallow event declarations with no parameter list.
|
* Parser: Disallow event declarations with no parameter list.
|
||||||
|
@ -604,6 +604,8 @@ bool TypeChecker::visit(FunctionDefinition const& _function)
|
|||||||
{
|
{
|
||||||
if (_function.visibility() < FunctionDefinition::Visibility::Public)
|
if (_function.visibility() < FunctionDefinition::Visibility::Public)
|
||||||
m_errorReporter.typeError(_function.location(), "Functions in interfaces cannot be internal or private.");
|
m_errorReporter.typeError(_function.location(), "Functions in interfaces cannot be internal or private.");
|
||||||
|
else if (_function.visibility() != FunctionDefinition::Visibility::External)
|
||||||
|
m_errorReporter.warning(_function.location(), "Functions in interfaces should be declared external.");
|
||||||
}
|
}
|
||||||
if (_function.isConstructor())
|
if (_function.isConstructor())
|
||||||
m_errorReporter.typeError(_function.location(), "Constructor cannot be defined in interfaces.");
|
m_errorReporter.typeError(_function.location(), "Constructor cannot be defined in interfaces.");
|
||||||
|
@ -5963,6 +5963,12 @@ BOOST_AUTO_TEST_CASE(interface_function_external)
|
|||||||
BOOST_AUTO_TEST_CASE(interface_function_public)
|
BOOST_AUTO_TEST_CASE(interface_function_public)
|
||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
|
interface I {
|
||||||
|
function f() public;
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_WARNING(text, "Functions in interfaces should be declared external.");
|
||||||
|
text = R"(
|
||||||
pragma experimental "v0.5.0";
|
pragma experimental "v0.5.0";
|
||||||
interface I {
|
interface I {
|
||||||
function f() public;
|
function f() public;
|
||||||
@ -6306,7 +6312,7 @@ BOOST_AUTO_TEST_CASE(no_unused_warning_interface_arguments)
|
|||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
interface I {
|
interface I {
|
||||||
function f(uint a) pure public returns (uint b);
|
function f(uint a) pure external returns (uint b);
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_SUCCESS_NO_WARNINGS(text);
|
CHECK_SUCCESS_NO_WARNINGS(text);
|
||||||
|
@ -181,10 +181,10 @@ BOOST_AUTO_TEST_CASE(interface)
|
|||||||
{
|
{
|
||||||
string text = R"(
|
string text = R"(
|
||||||
interface D {
|
interface D {
|
||||||
function f() view public;
|
function f() view external;
|
||||||
}
|
}
|
||||||
contract C is D {
|
contract C is D {
|
||||||
function f() view public {}
|
function f() view external {}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_SUCCESS_NO_WARNINGS(text);
|
CHECK_SUCCESS_NO_WARNINGS(text);
|
||||||
|
Loading…
Reference in New Issue
Block a user