- // MIR for `run2::{closure#0}` before Inline
+ // MIR for `run2::{closure#0}` after Inline
  
  fn run2::{closure#0}(_1: {closure@$DIR/inline_coroutine_body.rs:13:9: 13:11}) -> () {
      debug permit => (_1.0: ActionPermit<'_, T>);
      debug ctx => (*(_1.1: &mut std::task::Context<'_>));
      let mut _0: ();
      let mut _2: {async fn body of ActionPermit<'_, T>::perform()};
      let mut _3: ActionPermit<'_, T>;
      let mut _5: &mut {async fn body of ActionPermit<'_, T>::perform()};
      let _6: ();
      let mut _7: std::task::Poll<()>;
      let mut _8: std::pin::Pin<&mut {async fn body of ActionPermit<'_, T>::perform()}>;
      let mut _9: &mut std::task::Context<'_>;
      let mut _10: &mut std::task::Context<'_>;
      scope 1 {
          debug fut => _2;
          let _4: std::pin::Pin<&mut {async fn body of ActionPermit<'_, T>::perform()}>;
          scope 2 {
              debug fut => _4;
              scope 3 {
              }
+             scope 6 (inlined ActionPermit::<'_, T>::perform::{closure#0}) {
+                 let _11: ActionPermit<'_, T>;
+                 let mut _12: std::future::Ready<()>;
+                 let mut _13: std::future::Ready<()>;
+                 let mut _14: ();
+                 let mut _16: ();
+                 let _17: ();
+                 let mut _18: std::task::Poll<()>;
+                 let mut _19: std::pin::Pin<&mut std::future::Ready<()>>;
+                 let mut _20: &mut std::future::Ready<()>;
+                 let mut _21: &mut std::future::Ready<()>;
+                 let mut _22: &mut std::task::Context<'_>;
+                 let mut _23: &mut std::task::Context<'_>;
+                 let mut _24: &mut std::task::Context<'_>;
+                 let mut _25: isize;
+                 let mut _27: !;
+                 let mut _28: &mut std::task::Context<'_>;
+                 let mut _29: ();
+                 let mut _30: ();
+                 let mut _31: &mut std::task::Context<'_>;
+                 let mut _32: u32;
+                 let mut _33: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _34: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _35: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _36: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _37: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _38: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _39: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 let mut _40: &mut {async fn body of ActionPermit<'_, T>::perform()};
+                 scope 7 {
+                     let mut _15: std::future::Ready<()>;
+                     scope 8 {
+                         let _26: ();
+                         scope 9 {
+                         }
+                     }
+                     scope 10 (inlined ready::<()>) {
+                         let mut _41: std::option::Option<()>;
+                     }
+                 }
+             }
          }
+         scope 5 (inlined Pin::<&mut {async fn body of ActionPermit<'_, T>::perform()}>::new_unchecked) {
+         }
      }
+     scope 4 (inlined ActionPermit::<'_, T>::perform) {
+     }
  
      bb0: {
          StorageLive(_2);
          StorageLive(_3);
          _3 = move (_1.0: ActionPermit<'_, T>);
-         _2 = ActionPermit::<'_, T>::perform(move _3) -> [return: bb1, unwind unreachable];
-     }
- 
-     bb1: {
+         _2 = {coroutine@$DIR/inline_coroutine_body.rs:25:28: 27:6 (#0)} { self: move _3 };
          StorageDead(_3);
          StorageLive(_4);
          StorageLive(_5);
          _5 = &mut _2;
-         _4 = Pin::<&mut {async fn body of ActionPermit<'_, T>::perform()}>::new_unchecked(move _5) -> [return: bb2, unwind unreachable];
-     }
- 
-     bb2: {
+         _4 = Pin::<&mut {async fn body of ActionPermit<'_, T>::perform()}> { __pointer: copy _5 };
          StorageDead(_5);
          StorageLive(_6);
          StorageLive(_7);
          StorageLive(_8);
          _8 = move _4;
          StorageLive(_9);
          _10 = deref_copy (_1.1: &mut std::task::Context<'_>);
          _9 = &mut (*_10);
-         _7 = <{async fn body of ActionPermit<'_, T>::perform()} as Future>::poll(move _8, move _9) -> [return: bb3, unwind unreachable];
+         StorageLive(_11);
+         StorageLive(_15);
+         StorageLive(_16);
+         StorageLive(_25);
+         StorageLive(_27);
+         StorageLive(_30);
+         StorageLive(_31);
+         StorageLive(_32);
+         StorageLive(_33);
+         StorageLive(_34);
+         StorageLive(_35);
+         StorageLive(_36);
+         StorageLive(_37);
+         StorageLive(_38);
+         StorageLive(_39);
+         StorageLive(_40);
+         _33 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         _32 = discriminant((*_33));
+         switchInt(move _32) -> [0: bb3, 1: bb13, 3: bb12, otherwise: bb8];
      }
  
-     bb3: {
+     bb1: {
+         StorageDead(_2);
+         return;
+     }
+ 
+     bb2: {
+         StorageDead(_40);
+         StorageDead(_39);
+         StorageDead(_38);
+         StorageDead(_37);
+         StorageDead(_36);
+         StorageDead(_35);
+         StorageDead(_34);
+         StorageDead(_33);
+         StorageDead(_32);
+         StorageDead(_31);
+         StorageDead(_30);
+         StorageDead(_27);
+         StorageDead(_25);
+         StorageDead(_16);
+         StorageDead(_15);
+         StorageDead(_11);
          StorageDead(_9);
          StorageDead(_8);
          StorageDead(_7);
          _6 = const ();
          StorageDead(_6);
          _0 = const ();
          StorageDead(_4);
-         drop(_2) -> [return: bb4, unwind unreachable];
+         drop(_2) -> [return: bb1, unwind unreachable];
      }
  
+     bb3: {
+         _31 = move _9;
+         _34 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         _35 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         (((*_34) as variant#3).0: ActionPermit<'_, T>) = move ((*_35).0: ActionPermit<'_, T>);
+         StorageLive(_12);
+         StorageLive(_13);
+         StorageLive(_14);
+         _14 = ();
+         StorageLive(_41);
+         _41 = Option::<()>::Some(copy _14);
+         _13 = std::future::Ready::<()>(move _41);
+         StorageDead(_41);
+         StorageDead(_14);
+         _12 = <std::future::Ready<()> as IntoFuture>::into_future(move _13) -> [return: bb4, unwind unreachable];
+     }
+ 
      bb4: {
-         StorageDead(_2);
-         return;
+         StorageDead(_13);
+         _36 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         (((*_36) as variant#3).1: std::future::Ready<()>) = move _12;
+         goto -> bb5;
+     }
+ 
+     bb5: {
+         StorageLive(_17);
+         StorageLive(_18);
+         StorageLive(_19);
+         StorageLive(_20);
+         StorageLive(_21);
+         _37 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         _21 = &mut (((*_37) as variant#3).1: std::future::Ready<()>);
+         _20 = &mut (*_21);
+         _19 = Pin::<&mut std::future::Ready<()>>::new_unchecked(move _20) -> [return: bb6, unwind unreachable];
+     }
+ 
+     bb6: {
+         StorageDead(_20);
+         StorageLive(_22);
+         StorageLive(_23);
+         StorageLive(_24);
+         _24 = copy _31;
+         _23 = move _24;
+         _22 = &mut (*_23);
+         StorageDead(_24);
+         _18 = <std::future::Ready<()> as Future>::poll(move _19, move _22) -> [return: bb7, unwind unreachable];
+     }
+ 
+     bb7: {
+         StorageDead(_22);
+         StorageDead(_19);
+         _25 = discriminant(_18);
+         switchInt(move _25) -> [0: bb10, 1: bb9, otherwise: bb8];
+     }
+ 
+     bb8: {
+         unreachable;
+     }
+ 
+     bb9: {
+         _17 = const ();
+         StorageDead(_23);
+         StorageDead(_21);
+         StorageDead(_18);
+         StorageDead(_17);
+         StorageLive(_28);
+         StorageLive(_29);
+         _29 = ();
+         _7 = Poll::<()>::Pending;
+         StorageDead(_12);
+         StorageDead(_28);
+         StorageDead(_29);
+         _38 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         discriminant((*_38)) = 3;
+         goto -> bb2;
+     }
+ 
+     bb10: {
+         StorageLive(_26);
+         _26 = copy ((_18 as Ready).0: ());
+         _30 = copy _26;
+         StorageDead(_26);
+         StorageDead(_23);
+         StorageDead(_21);
+         StorageDead(_18);
+         StorageDead(_17);
+         StorageDead(_12);
+         _39 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         drop((((*_39) as variant#3).0: ActionPermit<'_, T>)) -> [return: bb11, unwind unreachable];
+     }
+ 
+     bb11: {
+         _7 = Poll::<()>::Ready(move _30);
+         _40 = deref_copy (_8.0: &mut {async fn body of ActionPermit<'_, T>::perform()});
+         discriminant((*_40)) = 1;
+         goto -> bb2;
+     }
+ 
+     bb12: {
+         StorageLive(_12);
+         StorageLive(_28);
+         StorageLive(_29);
+         _28 = move _9;
+         StorageDead(_29);
+         _31 = move _28;
+         StorageDead(_28);
+         _16 = const ();
+         goto -> bb5;
+     }
+ 
+     bb13: {
+         assert(const false, "`async fn` resumed after completion") -> [success: bb13, unwind unreachable];
      }
  }
  
