mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #5558 from anurag-git/issue_5130
Fix internal compiler error for unimplemented base contract function.
This commit is contained in:
commit
eed353a367
@ -24,6 +24,7 @@ Bugfixes:
|
|||||||
* 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.
|
* Type Checker: Disallow functions ``sha3`` and ``suicide`` also without a function call.
|
||||||
|
* Type Checker: Fix internal compiler error with ``super`` when base contract function is not implemented.
|
||||||
* Type Checker: Fixed internal error when trying to create abstract contract in some cases.
|
* Type Checker: Fixed internal error when trying to create abstract contract in some cases.
|
||||||
* Type Checker: Fixed internal error related to double declaration of events.
|
* Type Checker: Fixed internal error related to double declaration of events.
|
||||||
* Type Checker: Disallow inline arrays of mapping type.
|
* Type Checker: Disallow inline arrays of mapping type.
|
||||||
|
@ -1943,8 +1943,9 @@ MemberList::MemberMap ContractType::nativeMembers(ContractDefinition const* _con
|
|||||||
for (ContractDefinition const* base: bases | boost::adaptors::sliced(1, bases.size()))
|
for (ContractDefinition const* base: bases | boost::adaptors::sliced(1, bases.size()))
|
||||||
for (FunctionDefinition const* function: base->definedFunctions())
|
for (FunctionDefinition const* function: base->definedFunctions())
|
||||||
{
|
{
|
||||||
if (!function->isVisibleInDerivedContracts())
|
if (!function->isVisibleInDerivedContracts() || !function->isImplemented())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto functionType = make_shared<FunctionType>(*function, true);
|
auto functionType = make_shared<FunctionType>(*function, true);
|
||||||
bool functionWithEqualArgumentsFound = false;
|
bool functionWithEqualArgumentsFound = false;
|
||||||
for (auto const& member: members)
|
for (auto const& member: members)
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
contract a {
|
||||||
|
function f() public;
|
||||||
|
}
|
||||||
|
contract b is a {
|
||||||
|
function f() public { super.f(); }
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// TypeError: (84-91): Member "f" not found or not visible after argument-dependent lookup in contract super b.
|
@ -0,0 +1,12 @@
|
|||||||
|
contract a {
|
||||||
|
function f() public;
|
||||||
|
}
|
||||||
|
contract b is a {
|
||||||
|
function f() public { super.f(); }
|
||||||
|
}
|
||||||
|
contract c is a,b {
|
||||||
|
// No error here.
|
||||||
|
function f() public { super.f(); }
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// TypeError: (84-91): Member "f" not found or not visible after argument-dependent lookup in contract super b.
|
Loading…
Reference in New Issue
Block a user