// Value-slot liveness (ERR step E1.8) is analysed inside a nested lambda as its
// OWN boundary: `flowExpr` recurses into a lambda literal via `analyzeFnBody`.
// Reading a failable's value slot inside the lambda where its error is NOT
// proven absent is rejected — even though the lambda is never called and the
// outer function proves nothing for it.
//
// Negative counterpart to 1051(b): were `flowExpr`'s `.lambda` recursion
// removed, the lambda body would go un-analysed and this read would slip
// through. The program never runs (exit 1).

#import "modules/std.sx";

E :: error { Bad }

parse :: (n: i32) -> (i32, !E) {
    if n < 0 { raise error.Bad; }
    return n * 10;
}

build :: () {
    emit := () -> i32 {
        v, err := parse(5);
        return v;               // REJECTED: err not proven absent (inside lambda)
    };
    print("unreached\n");
}

main :: () -> i32 {
    build();
    return 0;
}
