- // MIR for `main` before DataflowConstProp
+ // MIR for `main` after DataflowConstProp
  
  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::ptr::Alignment::as_nonzero) {
                      }
                      scope 9 (inlined NonNull::<[bool; 0]>::without_provenance) {
                      }
                  }
                  scope 7 (inlined std::ptr::Alignment::of::<[bool; 0]>) {
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_1);
          StorageLive(_2);
          StorageLive(_3);
          StorageLive(_4);
          StorageLive(_5);
          _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
          _4 = const std::ptr::Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
          StorageDead(_5);
          _3 = const std::ptr::Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
          StorageDead(_4);
          _2 = const Box::<[bool]>(std::ptr::Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
          StorageDead(_3);
          _1 = const A {{ foo: Box::<[bool]>(std::ptr::Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _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) { .. }
  
