diff --git a/libsolidity/CompilerContext.cpp b/libsolidity/CompilerContext.cpp index ee8d3e00c..f787db7fc 100644 --- a/libsolidity/CompilerContext.cpp +++ b/libsolidity/CompilerContext.cpp @@ -106,8 +106,12 @@ eth::AssemblyItem CompilerContext::getVirtualFunctionEntryLabel(FunctionDefiniti solAssert(!m_inheritanceHierarchy.empty(), "No inheritance hierarchy set."); for (ContractDefinition const* contract: m_inheritanceHierarchy) for (ASTPointer const& function: contract->getDefinedFunctions()) - if (!function->isConstructor() && function->getName() == _function.getName()) + { + if (!function->isConstructor() && + dynamic_cast(*function->getType()).getCanonicalSignature() == + dynamic_cast(*_function.getType()).getCanonicalSignature()) return getFunctionEntryLabel(*function); + } solAssert(false, "Virtual function " + _function.getName() + " not found."); return m_asm.newTag(); // not reached } @@ -117,7 +121,7 @@ eth::AssemblyItem CompilerContext::getSuperFunctionEntryLabel(string const& _nam auto it = getSuperContract(_base); for (; it != m_inheritanceHierarchy.end(); ++it) for (ASTPointer const& function: (*it)->getDefinedFunctions()) - if (!function->isConstructor() && function->getName() == _name) + if (!function->isConstructor() && function->getName() == _name) // TODO: add a test case for this! return getFunctionEntryLabel(*function); solAssert(false, "Super function " + _name + " not found."); return m_asm.newTag(); // not reached