Avoid &format("...")
calls in error message code.
Error message all end up passing into a function as an `impl Into<{D,Subd}iagnosticMessage>`. If an error message is creatd as `&format("...")` that means we allocate a string (in the `format!` call), then take a reference, and then clone (allocating again) the reference to produce the `{D,Subd}iagnosticMessage`, which is silly. This commit removes the leading `&` from a lot of these cases. This means the original `String` is moved into the `{D,Subd}iagnosticMessage`, avoiding the double allocations. This requires changing some function argument types from `&str` to `String` (when all arguments are `String`) or `impl Into<{D,Subd}iagnosticMessage>` (when some arguments are `String` and some are `&str`).
This commit is contained in:
parent
87a2bc027c
commit
01e33a3600
37 changed files with 139 additions and 133 deletions
|
@ -1386,10 +1386,10 @@ pub fn build_session(
|
|||
let target_cfg = config::build_target_config(&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| {
|
||||
early_error(sopts.error_format, &format!("Error loading host specification: {e}"))
|
||||
early_error(sopts.error_format, format!("Error loading host specification: {e}"))
|
||||
});
|
||||
for warning in target_warnings.warning_messages() {
|
||||
early_warn(sopts.error_format, &warning)
|
||||
early_warn(sopts.error_format, warning)
|
||||
}
|
||||
|
||||
let loader = file_loader.unwrap_or_else(|| Box::new(RealFileLoader));
|
||||
|
@ -1431,7 +1431,7 @@ pub fn build_session(
|
|||
match profiler {
|
||||
Ok(profiler) => Some(Arc::new(profiler)),
|
||||
Err(e) => {
|
||||
early_warn(sopts.error_format, &format!("failed to create profiler: {e}"));
|
||||
early_warn(sopts.error_format, format!("failed to create profiler: {e}"));
|
||||
None
|
||||
}
|
||||
}
|
||||
|
@ -1727,18 +1727,21 @@ fn early_error_handler(output: config::ErrorOutputType) -> rustc_errors::Handler
|
|||
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn early_error_no_abort(output: config::ErrorOutputType, msg: &str) -> ErrorGuaranteed {
|
||||
pub fn early_error_no_abort(
|
||||
output: config::ErrorOutputType,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
) -> ErrorGuaranteed {
|
||||
early_error_handler(output).struct_err(msg).emit()
|
||||
}
|
||||
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn early_error(output: config::ErrorOutputType, msg: &str) -> ! {
|
||||
pub fn early_error(output: config::ErrorOutputType, msg: impl Into<DiagnosticMessage>) -> ! {
|
||||
early_error_handler(output).struct_fatal(msg).emit()
|
||||
}
|
||||
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn early_warn(output: config::ErrorOutputType, msg: &str) {
|
||||
pub fn early_warn(output: config::ErrorOutputType, msg: impl Into<DiagnosticMessage>) {
|
||||
early_error_handler(output).struct_warn(msg).emit()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue