forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#115794 - cjgillot:aggregate-no-box, r=david…
…twco Do not create a DerefLen place for `Box<[T]>`. Fixes rust-lang#115789
- Loading branch information
Showing
10 changed files
with
956 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.ConstProp.32bit.panic-abort.diff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
- // MIR for `main` before ConstProp | ||
+ // MIR for `main` after ConstProp | ||
|
||
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 { | ||
debug ptr => _3; | ||
} | ||
scope 4 (inlined Unique::<[bool; 0]>::dangling) { | ||
let mut _5: std::ptr::NonNull<[bool; 0]>; | ||
scope 5 (inlined NonNull::<[bool; 0]>::dangling) { | ||
let mut _7: usize; | ||
scope 6 { | ||
let _6: *mut [bool; 0]; | ||
scope 7 { | ||
debug ptr => _6; | ||
scope 11 (inlined NonNull::<[bool; 0]>::new_unchecked) { | ||
debug ptr => _6; | ||
let mut _8: *const [bool; 0]; | ||
scope 12 { | ||
scope 13 (inlined NonNull::<T>::new_unchecked::runtime::<[bool; 0]>) { | ||
debug ptr => _6; | ||
scope 14 (inlined ptr::mut_ptr::<impl *mut [bool; 0]>::is_null) { | ||
debug self => _6; | ||
let mut _9: *mut u8; | ||
scope 15 { | ||
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { | ||
debug ptr => _9; | ||
scope 17 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { | ||
debug self => _9; | ||
scope 18 { | ||
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { | ||
debug self => _9; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
scope 8 (inlined align_of::<[bool; 0]>) { | ||
} | ||
scope 9 (inlined invalid_mut::<[bool; 0]>) { | ||
debug addr => _7; | ||
scope 10 { | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
bb0: { | ||
StorageLive(_1); | ||
StorageLive(_2); | ||
StorageLive(_3); | ||
StorageLive(_4); | ||
StorageLive(_5); | ||
StorageLive(_6); | ||
StorageLive(_7); | ||
- _7 = AlignOf([bool; 0]); | ||
- _6 = _7 as *mut [bool; 0] (Transmute); | ||
+ _7 = const 1_usize; | ||
+ _6 = const {0x1 as *mut [bool; 0]}; | ||
StorageDead(_7); | ||
StorageLive(_8); | ||
StorageLive(_9); | ||
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer)); | ||
- _5 = NonNull::<[bool; 0]> { pointer: _8 }; | ||
+ _8 = const {0x1 as *const [bool; 0]}; | ||
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}; | ||
StorageDead(_9); | ||
StorageDead(_8); | ||
StorageDead(_6); | ||
- _4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> }; | ||
+ _4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }}; | ||
StorageDead(_5); | ||
- _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize)); | ||
+ _3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc7, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}; | ||
StorageDead(_4); | ||
- _2 = Box::<[bool]>(_3, const std::alloc::Global); | ||
+ _2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc10, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global); | ||
StorageDead(_3); | ||
- _1 = A { foo: move _2 }; | ||
+ _1 = A { foo: const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc11, 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; | ||
} | ||
+ } | ||
+ | ||
+ alloc11 (size: 8, align: 4) { | ||
+ 01 00 00 00 00 00 00 00 │ ........ | ||
+ } | ||
+ | ||
+ alloc10 (size: 8, align: 4) { | ||
+ 01 00 00 00 00 00 00 00 │ ........ | ||
+ } | ||
+ | ||
+ alloc7 (size: 8, align: 4) { | ||
+ 01 00 00 00 00 00 00 00 │ ........ | ||
} | ||
|
123 changes: 123 additions & 0 deletions
123
tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.ConstProp.32bit.panic-unwind.diff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
- // MIR for `main` before ConstProp | ||
+ // MIR for `main` after ConstProp | ||
|
||
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 { | ||
debug ptr => _3; | ||
} | ||
scope 4 (inlined Unique::<[bool; 0]>::dangling) { | ||
let mut _5: std::ptr::NonNull<[bool; 0]>; | ||
scope 5 (inlined NonNull::<[bool; 0]>::dangling) { | ||
let mut _7: usize; | ||
scope 6 { | ||
let _6: *mut [bool; 0]; | ||
scope 7 { | ||
debug ptr => _6; | ||
scope 11 (inlined NonNull::<[bool; 0]>::new_unchecked) { | ||
debug ptr => _6; | ||
let mut _8: *const [bool; 0]; | ||
scope 12 { | ||
scope 13 (inlined NonNull::<T>::new_unchecked::runtime::<[bool; 0]>) { | ||
debug ptr => _6; | ||
scope 14 (inlined ptr::mut_ptr::<impl *mut [bool; 0]>::is_null) { | ||
debug self => _6; | ||
let mut _9: *mut u8; | ||
scope 15 { | ||
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { | ||
debug ptr => _9; | ||
scope 17 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { | ||
debug self => _9; | ||
scope 18 { | ||
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { | ||
debug self => _9; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
scope 8 (inlined align_of::<[bool; 0]>) { | ||
} | ||
scope 9 (inlined invalid_mut::<[bool; 0]>) { | ||
debug addr => _7; | ||
scope 10 { | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
bb0: { | ||
StorageLive(_1); | ||
StorageLive(_2); | ||
StorageLive(_3); | ||
StorageLive(_4); | ||
StorageLive(_5); | ||
StorageLive(_6); | ||
StorageLive(_7); | ||
- _7 = AlignOf([bool; 0]); | ||
- _6 = _7 as *mut [bool; 0] (Transmute); | ||
+ _7 = const 1_usize; | ||
+ _6 = const {0x1 as *mut [bool; 0]}; | ||
StorageDead(_7); | ||
StorageLive(_8); | ||
StorageLive(_9); | ||
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer)); | ||
- _5 = NonNull::<[bool; 0]> { pointer: _8 }; | ||
+ _8 = const {0x1 as *const [bool; 0]}; | ||
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}; | ||
StorageDead(_9); | ||
StorageDead(_8); | ||
StorageDead(_6); | ||
- _4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> }; | ||
+ _4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }}; | ||
StorageDead(_5); | ||
- _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize)); | ||
+ _3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc7, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}; | ||
StorageDead(_4); | ||
- _2 = Box::<[bool]>(_3, const std::alloc::Global); | ||
+ _2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc10, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global); | ||
StorageDead(_3); | ||
- _1 = A { foo: move _2 }; | ||
+ _1 = A { foo: const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc11, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }; | ||
StorageDead(_2); | ||
_0 = const (); | ||
drop(_1) -> [return: bb1, unwind: bb2]; | ||
} | ||
|
||
bb1: { | ||
StorageDead(_1); | ||
return; | ||
} | ||
|
||
bb2 (cleanup): { | ||
resume; | ||
} | ||
+ } | ||
+ | ||
+ alloc11 (size: 8, align: 4) { | ||
+ 01 00 00 00 00 00 00 00 │ ........ | ||
+ } | ||
+ | ||
+ alloc10 (size: 8, align: 4) { | ||
+ 01 00 00 00 00 00 00 00 │ ........ | ||
+ } | ||
+ | ||
+ alloc7 (size: 8, align: 4) { | ||
+ 01 00 00 00 00 00 00 00 │ ........ | ||
} | ||
|
119 changes: 119 additions & 0 deletions
119
tests/mir-opt/dataflow-const-prop/default_boxed_slice.main.ConstProp.64bit.panic-abort.diff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
- // MIR for `main` before ConstProp | ||
+ // MIR for `main` after ConstProp | ||
|
||
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 { | ||
debug ptr => _3; | ||
} | ||
scope 4 (inlined Unique::<[bool; 0]>::dangling) { | ||
let mut _5: std::ptr::NonNull<[bool; 0]>; | ||
scope 5 (inlined NonNull::<[bool; 0]>::dangling) { | ||
let mut _7: usize; | ||
scope 6 { | ||
let _6: *mut [bool; 0]; | ||
scope 7 { | ||
debug ptr => _6; | ||
scope 11 (inlined NonNull::<[bool; 0]>::new_unchecked) { | ||
debug ptr => _6; | ||
let mut _8: *const [bool; 0]; | ||
scope 12 { | ||
scope 13 (inlined NonNull::<T>::new_unchecked::runtime::<[bool; 0]>) { | ||
debug ptr => _6; | ||
scope 14 (inlined ptr::mut_ptr::<impl *mut [bool; 0]>::is_null) { | ||
debug self => _6; | ||
let mut _9: *mut u8; | ||
scope 15 { | ||
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { | ||
debug ptr => _9; | ||
scope 17 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { | ||
debug self => _9; | ||
scope 18 { | ||
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { | ||
debug self => _9; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
scope 8 (inlined align_of::<[bool; 0]>) { | ||
} | ||
scope 9 (inlined invalid_mut::<[bool; 0]>) { | ||
debug addr => _7; | ||
scope 10 { | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
bb0: { | ||
StorageLive(_1); | ||
StorageLive(_2); | ||
StorageLive(_3); | ||
StorageLive(_4); | ||
StorageLive(_5); | ||
StorageLive(_6); | ||
StorageLive(_7); | ||
- _7 = AlignOf([bool; 0]); | ||
- _6 = _7 as *mut [bool; 0] (Transmute); | ||
+ _7 = const 1_usize; | ||
+ _6 = const {0x1 as *mut [bool; 0]}; | ||
StorageDead(_7); | ||
StorageLive(_8); | ||
StorageLive(_9); | ||
- _8 = _6 as *const [bool; 0] (PointerCoercion(MutToConstPointer)); | ||
- _5 = NonNull::<[bool; 0]> { pointer: _8 }; | ||
+ _8 = const {0x1 as *const [bool; 0]}; | ||
+ _5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}; | ||
StorageDead(_9); | ||
StorageDead(_8); | ||
StorageDead(_6); | ||
- _4 = Unique::<[bool; 0]> { pointer: move _5, _marker: const PhantomData::<[bool; 0]> }; | ||
+ _4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }}; | ||
StorageDead(_5); | ||
- _3 = move _4 as std::ptr::Unique<[bool]> (PointerCoercion(Unsize)); | ||
+ _3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc7, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}; | ||
StorageDead(_4); | ||
- _2 = Box::<[bool]>(_3, const std::alloc::Global); | ||
+ _2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc10, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global); | ||
StorageDead(_3); | ||
- _1 = A { foo: move _2 }; | ||
+ _1 = A { foo: const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: Indirect { alloc_id: alloc11, 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; | ||
} | ||
+ } | ||
+ | ||
+ alloc11 (size: 16, align: 8) { | ||
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................ | ||
+ } | ||
+ | ||
+ alloc10 (size: 16, align: 8) { | ||
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................ | ||
+ } | ||
+ | ||
+ alloc7 (size: 16, align: 8) { | ||
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................ | ||
} | ||
|
Oops, something went wrong.