Merge pull request #11003 from ethereum/ir-bug-incorrect-return-variable-count

Fix IR bug on deleting storage variables of function type.
This commit is contained in:
chriseth
2021-02-24 13:24:31 +01:00
committed by GitHub
2 changed files with 42 additions and 1 deletions
@@ -0,0 +1,39 @@
contract C {
function() external public x;
uint public y = 0;
function increment() public {
++y;
}
function set() external {
x = this.increment;
}
function incrementIndirectly() public {
x();
}
function deleteFunction() public {
// used to lead to an ICE during IR
delete x;
}
}
// ====
// compileViaYul: also
// ----
// x() -> 0
// y() -> 0
// increment() ->
// y() -> 1
// set() ->
// x() -> 0xfdd67305928fcac8d213d1e47bfa6165cd0b87bd09de08a0000000000000000
// increment() ->
// y() -> 2
// incrementIndirectly() ->
// y() -> 3
// deleteFunction() ->
// increment() ->
// y() -> 4
// incrementIndirectly() -> FAILURE
// y() -> 4