23c8ed14c9
In 126578 we ended up with more binary size increases than expected. This change attempts to avoid inlining large things into small things, to avoid that kind of increase, in cases when top-down inlining will still be able to do that inlining later.
37 lines
1.3 KiB
Rust
37 lines
1.3 KiB
Rust
//
|
|
//@ compile-flags:-Zprint-mono-items=eager
|
|
//@ compile-flags:-Zinline-in-all-cgus
|
|
//@ compile-flags:-Zinline-mir=no
|
|
|
|
#![feature(start)]
|
|
|
|
//~ MONO_ITEM fn std::ptr::drop_in_place::<StructWithDtor> - shim(Some(StructWithDtor)) @@ drop_in_place_intrinsic-cgu.0[Internal]
|
|
struct StructWithDtor(u32);
|
|
|
|
impl Drop for StructWithDtor {
|
|
//~ MONO_ITEM fn <StructWithDtor as std::ops::Drop>::drop
|
|
fn drop(&mut self) {}
|
|
}
|
|
|
|
//~ MONO_ITEM fn start
|
|
#[start]
|
|
fn start(_: isize, _: *const *const u8) -> isize {
|
|
//~ MONO_ITEM fn std::ptr::drop_in_place::<[StructWithDtor; 2]> - shim(Some([StructWithDtor; 2])) @@ drop_in_place_intrinsic-cgu.0[Internal]
|
|
let x = [StructWithDtor(0), StructWithDtor(1)];
|
|
|
|
drop_slice_in_place(&x);
|
|
|
|
0
|
|
}
|
|
|
|
//~ MONO_ITEM fn drop_slice_in_place
|
|
fn drop_slice_in_place(x: &[StructWithDtor]) {
|
|
unsafe {
|
|
// This is the interesting thing in this test case: Normally we would
|
|
// not have drop-glue for the unsized [StructWithDtor]. This has to be
|
|
// generated though when the drop_in_place() intrinsic is used.
|
|
//~ MONO_ITEM fn std::ptr::drop_in_place::<[StructWithDtor]> - shim(Some([StructWithDtor])) @@ drop_in_place_intrinsic-cgu.0[Internal]
|
|
::std::ptr::drop_in_place(x as *const _ as *mut [StructWithDtor]);
|
|
}
|
|
}
|