Skip to content

Commit c01546f

Browse files
committed
Port DlltoolFailImportLibrary and implement IntoDiagnosticArg for Cow<'a, str>
1 parent 81f7a8d commit c01546f

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

compiler/rustc_codegen_llvm/src/back/archive.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ use object::read::macho::FatArch;
1313

1414
use crate::common;
1515
use crate::errors::{
16-
ArchiveBuildFailure, ErrorCallingDllTool, ErrorCreatingImportLibrary, ErrorWritingDEFFile,
16+
ArchiveBuildFailure, DlltoolFailImportLibrary, ErrorCallingDllTool, ErrorCreatingImportLibrary,
17+
ErrorWritingDEFFile,
1718
};
1819
use crate::llvm::archive_ro::{ArchiveRO, Child};
1920
use crate::llvm::{self, ArchiveKind, LLVMMachineType, LLVMRustCOFFShortExport};
@@ -244,11 +245,12 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
244245
Err(e) => {
245246
sess.emit_fatal(ErrorCallingDllTool { error: e });
246247
}
247-
Ok(output) if !output.status.success() => sess.fatal(&format!(
248-
"Dlltool could not create import library: {}\n{}",
249-
String::from_utf8_lossy(&output.stdout),
250-
String::from_utf8_lossy(&output.stderr)
251-
)),
248+
Ok(output) if !output.status.success() => {
249+
sess.emit_fatal(DlltoolFailImportLibrary {
250+
stdout: String::from_utf8_lossy(&output.stdout),
251+
stderr: String::from_utf8_lossy(&output.stderr),
252+
})
253+
}
252254
_ => {}
253255
}
254256
} else {

compiler/rustc_codegen_llvm/src/errors.rs

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::borrow::Cow;
2+
13
use rustc_errors::fluent;
24
use rustc_errors::DiagnosticBuilder;
35
use rustc_macros::SessionDiagnostic;
@@ -102,3 +104,10 @@ pub(crate) struct ErrorWritingDEFFile {
102104
pub(crate) struct ErrorCallingDllTool {
103105
pub error: std::io::Error,
104106
}
107+
108+
#[derive(SessionDiagnostic)]
109+
#[diag(codegen_llvm::dlltool_fail_import_library)]
110+
pub(crate) struct DlltoolFailImportLibrary<'a> {
111+
pub stdout: Cow<'a, str>,
112+
pub stderr: Cow<'a, str>,
113+
}

compiler/rustc_error_messages/locales/en-US/codegen_llvm.ftl

+3
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ codegen_llvm_error_writing_def_file =
4545
4646
codegen_llvm_error_calling_dlltool =
4747
Error calling dlltool: {$error}
48+
49+
codegen_llvm_dlltool_fail_import_library =
50+
Dlltool could not create import library: {$stdout}\n{$stderr}

compiler/rustc_errors/src/diagnostic_impls.rs

+6
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ impl IntoDiagnosticArg for String {
107107
}
108108
}
109109

110+
impl<'a> IntoDiagnosticArg for Cow<'a, str> {
111+
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
112+
DiagnosticArgValue::Str(Cow::Owned(self.into_owned()))
113+
}
114+
}
115+
110116
impl<'a> IntoDiagnosticArg for &'a Path {
111117
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
112118
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))

0 commit comments

Comments
 (0)