Add integration test for deleting struct (#459)

Differentially tests the behavior of deleting a struct with a member
that do not occupy the full 32-byte slot. From [this
issue](https://github.com/paritytech/contract-issues/issues/118) it was
unclear whether the `delete` was expected to reset only the bytes
occupied or the entire slot. The current behavior of resetting the
entire slot is expected.
This commit is contained in:
LJ authored and GitHub committed 2026-01-20 14:34:27 +01:00
1 parent 09625c6310
commit c601377c2d
3 files changed
+50 -7

No files matched your search

@@ -0,0 +1,45 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
/* runner.json
{
"differential": true,
"actions": [
{
"Instantiate": {
"code": {
"Solidity": {
"contract": "StructDeleteStorage"
}
}
}
},
{
"Call": {
"dest": {
"Instantiated": 0
},
"data": "e70c830d"
}
}
]
}
*/
contract StructDeleteStorage {
struct S {
uint8 a;
}
S s;
function store_and_delete() public returns (uint256 r1) {
assembly {
sstore(s.slot, 0xffffff)
}
delete s;
assembly {
r1 := sload(s.slot)
}
}
}