mirror of
https://github.com/rust-lang/rust.git
synced 2025-09-27 12:48:20 +00:00

Previously `-Zprint-mono-items` would override the mono item collection strategy. When debugging one doesn't want to change the behaviour, so this was counter productive. Additionally, the produced behaviour was artificial and might never arise without using the option in the first place (`-Zprint-mono-items=eager` without `-Clink-dead-code`). Finally, the option was incorrectly marked as `UNTRACKED`. Resolve those issues, by turning `-Zprint-mono-items` into a boolean flag that prints results of mono item collection without changing the behaviour of mono item collection. For codegen-units test incorporate `-Zprint-mono-items` flag directly into compiletest tool. Test changes are mechanical. `-Zprint-mono-items=lazy` was removed without additional changes, and `-Zprint-mono-items=eager` was turned into `-Clink-dead-code`. Linking dead code disables internalization, so tests have been updated accordingly.
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:-Clink-dead-code
|
|
//@ 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) {}
|
|
}
|