mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #10991 from ethereum/bareCallNoReturndatacopy
[Sol->Yul] Fix bare call wihout returndatacopy.
This commit is contained in:
commit
d586b7b57a
@ -2521,9 +2521,7 @@ void IRGeneratorForStatements::appendBareCall(
|
|||||||
</needsEncoding>
|
</needsEncoding>
|
||||||
|
|
||||||
let <success> := <call>(<gas>, <address>, <?+value> <value>, </+value> <pos>, <length>, 0, 0)
|
let <success> := <call>(<gas>, <address>, <?+value> <value>, </+value> <pos>, <length>, 0, 0)
|
||||||
<?+returndataVar>
|
let <returndataVar> := <extractReturndataFunction>()
|
||||||
let <returndataVar> := <extractReturndataFunction>()
|
|
||||||
</+returndataVar>
|
|
||||||
)");
|
)");
|
||||||
|
|
||||||
templ("allocateUnbounded", m_utils.allocateUnboundedFunction());
|
templ("allocateUnbounded", m_utils.allocateUnboundedFunction());
|
||||||
@ -2542,13 +2540,8 @@ void IRGeneratorForStatements::appendBareCall(
|
|||||||
}
|
}
|
||||||
|
|
||||||
templ("success", IRVariable(_functionCall).tupleComponent(0).name());
|
templ("success", IRVariable(_functionCall).tupleComponent(0).name());
|
||||||
if (IRVariable(_functionCall).tupleComponent(1).type().category() == Type::Category::InaccessibleDynamic)
|
templ("returndataVar", IRVariable(_functionCall).tupleComponent(1).commaSeparatedList());
|
||||||
templ("returndataVar", "");
|
templ("extractReturndataFunction", m_utils.extractReturndataFunction());
|
||||||
else
|
|
||||||
{
|
|
||||||
templ("returndataVar", IRVariable(_functionCall).tupleComponent(1).part("mpos").name());
|
|
||||||
templ("extractReturndataFunction", m_utils.extractReturndataFunction());
|
|
||||||
}
|
|
||||||
|
|
||||||
templ("address", IRVariable(_functionCall.expression()).part("address").name());
|
templ("address", IRVariable(_functionCall.expression()).part("address").name());
|
||||||
|
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
contract C {
|
||||||
|
function f() public returns (bool) {
|
||||||
|
(bool success, ) = address(1).call("");
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// f() -> true
|
Loading…
Reference in New Issue
Block a user