rust/tests/codegen-units/item-collection/drop-glue-eager.rs

57 lines
1.6 KiB
Rust

// Ensure that we *eagerly* monomorphize drop instances for structs with lifetimes.
//@ compile-flags:-Zprint-mono-items=eager
//@ compile-flags:--crate-type=lib
//~ MONO_ITEM fn std::ptr::drop_in_place::<StructWithDrop> - shim(Some(StructWithDrop))
struct StructWithDrop {
x: i32,
}
impl Drop for StructWithDrop {
//~ MONO_ITEM fn <StructWithDrop as std::ops::Drop>::drop
fn drop(&mut self) {}
}
struct StructNoDrop {
x: i32,
}
//~ MONO_ITEM fn std::ptr::drop_in_place::<EnumWithDrop> - shim(Some(EnumWithDrop))
enum EnumWithDrop {
A(i32),
}
impl Drop for EnumWithDrop {
//~ MONO_ITEM fn <EnumWithDrop as std::ops::Drop>::drop
fn drop(&mut self) {}
}
enum EnumNoDrop {
A(i32),
}
// We should be able to monomorphize drops for struct with lifetimes.
impl<'a> Drop for StructWithDropAndLt<'a> {
//~ MONO_ITEM fn <StructWithDropAndLt<'_> as std::ops::Drop>::drop
fn drop(&mut self) {}
}
//~ MONO_ITEM fn std::ptr::drop_in_place::<StructWithDropAndLt<'_>> - shim(Some(StructWithDropAndLt<'_>))
struct StructWithDropAndLt<'a> {
x: &'a i32,
}
// Make sure we don't ICE when checking impossible predicates for the struct.
// Regression test for <https://github.com/rust-lang/rust/issues/135515>.
//~ MONO_ITEM fn std::ptr::drop_in_place::<StructWithLtAndPredicate<'_>> - shim(Some(StructWithLtAndPredicate<'_>))
struct StructWithLtAndPredicate<'a: 'a> {
x: &'a i32,
}
// We should be able to monomorphize drops for struct with lifetimes.
impl<'a> Drop for StructWithLtAndPredicate<'a> {
//~ MONO_ITEM fn <StructWithLtAndPredicate<'_> as std::ops::Drop>::drop
fn drop(&mut self) {}
}