Use unused_generic_params from crate metadata

This commit is contained in:
Michael Goulet 2023-03-14 00:35:34 +00:00
parent f1b1ed7e18
commit ee2d42882f
5 changed files with 28 additions and 10 deletions

View File

@ -226,7 +226,15 @@ provide! { tcx, def_id, other, cdata,
lookup_default_body_stability => { table }
lookup_deprecation_entry => { table }
params_in_repr => { table }
unused_generic_params => { table }
// FIXME: Could be defaulted, but `LazyValue<UnusedGenericParams>` is not `FixedSizeEncoding`..
unused_generic_params => {
cdata
.root
.tables
.unused_generic_params
.get(cdata, def_id.index)
.map_or_else(|| ty::UnusedGenericParams::new_all_used(), |lazy| lazy.decode((cdata, tcx)))
}
opt_def_kind => { table_direct }
impl_parent => { table }
impl_polarity => { table_direct }

View File

@ -63,7 +63,7 @@ impl<'tcx> Key for ty::InstanceDef<'tcx> {
#[inline(always)]
fn query_crate_is_local(&self) -> bool {
true
self.def_id().is_local()
}
fn default_span(&self, tcx: TyCtxt<'_>) -> Span {
@ -76,7 +76,7 @@ impl<'tcx> Key for ty::Instance<'tcx> {
#[inline(always)]
fn query_crate_is_local(&self) -> bool {
true
self.def_id().is_local()
}
fn default_span(&self, tcx: TyCtxt<'_>) -> Span {

View File

@ -36,6 +36,8 @@ fn unused_generic_params<'tcx>(
tcx: TyCtxt<'tcx>,
instance: ty::InstanceDef<'tcx>,
) -> UnusedGenericParams {
assert!(instance.def_id().is_local());
if !tcx.sess.opts.unstable_opts.polymorphize {
// If polymorphization disabled, then all parameters are used.
return UnusedGenericParams::new_all_used();
@ -100,13 +102,6 @@ fn should_polymorphize<'tcx>(
return false;
}
// Polymorphization results are stored in cross-crate metadata only when there are unused
// parameters, so assume that non-local items must have only used parameters (else this query
// would not be invoked, and the cross-crate metadata used instead).
if !def_id.is_local() {
return false;
}
// Foreign items have no bodies to analyze.
if tcx.is_foreign_item(def_id) {
return false;

View File

@ -0,0 +1,4 @@
// compile-flags: -Zpolymorphize=on
#[inline(never)]
pub fn foo<T>() {}

View File

@ -0,0 +1,11 @@
// 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>