Skip to content

Commit bd8e312

Browse files
committed
port fs.rs to SessionDiagnostics
1 parent 32e1823 commit bd8e312

File tree

3 files changed

+55
-9
lines changed

3 files changed

+55
-9
lines changed

compiler/rustc_error_messages/locales/en-US/metadata.ftl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,15 @@ metadata_global_alloc_required =
158158
159159
metadata_no_transitive_needs_dep =
160160
the crate `{$crate_name}` cannot depend on a crate that needs {$needs_crate_name}, but it depends on `{$deps_crate_name}`
161+
162+
metadata_failed_write_error =
163+
failed to write {$filename}: {$err}
164+
165+
metadata_failed_create_tempdir =
166+
couldn't create a temp dir: {$err}
167+
168+
metadata_failed_create_file =
169+
failed to create the file {$filename}: {$err}
170+
171+
metadata_failed_create_encoded_metadata =
172+
failed to create encoded metadata from file: {$err}

compiler/rustc_metadata/src/errors.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,3 +352,29 @@ pub struct NoTransitiveNeedsDep {
352352
pub needs_crate_name: String,
353353
pub deps_crate_name: String,
354354
}
355+
356+
#[derive(SessionDiagnostic)]
357+
#[diag(metadata::failed_write_error)]
358+
pub struct FailedWriteError {
359+
pub filename: String,
360+
pub err: String,
361+
}
362+
363+
#[derive(SessionDiagnostic)]
364+
#[diag(metadata::failed_create_tempdir)]
365+
pub struct FailedCreateTempdir {
366+
pub err: String,
367+
}
368+
369+
#[derive(SessionDiagnostic)]
370+
#[diag(metadata::failed_create_file)]
371+
pub struct FailedCreateFile {
372+
pub filename: String,
373+
pub err: String,
374+
}
375+
376+
#[derive(SessionDiagnostic)]
377+
#[diag(metadata::failed_create_encoded_metadata)]
378+
pub struct FailedCreateEncodedMetadata {
379+
pub err: String,
380+
}

compiler/rustc_metadata/src/fs.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
use crate::errors::{
2+
FailedCreateEncodedMetadata, FailedCreateFile, FailedCreateTempdir, FailedWriteError,
3+
};
14
use crate::{encode_metadata, EncodedMetadata};
25

36
use 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

Comments
 (0)