- // MIR for `f` before Inline
+ // MIR for `f` after Inline
  
  fn f(_1: impl Fn()) -> () {
      debug g => _1;
      let mut _0: ();
      let _2: ();
      let mut _3: &impl Fn();
      let mut _4: ();
  
      bb0: {
          StorageLive(_2);
          StorageLive(_3);
          _3 = &_1;
          StorageLive(_4);
          _4 = ();
          _2 = <impl Fn() as Fn<()>>::call(move _3, move _4) -> [return: bb1, unwind: bb3];
      }
  
      bb1: {
          StorageDead(_4);
          StorageDead(_3);
          StorageDead(_2);
          _0 = const ();
          drop(_1) -> [return: bb2, unwind: bb4];
      }
  
      bb2: {
          return;
      }
  
      bb3 (cleanup): {
          drop(_1) -> [return: bb4, unwind terminate(cleanup)];
      }
  
      bb4 (cleanup): {
          resume;
      }
  }
  
