diff options
-rw-r--r-- | libsolidity/ast/Types.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index eb98047c..b28ae482 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -1324,7 +1324,14 @@ MemberList::MemberMap ContractType::nativeMembers(ContractDefinition const*) con if (m_super) { // add the most derived of all functions which are visible in derived contracts - for (ContractDefinition const* base: m_contract.annotation().linearizedBaseContracts) + auto bases = m_contract.annotation().linearizedBaseContracts; + if (bases.size() < 1) + BOOST_THROW_EXCEPTION( + InternalCompilerError() << + errinfo_comment("linearizedBaseContracts should at least contain the most derived contract.") + ); + bases.erase(bases.begin()); // Remove the most derived contract, which should not be searchable from `super`. + for (ContractDefinition const* base: bases) for (FunctionDefinition const* function: base->definedFunctions()) { if (!function->isVisibleInDerivedContracts()) |