1+ use crate :: errors:: {
2+ FailedCreateEncodedMetadata , FailedCreateFile , FailedCreateTempdir , FailedWriteError ,
3+ } ;
14use crate :: { encode_metadata, EncodedMetadata } ;
25
36use rustc_data_structures:: temp_dir:: MaybeTempDir ;
@@ -24,7 +27,10 @@ pub fn emit_metadata(sess: &Session, metadata: &[u8], tmpdir: &MaybeTempDir) ->
2427 let result = fs:: write ( & out_filename, metadata) ;
2528
2629 if let Err ( e) = result {
27- sess. fatal ( & format ! ( "failed to write {}: {}" , out_filename. display( ) , e) ) ;
30+ sess. emit_fatal ( FailedWriteError {
31+ filename : out_filename. display ( ) . to_string ( ) ,
32+ err : e. to_string ( ) ,
33+ } ) ;
2834 }
2935
3036 out_filename
@@ -65,7 +71,7 @@ pub fn encode_and_write_metadata(
6571 let metadata_tmpdir = TempFileBuilder :: new ( )
6672 . prefix ( "rmeta" )
6773 . tempdir_in ( out_filename. parent ( ) . unwrap_or_else ( || Path :: new ( "" ) ) )
68- . unwrap_or_else ( |err| tcx. sess . fatal ( & format ! ( "couldn't create a temp dir: {}" , err) ) ) ;
74+ . unwrap_or_else ( |err| tcx. sess . emit_fatal ( FailedCreateTempdir { err : err. to_string ( ) } ) ) ;
6975 let metadata_tmpdir = MaybeTempDir :: new ( metadata_tmpdir, tcx. sess . opts . cg . save_temps ) ;
7076 let metadata_filename = metadata_tmpdir. as_ref ( ) . join ( METADATA_FILENAME ) ;
7177
@@ -74,11 +80,10 @@ pub fn encode_and_write_metadata(
7480 match metadata_kind {
7581 MetadataKind :: None => {
7682 std:: fs:: File :: create ( & metadata_filename) . unwrap_or_else ( |e| {
77- tcx. sess . fatal ( & format ! (
78- "failed to create the file {}: {}" ,
79- metadata_filename. display( ) ,
80- e
81- ) )
83+ tcx. sess . emit_fatal ( FailedCreateFile {
84+ filename : metadata_filename. display ( ) . to_string ( ) ,
85+ err : e. to_string ( ) ,
86+ } ) ;
8287 } ) ;
8388 }
8489 MetadataKind :: Uncompressed | MetadataKind :: Compressed => {
@@ -94,7 +99,10 @@ pub fn encode_and_write_metadata(
9499 let need_metadata_file = tcx. sess . opts . output_types . contains_key ( & OutputType :: Metadata ) ;
95100 let ( metadata_filename, metadata_tmpdir) = if need_metadata_file {
96101 if let Err ( e) = non_durable_rename ( & metadata_filename, & out_filename) {
97- tcx. sess . fatal ( & format ! ( "failed to write {}: {}" , out_filename. display( ) , e) ) ;
102+ tcx. sess . emit_fatal ( FailedWriteError {
103+ filename : out_filename. display ( ) . to_string ( ) ,
104+ err : e. to_string ( ) ,
105+ } ) ;
98106 }
99107 if tcx. sess . opts . json_artifact_notifications {
100108 tcx. sess
@@ -110,7 +118,7 @@ pub fn encode_and_write_metadata(
110118 // Load metadata back to memory: codegen may need to include it in object files.
111119 let metadata =
112120 EncodedMetadata :: from_path ( metadata_filename, metadata_tmpdir) . unwrap_or_else ( |e| {
113- tcx. sess . fatal ( & format ! ( "failed to create encoded metadata from file: {}" , e ) )
121+ tcx. sess . emit_fatal ( FailedCreateEncodedMetadata { err : e . to_string ( ) } ) ;
114122 } ) ;
115123
116124 let need_metadata_module = metadata_kind == MetadataKind :: Compressed ;
0 commit comments