2020-10-01 17:07:56 +00:00
|
|
|
// Issue 9832: Test to see if cleanup is performed properly after array copying
|
|
|
|
contract C {
|
|
|
|
uint40[] x;
|
|
|
|
function f() public returns(bool) {
|
|
|
|
|
|
|
|
x.push(42); x.push(42); x.push(42); x.push(42);
|
|
|
|
x.push(42); x.push(42); x.push(42); x.push(42);
|
|
|
|
x.push(42); x.push(42); x.push(42); x.push(42);
|
|
|
|
x.push(42); x.push(42); x.push(42); x.push(42);
|
|
|
|
x.push(42); x.push(42); x.push(42); x.push(42);
|
|
|
|
|
|
|
|
uint40[] memory y = new uint40[](1);
|
|
|
|
y[0] = 23;
|
|
|
|
x = y;
|
|
|
|
|
|
|
|
assembly { sstore(x.slot, 20) }
|
|
|
|
|
|
|
|
assert(x[0] == 23);
|
|
|
|
assert(x[1] == 0);
|
|
|
|
assert(x[2] == 0);
|
|
|
|
assert(x[3] == 0);
|
|
|
|
|
|
|
|
assert(x[4] == 0);
|
|
|
|
assert(x[5] == 0);
|
|
|
|
assert(x[6] == 0);
|
|
|
|
assert(x[7] == 0);
|
|
|
|
|
|
|
|
assert(x[8] == 0);
|
|
|
|
assert(x[9] == 0);
|
|
|
|
assert(x[10] == 0);
|
|
|
|
assert(x[11] == 0);
|
|
|
|
|
|
|
|
assert(x[12] == 0);
|
|
|
|
assert(x[13] == 0);
|
|
|
|
assert(x[14] == 0);
|
|
|
|
assert(x[15] == 0);
|
|
|
|
|
|
|
|
assert(x[16] == 0);
|
|
|
|
assert(x[17] == 0);
|
|
|
|
assert(x[18] == 0);
|
|
|
|
assert(x[19] == 0);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// ----
|
|
|
|
// f() -> true
|
2023-04-26 11:03:17 +00:00
|
|
|
// gas irOptimized: 117369
|
|
|
|
// gas legacy: 124660
|
|
|
|
// gas legacyOptimized: 122801
|