- // MIR for `main` before ScalarReplacementOfAggregates
+ // MIR for `main` after ScalarReplacementOfAggregates
  
  fn main() -> () {
      let mut _0: ();
      let _1: i32;
      let mut _2: (i32, bool);
      let mut _4: [i32; 6];
      let _5: usize;
      let mut _6: usize;
      let mut _7: bool;
      let mut _9: Point;
+     let mut _10: u32;
+     let mut _11: u32;
      scope 1 {
          debug x => _1;
          let _3: i32;
          scope 2 {
              debug y => _3;
              let _8: u32;
              scope 3 {
                  debug z => _8;
              }
          }
      }
  
      bb0: {
          StorageLive(_1);
          _2 = AddWithOverflow(const 2_i32, const 2_i32);
          assert(!move (_2.1: bool), "attempt to compute `{} + {}`, which would overflow", const 2_i32, const 2_i32) -> [success: bb1, unwind continue];
      }
  
      bb1: {
          _1 = move (_2.0: i32);
          StorageLive(_3);
          StorageLive(_4);
          _4 = [const 0_i32, const 1_i32, const 2_i32, const 3_i32, const 4_i32, const 5_i32];
          StorageLive(_5);
          _5 = const 3_usize;
          _6 = Len(_4);
          _7 = Lt(_5, _6);
          assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> [success: bb2, unwind continue];
      }
  
      bb2: {
          _3 = _4[_5];
          StorageDead(_5);
          StorageDead(_4);
          StorageLive(_8);
-         StorageLive(_9);
-         _9 = Point { x: const 12_u32, y: const 42_u32 };
-         _8 = (_9.1: u32);
-         StorageDead(_9);
+         StorageLive(_10);
+         StorageLive(_11);
+         nop;
+         _10 = const 12_u32;
+         _11 = const 42_u32;
+         nop;
+         _8 = _11;
+         StorageDead(_10);
+         StorageDead(_11);
+         nop;
          StorageDead(_8);
          StorageDead(_3);
          StorageDead(_1);
          return;
      }
  }
  
