// MIR for `main` after built | User Type Annotations | 0: user_ty: Canonical { value: Ty(std::option::Option), max_universe: U0, variables: [] }, span: $DIR/issue_101867.rs:4:12: 4:22, inferred_ty: std::option::Option | 1: user_ty: Canonical { value: Ty(std::option::Option), max_universe: U0, variables: [] }, span: $DIR/issue_101867.rs:4:12: 4:22, inferred_ty: std::option::Option | fn main() -> () { let mut _0: (); let _1: std::option::Option as UserTypeProjection { base: UserType(0), projs: [] }; let mut _2: !; let _3: (); let mut _4: !; let mut _6: isize; scope 1 { debug x => _1; let _5: u8; scope 2 { debug y => _5; } } bb0: { StorageLive(_1); _1 = Option::::Some(const 1_u8); FakeRead(ForLet(None), _1); AscribeUserType(_1, o, UserTypeProjection { base: UserType(1), projs: [] }); StorageLive(_5); FakeRead(ForMatchedPlace(None), _1); _6 = discriminant(_1); switchInt(move _6) -> [1: bb4, otherwise: bb3]; } bb1: { StorageLive(_3); StorageLive(_4); _4 = begin_panic::<&str>(const "explicit panic") -> bb7; } bb2: { StorageDead(_4); StorageDead(_3); unreachable; } bb3: { goto -> bb6; } bb4: { falseEdge -> [real: bb5, imaginary: bb3]; } bb5: { _5 = ((_1 as Some).0: u8); _0 = const (); StorageDead(_5); StorageDead(_1); return; } bb6: { StorageDead(_5); goto -> bb1; } bb7 (cleanup): { resume; } }