diff options
| author | Ben Kimock <kimockb@gmail.com> | 2024-12-04 21:03:12 -0500 |
|---|---|---|
| committer | Ben Kimock <kimockb@gmail.com> | 2024-12-06 16:42:09 -0500 |
| commit | 711c8cc690c70d9b4c0e17e90f21f03d4e9d3ebf (patch) | |
| tree | c2025a7bb0c2a9bf1af448b859b41f5905762cbc /tests/codegen-units | |
| parent | 8dc83770f748c6cd16b342889ca2240397c19534 (diff) | |
| download | rust-711c8cc690c70d9b4c0e17e90f21f03d4e9d3ebf.tar.gz rust-711c8cc690c70d9b4c0e17e90f21f03d4e9d3ebf.zip | |
Remove polymorphization
Diffstat (limited to 'tests/codegen-units')
5 files changed, 4 insertions, 334 deletions
diff --git a/tests/codegen-units/item-collection/static-init.rs b/tests/codegen-units/item-collection/static-init.rs index 1406fba2b98..44b80ef73a4 100644 --- a/tests/codegen-units/item-collection/static-init.rs +++ b/tests/codegen-units/item-collection/static-init.rs @@ -1,4 +1,4 @@ -//@ compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on +//@ compile-flags:-Zprint-mono-items=eager #![feature(start)] @@ -6,7 +6,7 @@ pub static FN: fn() = foo::<i32>; pub fn foo<T>() {} -//~ MONO_ITEM fn foo::<T> +//~ MONO_ITEM fn foo::<i32> //~ MONO_ITEM static FN //~ MONO_ITEM fn start diff --git a/tests/codegen-units/item-collection/trait-method-default-impl.rs b/tests/codegen-units/item-collection/trait-method-default-impl.rs index b0a43d28e40..fd73786a402 100644 --- a/tests/codegen-units/item-collection/trait-method-default-impl.rs +++ b/tests/codegen-units/item-collection/trait-method-default-impl.rs @@ -1,4 +1,4 @@ -//@ compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on -Zinline-mir=no +//@ compile-flags:-Zprint-mono-items=eager -Zinline-mir=no #![deny(dead_code)] #![feature(start)] @@ -29,7 +29,7 @@ impl SomeGenericTrait<u64> for i32 { // For the non-generic foo(), we should generate a codegen-item even if it // is not called anywhere - //~ MONO_ITEM fn <i32 as SomeGenericTrait<T1>>::foo + //~ MONO_ITEM fn <i32 as SomeGenericTrait<u64>>::foo } // Non-generic impl of generic trait diff --git a/tests/codegen-units/polymorphization/auxiliary/poly-dep.rs b/tests/codegen-units/polymorphization/auxiliary/poly-dep.rs deleted file mode 100644 index d6cbd282ec1..00000000000 --- a/tests/codegen-units/polymorphization/auxiliary/poly-dep.rs +++ /dev/null @@ -1,4 +0,0 @@ -//@ compile-flags: -Zpolymorphize=on - -#[inline(never)] -pub fn foo<T>() {} diff --git a/tests/codegen-units/polymorphization/poly-foreign.rs b/tests/codegen-units/polymorphization/poly-foreign.rs deleted file mode 100644 index 05dbac46d36..00000000000 --- a/tests/codegen-units/polymorphization/poly-foreign.rs +++ /dev/null @@ -1,11 +0,0 @@ -//@ aux-build:poly-dep.rs -//@ compile-flags: --crate-type=lib -Zprint-mono-items=eager -Zpolymorphize=on - -extern crate poly_dep; - -pub static FN1: fn() = poly_dep::foo::<i32>; -pub static FN2: fn() = poly_dep::foo::<u32>; - -//~ MONO_ITEM static FN1 -//~ MONO_ITEM static FN2 -//~ MONO_ITEM fn poly_dep::foo::<T> diff --git a/tests/codegen-units/polymorphization/unused_type_parameters.rs b/tests/codegen-units/polymorphization/unused_type_parameters.rs deleted file mode 100644 index 438305f112f..00000000000 --- a/tests/codegen-units/polymorphization/unused_type_parameters.rs +++ /dev/null @@ -1,315 +0,0 @@ -//@ compile-flags:-Zpolymorphize=on -Zprint-mono-items=lazy -Copt-level=1 - -#![crate_type = "rlib"] - -// This test checks that the polymorphization analysis correctly reduces the -// generated mono items. - -mod functions { - // Function doesn't have any type parameters to be unused. - pub fn no_parameters() {} - - //~ MONO_ITEM fn functions::no_parameters - - // Function has an unused type parameter. - pub fn unused<T>() {} - - //~ MONO_ITEM fn functions::unused::<T> - - // Function uses type parameter in value of a binding. - pub fn used_binding_value<T: Default>() { - let _: T = Default::default(); - } - - //~ MONO_ITEM fn functions::used_binding_value::<u32> - //~ MONO_ITEM fn functions::used_binding_value::<u64> - - // Function uses type parameter in type of a binding. - pub fn used_binding_type<T>() { - let _: Option<T> = None; - } - - //~ MONO_ITEM fn functions::used_binding_type::<u32> - //~ MONO_ITEM fn functions::used_binding_type::<u64> - - // Function uses type parameter in argument. - pub fn used_argument<T>(_: T) {} - - //~ MONO_ITEM fn functions::used_argument::<u32> - //~ MONO_ITEM fn functions::used_argument::<u64> - // - // Function uses type parameter in substitutions to another function. - pub fn used_substs<T>() { - unused::<T>() - } - - //~ MONO_ITEM fn functions::used_substs::<u32> - //~ MONO_ITEM fn functions::used_substs::<u64> -} - -mod closures { - // Function doesn't have any type parameters to be unused. - pub fn no_parameters() { - let _ = || {}; - } - - //~ MONO_ITEM fn closures::no_parameters - - // Function has an unused type parameter in parent and closure. - pub fn unused<T>() -> u32 { - let add_one = |x: u32| x + 1; - add_one(3) - } - - //~ MONO_ITEM fn closures::unused::<T>::{closure#0} - //~ MONO_ITEM fn closures::unused::<T> - - // Function has an unused type parameter in closure, but not in parent. - pub fn used_parent<T: Default>() -> u32 { - let _: T = Default::default(); - let add_one = |x: u32| x + 1; - add_one(3) - } - - //~ MONO_ITEM fn closures::used_parent::<T>::{closure#0} - //~ MONO_ITEM fn closures::used_parent::<u32> - //~ MONO_ITEM fn closures::used_parent::<u64> - - // Function uses type parameter in value of a binding in closure. - pub fn used_binding_value<T: Default>() -> T { - let x = || { - let y: T = Default::default(); - y - }; - - x() - } - - //~ MONO_ITEM fn closures::used_binding_value::<u32>::{closure#0} - //~ MONO_ITEM fn closures::used_binding_value::<u64>::{closure#0} - //~ MONO_ITEM fn closures::used_binding_value::<u32> - //~ MONO_ITEM fn closures::used_binding_value::<u64> - - // Function uses type parameter in type of a binding in closure. - pub fn used_binding_type<T>() -> Option<T> { - let x = || { - let y: Option<T> = None; - y - }; - - x() - } - - //~ MONO_ITEM fn closures::used_binding_type::<u32>::{closure#0} - //~ MONO_ITEM fn closures::used_binding_type::<u64>::{closure#0} - //~ MONO_ITEM fn closures::used_binding_type::<u32> - //~ MONO_ITEM fn closures::used_binding_type::<u64> - - // Function and closure uses type parameter in argument. - pub fn used_argument<T>(t: T) -> u32 { - let x = |_: T| 3; - x(t) - } - - //~ MONO_ITEM fn closures::used_argument::<u32>::{closure#0} - //~ MONO_ITEM fn closures::used_argument::<u64>::{closure#0} - //~ MONO_ITEM fn closures::used_argument::<u32> - //~ MONO_ITEM fn closures::used_argument::<u64> - - // Closure uses type parameter in argument. - pub fn used_argument_closure<T: Default>() -> u32 { - let t: T = Default::default(); - let x = |_: T| 3; - x(t) - } - - //~ MONO_ITEM fn closures::used_argument_closure::<u32>::{closure#0} - //~ MONO_ITEM fn closures::used_argument_closure::<u64>::{closure#0} - //~ MONO_ITEM fn closures::used_argument_closure::<u32> - //~ MONO_ITEM fn closures::used_argument_closure::<u64> - - // Closure uses type parameter as upvar. - pub fn used_upvar<T: Default>() -> T { - let x: T = Default::default(); - let y = || x; - y() - } - - //~ MONO_ITEM fn closures::used_upvar::<u32>::{closure#0} - //~ MONO_ITEM fn closures::used_upvar::<u64>::{closure#0} - //~ MONO_ITEM fn closures::used_upvar::<u32> - //~ MONO_ITEM fn closures::used_upvar::<u64> - - // Closure uses type parameter in substitutions to another function. - pub fn used_substs<T>() { - let x = || super::functions::unused::<T>(); - x() - } - - //~ MONO_ITEM fn closures::used_substs::<u32>::{closure#0} - //~ MONO_ITEM fn closures::used_substs::<u64>::{closure#0} - //~ MONO_ITEM fn closures::used_substs::<u32> - //~ MONO_ITEM fn closures::used_substs::<u64> -} - -mod methods { - pub struct Foo<F>(F); - - impl<F: Default> Foo<F> { - // Function has an unused type parameter from impl. - pub fn unused_impl() {} - - //~ MONO_ITEM fn methods::Foo::<F>::unused_impl - - // Function has an unused type parameter from impl and fn. - pub fn unused_both<G: Default>() {} - - //~ MONO_ITEM fn methods::Foo::<F>::unused_both::<G> - - // Function uses type parameter from impl. - pub fn used_impl() { - let _: F = Default::default(); - } - - //~ MONO_ITEM fn methods::Foo::<u32>::used_impl - //~ MONO_ITEM fn methods::Foo::<u64>::used_impl - - // Function uses type parameter from impl. - pub fn used_fn<G: Default>() { - let _: G = Default::default(); - } - - //~ MONO_ITEM fn methods::Foo::<F>::used_fn::<u32> - //~ MONO_ITEM fn methods::Foo::<F>::used_fn::<u64> - - // Function uses type parameter from impl. - pub fn used_both<G: Default>() { - let _: F = Default::default(); - let _: G = Default::default(); - } - - //~ MONO_ITEM fn methods::Foo::<u32>::used_both::<u32> - //~ MONO_ITEM fn methods::Foo::<u64>::used_both::<u64> - - // Function uses type parameter in substitutions to another function. - pub fn used_substs() { - super::functions::unused::<F>() - } - - //~ MONO_ITEM fn methods::Foo::<u32>::used_substs - //~ MONO_ITEM fn methods::Foo::<u64>::used_substs - - // Function has an unused type parameter from impl and fn. - pub fn closure_unused_all<G: Default>() -> u32 { - let add_one = |x: u32| x + 1; - add_one(3) - } - - //~ MONO_ITEM fn methods::Foo::<F>::closure_unused_all::<G>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<F>::closure_unused_all::<G> - - // Function uses type parameter from impl and fn in closure. - pub fn closure_used_both<G: Default>() -> u32 { - let add_one = |x: u32| { - let _: F = Default::default(); - let _: G = Default::default(); - x + 1 - }; - - add_one(3) - } - - //~ MONO_ITEM fn methods::Foo::<u32>::closure_used_both::<u32>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<u64>::closure_used_both::<u64>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<u32>::closure_used_both::<u32> - //~ MONO_ITEM fn methods::Foo::<u64>::closure_used_both::<u64> - - // Function uses type parameter from fn in closure. - pub fn closure_used_fn<G: Default>() -> u32 { - let add_one = |x: u32| { - let _: G = Default::default(); - x + 1 - }; - - add_one(3) - } - - //~ MONO_ITEM fn methods::Foo::<F>::closure_used_fn::<u32>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<F>::closure_used_fn::<u64>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<F>::closure_used_fn::<u32> - //~ MONO_ITEM fn methods::Foo::<F>::closure_used_fn::<u64> - - // Function uses type parameter from impl in closure. - pub fn closure_used_impl<G: Default>() -> u32 { - let add_one = |x: u32| { - let _: F = Default::default(); - x + 1 - }; - - add_one(3) - } - - //~ MONO_ITEM fn methods::Foo::<u32>::closure_used_impl::<G>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<u64>::closure_used_impl::<G>::{closure#0} - //~ MONO_ITEM fn methods::Foo::<u32>::closure_used_impl::<G> - //~ MONO_ITEM fn methods::Foo::<u64>::closure_used_impl::<G> - - // Closure uses type parameter in substitutions to another function. - pub fn closure_used_substs() { - let x = || super::functions::unused::<F>(); - x() - } - - //~ MONO_ITEM fn methods::Foo::<u32>::closure_used_substs::{closure#0} - //~ MONO_ITEM fn methods::Foo::<u64>::closure_used_substs::{closure#0} - //~ MONO_ITEM fn methods::Foo::<u32>::closure_used_substs - //~ MONO_ITEM fn methods::Foo::<u64>::closure_used_substs - } -} - -fn dispatch<T: Default>() { - functions::no_parameters(); - functions::unused::<T>(); - functions::used_binding_value::<T>(); - functions::used_binding_type::<T>(); - functions::used_argument::<T>(Default::default()); - functions::used_substs::<T>(); - - closures::no_parameters(); - let _ = closures::unused::<T>(); - let _ = closures::used_parent::<T>(); - let _ = closures::used_binding_value::<T>(); - let _ = closures::used_binding_type::<T>(); - let _ = closures::used_argument::<T>(Default::default()); - let _ = closures::used_argument_closure::<T>(); - let _ = closures::used_upvar::<T>(); - let _ = closures::used_substs::<T>(); - - methods::Foo::<T>::unused_impl(); - methods::Foo::<T>::unused_both::<T>(); - methods::Foo::<T>::used_impl(); - methods::Foo::<T>::used_fn::<T>(); - methods::Foo::<T>::used_both::<T>(); - methods::Foo::<T>::used_substs(); - let _ = methods::Foo::<T>::closure_unused_all::<T>(); - let _ = methods::Foo::<T>::closure_used_both::<T>(); - let _ = methods::Foo::<T>::closure_used_impl::<T>(); - let _ = methods::Foo::<T>::closure_used_fn::<T>(); - let _ = methods::Foo::<T>::closure_used_substs(); -} - -//~ MONO_ITEM fn dispatch::<u32> -//~ MONO_ITEM fn dispatch::<u64> - -pub fn foo() { - // Generate two copies of each function to check that where the type parameter is unused, - // there is only a single copy. - dispatch::<u32>(); - dispatch::<u64>(); -} - -//~ MONO_ITEM fn foo @@ unused_type_parameters-cgu.0[External] - -// These are all the items that aren't relevant to the test. -//~ MONO_ITEM fn <u32 as std::default::Default>::default -//~ MONO_ITEM fn <u64 as std::default::Default>::default |
