mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
57 lines
1.6 KiB
Rust
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) {}
|
|
}
|