1
+ use crate :: errors:: {
2
+ FailedCreateEncodedMetadata , FailedCreateFile , FailedCreateTempdir , FailedWriteError ,
3
+ } ;
1
4
use crate :: { encode_metadata, EncodedMetadata } ;
2
5
3
6
use rustc_data_structures:: temp_dir:: MaybeTempDir ;
@@ -24,7 +27,10 @@ pub fn emit_metadata(sess: &Session, metadata: &[u8], tmpdir: &MaybeTempDir) ->
24
27
let result = fs:: write ( & out_filename, metadata) ;
25
28
26
29
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
+ } ) ;
28
34
}
29
35
30
36
out_filename
@@ -65,7 +71,7 @@ pub fn encode_and_write_metadata(
65
71
let metadata_tmpdir = TempFileBuilder :: new ( )
66
72
. prefix ( "rmeta" )
67
73
. 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 ( ) } ) ) ;
69
75
let metadata_tmpdir = MaybeTempDir :: new ( metadata_tmpdir, tcx. sess . opts . cg . save_temps ) ;
70
76
let metadata_filename = metadata_tmpdir. as_ref ( ) . join ( METADATA_FILENAME ) ;
71
77
@@ -74,11 +80,10 @@ pub fn encode_and_write_metadata(
74
80
match metadata_kind {
75
81
MetadataKind :: None => {
76
82
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
+ } ) ;
82
87
} ) ;
83
88
}
84
89
MetadataKind :: Uncompressed | MetadataKind :: Compressed => {
@@ -94,7 +99,10 @@ pub fn encode_and_write_metadata(
94
99
let need_metadata_file = tcx. sess . opts . output_types . contains_key ( & OutputType :: Metadata ) ;
95
100
let ( metadata_filename, metadata_tmpdir) = if need_metadata_file {
96
101
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
+ } ) ;
98
106
}
99
107
if tcx. sess . opts . json_artifact_notifications {
100
108
tcx. sess
@@ -110,7 +118,7 @@ pub fn encode_and_write_metadata(
110
118
// Load metadata back to memory: codegen may need to include it in object files.
111
119
let metadata =
112
120
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 ( ) } ) ;
114
122
} ) ;
115
123
116
124
let need_metadata_module = metadata_kind == MetadataKind :: Compressed ;
0 commit comments