Fix short circuit with assignments

This commit is contained in:
Leonardo Alt
2019-05-06 11:04:43 +02:00
parent befadea0c6
commit 80712f44cb
5 changed files with 86 additions and 3 deletions
@@ -0,0 +1,19 @@
pragma experimental SMTChecker;
contract C
{
bool b;
function f() public {
if ((b = false) && (b == true)) {}
if ((b == false) && (b = true)) {}
if ((b = false) && (b = true)) {}
if ((b == false) && (b == true)) {}
if ((b = true) && b) {}
}
}
// ----
// Warning: (84-110): Condition is always false.
// Warning: (121-147): Condition is always true.
// Warning: (158-183): Condition is always false.
// Warning: (194-221): Condition is always false.
// Warning: (232-247): Condition is always true.
@@ -0,0 +1,23 @@
pragma experimental SMTChecker;
contract C
{
bool b;
function g(bool _b) internal returns (bool) {
b = _b;
return b;
}
function f() public {
if (g(false) && (b == true)) {}
if ((b == false) && g(true)) {}
if (g(false) && g(true)) {}
if (g(false) && (b == true)) {}
if (g(true) && b) {}
}
}
// ----
// Warning: (156-179): Condition is always false.
// Warning: (190-213): Condition is always true.
// Warning: (224-243): Condition is always false.
// Warning: (254-277): Condition is always false.
// Warning: (288-300): Condition is always true.
@@ -0,0 +1,19 @@
pragma experimental SMTChecker;
contract C
{
bool b;
function f() public {
if ((b = true) || (b == false)) {}
if ((b == true) || (b = false)) {}
if ((b = true) || (b = false)) {}
if ((b == true) || (b == false)) {}
if ((b = false) || b) {}
}
}
// ----
// Warning: (84-110): Condition is always true.
// Warning: (121-147): Condition is always true.
// Warning: (158-183): Condition is always true.
// Warning: (194-221): Condition is always true.
// Warning: (232-248): Condition is always false.
@@ -0,0 +1,23 @@
pragma experimental SMTChecker;
contract C
{
bool b;
function g(bool _b) internal returns (bool) {
b = _b;
return b;
}
function f() public {
if (g(true) || (b == false)) {}
if ((b == true) || g(false)) {}
if (g(true) || g(false)) {}
if (g(true) || (b == false)) {}
if (g(false) || b) {}
}
}
// ----
// Warning: (156-179): Condition is always true.
// Warning: (190-213): Condition is always true.
// Warning: (224-243): Condition is always true.
// Warning: (254-277): Condition is always true.
// Warning: (288-301): Condition is always false.