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)
|
if (m_state.loopState == LoopState::Break)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
m_state.loopState = LoopState::Default;
|
||||||
(*this)(_forLoop.post);
|
(*this)(_forLoop.post);
|
||||||
}
|
}
|
||||||
m_state.loopState = LoopState::Default;
|
m_state.loopState = LoopState::Default;
|
||||||
|
Loading…
Reference in New Issue
Block a user