[SMTChecker] Implement support for memory allocation

This commit is contained in:
Alex Beregszaszi
2020-09-25 15:56:24 +01:00
parent 1cc0d642e8
commit 9f3d5d3e2f
8 changed files with 104 additions and 8 deletions
@@ -0,0 +1,36 @@
pragma experimental SMTChecker;
contract C {
function f() public pure {
bytes memory x = new bytes(0);
assert(x.length == 0);
}
function g() public pure {
bytes memory x = new bytes(3);
assert(x.length == 3);
assert(x[0] == 0);
assert(x[1] == 0);
assert(x[2] == 0);
}
function h() public pure {
bytes memory x = new bytes(3);
assert(x.length == 3);
x[0] = 0x12;
x[1] = 0x34;
assert(x[0] == 0x12);
assert(x[1] == 0x34);
// This should be an out-of-bounds assertion.
x[5] = 0xff;
assert(x[5] == 0xff);
}
function h(uint size) public pure {
bytes memory x = new bytes(size);
assert(x.length == size);
require(size >= 2);
x[0] = 0x12;
x[1] = 0x34;
assert(x[0] == 0x12);
assert(x[1] == 0x34);
}
}
// ----
@@ -0,0 +1,36 @@
pragma experimental SMTChecker;
contract C {
function f() public pure {
uint[] memory x = new uint[](0);
assert(x.length == 0);
}
function g() public pure {
uint[] memory x = new uint[](3);
assert(x.length == 3);
assert(x[0] == 0);
assert(x[1] == 0);
assert(x[2] == 0);
}
function h() public pure {
uint[] memory x = new uint[](3);
assert(x.length == 3);
x[0] = 0x12;
x[1] = 0x34;
assert(x[0] == 0x12);
assert(x[1] == 0x34);
// This should be an out-of-bounds assertion.
x[5] = 0xff;
assert(x[5] == 0xff);
}
function h(uint size) public pure {
uint[] memory x = new uint[](size);
assert(x.length == size);
require(size >= 2);
x[0] = 0x12;
x[1] = 0x34;
assert(x[0] == 0x12);
assert(x[1] == 0x34);
}
}
// ----