//ww:run-exit 107 // Migrated from 700_e2e row 68. package main; type invalid = !i32; type overflow = !void; fn inner(n: i32) (invalid | i64 | overflow) = { if (n == 0) { return 7: invalid; }; if (n < 0) { return void: overflow; }; return n: i64 + 1000; }; fn outer(n: i32) (overflow | i64 | invalid) = { let v: i64 = inner(n)?; return v + 1; }; fn main() i32 = { let r: (overflow | i64 | invalid) = outer(0); match (r) { case let v: i64 => return v: i32; case let e: invalid => return e + 100; case let e: overflow => return 999; }; return 0; };