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