- // MIR for `debuginfo` before ReferencePropagation
+ // MIR for `debuginfo` after ReferencePropagation
  
  fn debuginfo() -> () {
      let mut _0: ();
      let _1: &mut u8;
      let mut _2: u8;
      let _4: debuginfo::T;
      let _6: ();
      let mut _7: std::option::Option<i32>;
      let mut _8: isize;
      let _10: ();
      let mut _11: &[i32];
      let _12: &[i32];
      let mut _13: &[i32; 10];
      let _14: [i32; 10];
      let mut _15: std::ops::RangeFull;
      let mut _16: usize;
      let mut _17: usize;
      let mut _18: bool;
      let _23: &&mut u8;
      let _24: &mut u8;
      let mut _25: debuginfo::T;
      scope 1 {
          debug ref_mut_u8 => _1;
          let _3: &u8;
          let mut _28: &debuginfo::T;
          scope 2 {
              debug field => _3;
              let _5: &u8;
              scope 3 {
-                 debug reborrow => _5;
+                 debug reborrow => _1;
                  let _9: &i32;
                  let _22: &&&mut u8;
                  let mut _27: &std::option::Option<i32>;
                  scope 4 {
                      debug variant_field => _9;
                  }
                  scope 5 {
                      debug constant_index => _19;
                      debug subslice => _20;
                      debug constant_index_from_end => _21;
                      let _19: &i32;
                      let _20: &[i32];
                      let _21: &i32;
                      let mut _26: &[i32; 10];
                  }
                  scope 6 {
                      debug multiple_borrow => _22;
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_1);
          StorageLive(_2);
          _2 = const 5_u8;
          _1 = &mut _2;
          StorageLive(_3);
          _28 = const debuginfo::promoted[2];
          _3 = &((*_28).0: u8);
-         StorageLive(_5);
-         _5 = &(*_1);
-         StorageLive(_6);
          StorageLive(_7);
          _7 = Option::<i32>::Some(const 0_i32);
          _8 = discriminant(_7);
          switchInt(move _8) -> [0: bb3, 1: bb2, otherwise: bb1];
      }
  
      bb1: {
          unreachable;
      }
  
      bb2: {
          StorageLive(_9);
          _27 = const debuginfo::promoted[1];
          _9 = &(((*_27) as Some).0: i32);
-         _6 = const ();
          StorageDead(_9);
          goto -> bb4;
      }
  
      bb3: {
-         _6 = const ();
          goto -> bb4;
      }
  
      bb4: {
          StorageDead(_7);
-         StorageDead(_6);
-         StorageLive(_10);
-         StorageLive(_11);
-         StorageLive(_12);
          StorageLive(_13);
          _26 = const debuginfo::promoted[0];
          _13 = &(*_26);
          StorageLive(_15);
          _15 = RangeFull;
          _12 = <[i32; 10] as Index<RangeFull>>::index(move _13, move _15) -> [return: bb5, unwind continue];
      }
  
      bb5: {
          StorageDead(_15);
          StorageDead(_13);
-         _11 = &(*_12);
-         _16 = Len((*_11));
+         _16 = Len((*_12));
          _17 = const 3_usize;
          _18 = Ge(move _16, move _17);
          switchInt(move _18) -> [0: bb7, otherwise: bb6];
      }
  
      bb6: {
          StorageLive(_19);
-         _19 = &(*_11)[1 of 3];
+         _19 = &(*_12)[1 of 3];
          StorageLive(_20);
-         _20 = &(*_11)[2:-1];
+         _20 = &(*_12)[2:-1];
          StorageLive(_21);
-         _21 = &(*_11)[-1 of 3];
-         _10 = const ();
+         _21 = &(*_12)[-1 of 3];
          StorageDead(_21);
          StorageDead(_20);
          StorageDead(_19);
          goto -> bb8;
      }
  
      bb7: {
-         _10 = const ();
          goto -> bb8;
      }
  
      bb8: {
-         StorageDead(_12);
-         StorageDead(_11);
-         StorageDead(_10);
          StorageLive(_22);
          StorageLive(_23);
          StorageLive(_24);
          StorageLive(_25);
          _25 = T(const 6_u8);
          _24 = &mut (_25.0: u8);
          _23 = &_24;
          _22 = &_23;
          _0 = const ();
          StorageDead(_25);
          StorageDead(_24);
          StorageDead(_23);
          StorageDead(_22);
-         StorageDead(_5);
          StorageDead(_3);
          StorageDead(_2);
          StorageDead(_1);
          return;
      }
  }
  
