Merge interface::run_compiler calls.

`rustc_driver_impl::run_compiler` currently has two
`interface::run_compiler` calls: one for the "no input" case, and one
for the normal case.

This commit merges the former into the latter, which makes the control
flow easier to read and avoids some duplication.

It also makes it clearer that the "no input" case will describe lints
before printing crate info, while the normal case does it in the reverse
order. Possibly a bug?
This commit is contained in:
Nicholas Nethercote 2023-11-17 11:04:38 +11:00
parent 706eb1604b
commit 8aee35e2ed

View File

@ -338,41 +338,14 @@ fn run_compiler(
expanded_args: args, expanded_args: args,
}; };
match make_input(&default_handler, &matches.free) { let has_input = match make_input(&default_handler, &matches.free) {
Err(reported) => return Err(reported), Err(reported) => return Err(reported),
Ok(Some(input)) => { Ok(Some(input)) => {
config.input = input; config.input = input;
true // has input: normal compilation
callbacks.config(&mut config);
} }
Ok(None) => match matches.free.len() { Ok(None) => match matches.free.len() {
0 => { 0 => false, // no input: we will exit early
callbacks.config(&mut config);
default_handler.abort_if_errors();
interface::run_compiler(config, |compiler| {
let sopts = &compiler.session().opts;
let handler = EarlyErrorHandler::new(sopts.error_format);
if sopts.describe_lints {
describe_lints(compiler.session());
return;
}
let should_stop = print_crate_info(
&handler,
compiler.codegen_backend(),
compiler.session(),
false,
);
if should_stop == Compilation::Stop {
return;
}
handler.early_error("no input filename given")
});
return Ok(());
}
1 => panic!("make_input should have provided valid inputs"), 1 => panic!("make_input should have provided valid inputs"),
_ => default_handler.early_error(format!( _ => default_handler.early_error(format!(
"multiple input filenames provided (first two filenames are `{}` and `{}`)", "multiple input filenames provided (first two filenames are `{}` and `{}`)",
@ -381,13 +354,28 @@ fn run_compiler(
}, },
}; };
callbacks.config(&mut config);
default_handler.abort_if_errors(); default_handler.abort_if_errors();
drop(default_handler);
interface::run_compiler(config, |compiler| { interface::run_compiler(config, |compiler| {
let sess = compiler.session(); let sess = compiler.session();
let codegen_backend = compiler.codegen_backend(); let codegen_backend = compiler.codegen_backend();
let handler = EarlyErrorHandler::new(sess.opts.error_format); let handler = EarlyErrorHandler::new(sess.opts.error_format);
if !has_input {
if sess.opts.describe_lints {
describe_lints(sess);
return sess.compile_status();
}
let should_stop = print_crate_info(&handler, codegen_backend, sess, false);
if should_stop == Compilation::Continue {
handler.early_error("no input filename given")
}
return sess.compile_status();
}
let should_stop = print_crate_info(&handler, codegen_backend, sess, true) let should_stop = print_crate_info(&handler, codegen_backend, sess, true)
.and_then(|| list_metadata(&handler, sess, &*codegen_backend.metadata_loader())) .and_then(|| list_metadata(&handler, sess, &*codegen_backend.metadata_loader()))
.and_then(|| try_process_rlink(sess, compiler)); .and_then(|| try_process_rlink(sess, compiler));