@@ -12,6 +12,10 @@ use std::str;
1212use object:: read:: macho:: FatArch ;
1313
1414use crate :: common;
15+ use crate :: errors:: {
16+ ArchiveBuildFailure , DlltoolFailImportLibrary , ErrorCallingDllTool , ErrorCreatingImportLibrary ,
17+ ErrorWritingDEFFile , UnknownArchiveKind ,
18+ } ;
1519use crate :: llvm:: archive_ro:: { ArchiveRO , Child } ;
1620use crate :: llvm:: { self , ArchiveKind , LLVMMachineType , LLVMRustCOFFShortExport } ;
1721use rustc_codegen_ssa:: back:: archive:: { ArchiveBuilder , ArchiveBuilderBuilder } ;
@@ -147,7 +151,7 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
147151 fn build ( mut self : Box < Self > , output : & Path ) -> bool {
148152 match self . build_with_llvm ( output) {
149153 Ok ( any_members) => any_members,
150- Err ( e) => self . sess . fatal ( & format ! ( "failed to build archive: {}" , e ) ) ,
154+ Err ( e) => self . sess . emit_fatal ( ArchiveBuildFailure { error : e } ) ,
151155 }
152156 }
153157}
@@ -217,7 +221,7 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
217221 match std:: fs:: write ( & def_file_path, def_file_content) {
218222 Ok ( _) => { }
219223 Err ( e) => {
220- sess. fatal ( & format ! ( "Error writing .DEF file: {}" , e ) ) ;
224+ sess. emit_fatal ( ErrorWritingDEFFile { error : e } ) ;
221225 }
222226 } ;
223227
@@ -239,13 +243,14 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
239243
240244 match result {
241245 Err ( e) => {
242- sess. fatal ( & format ! ( "Error calling dlltool: {}" , e) ) ;
246+ sess. emit_fatal ( ErrorCallingDllTool { error : e } ) ;
247+ }
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+ } )
243253 }
244- Ok ( output) if !output. status . success ( ) => sess. fatal ( & format ! (
245- "Dlltool could not create import library: {}\n {}" ,
246- String :: from_utf8_lossy( & output. stdout) ,
247- String :: from_utf8_lossy( & output. stderr)
248- ) ) ,
249254 _ => { }
250255 }
251256 } else {
@@ -293,11 +298,10 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
293298 } ;
294299
295300 if result == crate :: llvm:: LLVMRustResult :: Failure {
296- sess. fatal ( & format ! (
297- "Error creating import library for {}: {}" ,
301+ sess. emit_fatal ( ErrorCreatingImportLibrary {
298302 lib_name,
299- llvm:: last_error( ) . unwrap_or( "unknown LLVM error" . to_string( ) )
300- ) ) ;
303+ error : llvm:: last_error ( ) . unwrap_or ( "unknown LLVM error" . to_string ( ) ) ,
304+ } ) ;
301305 }
302306 } ;
303307
@@ -308,9 +312,10 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
308312impl < ' a > LlvmArchiveBuilder < ' a > {
309313 fn build_with_llvm ( & mut self , output : & Path ) -> io:: Result < bool > {
310314 let kind = & * self . sess . target . archive_format ;
311- let kind = kind. parse :: < ArchiveKind > ( ) . map_err ( |_| kind) . unwrap_or_else ( |kind| {
312- self . sess . fatal ( & format ! ( "Don't know how to build archive of type: {}" , kind) )
313- } ) ;
315+ let kind = kind
316+ . parse :: < ArchiveKind > ( )
317+ . map_err ( |_| kind)
318+ . unwrap_or_else ( |kind| self . sess . emit_fatal ( UnknownArchiveKind { kind } ) ) ;
314319
315320 let mut additions = mem:: take ( & mut self . additions ) ;
316321 let mut strings = Vec :: new ( ) ;
0 commit comments