Add paris constraints to SMTChecker

Co-authored-by: Daniel <daniel@ekpyron.org>
Co-authored-by: Kamil Śliwak <kamil.sliwak@codepoets.it>
Co-authored-by: Leo <leo@ethereum.org>
This commit is contained in:
Rodrigo Q. Saramago
2023-01-31 11:03:04 +01:00
co-authored by Daniel Kamil Śliwak Leo
parent d9d9ab30a2
commit feba4de509
26 changed files with 183 additions and 102 deletions
@@ -3,12 +3,13 @@ contract C {
bytes memory b1 = abi.encodeWithSignature(sig, x, a);
bytes memory b2 = abi.encodeWithSelector(bytes4(keccak256(bytes(sig))), x, a);
// should hold but we do not evaluate keccak256 in an interpreted way
assert(b1.length == b2.length);
//assert(b1.length == b2.length);
assert(b1.length != b2.length); // should fail
}
}
// ====
// SMTEngine: all
// SMTIgnoreOS: macos
// ----
// Warning 6328: (294-324): CHC: Assertion violation might happen here.
// Warning 7812: (294-324): BMC: Assertion violation might happen here.
// Warning 6328: (330-360): CHC: Assertion violation might happen here.
// Warning 7812: (330-360): BMC: Assertion violation might happen here.
@@ -26,7 +26,7 @@ contract C {
// SMTEngine: all
// SMTIgnoreOS: macos
// ----
// Warning 6328: (335-365): CHC: Assertion violation happens here.\nCounterexample:\n\ndata = [69]\nb2 = [0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43]\nb3 = []\nb4 = []\nx = 0\ny = 0\nb5 = []\nb6 = []\n\nTransaction trace:\nC.constructor()\nC.abiEncodeSlice(sig, [69])
// Warning 6328: (335-365): CHC: Assertion violation happens here.
// Warning 6328: (589-619): CHC: Assertion violation happens here.
// Warning 6328: (1087-1117): CHC: Assertion violation might happen here.
// Warning 4661: (1087-1117): BMC: Assertion violation happens here.
@@ -17,6 +17,8 @@ contract C {
assert(block.chainid <= 2**256 - 1);
assert(block.difficulty >= 0);
assert(block.difficulty <= 2**256 - 1);
assert(block.prevrandao > 2**64);
assert(block.prevrandao <= 2**256 - 1);
assert(block.gaslimit >= 0);
assert(block.gaslimit <= 2**256 - 1);
assert(block.number >= 0);
@@ -44,6 +46,8 @@ contract D {
assert(block.chainid <= 2**256 - 1);
assert(block.difficulty >= 0);
assert(block.difficulty <= 2**256 - 1);
assert(block.prevrandao > 2**64);
assert(block.prevrandao <= 2**256 - 1);
assert(block.gaslimit >= 0);
assert(block.gaslimit <= 2**256 - 1);
assert(block.number >= 0);
@@ -54,3 +58,7 @@ contract D {
// ====
// SMTEngine: bmc
// ----
// Warning 8417: (565-581): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (598-614): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (1447-1463): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (1481-1497): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
@@ -16,5 +16,5 @@ contract C {
}
// ====
// SMTEngine: all
// SMTIgnoreOS: macos
// ----
// Info 1180: Contract invariant(s) for :C:\n!(x >= 11)\nReentrancy property(ies) for :C:\n!(<errorCode> = 1)\n((!(x <= 10) || !(<errorCode> >= 3)) && (!(x <= 10) || !(x' >= 11)))\n<errorCode> = 0 -> no errors\n<errorCode> = 1 -> Overflow at ++x\n<errorCode> = 3 -> Assertion failed at assert(x < 11)\n
@@ -30,7 +30,6 @@ contract C {
}
// ====
// SMTEngine: all
// SMTSolvers: z3
// SMTIgnoreOS: macos
// SMTSolvers: z3
// ----
// Info 1180: Contract invariant(s) for :C:\n!(x >= 7)\n
@@ -24,6 +24,6 @@ contract LoopFor2 {
}
// ====
// SMTEngine: all
// SMTSolvers: z3
// SMTIgnoreOS: macos
// SMTSolvers: z3
// ----
@@ -6,5 +6,6 @@ contract C {
}
// ====
// SMTEngine: all
// SMTIgnoreOS: macos
// ----
// Warning 6368: (76-90): CHC: Out of bounds access might happen here.
@@ -22,6 +22,6 @@ contract C {
// ----
// Warning 4984: (112-115): CHC: Overflow (resulting value larger than 2**256 - 1) might happen here.
// Warning 3944: (181-184): CHC: Underflow (resulting value less than 0) might happen here.
// Warning 6368: (259-263): CHC: Out of bounds access happens here.\nCounterexample:\na = [0], l = 1\n = 0\n\nTransaction trace:\nC.constructor()\nState: a = [], l = 0\nC.p()\nState: a = [0], l = 1\nC.r()
// Warning 6368: (259-263): CHC: Out of bounds access happens here.
// Warning 2661: (112-115): BMC: Overflow (resulting value larger than 2**256 - 1) happens here.
// Warning 4144: (181-184): BMC: Underflow (resulting value less than 0) happens here.
@@ -1,12 +1,14 @@
contract C {
address coin;
uint dif;
uint prevrandao;
uint gas;
uint number;
uint timestamp;
function f() public {
coin = block.coinbase;
dif = block.difficulty;
prevrandao = block.prevrandao;
gas = block.gaslimit;
number = block.number;
timestamp = block.timestamp;
@@ -16,12 +18,14 @@ contract C {
function g() internal view {
assert(uint160(coin) >= 0); // should hold
assert(dif >= 0); // should hold
assert(prevrandao > 2**64); // should hold
assert(gas >= 0); // should hold
assert(number >= 0); // should hold
assert(timestamp >= 0); // should hold
assert(coin == block.coinbase); // should fail with BMC
assert(dif == block.difficulty); // should fail with BMC
assert(prevrandao == block.prevrandao); // should fail with BMC
assert(gas == block.gaslimit); // should fail with BMC
assert(number == block.number); // should fail with BMC
assert(timestamp == block.timestamp); // should fail with BMC
@@ -30,8 +34,12 @@ contract C {
// ====
// SMTEngine: bmc
// ----
// Warning 4661: (473-503): BMC: Assertion violation happens here.
// Warning 4661: (531-562): BMC: Assertion violation happens here.
// Warning 4661: (590-619): BMC: Assertion violation happens here.
// Warning 4661: (647-677): BMC: Assertion violation happens here.
// Warning 4661: (705-741): BMC: Assertion violation happens here.
// Warning 8417: (155-171): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (641-657): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 4661: (409-435): BMC: Assertion violation happens here.
// Warning 4661: (569-599): BMC: Assertion violation happens here.
// Warning 4661: (627-658): BMC: Assertion violation happens here.
// Warning 4661: (686-724): BMC: Assertion violation happens here.
// Warning 4661: (752-781): BMC: Assertion violation happens here.
// Warning 4661: (809-839): BMC: Assertion violation happens here.
// Warning 4661: (867-903): BMC: Assertion violation happens here.
@@ -1,12 +1,14 @@
contract C {
address coin;
uint dif;
uint prevrandao;
uint gas;
uint number;
uint timestamp;
function f() public {
coin = block.coinbase;
dif = block.difficulty;
prevrandao = block.prevrandao;
gas = block.gaslimit;
number = block.number;
timestamp = block.timestamp;
@@ -16,12 +18,14 @@ contract C {
function g() internal view {
assert(uint160(coin) >= 0); // should hold
assert(dif >= 0); // should hold
assert(prevrandao > 2**64); // should hold
assert(gas >= 0); // should hold
assert(number >= 0); // should hold
assert(timestamp >= 0); // should hold
assert(coin == block.coinbase); // should hold with CHC
assert(dif == block.difficulty); // should hold with CHC
assert(prevrandao == block.prevrandao); // should hold with CHC
assert(gas == block.gaslimit); // should hold with CHC
assert(number == block.number); // should hold with CHC
assert(timestamp == block.timestamp); // should hold with CHC
@@ -33,4 +37,6 @@ contract C {
// SMTEngine: chc
// SMTIgnoreOS: macos
// ----
// Warning 6328: (770-799): CHC: Assertion violation happens here.\nCounterexample:\ncoin = 0x0, dif = 0, gas = 0, number = 0, timestamp = 0\n\nTransaction trace:\nC.constructor()\nState: coin = 0x0, dif = 0, gas = 0, number = 0, timestamp = 0\nC.f(){ block.coinbase: 0x0, block.difficulty: 0, block.gaslimit: 0, block.number: 0, block.timestamp: 0 }\n C.g() -- internal call
// Warning 8417: (155-171): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (641-657): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 6328: (932-961): CHC: Assertion violation happens here.
@@ -1,11 +0,0 @@
contract C
{
function f(uint difficulty) public view {
assert(block.difficulty == difficulty);
}
}
// ====
// SMTEngine: all
// SMTIgnoreCex: yes
// ----
// Warning 6328: (58-96): CHC: Assertion violation happens here.
@@ -3,6 +3,7 @@ contract C
function f() public payable {
assert(msg.sender == block.coinbase);
assert(block.difficulty == block.gaslimit);
assert(block.prevrandao == block.gaslimit);
assert(block.number == block.timestamp);
assert(tx.gasprice == msg.value);
assert(tx.origin == msg.sender);
@@ -17,11 +18,13 @@ contract C
// SMTEngine: all
// SMTIgnoreCex: yes
// ----
// Warning 8417: (93-109): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 6328: (46-82): CHC: Assertion violation happens here.
// Warning 6328: (86-128): CHC: Assertion violation happens here.
// Warning 6328: (132-171): CHC: Assertion violation happens here.
// Warning 6328: (175-207): CHC: Assertion violation happens here.
// Warning 6328: (211-242): CHC: Assertion violation happens here.
// Warning 6328: (295-319): CHC: Assertion violation happens here.
// Warning 6328: (323-351): CHC: Assertion violation happens here.
// Warning 6328: (355-378): CHC: Assertion violation happens here.
// Warning 6328: (132-174): CHC: Assertion violation happens here.
// Warning 6328: (178-217): CHC: Assertion violation happens here.
// Warning 6328: (221-253): CHC: Assertion violation happens here.
// Warning 6328: (257-288): CHC: Assertion violation happens here.
// Warning 6328: (341-365): CHC: Assertion violation happens here.
// Warning 6328: (369-397): CHC: Assertion violation happens here.
// Warning 6328: (401-424): CHC: Assertion violation happens here.
@@ -6,6 +6,7 @@ contract C
function g() internal {
assert(msg.sender == block.coinbase);
assert(block.difficulty == block.gaslimit);
assert(block.prevrandao == block.gaslimit);
assert(block.number == block.timestamp);
assert(tx.gasprice == msg.value);
assert(tx.origin == msg.sender);
@@ -20,11 +21,13 @@ contract C
// SMTEngine: all
// SMTIgnoreCex: yes
// ----
// Warning 8417: (128-144): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 6328: (81-117): CHC: Assertion violation happens here.
// Warning 6328: (121-163): CHC: Assertion violation happens here.
// Warning 6328: (167-206): CHC: Assertion violation happens here.
// Warning 6328: (210-242): CHC: Assertion violation happens here.
// Warning 6328: (246-277): CHC: Assertion violation happens here.
// Warning 6328: (330-354): CHC: Assertion violation happens here.
// Warning 6328: (358-386): CHC: Assertion violation happens here.
// Warning 6328: (390-413): CHC: Assertion violation happens here.
// Warning 6328: (167-209): CHC: Assertion violation happens here.
// Warning 6328: (213-252): CHC: Assertion violation happens here.
// Warning 6328: (256-288): CHC: Assertion violation happens here.
// Warning 6328: (292-323): CHC: Assertion violation happens here.
// Warning 6328: (376-400): CHC: Assertion violation happens here.
// Warning 6328: (404-432): CHC: Assertion violation happens here.
// Warning 6328: (436-459): CHC: Assertion violation happens here.
@@ -0,0 +1,16 @@
contract C
{
function f(uint prevrandao) public view {
assert(block.prevrandao == prevrandao); // should fail
assert(block.difficulty == prevrandao); // should fail
assert(block.difficulty == block.prevrandao); // should hold
}
}
// ====
// SMTEngine: all
// SMTIgnoreCex: yes
// ----
// Warning 8417: (122-138): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (179-195): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 6328: (58-96): CHC: Assertion violation happens here.
// Warning 6328: (115-153): CHC: Assertion violation happens here.
@@ -17,6 +17,8 @@ contract C {
assert(block.chainid <= 2**256 - 1);
assert(block.difficulty >= 0);
assert(block.difficulty <= 2**256 - 1);
assert(block.prevrandao > 2**64);
assert(block.prevrandao <= 2**256 - 1);
assert(block.gaslimit >= 0);
assert(block.gaslimit <= 2**256 - 1);
assert(block.number >= 0);
@@ -44,6 +46,8 @@ contract D {
assert(block.chainid <= 2**256 - 1);
assert(block.difficulty >= 0);
assert(block.difficulty <= 2**256 - 1);
assert(block.prevrandao > 2**64);
assert(block.prevrandao <= 2**256 - 1);
assert(block.gaslimit >= 0);
assert(block.gaslimit <= 2**256 - 1);
assert(block.number >= 0);
@@ -55,3 +59,7 @@ contract D {
// ====
// SMTEngine: all
// ----
// Warning 8417: (565-581): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (598-614): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (1447-1463): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (1481-1497): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
@@ -2,6 +2,7 @@ contract C {
bytes32 bhash;
address coin;
uint dif;
uint prevrandao;
uint glimit;
uint number;
uint tstamp;
@@ -16,6 +17,7 @@ contract C {
bhash = blockhash(12);
coin = block.coinbase;
dif = block.difficulty;
prevrandao = block.prevrandao;
glimit = block.gaslimit;
number = block.number;
tstamp = block.timestamp;
@@ -31,6 +33,7 @@ contract C {
assert(bhash == blockhash(12));
assert(coin == block.coinbase);
assert(dif == block.difficulty);
assert(prevrandao == block.prevrandao);
assert(glimit == block.gaslimit);
assert(number == block.number);
assert(tstamp == block.timestamp);
@@ -46,6 +49,7 @@ contract C {
assert(bhash == blockhash(12));
assert(coin == block.coinbase);
assert(dif == block.difficulty);
assert(prevrandao == block.prevrandao);
assert(glimit == block.gaslimit);
assert(number == block.number);
assert(tstamp == block.timestamp);
@@ -60,3 +64,6 @@ contract C {
// ====
// SMTEngine: all
// ----
// Warning 8417: (293-309): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (645-661): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (1127-1143): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
@@ -2,6 +2,7 @@ contract C {
bytes32 bhash;
address coin;
uint dif;
uint prevrandao;
uint glimit;
uint number;
uint tstamp;
@@ -16,6 +17,7 @@ contract C {
bhash = blockhash(12);
coin = block.coinbase;
dif = block.difficulty;
prevrandao = block.prevrandao;
glimit = block.gaslimit;
number = block.number;
tstamp = block.timestamp;
@@ -31,6 +33,7 @@ contract C {
assert(bhash == blockhash(122));
assert(coin != block.coinbase);
assert(dif != block.difficulty);
assert(prevrandao != block.prevrandao);
assert(glimit != block.gaslimit);
assert(number != block.number);
assert(tstamp != block.timestamp);
@@ -46,6 +49,7 @@ contract C {
assert(bhash == blockhash(122));
assert(coin != block.coinbase);
assert(dif != block.difficulty);
assert(prevrandao != block.prevrandao);
assert(glimit != block.gaslimit);
assert(number != block.number);
assert(tstamp != block.timestamp);
@@ -61,27 +65,32 @@ contract C {
// SMTEngine: all
// SMTIgnoreCex: yes
// ----
// Warning 6328: (512-543): CHC: Assertion violation happens here.
// Warning 6328: (547-577): CHC: Assertion violation happens here.
// Warning 6328: (581-612): CHC: Assertion violation happens here.
// Warning 6328: (616-648): CHC: Assertion violation happens here.
// Warning 6328: (652-682): CHC: Assertion violation happens here.
// Warning 6328: (686-719): CHC: Assertion violation happens here.
// Warning 6328: (723-762): CHC: Assertion violation happens here.
// Warning 6328: (766-794): CHC: Assertion violation happens here.
// Warning 6328: (798-820): CHC: Assertion violation happens here.
// Warning 6328: (824-850): CHC: Assertion violation happens here.
// Warning 6328: (854-883): CHC: Assertion violation happens here.
// Warning 6328: (887-914): CHC: Assertion violation happens here.
// Warning 6328: (953-984): CHC: Assertion violation happens here.
// Warning 6328: (988-1018): CHC: Assertion violation happens here.
// Warning 6328: (1022-1053): CHC: Assertion violation happens here.
// Warning 6328: (1057-1089): CHC: Assertion violation happens here.
// Warning 6328: (1093-1123): CHC: Assertion violation happens here.
// Warning 6328: (1127-1160): CHC: Assertion violation happens here.
// Warning 6328: (1164-1203): CHC: Assertion violation happens here.
// Warning 6328: (1207-1235): CHC: Assertion violation happens here.
// Warning 6328: (1239-1261): CHC: Assertion violation happens here.
// Warning 6328: (1265-1291): CHC: Assertion violation happens here.
// Warning 6328: (1295-1324): CHC: Assertion violation happens here.
// Warning 6328: (1328-1355): CHC: Assertion violation happens here.
// Warning 8417: (293-309): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (646-662): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 8417: (1129-1145): Since the VM version paris, "difficulty" was replaced by "prevrandao", which now returns a random number based on the beacon chain.
// Warning 6328: (563-594): CHC: Assertion violation happens here.
// Warning 6328: (598-628): CHC: Assertion violation happens here.
// Warning 6328: (632-663): CHC: Assertion violation happens here.
// Warning 6328: (667-705): CHC: Assertion violation happens here.
// Warning 6328: (709-741): CHC: Assertion violation happens here.
// Warning 6328: (745-775): CHC: Assertion violation happens here.
// Warning 6328: (779-812): CHC: Assertion violation happens here.
// Warning 6328: (816-855): CHC: Assertion violation happens here.
// Warning 6328: (859-887): CHC: Assertion violation happens here.
// Warning 6328: (891-913): CHC: Assertion violation happens here.
// Warning 6328: (917-943): CHC: Assertion violation happens here.
// Warning 6328: (947-976): CHC: Assertion violation happens here.
// Warning 6328: (980-1007): CHC: Assertion violation happens here.
// Warning 6328: (1046-1077): CHC: Assertion violation happens here.
// Warning 6328: (1081-1111): CHC: Assertion violation happens here.
// Warning 6328: (1115-1146): CHC: Assertion violation happens here.
// Warning 6328: (1150-1188): CHC: Assertion violation happens here.
// Warning 6328: (1192-1224): CHC: Assertion violation happens here.
// Warning 6328: (1228-1258): CHC: Assertion violation happens here.
// Warning 6328: (1262-1295): CHC: Assertion violation happens here.
// Warning 6328: (1299-1338): CHC: Assertion violation happens here.
// Warning 6328: (1342-1370): CHC: Assertion violation happens here.
// Warning 6328: (1374-1396): CHC: Assertion violation happens here.
// Warning 6328: (1400-1426): CHC: Assertion violation happens here.
// Warning 6328: (1430-1459): CHC: Assertion violation happens here.
// Warning 6328: (1463-1490): CHC: Assertion violation happens here.
@@ -32,5 +32,5 @@ contract C {
// SMTEngine: all
// SMTIgnoreOS: macos
// ----
// Warning 6368: (374-381): CHC: Out of bounds access might happen here.
// Warning 6368: (456-462): CHC: Out of bounds access happens here.
// Info 1180: Contract invariant(s) for :C:\n!(a.length <= 4)\n!(a[2].length <= 2)\n
@@ -11,6 +11,8 @@ contract C {
assert(T.unwrap(arr[i]) == address(42)); // should hold
}
}
// ====
// SMTIgnoreOS: macos
// ----
// Warning 6328: (204-243): CHC: Assertion violation might happen here.
// Warning 4661: (204-243): BMC: Assertion violation happens here.
@@ -23,3 +23,4 @@ contract C {
);
}
}
// ----