mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-10-20 18:56:17 +00:00
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:
3 files changed
+50
-7
No files matched your search
Generated
-7
@@ -9154,13 +9154,6 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "revive-replay"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "revive-runner"
|
name = "revive-runner"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -68,6 +68,11 @@ test_spec!(selfdestruct, "Selfdestruct", "Selfdestruct.sol");
|
|||||||
test_spec!(clz, "CountLeadingZeros", "CountLeadingZeros.sol");
|
test_spec!(clz, "CountLeadingZeros", "CountLeadingZeros.sol");
|
||||||
test_spec!(call_gas, "CallGas", "CallGas.sol");
|
test_spec!(call_gas, "CallGas", "CallGas.sol");
|
||||||
test_spec!(linker_symbol, "Linked", "Linked.sol");
|
test_spec!(linker_symbol, "Linked", "Linked.sol");
|
||||||
|
test_spec!(
|
||||||
|
struct_delete_storage,
|
||||||
|
"StructDeleteStorage",
|
||||||
|
"StructDeleteStorage.sol"
|
||||||
|
);
|
||||||
|
|
||||||
fn instantiate(path: &str, contract: &str) -> Vec<SpecsAction> {
|
fn instantiate(path: &str, contract: &str) -> Vec<SpecsAction> {
|
||||||
vec![Instantiate {
|
vec![Instantiate {
|
||||||
|
|||||||
Reference in new issue
Block a user