Make output_filenames
a real query
This commit is contained in:
parent
abee6137f7
commit
bcc8b05d5c
13 changed files with 92 additions and 28 deletions
|
@ -16,7 +16,7 @@ use rustc_data_structures::parallel;
|
|||
use rustc_data_structures::sync::{Lrc, OnceCell, WorkerLocal};
|
||||
use rustc_errors::{ErrorGuaranteed, PResult};
|
||||
use rustc_expand::base::{ExtCtxt, LintStoreExpand, ResolverExpand};
|
||||
use rustc_hir::def_id::StableCrateId;
|
||||
use rustc_hir::def_id::{StableCrateId, LOCAL_CRATE};
|
||||
use rustc_lint::{BufferedEarlyLint, EarlyCheckNode, LintStore};
|
||||
use rustc_metadata::creader::CStore;
|
||||
use rustc_middle::arena::Arena;
|
||||
|
@ -47,7 +47,7 @@ use std::marker::PhantomPinned;
|
|||
use std::path::{Path, PathBuf};
|
||||
use std::pin::Pin;
|
||||
use std::rc::Rc;
|
||||
use std::sync::LazyLock;
|
||||
use std::sync::{Arc, LazyLock};
|
||||
use std::{env, fs, iter};
|
||||
|
||||
pub fn parse<'a>(sess: &'a Session) -> PResult<'a, ast::Crate> {
|
||||
|
@ -660,13 +660,11 @@ fn write_out_deps(
|
|||
}
|
||||
}
|
||||
|
||||
pub fn prepare_outputs(
|
||||
sess: &Session,
|
||||
krate: &ast::Crate,
|
||||
cstore: &CrateStoreDyn,
|
||||
crate_name: Symbol,
|
||||
) -> Result<OutputFilenames> {
|
||||
fn output_filenames(tcx: TyCtxt<'_>, (): ()) -> Arc<OutputFilenames> {
|
||||
let sess = tcx.sess;
|
||||
let _timer = sess.timer("prepare_outputs");
|
||||
let (_, krate) = &*tcx.resolver_for_lowering(()).borrow();
|
||||
let crate_name = tcx.crate_name(LOCAL_CRATE);
|
||||
|
||||
// FIXME: rustdoc passes &[] instead of &krate.attrs here
|
||||
let outputs = util::build_output_filenames(&krate.attrs, sess);
|
||||
|
@ -678,25 +676,21 @@ pub fn prepare_outputs(
|
|||
if let Some(ref input_path) = sess.io.input.opt_path() {
|
||||
if sess.opts.will_create_output_file() {
|
||||
if output_contains_path(&output_paths, input_path) {
|
||||
let reported = sess.emit_err(InputFileWouldBeOverWritten { path: input_path });
|
||||
return Err(reported);
|
||||
sess.emit_fatal(InputFileWouldBeOverWritten { path: input_path });
|
||||
}
|
||||
if let Some(ref dir_path) = output_conflicts_with_dir(&output_paths) {
|
||||
let reported =
|
||||
sess.emit_err(GeneratedFileConflictsWithDirectory { input_path, dir_path });
|
||||
return Err(reported);
|
||||
sess.emit_fatal(GeneratedFileConflictsWithDirectory { input_path, dir_path });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(ref dir) = sess.io.temps_dir {
|
||||
if fs::create_dir_all(dir).is_err() {
|
||||
let reported = sess.emit_err(TempsDirError);
|
||||
return Err(reported);
|
||||
sess.emit_fatal(TempsDirError);
|
||||
}
|
||||
}
|
||||
|
||||
write_out_deps(sess, cstore, &outputs, &output_paths);
|
||||
write_out_deps(sess, tcx.cstore_untracked(), &outputs, &output_paths);
|
||||
|
||||
let only_dep_info = sess.opts.output_types.contains_key(&OutputType::DepInfo)
|
||||
&& sess.opts.output_types.len() == 1;
|
||||
|
@ -704,19 +698,19 @@ pub fn prepare_outputs(
|
|||
if !only_dep_info {
|
||||
if let Some(ref dir) = sess.io.output_dir {
|
||||
if fs::create_dir_all(dir).is_err() {
|
||||
let reported = sess.emit_err(OutDirError);
|
||||
return Err(reported);
|
||||
sess.emit_fatal(OutDirError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(outputs)
|
||||
outputs.into()
|
||||
}
|
||||
|
||||
pub static DEFAULT_QUERY_PROVIDERS: LazyLock<Providers> = LazyLock::new(|| {
|
||||
let providers = &mut Providers::default();
|
||||
providers.analysis = analysis;
|
||||
providers.hir_crate = rustc_ast_lowering::lower_to_hir;
|
||||
providers.output_filenames = output_filenames;
|
||||
proc_macro_decls::provide(providers);
|
||||
rustc_const_eval::provide(providers);
|
||||
rustc_middle::hir::provide(providers);
|
||||
|
|
|
@ -235,14 +235,6 @@ impl<'tcx> Queries<'tcx> {
|
|||
tcx.arena.alloc(Steal::new((untracked_resolver_for_lowering, krate))),
|
||||
);
|
||||
feed.resolutions(tcx.arena.alloc(untracked_resolutions));
|
||||
|
||||
let outputs = passes::prepare_outputs(
|
||||
self.session(),
|
||||
&krate,
|
||||
&*untracked.cstore,
|
||||
crate_name,
|
||||
)?;
|
||||
feed.output_filenames(tcx.arena.alloc(std::sync::Arc::new(outputs)));
|
||||
feed.features_query(tcx.sess.features_untracked());
|
||||
let feed = tcx.feed_local_crate();
|
||||
feed.crate_name(crate_name);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue