Merge pull request #9032 from ethereum/sol-yul-fix-wrong-function-type-declaration-assumption

[Sol->Yul] Remove wrong assumption about function declarations associated an expressions
This commit is contained in:
chriseth 2020-05-27 09:10:46 +02:00 committed by GitHub
commit 41725b2065
2 changed files with 24 additions and 2 deletions

View File

@ -675,8 +675,6 @@ void IRGeneratorForStatements::endVisit(FunctionCall const& _functionCall)
solAssert(functionDef->isImplemented(), "");
}
else
solAssert(!functionType->hasDeclaration(), "");
solAssert(!functionType->takesArbitraryParameters(), "");

View File

@ -0,0 +1,24 @@
contract C {
function foo() internal returns (uint) {
return 42;
}
function get_ptr(function() internal returns (uint) ptr) internal returns(function() internal returns (uint)) {
return ptr;
}
function associated() public returns (uint) {
// This expression directly references function definition
return (foo)();
}
function unassociated() public returns (uint) {
// This expression is not associated with a specific function definition
return (get_ptr(foo))();
}
}
// ====
// compileViaYul: also
// ----
// associated() -> 42
// unassociated() -> 42