// Failable `or` rejection (ERR step E2.4a): the value-terminator form
// (`lhs or value`) requires a value-carrying failable LHS — a pure failable
// (`-> !`) has no success value to fall back to, so `or value` is rejected
// (use `catch` to absorb the error). The positive cases live in
// `examples/231-failable-or.sx`.

#import "modules/std.sx";

E :: error { Bad }

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

main :: () -> i32 {
    x := must(-1) or 0;        // error: `-> !` has no success value to fall back to
    return 0;
}
