rust/tests/codegen-units/partitioning/shared-generics.rs
Tomasz Miąsko 8c8225afe8 Remove mono item collection strategy override from -Zprint-mono-items
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.
2025-05-09 12:19:09 +02:00

33 lines
1.4 KiB
Rust

//@ no-prefer-dynamic
// NOTE: We always compile this test with -Copt-level=0 because higher opt-levels
// prevent drop-glue from participating in share-generics.
//@ incremental
//@ compile-flags: -Zshare-generics=yes -Copt-level=0
#![crate_type = "rlib"]
//@ aux-build:shared_generics_aux.rs
extern crate shared_generics_aux;
// This test ensures that when a crate and a dependency are compiled with -Zshare-generics, the
// downstream crate reuses generic instantiations from the dependency, but will still instantiate
// its own copy when instantiating with arguments that the dependency did not.
// Drop glue has a lot of special handling in the compiler, so we check that drop glue is also
// shared.
//~ MONO_ITEM fn foo
pub fn foo() {
//~ MONO_ITEM fn shared_generics_aux::generic_fn::<u16> @@ shared_generics_aux-in-shared_generics.volatile[External]
let _ = shared_generics_aux::generic_fn(0u16, 1u16);
// This should not generate a monomorphization because it's already
// available in `shared_generics_aux`.
let _ = shared_generics_aux::generic_fn(0.0f32, 3.0f32);
// The following line will drop an instance of `Foo`, generating a call to
// Foo's drop-glue function. However, share-generics should take care of
// reusing the drop-glue from the upstream crate, so we do not expect a
// mono item for the drop-glue
let _ = shared_generics_aux::Foo(1);
}