// Ensure that we *eagerly* monomorphize drop instances for structs with lifetimes. //@ compile-flags:-Clink-dead-code //@ compile-flags:--crate-type=lib //~ MONO_ITEM fn std::ptr::drop_in_place:: - shim(Some(StructWithDrop)) struct StructWithDrop { x: i32, } impl Drop for StructWithDrop { //~ MONO_ITEM fn ::drop fn drop(&mut self) {} } struct StructNoDrop { x: i32, } //~ MONO_ITEM fn std::ptr::drop_in_place:: - shim(Some(EnumWithDrop)) enum EnumWithDrop { A(i32), } impl Drop for EnumWithDrop { //~ MONO_ITEM fn ::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 as std::ops::Drop>::drop fn drop(&mut self) {} } //~ MONO_ITEM fn std::ptr::drop_in_place::> - 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 . //~ MONO_ITEM fn std::ptr::drop_in_place::> - 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 as std::ops::Drop>::drop fn drop(&mut self) {} }