Skip to content

Commit f7e462a

Browse files
committed
port encoder.rs to SessionDiagnostics
1 parent 3ed9310 commit f7e462a

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,12 @@ metadata_unsupported_abi_i686 =
121121
122122
metadata_unsupported_abi =
123123
ABI not supported by `#[link(kind = "raw-dylib")]` on this architecture
124+
125+
metadata_fail_create_file_encoder =
126+
failed to create file encoder: {$err}
127+
128+
metadata_fail_seek_file =
129+
failed to seek the file: {$err}
130+
131+
metadata_fail_write_file =
132+
failed to write to the file: {$err}

compiler/rustc_metadata/src/errors.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,3 +282,21 @@ pub struct UnsupportedAbi {
282282
#[primary_span]
283283
pub span: Span,
284284
}
285+
286+
#[derive(SessionDiagnostic)]
287+
#[diag(metadata::fail_create_file_encoder)]
288+
pub struct FailCreateFileEncoder {
289+
pub err: String,
290+
}
291+
292+
#[derive(SessionDiagnostic)]
293+
#[diag(metadata::fail_seek_file)]
294+
pub struct FailSeekFile {
295+
pub err: String,
296+
}
297+
298+
#[derive(SessionDiagnostic)]
299+
#[diag(metadata::fail_write_file)]
300+
pub struct FailWriteFile {
301+
pub err: String,
302+
}

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::errors::{FailCreateFileEncoder, FailSeekFile, FailWriteFile};
12
use crate::rmeta::def_path_hash_map::DefPathHashMapRef;
23
use crate::rmeta::table::TableBuilder;
34
use crate::rmeta::*;
@@ -2269,7 +2270,7 @@ pub fn encode_metadata(tcx: TyCtxt<'_>, path: &Path) {
22692270

22702271
fn encode_metadata_impl(tcx: TyCtxt<'_>, path: &Path) {
22712272
let mut encoder = opaque::FileEncoder::new(path)
2272-
.unwrap_or_else(|err| tcx.sess.fatal(&format!("failed to create file encoder: {}", err)));
2273+
.unwrap_or_else(|err| tcx.sess.emit_fatal(FailCreateFileEncoder { err: err.to_string() }));
22732274
encoder.emit_raw_bytes(METADATA_HEADER);
22742275

22752276
// Will be filled with the root position after encoding everything.
@@ -2314,10 +2315,10 @@ fn encode_metadata_impl(tcx: TyCtxt<'_>, path: &Path) {
23142315
// Encode the root position.
23152316
let header = METADATA_HEADER.len();
23162317
file.seek(std::io::SeekFrom::Start(header as u64))
2317-
.unwrap_or_else(|err| tcx.sess.fatal(&format!("failed to seek the file: {}", err)));
2318+
.unwrap_or_else(|err| tcx.sess.emit_fatal(FailSeekFile { err: err.to_string() }));
23182319
let pos = root.position.get();
23192320
file.write_all(&[(pos >> 24) as u8, (pos >> 16) as u8, (pos >> 8) as u8, (pos >> 0) as u8])
2320-
.unwrap_or_else(|err| tcx.sess.fatal(&format!("failed to write to the file: {}", err)));
2321+
.unwrap_or_else(|err| tcx.sess.emit_fatal(FailWriteFile { err: err.to_string() }));
23212322

23222323
// Return to the position where we are before writing the root position.
23232324
file.seek(std::io::SeekFrom::Start(pos_before_seek)).unwrap();

0 commit comments

Comments
 (0)