Control flow analysis for inline assembly.

This commit is contained in:
Daniel Kirchner
2020-03-09 16:23:10 +01:00
parent b7c001eb7f
commit 809e3503ba
29 changed files with 526 additions and 46 deletions
@@ -0,0 +1,17 @@
contract C {
function f() public pure {
assembly {
revert(0, 0)
revert(0, 0)
}
}
function g() public pure {
assembly {
revert(0, 0)
}
revert();
}
}
// ----
// Warning: (100-112): Unreachable code.
// Warning: (222-230): Unreachable code.
@@ -0,0 +1,13 @@
contract C {
function f() public pure {
assembly {
for { let a := 0} lt(a,1) { a := add(a, 1) } {
break
let b := 42
}
}
}
}
// ----
// Warning: (103-117): Unreachable code.
// Warning: (160-171): Unreachable code.
@@ -0,0 +1,12 @@
contract C {
function f() public pure {
assembly {
for { let a := 0} lt(a,1) { a := add(a, 1) } {
continue
let b := 42
}
}
}
}
// ----
// Warning: (163-174): Unreachable code.
@@ -0,0 +1,17 @@
contract C {
function f(uint256 y) public pure returns (uint256 x) {
assembly {
return(0, 0)
x := y
}
}
function g(uint256 y) public pure returns (uint256 x) {
assembly {
return(0, 0)
}
x = y;
}
}
// ----
// Warning: (129-135): Unreachable code.
// Warning: (274-279): Unreachable code.
@@ -0,0 +1,17 @@
contract C {
function f(uint256 y) public pure returns (uint256 x) {
assembly {
revert(0, 0)
x := y
}
}
function g(uint256 y) public pure returns (uint256 x) {
assembly {
revert(0, 0)
}
x = y;
}
}
// ----
// Warning: (129-135): Unreachable code.
// Warning: (274-279): Unreachable code.