| - // MIR for `main` before ElaborateDrops | 
 | + // MIR for `main` after ElaborateDrops | 
 |    | 
 |   fn main() -> () { | 
 |       let mut _0: (); | 
 |       let _1: (); | 
 |       let mut _2: S; | 
 |       let mut _3: S; | 
 |       let mut _4: S; | 
 | +     let mut _5: bool; | 
 |       scope 1 { | 
 |           debug x => _1; | 
 |       } | 
 |    | 
 |       bb0: { | 
 | +         _5 = const false; | 
 |           StorageLive(_1); | 
 |           StorageLive(_2); | 
 | +         _5 = const true; | 
 |           _2 = S; | 
 |           StorageLive(_3); | 
 |           StorageLive(_4); | 
 |           _4 = S; | 
 |           _3 = S::id(move _4) -> [return: bb1, unwind: bb4]; | 
 |       } | 
 |    | 
 |       bb1: { | 
 |           StorageDead(_4); | 
 | +         _5 = const false; | 
 |           _1 = S::other(move _2, move _3) -> [return: bb2, unwind: bb3]; | 
 |       } | 
 |    | 
 |       bb2: { | 
 |           StorageDead(_3); | 
 | +         _5 = const false; | 
 |           StorageDead(_2); | 
 |           _0 = const (); | 
 |           StorageDead(_1); | 
 |           return; | 
 |       } | 
 |    | 
 |       bb3 (cleanup): { | 
 | -         drop(_3) -> [return: bb5, unwind terminate(cleanup)]; | 
 | +         goto -> bb5; | 
 |       } | 
 |    | 
 |       bb4 (cleanup): { | 
 | -         drop(_4) -> [return: bb5, unwind terminate(cleanup)]; | 
 | +         goto -> bb5; | 
 |       } | 
 |    | 
 |       bb5 (cleanup): { | 
 | -         drop(_2) -> [return: bb6, unwind terminate(cleanup)]; | 
 | +         goto -> bb8; | 
 |       } | 
 |    | 
 |       bb6 (cleanup): { | 
 |           resume; | 
 | +     } | 
 | +  | 
 | +     bb7 (cleanup): { | 
 | +         drop(_2) -> [return: bb6, unwind terminate(cleanup)]; | 
 | +     } | 
 | +  | 
 | +     bb8 (cleanup): { | 
 | +         switchInt(copy _5) -> [0: bb6, otherwise: bb7]; | 
 |       } | 
 |   } | 
 |    |