@@ -73,12 +73,10 @@ pub fn write_output_file(
7373 unsafe {
7474 let output_c = path_to_c_string ( output) ;
7575 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 ( | ( ) | {
7777 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+ } )
8280 }
8381}
8482
@@ -505,7 +503,8 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
505503 if write_bc {
506504 let _timer = cgcx. profile_activity ( ProfileCategory :: Codegen , "LLVM_emit_bitcode" ) ;
507505 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) ;
509508 }
510509 }
511510
@@ -520,7 +519,8 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
520519 let dst = bc_out. with_extension ( RLIB_BYTECODE_EXTENSION ) ;
521520 let data = bytecode:: encode ( & module. name , data) ;
522521 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) ;
524524 }
525525 }
526526 } else if config. embed_bitcode_marker {
@@ -532,7 +532,7 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
532532 if config. emit_ir {
533533 let _timer = cgcx. profile_activity ( ProfileCategory :: Codegen , "LLVM_emit_ir" ) ;
534534 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) ;
536536
537537 extern "C" fn demangle_callback ( input_ptr : * const c_char ,
538538 input_len : size_t ,
@@ -566,9 +566,14 @@ pub(crate) unsafe fn codegen(cgcx: &CodegenContext<LlvmCodegenBackend>,
566566 }
567567
568568 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) ;
570571 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+ } ) ?;
572577 }
573578
574579 if config. emit_asm || asm_to_obj {
0 commit comments