Skip to content

Commit 9acd497

Browse files
committed
Const-prop pointers.
1 parent e582721 commit 9acd497

9 files changed

+177
-48
lines changed

compiler/rustc_mir_transform/src/gvn.rs

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

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

+18-6
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@
7676
StorageLive(_8);
7777
StorageLive(_9);
7878
StorageLive(_10);
79-
_8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
80-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
79+
_8 = const {0x1 as *const [bool; 0]};
80+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8181
StorageDead(_10);
8282
StorageDead(_9);
8383
StorageDead(_8);
8484
StorageDead(_6);
85-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
85+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8686
StorageDead(_5);
87-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
87+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
8888
StorageDead(_4);
89-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
89+
_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);
9090
StorageDead(_3);
91-
_1 = A { foo: move _2 };
91+
_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) }};
9292
StorageDead(_2);
9393
_0 = const ();
9494
drop(_1) -> [return: bb1, unwind unreachable];
@@ -100,3 +100,15 @@
100100
}
101101
}
102102

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

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

+18-6
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@
7676
StorageLive(_8);
7777
StorageLive(_9);
7878
StorageLive(_10);
79-
_8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
80-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
79+
_8 = const {0x1 as *const [bool; 0]};
80+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8181
StorageDead(_10);
8282
StorageDead(_9);
8383
StorageDead(_8);
8484
StorageDead(_6);
85-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
85+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8686
StorageDead(_5);
87-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
87+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
8888
StorageDead(_4);
89-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
89+
_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);
9090
StorageDead(_3);
91-
_1 = A { foo: move _2 };
91+
_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) }};
9292
StorageDead(_2);
9393
_0 = const ();
9494
drop(_1) -> [return: bb1, unwind: bb2];
@@ -104,3 +104,15 @@
104104
}
105105
}
106106

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 │ ........
117+
}
118+

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

+18-6
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@
7676
StorageLive(_8);
7777
StorageLive(_9);
7878
StorageLive(_10);
79-
_8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
80-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
79+
_8 = const {0x1 as *const [bool; 0]};
80+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8181
StorageDead(_10);
8282
StorageDead(_9);
8383
StorageDead(_8);
8484
StorageDead(_6);
85-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
85+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8686
StorageDead(_5);
87-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
87+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
8888
StorageDead(_4);
89-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
89+
_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);
9090
StorageDead(_3);
91-
_1 = A { foo: move _2 };
91+
_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) }};
9292
StorageDead(_2);
9393
_0 = const ();
9494
drop(_1) -> [return: bb1, unwind unreachable];
@@ -100,3 +100,15 @@
100100
}
101101
}
102102

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

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

+18-6
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@
7676
StorageLive(_8);
7777
StorageLive(_9);
7878
StorageLive(_10);
79-
_8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
80-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
79+
_8 = const {0x1 as *const [bool; 0]};
80+
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8181
StorageDead(_10);
8282
StorageDead(_9);
8383
StorageDead(_8);
8484
StorageDead(_6);
85-
_4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> };
85+
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }};
8686
StorageDead(_5);
87-
_3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize));
87+
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: ALLOC0, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }};
8888
StorageDead(_4);
89-
_2 = Box::<[bool]>(_3, const std::alloc::Global);
89+
_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);
9090
StorageDead(_3);
91-
_1 = A { foo: move _2 };
91+
_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) }};
9292
StorageDead(_2);
9393
_0 = const ();
9494
drop(_1) -> [return: bb1, unwind: bb2];
@@ -104,3 +104,15 @@
104104
}
105105
}
106106

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 │ ................
117+
}
118+

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

+23-6
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,24 @@
7979
StorageLive(_9);
8080
StorageLive(_10);
8181
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
82-
+ _8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
82+
- _5 = NonNull::<[bool; 0]> { pointer: _8 };
83+
+ _8 = const {0x1 as *const [bool; 0]};
84+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8485
StorageDead(_10);
8586
StorageDead(_9);
8687
StorageDead(_8);
8788
StorageDead(_6);
88-
_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]> }};
8991
StorageDead(_5);
90-
_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]> }};
9194
StorageDead(_4);
92-
_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);
9397
StorageDead(_3);
94-
_1 = A { foo: move _2 };
98+
- _1 = A { foo: move _2 };
99+
+ _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) }};
95100
StorageDead(_2);
96101
_0 = const ();
97102
drop(_1) -> [return: bb1, unwind unreachable];
@@ -101,5 +106,17 @@
101106
StorageDead(_1);
102107
return;
103108
}
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 │ ........
104121
}
105122

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

+23-6
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,24 @@
7979
StorageLive(_9);
8080
StorageLive(_10);
8181
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
82-
+ _8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
82+
- _5 = NonNull::<[bool; 0]> { pointer: _8 };
83+
+ _8 = const {0x1 as *const [bool; 0]};
84+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8485
StorageDead(_10);
8586
StorageDead(_9);
8687
StorageDead(_8);
8788
StorageDead(_6);
88-
_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]> }};
8991
StorageDead(_5);
90-
_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]> }};
9194
StorageDead(_4);
92-
_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);
9397
StorageDead(_3);
94-
_1 = A { foo: move _2 };
98+
- _1 = A { foo: move _2 };
99+
+ _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) }};
95100
StorageDead(_2);
96101
_0 = const ();
97102
drop(_1) -> [return: bb1, unwind: bb2];
@@ -105,5 +110,17 @@
105110
bb2 (cleanup): {
106111
resume;
107112
}
113+
+ }
114+
+
115+
+ ALLOC2 (size: 8, align: 4) {
116+
+ 01 00 00 00 00 00 00 00 │ ........
117+
+ }
118+
+
119+
+ ALLOC1 (size: 8, align: 4) {
120+
+ 01 00 00 00 00 00 00 00 │ ........
121+
+ }
122+
+
123+
+ ALLOC0 (size: 8, align: 4) {
124+
+ 01 00 00 00 00 00 00 00 │ ........
108125
}
109126

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

+23-6
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,24 @@
7979
StorageLive(_9);
8080
StorageLive(_10);
8181
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
82-
+ _8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
82+
- _5 = NonNull::<[bool; 0]> { pointer: _8 };
83+
+ _8 = const {0x1 as *const [bool; 0]};
84+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8485
StorageDead(_10);
8586
StorageDead(_9);
8687
StorageDead(_8);
8788
StorageDead(_6);
88-
_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]> }};
8991
StorageDead(_5);
90-
_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]> }};
9194
StorageDead(_4);
92-
_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);
9397
StorageDead(_3);
94-
_1 = A { foo: move _2 };
98+
- _1 = A { foo: move _2 };
99+
+ _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) }};
95100
StorageDead(_2);
96101
_0 = const ();
97102
drop(_1) -> [return: bb1, unwind unreachable];
@@ -101,5 +106,17 @@
101106
StorageDead(_1);
102107
return;
103108
}
109+
+ }
110+
+
111+
+ ALLOC2 (size: 16, align: 8) {
112+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
113+
+ }
114+
+
115+
+ ALLOC1 (size: 16, align: 8) {
116+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
117+
+ }
118+
+
119+
+ ALLOC0 (size: 16, align: 8) {
120+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
104121
}
105122

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

+23-6
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,24 @@
7979
StorageLive(_9);
8080
StorageLive(_10);
8181
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer));
82-
+ _8 = const {0x1 as *mut [bool; 0]} as *const [bool; 0] (PointerCoercion(MutToConstPointer));
83-
_5 = NonNull::<[bool; 0]> { pointer: _8 };
82+
- _5 = NonNull::<[bool; 0]> { pointer: _8 };
83+
+ _8 = const {0x1 as *const [bool; 0]};
84+
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }};
8485
StorageDead(_10);
8586
StorageDead(_9);
8687
StorageDead(_8);
8788
StorageDead(_6);
88-
_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]> }};
8991
StorageDead(_5);
90-
_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]> }};
9194
StorageDead(_4);
92-
_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);
9397
StorageDead(_3);
94-
_1 = A { foo: move _2 };
98+
- _1 = A { foo: move _2 };
99+
+ _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) }};
95100
StorageDead(_2);
96101
_0 = const ();
97102
drop(_1) -> [return: bb1, unwind: bb2];
@@ -105,5 +110,17 @@
105110
bb2 (cleanup): {
106111
resume;
107112
}
113+
+ }
114+
+
115+
+ ALLOC2 (size: 16, align: 8) {
116+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
117+
+ }
118+
+
119+
+ ALLOC1 (size: 16, align: 8) {
120+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
121+
+ }
122+
+
123+
+ ALLOC0 (size: 16, align: 8) {
124+
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
108125
}
109126

0 commit comments

Comments
 (0)