mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Removing scope rules for pre block in 'For Loops'
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
{
|
||||
let a := 1 let b := codesize()
|
||||
let a := 1
|
||||
let b := codesize()
|
||||
for { } lt(1, codesize()) { mstore(1, codesize()) a := add(a, codesize()) } {
|
||||
mstore(1, codesize())
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
{
|
||||
for { let a := 10 } iszero(eq(a, 0)) { a := add(a, 1) } {}
|
||||
let a := 10
|
||||
for { } iszero(eq(a, 0)) { a := add(a, 1) } {}
|
||||
}
|
||||
// ====
|
||||
// step: expressionSimplifier
|
||||
// ----
|
||||
// {
|
||||
// let a := 10
|
||||
// for {
|
||||
// let a := 10
|
||||
// }
|
||||
// iszero(iszero(a))
|
||||
// {
|
||||
|
||||
@@ -38,4 +38,4 @@
|
||||
// sstore(b, _12)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
for { let x := f(0) } f(x) { x := f(x) }
|
||||
let x := f(0)
|
||||
for { } f(x) { x := f(x) }
|
||||
{
|
||||
let t := f(x)
|
||||
}
|
||||
@@ -13,12 +14,12 @@
|
||||
// ----
|
||||
// {
|
||||
// {
|
||||
// let a_3 := 0
|
||||
// let r_4 := 0
|
||||
// sstore(a_3, 0)
|
||||
// r_4 := a_3
|
||||
// let x := r_4
|
||||
// for {
|
||||
// let a_3 := 0
|
||||
// let r_4 := 0
|
||||
// sstore(a_3, 0)
|
||||
// r_4 := a_3
|
||||
// let x := r_4
|
||||
// }
|
||||
// f(x)
|
||||
// {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
let x := calldataload(3)
|
||||
for { let a := 10 } iszero(eq(a, sub(x, calldataload(3)))) { a := add(a, 1) } {}
|
||||
let a := 10
|
||||
for { } iszero(eq(a, sub(x, calldataload(3)))) { a := add(a, 1) } {}
|
||||
}
|
||||
// ====
|
||||
// step: fullSimplify
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
{
|
||||
let a := 2
|
||||
a := 3
|
||||
for {
|
||||
let a := 2
|
||||
// Should not be removed, even though you might think
|
||||
// it goes out of scope
|
||||
a := 3
|
||||
} a { a := add(a, 1) }
|
||||
{
|
||||
a := 7
|
||||
@@ -13,9 +11,9 @@
|
||||
// step: redundantAssignEliminator
|
||||
// ----
|
||||
// {
|
||||
// let a := 2
|
||||
// a := 3
|
||||
// for {
|
||||
// let a := 2
|
||||
// a := 3
|
||||
// }
|
||||
// a
|
||||
// {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
let a := caller()
|
||||
for { pop(a) } a { pop(a) } {
|
||||
pop(a)
|
||||
for { } a { pop(a) } {
|
||||
pop(a)
|
||||
}
|
||||
}
|
||||
@@ -9,8 +10,8 @@
|
||||
// ----
|
||||
// {
|
||||
// let a := caller()
|
||||
// pop(caller())
|
||||
// for {
|
||||
// pop(caller())
|
||||
// }
|
||||
// caller()
|
||||
// {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
let a := caller()
|
||||
for { pop(a) } a { pop(a) } {
|
||||
pop(a)
|
||||
for { } a { pop(a) } {
|
||||
a := address()
|
||||
let c := a
|
||||
}
|
||||
@@ -11,8 +12,8 @@
|
||||
// ----
|
||||
// {
|
||||
// let a := caller()
|
||||
// pop(caller())
|
||||
// for {
|
||||
// pop(caller())
|
||||
// }
|
||||
// a
|
||||
// {
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
let b := 0
|
||||
for { let a := caller() pop(a) } a { pop(a) } {
|
||||
b := 1 pop(a)
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// step: rematerialiser
|
||||
// ----
|
||||
// {
|
||||
// let b := 0
|
||||
// for {
|
||||
// let a := caller()
|
||||
// pop(caller())
|
||||
// }
|
||||
// caller()
|
||||
// {
|
||||
// pop(caller())
|
||||
// }
|
||||
// {
|
||||
// b := 1
|
||||
// pop(caller())
|
||||
// }
|
||||
// }
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
let b := 0
|
||||
for { let a := caller() pop(a) } lt(a, 0) { pop(a) a := add(a, 3) } {
|
||||
b := 1 pop(a)
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// step: rematerialiser
|
||||
// ----
|
||||
// {
|
||||
// let b := 0
|
||||
// for {
|
||||
// let a := caller()
|
||||
// pop(caller())
|
||||
// }
|
||||
// lt(a, 0)
|
||||
// {
|
||||
// pop(a)
|
||||
// a := add(a, 3)
|
||||
// }
|
||||
// {
|
||||
// b := 1
|
||||
// pop(a)
|
||||
// }
|
||||
// }
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
let a
|
||||
let b
|
||||
for {let i := 0} lt(i, 10) {i := add(a, b)} {
|
||||
let i := 0
|
||||
for {} lt(i, 10) {i := add(a, b)} {
|
||||
a := origin()
|
||||
b := origin()
|
||||
b := caller()
|
||||
@@ -18,8 +19,8 @@
|
||||
// {
|
||||
// let a
|
||||
// let b
|
||||
// let i := 0
|
||||
// for {
|
||||
// let i := 0
|
||||
// }
|
||||
// lt(i, 10)
|
||||
// {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
let a
|
||||
let b
|
||||
for { let i := 0 }
|
||||
let i := 0
|
||||
for { }
|
||||
lt(i, 10)
|
||||
{ i := add(a, b) } // `b` is always known to be caller() but `a` may be origin() or caller().
|
||||
{
|
||||
@@ -20,8 +21,8 @@
|
||||
// {
|
||||
// let a
|
||||
// let b
|
||||
// let i := 0
|
||||
// for {
|
||||
// let i := 0
|
||||
// }
|
||||
// lt(i, 10)
|
||||
// {
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
let a
|
||||
let b
|
||||
let c
|
||||
for { let i := 0 }
|
||||
let i := 0
|
||||
for { }
|
||||
lt(i, 10)
|
||||
{ i := add(add(a, b), c) } // `b` is always known to be caller() but `a` and `c` may be origin() or caller().
|
||||
{
|
||||
@@ -26,8 +27,8 @@
|
||||
// let a
|
||||
// let b
|
||||
// let c
|
||||
// let i := 0
|
||||
// for {
|
||||
// let i := 0
|
||||
// }
|
||||
// lt(i, 10)
|
||||
// {
|
||||
|
||||
+6
-6
@@ -2,10 +2,10 @@
|
||||
let a
|
||||
let b
|
||||
let c
|
||||
let i := 0
|
||||
b := origin()
|
||||
c := origin()
|
||||
for {
|
||||
let i := 0
|
||||
b := origin()
|
||||
c := origin()
|
||||
}
|
||||
lt(i, 10)
|
||||
{
|
||||
@@ -30,10 +30,10 @@
|
||||
// let a
|
||||
// let b
|
||||
// let c
|
||||
// let i := 0
|
||||
// b := origin()
|
||||
// c := origin()
|
||||
// for {
|
||||
// let i := 0
|
||||
// b := origin()
|
||||
// c := origin()
|
||||
// }
|
||||
// lt(i, 10)
|
||||
// {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
let a := mload(0)
|
||||
let b := mload(1)
|
||||
for {
|
||||
let a := mload(0)
|
||||
let b := mload(1)
|
||||
}
|
||||
lt(mload(a),mload(b))
|
||||
{
|
||||
@@ -19,9 +19,9 @@
|
||||
// step: ssaAndBack
|
||||
// ----
|
||||
// {
|
||||
// let a := mload(0)
|
||||
// let b := mload(1)
|
||||
// for {
|
||||
// let a := mload(0)
|
||||
// let b := mload(1)
|
||||
// }
|
||||
// lt(mload(a), mload(b))
|
||||
// {
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
mstore(to, length)
|
||||
from := add(from, 0x20)
|
||||
to := add(to, 0x20)
|
||||
for { let x := 1 } lt(x, length) { x := add(x, 0x20) } {
|
||||
let x := 1
|
||||
for { } lt(x, length) { x := add(x, 0x20) } {
|
||||
mstore(add(to, x), mload(add(from, x)))
|
||||
}
|
||||
}
|
||||
@@ -20,9 +21,9 @@
|
||||
// mstore(to, length_1)
|
||||
// let from_2 := add(from, 0x20)
|
||||
// let to_3 := add(to, 0x20)
|
||||
// let x_4 := 1
|
||||
// let x := x_4
|
||||
// for {
|
||||
// let x_4 := 1
|
||||
// let x := x_4
|
||||
// }
|
||||
// lt(x, length_1)
|
||||
// {
|
||||
|
||||
Reference in New Issue
Block a user