// MIR for `main` after SimplifyCfg-initial | User Type Annotations | 0: user_ty: Canonical { value: Ty(std::option::Option>), max_universe: U0, variables: [], defining_opaque_types: [] }, span: $DIR/basic_assignment.rs:38:17: 38:33, inferred_ty: std::option::Option> | 1: user_ty: Canonical { value: Ty(std::option::Option>), max_universe: U0, variables: [], defining_opaque_types: [] }, span: $DIR/basic_assignment.rs:38:17: 38:33, inferred_ty: std::option::Option> | fn main() -> () { let mut _0: (); let _1: bool; let mut _3: bool; let mut _6: std::option::Option>; scope 1 { debug nodrop_x => _1; let _2: bool; scope 2 { debug nodrop_y => _2; let _4: std::option::Option> as UserTypeProjection { base: UserType(0), projs: [] }; scope 3 { debug drop_x => _4; let _5: std::option::Option>; scope 4 { debug drop_y => _5; } } } } bb0: { StorageLive(_1); _1 = const false; FakeRead(ForLet(None), _1); StorageLive(_2); StorageLive(_3); _3 = _1; _2 = move _3; StorageDead(_3); StorageLive(_4); _4 = Option::>::None; FakeRead(ForLet(None), _4); AscribeUserType(_4, o, UserTypeProjection { base: UserType(1), projs: [] }); StorageLive(_5); StorageLive(_6); _6 = move _4; drop(_5) -> [return: bb1, unwind: bb2]; } bb1: { _5 = move _6; drop(_6) -> [return: bb3, unwind: bb6]; } bb2 (cleanup): { _5 = move _6; drop(_6) -> [return: bb6, unwind terminate(cleanup)]; } bb3: { StorageDead(_6); _0 = const (); drop(_5) -> [return: bb4, unwind: bb7]; } bb4: { StorageDead(_5); drop(_4) -> [return: bb5, unwind: bb8]; } bb5: { StorageDead(_4); StorageDead(_2); StorageDead(_1); return; } bb6 (cleanup): { drop(_5) -> [return: bb7, unwind terminate(cleanup)]; } bb7 (cleanup): { drop(_4) -> [return: bb8, unwind terminate(cleanup)]; } bb8 (cleanup): { resume; } }