Skip to content

Commit d50f26e

Browse files
committed
Const-prop pointers.
1 parent 5a6f14c commit d50f26e

10 files changed

+198
-68
lines changed

compiler/rustc_mir_transform/src/gvn.rs

+13
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,19 @@ impl<'body, 'tcx> VnState<'body, 'tcx> {
561561
.ok()?;
562562
dest.into()
563563
}
564+
CastKind::FnPtrToPtr
565+
| CastKind::PtrToPtr
566+
| CastKind::PointerCoercion(
567+
ty::adjustment::PointerCoercion::MutToConstPointer
568+
| ty::adjustment::PointerCoercion::ArrayToPointer
569+
| ty::adjustment::PointerCoercion::UnsafeFnPointer,
570+
) => {
571+
let src = self.evaluated[value].as_ref()?;
572+
let src = self.ecx.read_immediate(src).ok()?;
573+
let to = self.ecx.layout_of(to).ok()?;
574+
let ret = self.ecx.ptr_to_ptr(&src, to).ok()?;
575+
ret.into()
576+
}
564577
_ => return None,
565578
},
566579
};

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.32bit.panic-abort.diff

+20-8
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,40 @@
6969
}
7070

7171
bb2: {
72-
_10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
73-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb3, unwind unreachable];
72+
_10 = const {0x1 as *mut ()};
73+
_9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb3, unwind unreachable];
7474
}
7575

7676
bb3: {
7777
StorageDead(_8);
78-
_11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
79-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
78+
_11 = const {0x1 as *const [bool; 0]};
79+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8080
StorageDead(_11);
8181
StorageDead(_10);
8282
StorageDead(_6);
83-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
83+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8484
StorageDead(_5);
85-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
85+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
8686
StorageDead(_4);
87-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
87+
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
8888
StorageDead(_9);
8989
StorageDead(_3);
90-
_1 = A { foo: move _2 };
90+
_1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
9191
StorageDead(_2);
9292
_0 = const ();
9393
drop(_1) -> [return: bb1, unwind unreachable];
9494
}
9595
}
9696

97+
ALLOC2 (size: 8, align: 4) {
98+
01 00 00 00 00 00 00 00 │ ........
99+
}
100+
101+
ALLOC1 (size: 8, align: 4) {
102+
01 00 00 00 00 00 00 00 │ ........
103+
}
104+
105+
ALLOC0 (size: 8, align: 4) {
106+
01 00 00 00 00 00 00 00 │ ........
107+
}
108+

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.32bit.panic-unwind.diff

+20-8
Original file line numberDiff line numberDiff line change
@@ -73,28 +73,40 @@
7373
}
7474

7575
bb3: {
76-
_10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
77-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb4, unwind unreachable];
76+
_10 = const {0x1 as *mut ()};
77+
_9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb4, unwind unreachable];
7878
}
7979

8080
bb4: {
8181
StorageDead(_8);
82-
_11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
82+
_11 = const {0x1 as *const [bool; 0]};
83+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8484
StorageDead(_11);
8585
StorageDead(_10);
8686
StorageDead(_6);
87-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
87+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8888
StorageDead(_5);
89-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
89+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
9090
StorageDead(_4);
91-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
91+
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
9292
StorageDead(_9);
9393
StorageDead(_3);
94-
_1 = A { foo: move _2 };
94+
_1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
9595
StorageDead(_2);
9696
_0 = const ();
9797
drop(_1) -> [return: bb1, unwind: bb2];
9898
}
9999
}
100100

101+
ALLOC2 (size: 8, align: 4) {
102+
01 00 00 00 00 00 00 00 │ ........
103+
}
104+
105+
ALLOC1 (size: 8, align: 4) {
106+
01 00 00 00 00 00 00 00 │ ........
107+
}
108+
109+
ALLOC0 (size: 8, align: 4) {
110+
01 00 00 00 00 00 00 00 │ ........
111+
}
112+

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.64bit.panic-abort.diff

+20-8
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,40 @@
6969
}
7070

7171
bb2: {
72-
_10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
73-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb3, unwind unreachable];
72+
_10 = const {0x1 as *mut ()};
73+
_9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb3, unwind unreachable];
7474
}
7575

7676
bb3: {
7777
StorageDead(_8);
78-
_11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
79-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
78+
_11 = const {0x1 as *const [bool; 0]};
79+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8080
StorageDead(_11);
8181
StorageDead(_10);
8282
StorageDead(_6);
83-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
83+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8484
StorageDead(_5);
85-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
85+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
8686
StorageDead(_4);
87-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
87+
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
8888
StorageDead(_9);
8989
StorageDead(_3);
90-
_1 = A { foo: move _2 };
90+
_1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
9191
StorageDead(_2);
9292
_0 = const ();
9393
drop(_1) -> [return: bb1, unwind unreachable];
9494
}
9595
}
9696

97+
ALLOC2 (size: 16, align: 8) {
98+
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
99+
}
100+
101+
ALLOC1 (size: 16, align: 8) {
102+
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
103+
}
104+
105+
ALLOC0 (size: 16, align: 8) {
106+
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
107+
}
108+

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.64bit.panic-unwind.diff

+20-8
Original file line numberDiff line numberDiff line change
@@ -73,28 +73,40 @@
7373
}
7474

7575
bb3: {
76-
_10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
77-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb4, unwind unreachable];
76+
_10 = const {0x1 as *mut ()};
77+
_9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb4, unwind unreachable];
7878
}
7979

8080
bb4: {
8181
StorageDead(_8);
82-
_11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
82+
_11 = const {0x1 as *const [bool; 0]};
83+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8484
StorageDead(_11);
8585
StorageDead(_10);
8686
StorageDead(_6);
87-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
87+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8888
StorageDead(_5);
89-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
89+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
9090
StorageDead(_4);
91-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
91+
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
9292
StorageDead(_9);
9393
StorageDead(_3);
94-
_1 = A { foo: move _2 };
94+
_1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
9595
StorageDead(_2);
9696
_0 = const ();
9797
drop(_1) -> [return: bb1, unwind: bb2];
9898
}
9999
}
100100

101+
ALLOC2 (size: 16, align: 8) {
102+
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
103+
}
104+
105+
ALLOC1 (size: 16, align: 8) {
106+
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
107+
}
108+
109+
ALLOC0 (size: 16, align: 8) {
110+
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
111+
}
112+

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-abort.diff

+26-8
Original file line numberDiff line numberDiff line change
@@ -72,29 +72,47 @@
7272

7373
bb2: {
7474
- _10 = _6 as *mut () (PtrToPtr);
75-
+ _10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
76-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb3, unwind unreachable];
75+
- _9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb3, unwind unreachable];
76+
+ _10 = const {0x1 as *mut ()};
77+
+ _9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb3, unwind unreachable];
7778
}
7879

7980
bb3: {
8081
StorageDead(_8);
8182
- _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
82-
+ _11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
83+
- _5 = NonNull::<[bool; 0]> { pointer: _11 };
84+
+ _11 = const {0x1 as *const [bool; 0]};
85+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8486
StorageDead(_11);
8587
StorageDead(_10);
8688
StorageDead(_6);
87-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
89+
- _4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
90+
+ _4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8891
StorageDead(_5);
89-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
92+
- _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
93+
+ _3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
9094
StorageDead(_4);
91-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
95+
- _2 = Box::<[bool]>(_3, const std::alloc::Global);
96+
+ _2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
9297
StorageDead(_9);
9398
StorageDead(_3);
94-
_1 = A { foo: move _2 };
99+
- _1 = A { foo: move _2 };
100+
+ _1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
95101
StorageDead(_2);
96102
_0 = const ();
97103
drop(_1) -> [return: bb1, unwind unreachable];
98104
}
105+
+ }
106+
+
107+
+ ALLOC2 (size: 8, align: 4) {
108+
+ 01 00 00 00 00 00 00 00 │ ........
109+
+ }
110+
+
111+
+ ALLOC1 (size: 8, align: 4) {
112+
+ 01 00 00 00 00 00 00 00 │ ........
113+
+ }
114+
+
115+
+ ALLOC0 (size: 8, align: 4) {
116+
+ 01 00 00 00 00 00 00 00 │ ........
99117
}
100118

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.32bit.panic-unwind.diff

+26-8
Original file line numberDiff line numberDiff line change
@@ -76,29 +76,47 @@
7676

7777
bb3: {
7878
- _10 = _6 as *mut () (PtrToPtr);
79-
+ _10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
80-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb4, unwind unreachable];
79+
- _9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb4, unwind unreachable];
80+
+ _10 = const {0x1 as *mut ()};
81+
+ _9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb4, unwind unreachable];
8182
}
8283

8384
bb4: {
8485
StorageDead(_8);
8586
- _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
86-
+ _11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
87-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
87+
- _5 = NonNull::<[bool; 0]> { pointer: _11 };
88+
+ _11 = const {0x1 as *const [bool; 0]};
89+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8890
StorageDead(_11);
8991
StorageDead(_10);
9092
StorageDead(_6);
91-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
93+
- _4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
94+
+ _4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
9295
StorageDead(_5);
93-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
96+
- _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
97+
+ _3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
9498
StorageDead(_4);
95-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
99+
- _2 = Box::<[bool]>(_3, const std::alloc::Global);
100+
+ _2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
96101
StorageDead(_9);
97102
StorageDead(_3);
98-
_1 = A { foo: move _2 };
103+
- _1 = A { foo: move _2 };
104+
+ _1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
99105
StorageDead(_2);
100106
_0 = const ();
101107
drop(_1) -> [return: bb1, unwind: bb2];
102108
}
109+
+ }
110+
+
111+
+ ALLOC2 (size: 8, align: 4) {
112+
+ 01 00 00 00 00 00 00 00 │ ........
113+
+ }
114+
+
115+
+ ALLOC1 (size: 8, align: 4) {
116+
+ 01 00 00 00 00 00 00 00 │ ........
117+
+ }
118+
+
119+
+ ALLOC0 (size: 8, align: 4) {
120+
+ 01 00 00 00 00 00 00 00 │ ........
103121
}
104122

tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.GVN.64bit.panic-abort.diff

+26-8
Original file line numberDiff line numberDiff line change
@@ -72,29 +72,47 @@
7272

7373
bb2: {
7474
- _10 = _6 as *mut () (PtrToPtr);
75-
+ _10 = const {0x1 as *mut [bool; 0]} as *mut () (PtrToPtr);
76-
_9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb3, unwind unreachable];
75+
- _9 = NonNull::<T>::new_unchecked::precondition_check(move _10) -> [return: bb3, unwind unreachable];
76+
+ _10 = const {0x1 as *mut ()};
77+
+ _9 = NonNull::<T>::new_unchecked::precondition_check(const {0x1 as *mut ()}) -> [return: bb3, unwind unreachable];
7778
}
7879

7980
bb3: {
8081
StorageDead(_8);
8182
- _11 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
82-
+ _11 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _11 };
83+
- _5 = NonNull::<[bool; 0]> { pointer: _11 };
84+
+ _11 = const {0x1 as *const [bool; 0]};
85+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8486
StorageDead(_11);
8587
StorageDead(_10);
8688
StorageDead(_6);
87-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
89+
- _4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
90+
+ _4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8891
StorageDead(_5);
89-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
92+
- _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
93+
+ _3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
9094
StorageDead(_4);
91-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
95+
- _2 = Box::<[bool]>(_3, const std::alloc::Global);
96+
+ _2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC1, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global);
9297
StorageDead(_9);
9398
StorageDead(_3);
94-
_1 = A { foo: move _2 };
99+
- _1 = A { foo: move _2 };
100+
+ _1 = const A {{ foo: Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC2, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }};
95101
StorageDead(_2);
96102
_0 = const ();
97103
drop(_1) -> [return: bb1, unwind unreachable];
98104
}
105+
+ }
106+
+
107+
+ ALLOC2 (size: 16, align: 8) {
108+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
109+
+ }
110+
+
111+
+ ALLOC1 (size: 16, align: 8) {
112+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
113+
+ }
114+
+
115+
+ ALLOC0 (size: 16, align: 8) {
116+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
99117
}
100118

0 commit comments

Comments
 (0)