@@ -12,6 +12,10 @@ use std::str;
12
12
use object:: read:: macho:: FatArch ;
13
13
14
14
use crate :: common;
15
+ use crate :: errors:: {
16
+ ArchiveBuildFailure , DlltoolFailImportLibrary , ErrorCallingDllTool , ErrorCreatingImportLibrary ,
17
+ ErrorWritingDEFFile , UnknownArchiveKind ,
18
+ } ;
15
19
use crate :: llvm:: archive_ro:: { ArchiveRO , Child } ;
16
20
use crate :: llvm:: { self , ArchiveKind , LLVMMachineType , LLVMRustCOFFShortExport } ;
17
21
use rustc_codegen_ssa:: back:: archive:: { ArchiveBuilder , ArchiveBuilderBuilder } ;
@@ -147,7 +151,7 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
147
151
fn build ( mut self : Box < Self > , output : & Path ) -> bool {
148
152
match self . build_with_llvm ( output) {
149
153
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 } ) ,
151
155
}
152
156
}
153
157
}
@@ -217,7 +221,7 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
217
221
match std:: fs:: write ( & def_file_path, def_file_content) {
218
222
Ok ( _) => { }
219
223
Err ( e) => {
220
- sess. fatal ( & format ! ( "Error writing .DEF file: {}" , e ) ) ;
224
+ sess. emit_fatal ( ErrorWritingDEFFile { error : e } ) ;
221
225
}
222
226
} ;
223
227
@@ -239,13 +243,14 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
239
243
240
244
match result {
241
245
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
+ } )
243
253
}
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
- ) ) ,
249
254
_ => { }
250
255
}
251
256
} else {
@@ -293,11 +298,10 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
293
298
} ;
294
299
295
300
if result == crate :: llvm:: LLVMRustResult :: Failure {
296
- sess. fatal ( & format ! (
297
- "Error creating import library for {}: {}" ,
301
+ sess. emit_fatal ( ErrorCreatingImportLibrary {
298
302
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
+ } ) ;
301
305
}
302
306
} ;
303
307
@@ -308,9 +312,10 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
308
312
impl < ' a > LlvmArchiveBuilder < ' a > {
309
313
fn build_with_llvm ( & mut self , output : & Path ) -> io:: Result < bool > {
310
314
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 } ) ) ;
314
319
315
320
let mut additions = mem:: take ( & mut self . additions ) ;
316
321
let mut strings = Vec :: new ( ) ;
0 commit comments