Skip to content

Commit

Permalink
Remove Queries::ongoing_codegen.
Browse files Browse the repository at this point in the history
There's no need to store it in `Queries`. We can just use a local
variable, because it's always used shortly after it's produced.

The commit also removes the `tcx.analysis()` call in `ongoing_codegen`,
because it's easy to ensure that's done beforehand.

All this makes the dataflow within `run_compiler` easier to follow, at
the cost of making one test slightly more verbose, which I think is a
good tradeoff.
  • Loading branch information
nnethercote committed Jun 21, 2023
1 parent c696307 commit 1da1348
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 27 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_driver_impl/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ fn run_compiler(
return early_exit();
}

queries.ongoing_codegen()?;
let ongoing_codegen = queries.ongoing_codegen()?;

if sess.opts.unstable_opts.print_type_sizes {
sess.code_stats.print_type_sizes();
Expand All @@ -437,7 +437,7 @@ fn run_compiler(
sess.code_stats.print_vtable_sizes(crate_name);
}

let linker = queries.linker()?;
let linker = queries.linker(ongoing_codegen)?;
Ok(Some(linker))
})?;

Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_interface/src/passes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -740,8 +740,8 @@ pub fn create_global_ctxt<'tcx>(
})
}

/// Runs the resolution, type-checking, region checking and other
/// miscellaneous analysis passes on the crate.
/// Runs the type-checking, region checking and other miscellaneous analysis
/// passes on the crate.
fn analysis(tcx: TyCtxt<'_>, (): ()) -> Result<()> {
rustc_passes::hir_id_validator::check_crate(tcx);

Expand Down
29 changes: 11 additions & 18 deletions compiler/rustc_interface/src/queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ pub struct Queries<'tcx> {
dep_graph: Query<DepGraph>,
// This just points to what's in `gcx_cell`.
gcx: Query<&'tcx GlobalCtxt<'tcx>>,
ongoing_codegen: Query<Box<dyn Any>>,
}

impl<'tcx> Queries<'tcx> {
Expand All @@ -110,7 +109,6 @@ impl<'tcx> Queries<'tcx> {
register_plugins: Default::default(),
dep_graph: Default::default(),
gcx: Default::default(),
ongoing_codegen: Default::default(),
}
}

Expand Down Expand Up @@ -249,23 +247,19 @@ impl<'tcx> Queries<'tcx> {
})
}

pub fn ongoing_codegen(&'tcx self) -> Result<QueryResult<'_, Box<dyn Any>>> {
self.ongoing_codegen.compute(|| {
self.global_ctxt()?.enter(|tcx| {
tcx.analysis(()).ok();
pub fn ongoing_codegen(&'tcx self) -> Result<Box<dyn Any>> {
self.global_ctxt()?.enter(|tcx| {
// Don't do code generation if there were any errors
self.session().compile_status()?;

// Don't do code generation if there were any errors
self.session().compile_status()?;
// If we have any delayed bugs, for example because we created TyKind::Error earlier,
// it's likely that codegen will only cause more ICEs, obscuring the original problem
self.session().diagnostic().flush_delayed();

// If we have any delayed bugs, for example because we created TyKind::Error earlier,
// it's likely that codegen will only cause more ICEs, obscuring the original problem
self.session().diagnostic().flush_delayed();
// Hook for UI tests.
Self::check_for_rustc_errors_attr(tcx);

// Hook for UI tests.
Self::check_for_rustc_errors_attr(tcx);

Ok(passes::start_codegen(&***self.codegen_backend(), tcx))
})
Ok(passes::start_codegen(&***self.codegen_backend(), tcx))
})
}

Expand Down Expand Up @@ -303,7 +297,7 @@ impl<'tcx> Queries<'tcx> {
}
}

pub fn linker(&'tcx self) -> Result<Linker> {
pub fn linker(&'tcx self, ongoing_codegen: Box<dyn Any>) -> Result<Linker> {
let sess = self.session().clone();
let codegen_backend = self.codegen_backend().clone();

Expand All @@ -314,7 +308,6 @@ impl<'tcx> Queries<'tcx> {
tcx.dep_graph.clone(),
)
});
let ongoing_codegen = self.ongoing_codegen()?.steal();

Ok(Linker {
sess,
Expand Down
11 changes: 6 additions & 5 deletions tests/run-make-fulldeps/issue-19371/foo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,11 @@ fn compile(code: String, output: PathBuf, sysroot: PathBuf) {
};

interface::run_compiler(config, |compiler| {
// This runs all the passes prior to linking, too.
let linker = compiler.enter(|queries| queries.linker());
if let Ok(linker) = linker {
linker.link();
}
let linker = compiler.enter(|queries| {
queries.global_ctxt()?.enter(|tcx| tcx.analysis(()))?;
let ongoing_codegen = queries.ongoing_codegen()?;
queries.linker(ongoing_codegen)
});
linker.unwrap().link();
});
}

0 comments on commit 1da1348

Please sign in to comment.