forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#115794 - cjgillot:aggregate-no-box, r=davidtwco
Do not create a DerefLen place for `Box<[T]>`. Fixes rust-lang#115789
- Loading branch information
Showing
6 changed files
with
492 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
117 changes: 117 additions & 0 deletions
117
...opt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.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,117 @@ | ||
- // 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 { | ||
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; | ||
let _9: !; | ||
scope 14 (inlined ptr::mut_ptr::<impl *mut [bool; 0]>::is_null) { | ||
debug self => _6; | ||
let mut _10: *mut u8; | ||
scope 15 { | ||
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { | ||
debug ptr => _10; | ||
let mut _11: usize; | ||
scope 17 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { | ||
debug self => _10; | ||
let mut _12: *mut (); | ||
scope 18 { | ||
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { | ||
debug self => _10; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
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 = const 1_usize; | ||
_6 = const {0x1 as *mut [bool; 0]}; | ||
StorageDead(_7); | ||
StorageLive(_8); | ||
StorageLive(_10); | ||
_10 = const {0x1 as *mut u8}; | ||
StorageLive(_11); | ||
StorageLive(_12); | ||
_12 = const {0x1 as *mut ()}; | ||
_11 = const 1_usize; | ||
StorageDead(_12); | ||
StorageDead(_10); | ||
switchInt(const 1_usize) -> [0: bb2, otherwise: bb3]; | ||
} | ||
|
||
bb1: { | ||
StorageDead(_1); | ||
return; | ||
} | ||
|
||
bb2: { | ||
StorageDead(_11); | ||
_9 = core::panicking::panic_nounwind(const "unsafe precondition(s) violated: NonNull::new_unchecked requires that the pointer is non-null") -> unwind unreachable; | ||
} | ||
|
||
bb3: { | ||
StorageDead(_11); | ||
_8 = const {0x1 as *const [bool; 0]}; | ||
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}; | ||
StorageDead(_8); | ||
StorageDead(_6); | ||
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }}; | ||
StorageDead(_5); | ||
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}; | ||
StorageDead(_4); | ||
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global); | ||
StorageDead(_3); | ||
_1 = A { foo: const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }; | ||
StorageDead(_2); | ||
drop(_1) -> [return: bb1, unwind unreachable]; | ||
} | ||
} | ||
|
121 changes: 121 additions & 0 deletions
121
...pt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.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,121 @@ | ||
- // 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 { | ||
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; | ||
let _9: !; | ||
scope 14 (inlined ptr::mut_ptr::<impl *mut [bool; 0]>::is_null) { | ||
debug self => _6; | ||
let mut _10: *mut u8; | ||
scope 15 { | ||
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { | ||
debug ptr => _10; | ||
let mut _11: usize; | ||
scope 17 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { | ||
debug self => _10; | ||
let mut _12: *mut (); | ||
scope 18 { | ||
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { | ||
debug self => _10; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
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 = const 1_usize; | ||
_6 = const {0x1 as *mut [bool; 0]}; | ||
StorageDead(_7); | ||
StorageLive(_8); | ||
StorageLive(_10); | ||
_10 = const {0x1 as *mut u8}; | ||
StorageLive(_11); | ||
StorageLive(_12); | ||
_12 = const {0x1 as *mut ()}; | ||
_11 = const 1_usize; | ||
StorageDead(_12); | ||
StorageDead(_10); | ||
switchInt(const 1_usize) -> [0: bb3, otherwise: bb4]; | ||
} | ||
|
||
bb1: { | ||
StorageDead(_1); | ||
return; | ||
} | ||
|
||
bb2 (cleanup): { | ||
resume; | ||
} | ||
|
||
bb3: { | ||
StorageDead(_11); | ||
_9 = core::panicking::panic_nounwind(const "unsafe precondition(s) violated: NonNull::new_unchecked requires that the pointer is non-null") -> unwind unreachable; | ||
} | ||
|
||
bb4: { | ||
StorageDead(_11); | ||
_8 = const {0x1 as *const [bool; 0]}; | ||
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}; | ||
StorageDead(_8); | ||
StorageDead(_6); | ||
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }}; | ||
StorageDead(_5); | ||
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}; | ||
StorageDead(_4); | ||
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global); | ||
StorageDead(_3); | ||
_1 = A { foo: const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }; | ||
StorageDead(_2); | ||
drop(_1) -> [return: bb1, unwind: bb2]; | ||
} | ||
} | ||
|
117 changes: 117 additions & 0 deletions
117
...opt/dataflow-const-prop/default_boxed_slice.main.DataflowConstProp.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,117 @@ | ||
- // 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 { | ||
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; | ||
let _9: !; | ||
scope 14 (inlined ptr::mut_ptr::<impl *mut [bool; 0]>::is_null) { | ||
debug self => _6; | ||
let mut _10: *mut u8; | ||
scope 15 { | ||
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) { | ||
debug ptr => _10; | ||
let mut _11: usize; | ||
scope 17 (inlined ptr::mut_ptr::<impl *mut u8>::addr) { | ||
debug self => _10; | ||
let mut _12: *mut (); | ||
scope 18 { | ||
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) { | ||
debug self => _10; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
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 = const 1_usize; | ||
_6 = const {0x1 as *mut [bool; 0]}; | ||
StorageDead(_7); | ||
StorageLive(_8); | ||
StorageLive(_10); | ||
_10 = const {0x1 as *mut u8}; | ||
StorageLive(_11); | ||
StorageLive(_12); | ||
_12 = const {0x1 as *mut ()}; | ||
_11 = const 1_usize; | ||
StorageDead(_12); | ||
StorageDead(_10); | ||
switchInt(const 1_usize) -> [0: bb2, otherwise: bb3]; | ||
} | ||
|
||
bb1: { | ||
StorageDead(_1); | ||
return; | ||
} | ||
|
||
bb2: { | ||
StorageDead(_11); | ||
_9 = core::panicking::panic_nounwind(const "unsafe precondition(s) violated: NonNull::new_unchecked requires that the pointer is non-null") -> unwind unreachable; | ||
} | ||
|
||
bb3: { | ||
StorageDead(_11); | ||
_8 = const {0x1 as *const [bool; 0]}; | ||
_5 = const NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}; | ||
StorageDead(_8); | ||
StorageDead(_6); | ||
_4 = const Unique::<[bool; 0]> {{ pointer: NonNull::<[bool; 0]> {{ pointer: {0x1 as *const [bool; 0]} }}, _marker: PhantomData::<[bool; 0]> }}; | ||
StorageDead(_5); | ||
_3 = const Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}; | ||
StorageDead(_4); | ||
_2 = const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global); | ||
StorageDead(_3); | ||
_1 = A { foo: const Box::<[bool]>(Unique::<[bool]> {{ pointer: NonNull::<[bool]> {{ pointer: ByRef { alloc: ConstAllocation { .. }, offset: Size(0 bytes) }: *const [bool] }}, _marker: PhantomData::<[bool]> }}, std::alloc::Global) }; | ||
StorageDead(_2); | ||
drop(_1) -> [return: bb1, unwind unreachable]; | ||
} | ||
} | ||
|
Oops, something went wrong.