@@ -73,12 +73,10 @@ pub fn write_output_file(
73
73
unsafe {
74
74
let output_c = path_to_c_string ( output) ;
75
75
let result = llvm:: LLVMRustWriteOutputFile ( target, pm, m, output_c. as_ptr ( ) , file_type) ;
76
- if result. into_result ( ) . is_err ( ) {
76
+ result. into_result ( ) . map_err ( | ( ) | {
77
77
let msg = format ! ( "could not write output to {}" , output. display( ) ) ;
78
- Err ( llvm_err ( handler, & msg) )
79
- } else {
80
- Ok ( ( ) )
81
- }
78
+ llvm_err ( handler, & msg)
79
+ } )
82
80
}
83
81
}
84
82
@@ -505,7 +503,8 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
505
503
if write_bc {
506
504
let _timer = cgcx. profile_activity ( ProfileCategory :: Codegen , "LLVM_emit_bitcode" ) ;
507
505
if let Err ( e) = fs:: write ( & bc_out, data) {
508
- diag_handler. err ( & format ! ( "failed to write bytecode: {}" , e) ) ;
506
+ let msg = format ! ( "failed to write bytecode to {}: {}" , bc_out. display( ) , e) ;
507
+ diag_handler. err ( & msg) ;
509
508
}
510
509
}
511
510
@@ -520,7 +519,8 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
520
519
let dst = bc_out. with_extension ( RLIB_BYTECODE_EXTENSION ) ;
521
520
let data = bytecode:: encode ( & module. name , data) ;
522
521
if let Err ( e) = fs:: write ( & dst, data) {
523
- diag_handler. err ( & format ! ( "failed to write bytecode: {}" , e) ) ;
522
+ let msg = format ! ( "failed to write bytecode to {}: {}" , dst. display( ) , e) ;
523
+ diag_handler. err ( & msg) ;
524
524
}
525
525
}
526
526
} else if config. embed_bitcode_marker {
@@ -532,7 +532,7 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
532
532
if config. emit_ir {
533
533
let _timer = cgcx. profile_activity ( ProfileCategory :: Codegen , "LLVM_emit_ir" ) ;
534
534
let out = cgcx. output_filenames . temp_path ( OutputType :: LlvmAssembly , module_name) ;
535
- let out = path_to_c_string ( & out) ;
535
+ let out_c = path_to_c_string ( & out) ;
536
536
537
537
extern "C" fn demangle_callback ( input_ptr : * const c_char ,
538
538
input_len : size_t ,
@@ -566,9 +566,14 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
566
566
}
567
567
568
568
with_codegen ( tm, llmod, config. no_builtins , |cpm| {
569
- llvm:: LLVMRustPrintModule ( cpm, llmod, out. as_ptr ( ) , demangle_callback) ;
569
+ let result =
570
+ llvm:: LLVMRustPrintModule ( cpm, llmod, out_c. as_ptr ( ) , demangle_callback) ;
570
571
llvm:: LLVMDisposePassManager ( cpm) ;
571
- } ) ;
572
+ result. into_result ( ) . map_err ( |( ) | {
573
+ let msg = format ! ( "failed to write LLVM IR to {}" , out. display( ) ) ;
574
+ llvm_err ( diag_handler, & msg)
575
+ } )
576
+ } ) ?;
572
577
}
573
578
574
579
if config. emit_asm || asm_to_obj {
0 commit comments