@@ -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