1
Fork 0

Auto merge of #118635 - nnethercote:fewer-early-errors, r=davidtwco

Fewer early errors

r? `@davidtwco`
This commit is contained in:
bors 2023-12-07 11:57:14 +00:00
commit 7df0c211ac
7 changed files with 66 additions and 48 deletions

View file

@ -444,3 +444,9 @@ pub(crate) struct FunctionReturnRequiresX86OrX8664;
#[derive(Diagnostic)]
#[diag(session_function_return_thunk_extern_requires_non_large_code_model)]
pub(crate) struct FunctionReturnThunkExternRequiresNonLargeCodeModel;
#[derive(Diagnostic)]
#[diag(session_failed_to_create_profiler)]
pub struct FailedToCreateProfiler {
pub err: String,
}

View file

@ -24,7 +24,7 @@ use rustc_errors::registry::Registry;
use rustc_errors::{
error_code, fallback_fluent_bundle, DiagnosticBuilder, DiagnosticId, DiagnosticMessage,
ErrorGuaranteed, FluentBundle, Handler, IntoDiagnostic, LazyFallbackBundle, MultiSpan, Noted,
SubdiagnosticMessage, TerminalUrl,
TerminalUrl,
};
use rustc_macros::HashStable_Generic;
pub use rustc_span::def_id::StableCrateId;
@ -1349,7 +1349,7 @@ fn default_emitter(
// JUSTIFICATION: literally session construction
#[allow(rustc::bad_opt_access)]
pub fn build_session(
handler: &EarlyErrorHandler,
early_handler: EarlyErrorHandler,
sopts: config::Options,
io: CompilerIO,
bundle: Option<Lrc<rustc_errors::FluentBundle>>,
@ -1379,12 +1379,13 @@ pub fn build_session(
None => filesearch::get_or_default_sysroot().expect("Failed finding sysroot"),
};
let target_cfg = config::build_target_config(handler, &sopts, target_override, &sysroot);
let target_cfg = config::build_target_config(&early_handler, &sopts, target_override, &sysroot);
let host_triple = TargetTriple::from_triple(config::host_triple());
let (host, target_warnings) = Target::search(&host_triple, &sysroot)
.unwrap_or_else(|e| handler.early_error(format!("Error loading host specification: {e}")));
let (host, target_warnings) = Target::search(&host_triple, &sysroot).unwrap_or_else(|e| {
early_handler.early_error(format!("Error loading host specification: {e}"))
});
for warning in target_warnings.warning_messages() {
handler.early_warn(warning)
early_handler.early_warn(warning)
}
let loader = file_loader.unwrap_or_else(|| Box::new(RealFileLoader));
@ -1413,6 +1414,10 @@ pub fn build_session(
span_diagnostic = span_diagnostic.with_ice_file(ice_file);
}
// Now that the proper handler has been constructed, drop the early handler
// to prevent accidental use.
drop(early_handler);
let self_profiler = if let SwitchWithOptPath::Enabled(ref d) = sopts.unstable_opts.self_profile
{
let directory =
@ -1427,7 +1432,7 @@ pub fn build_session(
match profiler {
Ok(profiler) => Some(Arc::new(profiler)),
Err(e) => {
handler.early_warn(format!("failed to create profiler: {e}"));
span_diagnostic.emit_warning(errors::FailedToCreateProfiler { err: e.to_string() });
None
}
}
@ -1471,7 +1476,13 @@ pub fn build_session(
// Check jobserver before getting `jobserver::client`.
jobserver::check(|err| {
handler.early_warn_with_note(err, "the build environment is likely misconfigured")
#[allow(rustc::untranslatable_diagnostic)]
#[allow(rustc::diagnostic_outside_of_impl)]
parse_sess
.span_diagnostic
.struct_warn(err)
.note("the build environment is likely misconfigured")
.emit()
});
let sess = Session {
@ -1781,16 +1792,6 @@ impl EarlyErrorHandler {
pub fn early_warn(&self, msg: impl Into<DiagnosticMessage>) {
self.handler.struct_warn(msg).emit()
}
#[allow(rustc::untranslatable_diagnostic)]
#[allow(rustc::diagnostic_outside_of_impl)]
pub fn early_warn_with_note(
&self,
msg: impl Into<DiagnosticMessage>,
note: impl Into<SubdiagnosticMessage>,
) {
self.handler.struct_warn(msg).note(note).emit()
}
}
fn mk_emitter(output: ErrorOutputType) -> Box<DynEmitter> {