mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #6654 from ethereum/fix-yulinterpreter-nested-for-loop-bug
[Yul] Reset loop state (to default) before interpreting for loop's post block
This commit is contained in:
commit
35677019a3
@ -0,0 +1,37 @@
|
||||
{
|
||||
{
|
||||
let a := foo_0(calldataload(0))
|
||||
sstore(0, a)
|
||||
}
|
||||
function foo_0(x) -> y
|
||||
{
|
||||
mstore8(1, 1)
|
||||
for {
|
||||
}
|
||||
slt(1, keccak256(1, msize()))
|
||||
{
|
||||
let x_1 := foo_0(x)
|
||||
}
|
||||
{
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// Trace:
|
||||
// MSTORE_AT_SIZE(1, 1) [0101]
|
||||
// MSIZE()
|
||||
// MLOAD_FROM_SIZE(1, 32)
|
||||
// MSTORE_AT_SIZE(1, 1) [0101]
|
||||
// MSIZE()
|
||||
// MLOAD_FROM_SIZE(1, 64)
|
||||
// MSIZE()
|
||||
// MLOAD_FROM_SIZE(1, 96)
|
||||
// SSTORE(0, 0)
|
||||
// Memory dump:
|
||||
// 0: 0001000000000000000000000000000000000000000000000000000000000000
|
||||
// 20: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
// 40: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
// 60: 0000000000000000000000000000000000000000000000000000000000000000
|
||||
// Storage dump:
|
||||
// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000000
|
@ -110,6 +110,7 @@ void Interpreter::operator()(ForLoop const& _forLoop)
|
||||
if (m_state.loopState == LoopState::Break)
|
||||
break;
|
||||
|
||||
m_state.loopState = LoopState::Default;
|
||||
(*this)(_forLoop.post);
|
||||
}
|
||||
m_state.loopState = LoopState::Default;
|
||||
|
Loading…
Reference in New Issue
Block a user