Merge pull request from ethereum/overloadMsgForMagic

Reconstruct function definition for magic variables in overload error message.
This commit is contained in:
chriseth 2019-11-14 11:24:54 +01:00 committed by GitHub
commit f6191a7183
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 1 deletions
libsolidity/analysis
test/cmdlineTests/require_overload

View File

@ -2359,7 +2359,18 @@ bool TypeChecker::visit(Identifier const& _identifier)
SecondarySourceLocation ssl;
for (Declaration const* declaration: annotation.overloadedDeclarations)
ssl.append("Candidate:", declaration->location());
if (declaration->location().isEmpty())
{
// Try to re-construct function definition
string description;
for (auto const& param: declaration->functionType(true)->parameterTypes())
description += (description.empty() ? "" : ", ") + param->toString(false);
description = "function " + _identifier.name() + "(" + description + ")";
ssl.append("Candidate: " + description, declaration->location());
}
else
ssl.append("Candidate:", declaration->location());
if (candidates.empty())
m_errorReporter.fatalTypeError(_identifier.location(), ssl, "No matching declaration found after argument-dependent lookup.");
else

View File

@ -0,0 +1,5 @@
require_overload/input.sol:4:9: Error: No matching declaration found after argument-dependent lookup.
require(this);
^-----^
Candidate: function require(bool)
Candidate: function require(bool, string memory)

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,6 @@
pragma solidity >=0.0;
contract C {
function f() public pure {
require(this);
}
}