- // MIR for `main` before GVN
+ // MIR for `main` after GVN
  
  fn main() -> () {
      let mut _0: ();
      let _1: A;
      let mut _2: std::boxed::Box<[bool]>;
      scope 1 {
          debug a => _1;
      }
      scope 2 (inlined <Box<[bool]> as Default>::default) {
          let _3: std::ptr::Unique<[bool]>;
          let mut _4: std::ptr::Unique<[bool; 0]>;
          scope 3 {
          }
          scope 4 (inlined std::ptr::Unique::<[bool; 0]>::dangling) {
              let mut _5: std::ptr::NonNull<[bool; 0]>;
              scope 5 (inlined NonNull::<[bool; 0]>::dangling) {
                  scope 6 {
                      scope 8 (inlined std::mem::Alignment::as_nonzero_usize) {
                      }
                      scope 9 (inlined NonNull::<[bool; 0]>::without_provenance) {
                      }
                  }
                  scope 7 (inlined std::mem::Alignment::of::<[bool; 0]>) {
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_1);
          StorageLive(_2);
          StorageLive(_3);
          StorageLive(_4);
          StorageLive(_5);
-         _5 = const <[bool; 0] as std::mem::SizedTypeProperties>::ALIGNMENT as std::ptr::NonNull<[bool; 0]> (Transmute);
-         _4 = std::ptr::Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
+         _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} is !null }};
+         _4 = const std::ptr::Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} is !null }}, _marker: PhantomData::<[bool; 0]> }};
          StorageDead(_5);
-         _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize, Implicit));
+         _3 = const std::ptr::Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: (*const [bool]) is !null }}, _marker: PhantomData::<[bool]> }};
          StorageDead(_4);
-         _2 = Box::<[bool]>(copy _3, const std::alloc::Global);
+         _2 = const Box::<[bool]>(std::ptr::Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: (*const [bool]) is !null }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
          StorageDead(_3);
-         _1 = A { foo: move _2 };
+         _1 = const A {{ foo: Box::<[bool]>(std::ptr::Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: (*const [bool]) is !null }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
          StorageDead(_2);
          _0 = const ();
          drop(_1) -> [return: bb1, unwind unreachable];
      }
  
      bb1: {
          StorageDead(_1);
          return;
      }
  }
+ 
+ ALLOC2 (size: 16, align: 8) { .. }
+ 
+ ALLOC1 (size: 16, align: 8) { .. }
+ 
+ ALLOC0 (size: 16, align: 8) { .. }
  
