Auto merge of #113546 - cjgillot:unused-query, r=compiler-errors

Querify unused trait check.

This code transitively loads information for all bodies, and from resolutions. As it does not return a value, it should be beneficial to have it as a query.
This commit is contained in:
bors 2023-07-20 18:45:09 +00:00
commit 1554942cdc
4 changed files with 15 additions and 5 deletions

View file

@ -1,11 +1,16 @@
use rustc_data_structures::unord::{ExtendUnord, UnordSet}; use rustc_data_structures::unord::{ExtendUnord, UnordSet};
use rustc_hir::def::DefKind; use rustc_hir::def::DefKind;
use rustc_hir::def_id::LocalDefId; use rustc_hir::def_id::LocalDefId;
use rustc_middle::query::Providers;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_session::lint; use rustc_session::lint;
pub fn check_crate(tcx: TyCtxt<'_>) { pub fn provide(providers: &mut Providers) {
let mut used_trait_imports: UnordSet<LocalDefId> = Default::default(); *providers = Providers { check_unused_traits, ..*providers };
}
fn check_unused_traits(tcx: TyCtxt<'_>, (): ()) {
let mut used_trait_imports = UnordSet::<LocalDefId>::default();
// FIXME: Use `tcx.hir().par_body_owners()` when we implement creating `DefId`s // FIXME: Use `tcx.hir().par_body_owners()` when we implement creating `DefId`s
// for anon constants during their parents' typeck. // for anon constants during their parents' typeck.

View file

@ -177,6 +177,7 @@ pub fn provide(providers: &mut Providers) {
collect::provide(providers); collect::provide(providers);
coherence::provide(providers); coherence::provide(providers);
check::provide(providers); check::provide(providers);
check_unused::provide(providers);
variance::provide(providers); variance::provide(providers);
outlives::provide(providers); outlives::provide(providers);
impl_wf_check::provide(providers); impl_wf_check::provide(providers);
@ -247,7 +248,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
} }
}); });
check_unused::check_crate(tcx); tcx.ensure().check_unused_traits(());
if let Some(reported) = tcx.sess.has_errors() { Err(reported) } else { Ok(()) } if let Some(reported) = tcx.sess.has_errors() { Err(reported) } else { Ok(()) }
} }

View file

@ -898,6 +898,10 @@ rustc_queries! {
desc { |tcx| "linting {}", describe_as_module(key, tcx) } desc { |tcx| "linting {}", describe_as_module(key, tcx) }
} }
query check_unused_traits(_: ()) -> () {
desc { "checking unused trait imports in crate" }
}
/// Checks the attributes in the module. /// Checks the attributes in the module.
query check_mod_attrs(key: LocalDefId) -> () { query check_mod_attrs(key: LocalDefId) -> () {
desc { |tcx| "checking attributes in {}", describe_as_module(key, tcx) } desc { |tcx| "checking attributes in {}", describe_as_module(key, tcx) }

View file

@ -420,13 +420,13 @@ trait TraitAddExternModifier {
// ------------------------- // -------------------------
// -------------------------------------------------------------------- // --------------------------------------------------------------------
// ------------------------- // -------------------------
fn method() ; fn method();
} }
#[cfg(not(any(cfail1,cfail4)))] #[cfg(not(any(cfail1,cfail4)))]
#[rustc_clean(cfg="cfail2")] #[rustc_clean(cfg="cfail2")]
#[rustc_clean(cfg="cfail3")] #[rustc_clean(cfg="cfail3")]
#[rustc_clean(except="hir_owner", cfg="cfail5")] #[rustc_clean(cfg="cfail5")]
#[rustc_clean(cfg="cfail6")] #[rustc_clean(cfg="cfail6")]
trait TraitAddExternModifier { trait TraitAddExternModifier {
#[rustc_clean(except="hir_owner,hir_owner_nodes,fn_sig", cfg="cfail2")] #[rustc_clean(except="hir_owner,hir_owner_nodes,fn_sig", cfg="cfail2")]