contract C {
    uint256 st;

    function f(uint256 a) public returns (uint256 b, uint256 c, uint256 d) {
        st = 0;
        assembly {
            function sideeffect(r) -> x {
                sstore(0, add(sload(0), r))
                x := 1
            }
            for {
                let i := a
            } eq(i, sideeffect(2)) {
                d := add(d, 3)
            } {
                b := i
                i := 0
            }
        }
        c = st;
    }
}

// ====
// compileToEwasm: also
// compileViaYul: also
// ----
// f(uint256): 0 -> 0, 2, 0
// f(uint256): 1 -> 1, 4, 3
// f(uint256): 2 -> 0, 2, 0
