typeck in parallel
This commit is contained in:
parent
5b733e2bca
commit
50896c13db
11 changed files with 47 additions and 29 deletions
|
@ -7,6 +7,10 @@ use rustc_session::lint;
|
|||
pub fn check_crate(tcx: TyCtxt<'_>) {
|
||||
let mut used_trait_imports: UnordSet<LocalDefId> = Default::default();
|
||||
|
||||
// FIXME: Use `tcx.hir().par_body_owners()` when we implement creating `DefId`s
|
||||
// for anon constants during their parents' typeck.
|
||||
// Doing so at current will produce queries cycle errors because it may typeck
|
||||
// on anon constants directly.
|
||||
for item_def_id in tcx.hir().body_owners() {
|
||||
let imports = tcx.used_trait_imports(item_def_id);
|
||||
debug!("GatherVisitor: item_def_id={:?} with imports {:#?}", item_def_id, imports);
|
||||
|
|
|
@ -116,6 +116,7 @@ use std::ops::Not;
|
|||
|
||||
use astconv::{AstConv, OnlySelfBounds};
|
||||
use bounds::Bounds;
|
||||
use rustc_hir::def::DefKind;
|
||||
|
||||
fluent_messages! { "../messages.ftl" }
|
||||
|
||||
|
@ -500,6 +501,17 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
|||
tcx.hir().for_each_module(|module| tcx.ensure().check_mod_item_types(module))
|
||||
});
|
||||
|
||||
// FIXME: Remove this when we implement creating `DefId`s
|
||||
// for anon constants during their parents' typeck.
|
||||
// Typeck all body owners in parallel will produce queries
|
||||
// cycle errors because it may typeck on anon constants directly.
|
||||
tcx.hir().par_body_owners(|item_def_id| {
|
||||
let def_kind = tcx.def_kind(item_def_id);
|
||||
if !matches!(def_kind, DefKind::AnonConst) {
|
||||
tcx.ensure().typeck(item_def_id);
|
||||
}
|
||||
});
|
||||
|
||||
check_unused::check_crate(tcx);
|
||||
check_for_entry_fn(tcx);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue