about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNathan Stocks <cleancut@github.com>2022-08-23 17:16:04 -0600
committerNathan Stocks <cleancut@github.com>2022-08-31 10:56:42 -0600
commitbd8e312d73f07517e24a58a201e8524ebe4da8da (patch)
treeca4e2b14433bece9b597e46fba3690d46f08ea0e
parent32e1823b2275cf55a598e65c5093a28122b4039f (diff)
downloadrust-bd8e312d73f07517e24a58a201e8524ebe4da8da.tar.gz
rust-bd8e312d73f07517e24a58a201e8524ebe4da8da.zip
port fs.rs to SessionDiagnostics
-rw-r--r--compiler/rustc_error_messages/locales/en-US/metadata.ftl12
-rw-r--r--compiler/rustc_metadata/src/errors.rs26
-rw-r--r--compiler/rustc_metadata/src/fs.rs26
3 files changed, 55 insertions, 9 deletions
diff --git a/compiler/rustc_error_messages/locales/en-US/metadata.ftl b/compiler/rustc_error_messages/locales/en-US/metadata.ftl
index 3ce1275a899..a4881dbc764 100644
--- a/compiler/rustc_error_messages/locales/en-US/metadata.ftl
+++ b/compiler/rustc_error_messages/locales/en-US/metadata.ftl
@@ -158,3 +158,15 @@ metadata_global_alloc_required =
 
 metadata_no_transitive_needs_dep =
     the crate `{$crate_name}` cannot depend on a crate that needs {$needs_crate_name}, but it depends on `{$deps_crate_name}`
+
+metadata_failed_write_error =
+    failed to write {$filename}: {$err}
+
+metadata_failed_create_tempdir =
+    couldn't create a temp dir: {$err}
+
+metadata_failed_create_file =
+    failed to create the file {$filename}: {$err}
+
+metadata_failed_create_encoded_metadata =
+    failed to create encoded metadata from file: {$err}
diff --git a/compiler/rustc_metadata/src/errors.rs b/compiler/rustc_metadata/src/errors.rs
index 3d025e89857..c373e49ba49 100644
--- a/compiler/rustc_metadata/src/errors.rs
+++ b/compiler/rustc_metadata/src/errors.rs
@@ -352,3 +352,29 @@ pub struct NoTransitiveNeedsDep {
     pub needs_crate_name: String,
     pub deps_crate_name: String,
 }
+
+#[derive(SessionDiagnostic)]
+#[diag(metadata::failed_write_error)]
+pub struct FailedWriteError {
+    pub filename: String,
+    pub err: String,
+}
+
+#[derive(SessionDiagnostic)]
+#[diag(metadata::failed_create_tempdir)]
+pub struct FailedCreateTempdir {
+    pub err: String,
+}
+
+#[derive(SessionDiagnostic)]
+#[diag(metadata::failed_create_file)]
+pub struct FailedCreateFile {
+    pub filename: String,
+    pub err: String,
+}
+
+#[derive(SessionDiagnostic)]
+#[diag(metadata::failed_create_encoded_metadata)]
+pub struct FailedCreateEncodedMetadata {
+    pub err: String,
+}
diff --git a/compiler/rustc_metadata/src/fs.rs b/compiler/rustc_metadata/src/fs.rs
index e6072901aaa..67c18766c59 100644
--- a/compiler/rustc_metadata/src/fs.rs
+++ b/compiler/rustc_metadata/src/fs.rs
@@ -1,3 +1,6 @@
+use crate::errors::{
+    FailedCreateEncodedMetadata, FailedCreateFile, FailedCreateTempdir, FailedWriteError,
+};
 use crate::{encode_metadata, EncodedMetadata};
 
 use rustc_data_structures::temp_dir::MaybeTempDir;
@@ -24,7 +27,10 @@ pub fn emit_metadata(sess: &Session, metadata: &[u8], tmpdir: &MaybeTempDir) ->
     let result = fs::write(&out_filename, metadata);
 
     if let Err(e) = result {
-        sess.fatal(&format!("failed to write {}: {}", out_filename.display(), e));
+        sess.emit_fatal(FailedWriteError {
+            filename: out_filename.display().to_string(),
+            err: e.to_string(),
+        });
     }
 
     out_filename
@@ -65,7 +71,7 @@ pub fn encode_and_write_metadata(
     let metadata_tmpdir = TempFileBuilder::new()
         .prefix("rmeta")
         .tempdir_in(out_filename.parent().unwrap_or_else(|| Path::new("")))
-        .unwrap_or_else(|err| tcx.sess.fatal(&format!("couldn't create a temp dir: {}", err)));
+        .unwrap_or_else(|err| tcx.sess.emit_fatal(FailedCreateTempdir { err: err.to_string() }));
     let metadata_tmpdir = MaybeTempDir::new(metadata_tmpdir, tcx.sess.opts.cg.save_temps);
     let metadata_filename = metadata_tmpdir.as_ref().join(METADATA_FILENAME);
 
@@ -74,11 +80,10 @@ pub fn encode_and_write_metadata(
     match metadata_kind {
         MetadataKind::None => {
             std::fs::File::create(&metadata_filename).unwrap_or_else(|e| {
-                tcx.sess.fatal(&format!(
-                    "failed to create the file {}: {}",
-                    metadata_filename.display(),
-                    e
-                ))
+                tcx.sess.emit_fatal(FailedCreateFile {
+                    filename: metadata_filename.display().to_string(),
+                    err: e.to_string(),
+                });
             });
         }
         MetadataKind::Uncompressed | MetadataKind::Compressed => {
@@ -94,7 +99,10 @@ pub fn encode_and_write_metadata(
     let need_metadata_file = tcx.sess.opts.output_types.contains_key(&OutputType::Metadata);
     let (metadata_filename, metadata_tmpdir) = if need_metadata_file {
         if let Err(e) = non_durable_rename(&metadata_filename, &out_filename) {
-            tcx.sess.fatal(&format!("failed to write {}: {}", out_filename.display(), e));
+            tcx.sess.emit_fatal(FailedWriteError {
+                filename: out_filename.display().to_string(),
+                err: e.to_string(),
+            });
         }
         if tcx.sess.opts.json_artifact_notifications {
             tcx.sess
@@ -110,7 +118,7 @@ pub fn encode_and_write_metadata(
     // Load metadata back to memory: codegen may need to include it in object files.
     let metadata =
         EncodedMetadata::from_path(metadata_filename, metadata_tmpdir).unwrap_or_else(|e| {
-            tcx.sess.fatal(&format!("failed to create encoded metadata from file: {}", e))
+            tcx.sess.emit_fatal(FailedCreateEncodedMetadata { err: e.to_string() });
         });
 
     let need_metadata_module = metadata_kind == MetadataKind::Compressed;