2020-12-16 17:32:34 +00:00
|
|
|
contract C {
|
|
|
|
uint public x = msg.value - 10; // can underflow
|
|
|
|
constructor() payable {}
|
|
|
|
}
|
|
|
|
|
|
|
|
contract D {
|
|
|
|
function h() internal returns (uint) {
|
|
|
|
return msg.value - 10; // can underflow
|
|
|
|
}
|
|
|
|
function f() public {
|
|
|
|
unchecked {
|
|
|
|
h(); // unchecked here does not mean h does not underflow
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-03-31 15:11:54 +00:00
|
|
|
// ====
|
|
|
|
// SMTEngine: all
|
2020-12-16 17:32:34 +00:00
|
|
|
// ----
|
2021-03-31 15:11:54 +00:00
|
|
|
// Warning 3944: (33-47): CHC: Underflow (resulting value less than 0) happens here.\nCounterexample:\nx = 0\n\nTransaction trace:\nC.constructor()
|
|
|
|
// Warning 3944: (160-174): CHC: Underflow (resulting value less than 0) happens here.\nCounterexample:\n\n\nTransaction trace:\nD.constructor()\nD.f()\n D.h() -- internal call
|