Skip to content

Commit 9f5cd03

Browse files
committed
Move compiler input and ouput paths into session
1 parent 42f75f1 commit 9f5cd03

File tree

15 files changed

+113
-154
lines changed

15 files changed

+113
-154
lines changed

compiler/rustc_codegen_cranelift/src/debuginfo/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl DebugContext {
6868
.working_dir
6969
.to_string_lossy(FileNameDisplayPreference::Remapped)
7070
.into_owned();
71-
let (name, file_info) = match tcx.sess.local_crate_source_file.clone() {
71+
let (name, file_info) = match tcx.sess.local_crate_source_file() {
7272
Some(path) => {
7373
let name = path.to_string_lossy().into_owned();
7474
(name, None)

compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -782,10 +782,10 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
782782
codegen_unit_name: &str,
783783
debug_context: &CodegenUnitDebugContext<'ll, 'tcx>,
784784
) -> &'ll DIDescriptor {
785-
let mut name_in_debuginfo = match tcx.sess.local_crate_source_file {
786-
Some(ref path) => path.clone(),
787-
None => PathBuf::from(tcx.crate_name(LOCAL_CRATE).as_str()),
788-
};
785+
let mut name_in_debuginfo = tcx
786+
.sess
787+
.local_crate_source_file()
788+
.unwrap_or_else(|| PathBuf::from(tcx.crate_name(LOCAL_CRATE).as_str()));
789789

790790
// To avoid breaking split DWARF, we need to ensure that each codegen unit
791791
// has a unique `DW_AT_name`. This is because there's a remote chance that

compiler/rustc_driver/src/lib.rs

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ use rustc_errors::registry::{InvalidErrorCode, Registry};
2626
use rustc_errors::{ErrorGuaranteed, PResult};
2727
use rustc_feature::find_gated_cfg;
2828
use rustc_hir::def_id::LOCAL_CRATE;
29-
use rustc_interface::interface::CompilerIO;
3029
use rustc_interface::util::{self, collect_crate_types, get_codegen_backend};
3130
use rustc_interface::{interface, Queries};
3231
use rustc_lint::LintStore;
@@ -260,12 +259,8 @@ fn run_compiler(
260259
describe_lints(compiler.session(), &lint_store, registered_lints);
261260
return;
262261
}
263-
let should_stop = print_crate_info(
264-
&***compiler.codegen_backend(),
265-
compiler.session(),
266-
false,
267-
compiler.io(),
268-
);
262+
let should_stop =
263+
print_crate_info(&***compiler.codegen_backend(), compiler.session(), false);
269264

270265
if should_stop == Compilation::Stop {
271266
return;
@@ -287,16 +282,9 @@ fn run_compiler(
287282

288283
interface::run_compiler(config, |compiler| {
289284
let sess = compiler.session();
290-
let should_stop =
291-
print_crate_info(&***compiler.codegen_backend(), sess, true, compiler.io())
292-
.and_then(|| {
293-
list_metadata(
294-
sess,
295-
&*compiler.codegen_backend().metadata_loader(),
296-
&compiler.io().input,
297-
)
298-
})
299-
.and_then(|| try_process_rlink(sess, compiler));
285+
let should_stop = print_crate_info(&***compiler.codegen_backend(), sess, true)
286+
.and_then(|| list_metadata(sess, &*compiler.codegen_backend().metadata_loader()))
287+
.and_then(|| try_process_rlink(sess, compiler));
300288

301289
if should_stop == Compilation::Stop {
302290
return sess.compile_status();
@@ -310,17 +298,12 @@ fn run_compiler(
310298
if ppm.needs_ast_map() {
311299
let expanded_crate = queries.expansion()?.borrow().0.clone();
312300
queries.global_ctxt()?.enter(|tcx| {
313-
pretty::print_after_hir_lowering(
314-
tcx,
315-
compiler.io(),
316-
&*expanded_crate,
317-
*ppm,
318-
);
301+
pretty::print_after_hir_lowering(tcx, &*expanded_crate, *ppm);
319302
Ok(())
320303
})?;
321304
} else {
322305
let krate = queries.parse()?.steal();
323-
pretty::print_after_parsing(sess, compiler.io(), &krate, *ppm);
306+
pretty::print_after_parsing(sess, &krate, *ppm);
324307
}
325308
trace!("finished pretty-printing");
326309
return early_exit();
@@ -370,9 +353,9 @@ fn run_compiler(
370353
save::process_crate(
371354
tcx,
372355
crate_name,
373-
&compiler.io().input,
356+
&sess.io.input,
374357
None,
375-
DumpHandler::new(compiler.io().output_dir.as_deref(), crate_name),
358+
DumpHandler::new(sess.io.output_dir.as_deref(), crate_name),
376359
)
377360
});
378361
}
@@ -546,7 +529,7 @@ fn show_content_with_pager(content: &str) {
546529

547530
pub fn try_process_rlink(sess: &Session, compiler: &interface::Compiler) -> Compilation {
548531
if sess.opts.unstable_opts.link_only {
549-
if let Input::File(file) = &compiler.io().input {
532+
if let Input::File(file) = &sess.io.input {
550533
// FIXME: #![crate_type] and #![crate_name] support not implemented yet
551534
sess.init_crate_types(collect_crate_types(sess, &[]));
552535
let outputs = compiler.build_output_filenames(sess, &[]);
@@ -587,13 +570,9 @@ pub fn try_process_rlink(sess: &Session, compiler: &interface::Compiler) -> Comp
587570
}
588571
}
589572

590-
pub fn list_metadata(
591-
sess: &Session,
592-
metadata_loader: &dyn MetadataLoader,
593-
input: &Input,
594-
) -> Compilation {
573+
pub fn list_metadata(sess: &Session, metadata_loader: &dyn MetadataLoader) -> Compilation {
595574
if sess.opts.unstable_opts.ls {
596-
match *input {
575+
match sess.io.input {
597576
Input::File(ref ifile) => {
598577
let path = &(*ifile);
599578
let mut v = Vec::new();
@@ -614,7 +593,6 @@ fn print_crate_info(
614593
codegen_backend: &dyn CodegenBackend,
615594
sess: &Session,
616595
parse_attrs: bool,
617-
io: &CompilerIO,
618596
) -> Compilation {
619597
use rustc_session::config::PrintRequest::*;
620598
// NativeStaticLibs and LinkArgs are special - printed during linking
@@ -624,7 +602,7 @@ fn print_crate_info(
624602
}
625603

626604
let attrs = if parse_attrs {
627-
let result = parse_crate_attrs(sess, &io.input);
605+
let result = parse_crate_attrs(sess);
628606
match result {
629607
Ok(attrs) => Some(attrs),
630608
Err(mut parse_error) => {
@@ -649,8 +627,8 @@ fn print_crate_info(
649627
}
650628
FileNames | CrateName => {
651629
let attrs = attrs.as_ref().unwrap();
652-
let t_outputs = rustc_interface::util::build_output_filenames(io, attrs, sess);
653-
let id = rustc_session::output::find_crate_name(sess, attrs, &io.input);
630+
let t_outputs = rustc_interface::util::build_output_filenames(attrs, sess);
631+
let id = rustc_session::output::find_crate_name(sess, attrs);
654632
if *req == PrintRequest::CrateName {
655633
println!("{id}");
656634
continue;
@@ -1086,8 +1064,8 @@ pub fn handle_options(args: &[String]) -> Option<getopts::Matches> {
10861064
Some(matches)
10871065
}
10881066

1089-
fn parse_crate_attrs<'a>(sess: &'a Session, input: &Input) -> PResult<'a, ast::AttrVec> {
1090-
match input {
1067+
fn parse_crate_attrs<'a>(sess: &'a Session) -> PResult<'a, ast::AttrVec> {
1068+
match &sess.io.input {
10911069
Input::File(ifile) => rustc_parse::parse_crate_attrs_from_file(ifile, &sess.parse_sess),
10921070
Input::Str { name, input } => rustc_parse::parse_crate_attrs_from_source_str(
10931071
name.clone(),

compiler/rustc_driver/src/pretty.rs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,16 @@ use rustc_ast_pretty::pprust;
66
use rustc_errors::ErrorGuaranteed;
77
use rustc_hir as hir;
88
use rustc_hir_pretty as pprust_hir;
9-
use rustc_interface::interface::CompilerIO;
109
use rustc_middle::hir::map as hir_map;
1110
use rustc_middle::mir::{write_mir_graphviz, write_mir_pretty};
1211
use rustc_middle::ty::{self, TyCtxt};
13-
use rustc_session::config::{Input, PpAstTreeMode, PpHirMode, PpMode, PpSourceMode};
12+
use rustc_session::config::{PpAstTreeMode, PpHirMode, PpMode, PpSourceMode};
1413
use rustc_session::Session;
1514
use rustc_span::symbol::Ident;
1615
use rustc_span::FileName;
1716

1817
use std::cell::Cell;
1918
use std::fmt::Write;
20-
use std::path::PathBuf;
2119

2220
pub use self::PpMode::*;
2321
pub use self::PpSourceMode::*;
@@ -346,8 +344,8 @@ impl<'tcx> pprust_hir::PpAnn for TypedAnnotation<'tcx> {
346344
}
347345
}
348346

349-
fn get_source(input: &Input, sess: &Session) -> (String, FileName) {
350-
let src_name = input.source_name();
347+
fn get_source(sess: &Session) -> (String, FileName) {
348+
let src_name = sess.io.input.source_name();
351349
let src = String::clone(
352350
sess.source_map()
353351
.get_source_file(&src_name)
@@ -359,8 +357,8 @@ fn get_source(input: &Input, sess: &Session) -> (String, FileName) {
359357
(src, src_name)
360358
}
361359

362-
fn write_or_print(out: &str, ofile: &Option<PathBuf>, sess: &Session) {
363-
match ofile {
360+
fn write_or_print(out: &str, sess: &Session) {
361+
match &sess.io.output_file {
364362
None => print!("{out}"),
365363
Some(p) => {
366364
if let Err(e) = std::fs::write(p, out) {
@@ -373,8 +371,8 @@ fn write_or_print(out: &str, ofile: &Option<PathBuf>, sess: &Session) {
373371
}
374372
}
375373

376-
pub fn print_after_parsing(sess: &Session, io: &CompilerIO, krate: &ast::Crate, ppm: PpMode) {
377-
let (src, src_name) = get_source(&io.input, sess);
374+
pub fn print_after_parsing(sess: &Session, krate: &ast::Crate, ppm: PpMode) {
375+
let (src, src_name) = get_source(sess);
378376

379377
let out = match ppm {
380378
Source(s) => {
@@ -402,21 +400,16 @@ pub fn print_after_parsing(sess: &Session, io: &CompilerIO, krate: &ast::Crate,
402400
_ => unreachable!(),
403401
};
404402

405-
write_or_print(&out, &io.output_file, sess);
403+
write_or_print(&out, sess);
406404
}
407405

408-
pub fn print_after_hir_lowering<'tcx>(
409-
tcx: TyCtxt<'tcx>,
410-
io: &CompilerIO,
411-
krate: &ast::Crate,
412-
ppm: PpMode,
413-
) {
406+
pub fn print_after_hir_lowering<'tcx>(tcx: TyCtxt<'tcx>, krate: &ast::Crate, ppm: PpMode) {
414407
if ppm.needs_analysis() {
415-
abort_on_err(print_with_analysis(tcx, ppm, &io.output_file), tcx.sess);
408+
abort_on_err(print_with_analysis(tcx, ppm), tcx.sess);
416409
return;
417410
}
418411

419-
let (src, src_name) = get_source(&io.input, tcx.sess);
412+
let (src, src_name) = get_source(tcx.sess);
420413

421414
let out = match ppm {
422415
Source(s) => {
@@ -468,18 +461,14 @@ pub fn print_after_hir_lowering<'tcx>(
468461
_ => unreachable!(),
469462
};
470463

471-
write_or_print(&out, &io.output_file, tcx.sess);
464+
write_or_print(&out, tcx.sess);
472465
}
473466

474467
// In an ideal world, this would be a public function called by the driver after
475468
// analysis is performed. However, we want to call `phase_3_run_analysis_passes`
476469
// with a different callback than the standard driver, so that isn't easy.
477470
// Instead, we call that function ourselves.
478-
fn print_with_analysis(
479-
tcx: TyCtxt<'_>,
480-
ppm: PpMode,
481-
ofile: &Option<PathBuf>,
482-
) -> Result<(), ErrorGuaranteed> {
471+
fn print_with_analysis(tcx: TyCtxt<'_>, ppm: PpMode) -> Result<(), ErrorGuaranteed> {
483472
tcx.analysis(())?;
484473
let out = match ppm {
485474
Mir => {
@@ -512,7 +501,7 @@ fn print_with_analysis(
512501
_ => unreachable!(),
513502
};
514503

515-
write_or_print(&out, ofile, tcx.sess);
504+
write_or_print(&out, tcx.sess);
516505

517506
Ok(())
518507
}

compiler/rustc_interface/src/interface.rs

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ use rustc_middle::ty;
1414
use rustc_parse::maybe_new_parser_from_source_str;
1515
use rustc_query_impl::QueryCtxt;
1616
use rustc_session::config::{self, CheckCfg, ErrorOutputType, Input, OutputFilenames};
17-
use rustc_session::early_error;
1817
use rustc_session::lint;
1918
use rustc_session::parse::{CrateConfig, ParseSess};
2019
use rustc_session::Session;
20+
use rustc_session::{early_error, CompilerIO};
2121
use rustc_span::source_map::{FileLoader, FileName};
2222
use rustc_span::symbol::sym;
2323
use std::path::PathBuf;
@@ -35,29 +35,18 @@ pub type Result<T> = result::Result<T, ErrorGuaranteed>;
3535
pub struct Compiler {
3636
pub(crate) sess: Lrc<Session>,
3737
codegen_backend: Lrc<Box<dyn CodegenBackend>>,
38-
pub(crate) io: CompilerIO,
3938
pub(crate) register_lints: Option<Box<dyn Fn(&Session, &mut LintStore) + Send + Sync>>,
4039
pub(crate) override_queries:
4140
Option<fn(&Session, &mut ty::query::Providers, &mut ty::query::ExternProviders)>,
4241
}
4342

44-
pub struct CompilerIO {
45-
pub input: Input,
46-
pub output_dir: Option<PathBuf>,
47-
pub output_file: Option<PathBuf>,
48-
pub temps_dir: Option<PathBuf>,
49-
}
50-
5143
impl Compiler {
5244
pub fn session(&self) -> &Lrc<Session> {
5345
&self.sess
5446
}
5547
pub fn codegen_backend(&self) -> &Lrc<Box<dyn CodegenBackend>> {
5648
&self.codegen_backend
5749
}
58-
pub fn io(&self) -> &CompilerIO {
59-
&self.io
60-
}
6150
pub fn register_lints(&self) -> &Option<Box<dyn Fn(&Session, &mut LintStore) + Send + Sync>> {
6251
&self.register_lints
6352
}
@@ -66,7 +55,7 @@ impl Compiler {
6655
sess: &Session,
6756
attrs: &[ast::Attribute],
6857
) -> OutputFilenames {
69-
util::build_output_filenames(&self.io, attrs, sess)
58+
util::build_output_filenames(attrs, sess)
7059
}
7160
}
7261

@@ -273,12 +262,19 @@ pub fn run_compiler<R: Send>(config: Config, f: impl FnOnce(&Compiler) -> R + Se
273262
crate::callbacks::setup_callbacks();
274263

275264
let registry = &config.registry;
265+
266+
let temps_dir = config.opts.unstable_opts.temps_dir.as_deref().map(PathBuf::from);
276267
let (mut sess, codegen_backend) = util::create_session(
277268
config.opts,
278269
config.crate_cfg,
279270
config.crate_check_cfg,
280271
config.file_loader,
281-
config.input.opt_path(),
272+
CompilerIO {
273+
input: config.input,
274+
output_dir: config.output_dir,
275+
output_file: config.output_file,
276+
temps_dir,
277+
},
282278
config.lint_caps,
283279
config.make_codegen_backend,
284280
registry.clone(),
@@ -288,17 +284,9 @@ pub fn run_compiler<R: Send>(config: Config, f: impl FnOnce(&Compiler) -> R + Se
288284
parse_sess_created(&mut sess.parse_sess);
289285
}
290286

291-
let temps_dir = sess.opts.unstable_opts.temps_dir.as_deref().map(PathBuf::from);
292-
293287
let compiler = Compiler {
294288
sess: Lrc::new(sess),
295289
codegen_backend: Lrc::new(codegen_backend),
296-
io: CompilerIO {
297-
input: config.input,
298-
output_dir: config.output_dir,
299-
output_file: config.output_file,
300-
temps_dir,
301-
},
302290
register_lints: config.register_lints,
303291
override_queries: config.override_queries,
304292
};

0 commit comments

Comments
 (0)