- // MIR for `main` before ElaborateDrops
+ // MIR for `main` after ElaborateDrops
  
  fn main() -> () {
      let mut _0: ();
      let _1: bool;
      let mut _3: bool;
      let mut _6: std::option::Option<std::boxed::Box<u32>>;
      scope 1 {
          debug nodrop_x => _1;
          let _2: bool;
          scope 2 {
              debug nodrop_y => _2;
              let _4: std::option::Option<std::boxed::Box<u32>>;
              scope 3 {
                  debug drop_x => _4;
                  let _5: std::option::Option<std::boxed::Box<u32>>;
                  scope 4 {
                      debug drop_y => _5;
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_1);
          _1 = const false;
          StorageLive(_2);
          StorageLive(_3);
          _3 = copy _1;
          _2 = move _3;
          StorageDead(_3);
          StorageLive(_4);
          _4 = Option::<Box<u32>>::None;
          StorageLive(_5);
          StorageLive(_6);
          _6 = move _4;
-         drop(_5) -> [return: bb1, unwind: bb2];
+         goto -> bb1;
      }
  
      bb1: {
          _5 = move _6;
-         drop(_6) -> [return: bb3, unwind: bb6];
+         goto -> bb3;
      }
  
      bb2 (cleanup): {
          _5 = move _6;
-         drop(_6) -> [return: bb6, unwind terminate(cleanup)];
+         goto -> bb6;
      }
  
      bb3: {
          StorageDead(_6);
          _0 = const ();
          drop(_5) -> [return: bb4, unwind: bb7];
      }
  
      bb4: {
          StorageDead(_5);
-         drop(_4) -> [return: bb5, unwind continue];
+         goto -> bb5;
      }
  
      bb5: {
          StorageDead(_4);
          StorageDead(_2);
          StorageDead(_1);
          return;
      }
  
      bb6 (cleanup): {
-         drop(_5) -> [return: bb7, unwind terminate(cleanup)];
+         goto -> bb7;
      }
  
      bb7 (cleanup): {
-         drop(_4) -> [return: bb8, unwind terminate(cleanup)];
+         goto -> bb8;
      }
  
      bb8 (cleanup): {
          resume;
      }
  }
  
