- // MIR for `outer` before Inline
+ // MIR for `outer` after Inline
  
  fn outer() -> usize {
      let mut _0: usize;
+     scope 1 (inlined inner) {
+         let mut _1: &[bool; 1];
+         let mut _2: bool;
+         let mut _3: bool;
+         scope 2 {
+             debug buffer => _1;
+             scope 3 {
+                 debug index => _0;
+             }
+         }
+     }
  
      bb0: {
-         _0 = inner() -> [return: bb1, unwind continue];
+         StorageLive(_1);
+         StorageLive(_2);
+         _1 = const inner::promoted[0];
+         _0 = index() -> [return: bb1, unwind continue];
      }
  
      bb1: {
+         StorageLive(_3);
+         _2 = Lt(copy _0, const 1_usize);
+         assert(move _2, "index out of bounds: the length is {} but the index is {}", const 1_usize, copy _0) -> [success: bb2, unwind continue];
+     }
+ 
+     bb2: {
+         _3 = copy (*_1)[_0];
+         switchInt(move _3) -> [0: bb3, otherwise: bb4];
+     }
+ 
+     bb3: {
+         _0 = const 0_usize;
+         goto -> bb4;
+     }
+ 
+     bb4: {
+         StorageDead(_3);
+         StorageDead(_2);
+         StorageDead(_1);
          return;
      }
  }
  
