- // MIR for `result_ok` before ElaborateDrops + // MIR for `result_ok` after ElaborateDrops fn result_ok(_1: Result) -> Option { debug result => _1; let mut _0: std::option::Option; let mut _2: isize; let _3: std::string::String; let mut _4: std::string::String; + let mut _5: bool; + let mut _6: isize; + let mut _7: isize; scope 1 { debug s => _3; } bb0: { + _5 = const false; + _5 = const true; PlaceMention(_1); _2 = discriminant(_1); switchInt(move _2) -> [0: bb2, otherwise: bb1]; } bb1: { _0 = Option::::None; goto -> bb5; } bb2: { StorageLive(_3); _3 = move ((_1 as Ok).0: std::string::String); StorageLive(_4); _4 = move _3; _0 = Option::::Some(move _4); - drop(_4) -> [return: bb3, unwind: bb7]; + goto -> bb3; } bb3: { StorageDead(_4); - drop(_3) -> [return: bb4, unwind: bb8]; + goto -> bb4; } bb4: { StorageDead(_3); goto -> bb5; } bb5: { - drop(_1) -> [return: bb6, unwind: bb9]; + goto -> bb16; } bb6: { return; } bb7 (cleanup): { - drop(_3) -> [return: bb8, unwind terminate(cleanup)]; + goto -> bb8; } bb8 (cleanup): { - drop(_1) -> [return: bb9, unwind terminate(cleanup)]; + goto -> bb9; } bb9 (cleanup): { resume; + } + + bb10: { + goto -> bb6; + } + + bb11 (cleanup): { + goto -> bb9; + } + + bb12 (cleanup): { + goto -> bb9; + } + + bb13: { + goto -> bb10; + } + + bb14: { + goto -> bb10; + } + + bb15 (cleanup): { + goto -> bb9; + } + + bb16: { + _6 = discriminant(_1); + switchInt(move _6) -> [0: bb13, otherwise: bb14]; + } + + bb17 (cleanup): { + _7 = discriminant(_1); + switchInt(move _7) -> [0: bb11, otherwise: bb15]; } }