//# publish
module 0x1.A {
    public parity(u: u64): u64 * bool {
    label b0:
        return copy(u), (move(u) % 2 == 0);
    }

    public takes_bool(b: bool): u64 {
    label b0:
        jump_if (move(b)) b2;
    label b1:
        return 0;
    label b2:
        return 1;
    }

    public eat_stack(v: u64) {
    label b0:
        return;
    }
}

//# run
import 0x1.A;

main() {
    let k: u64;
    let ans: u64;
    let e: u64;
label b0:
    k = 100;
    // positive stack
    ans = A.takes_bool(A.parity(move(k)));
    assert(move(ans) == true, 42);
    // negative stack, but never reached during checking
    (A.eat_stack(), A.eat_stack());
    return;
}