Report I/O errors with emit_fatal not emit_err

This commit is contained in:
Ben Kimock 2024-01-01 22:34:07 -05:00
parent 3cdd004e55
commit 94c43ccd87
3 changed files with 6 additions and 14 deletions

View File

@ -55,18 +55,12 @@ where
debug!("save: remove old file");
}
Err(err) if err.kind() == io::ErrorKind::NotFound => (),
Err(err) => {
sess.dcx().emit_err(errors::DeleteOld { name, path: path_buf, err });
return;
}
Err(err) => sess.dcx().emit_fatal(errors::DeleteOld { name, path: path_buf, err }),
}
let mut encoder = match FileEncoder::new(&path_buf) {
Ok(encoder) => encoder,
Err(err) => {
sess.dcx().emit_err(errors::CreateNew { name, path: path_buf, err });
return;
}
Err(err) => sess.dcx().emit_fatal(errors::CreateNew { name, path: path_buf, err }),
};
write_file_header(&mut encoder, sess);
@ -80,9 +74,7 @@ where
);
debug!("save: data written to disk successfully");
}
Err((path, err)) => {
sess.dcx().emit_err(errors::WriteNew { name, path, err });
}
Err((path, err)) => sess.dcx().emit_fatal(errors::WriteNew { name, path, err }),
}
}

View File

@ -332,7 +332,7 @@ impl Compiler {
// the global context.
_timer = Some(self.sess.timer("free_global_ctxt"));
if let Err((path, error)) = queries.finish() {
self.sess.dcx().emit_err(errors::FailedWritingFile { path: &path, error });
self.sess.dcx().emit_fatal(errors::FailedWritingFile { path: &path, error });
}
ret

View File

@ -2241,12 +2241,12 @@ pub fn encode_metadata(tcx: TyCtxt<'_>, path: &Path) {
// If we forget this, compilation can succeed with an incomplete rmeta file,
// causing an ICE when the rmeta file is read by another compilation.
if let Err((path, err)) = ecx.opaque.finish() {
tcx.dcx().emit_err(FailWriteFile { path: &path, err });
tcx.dcx().emit_fatal(FailWriteFile { path: &path, err });
}
let file = ecx.opaque.file();
if let Err(err) = encode_root_position(file, root.position.get()) {
tcx.dcx().emit_err(FailWriteFile { path: ecx.opaque.path(), err });
tcx.dcx().emit_fatal(FailWriteFile { path: ecx.opaque.path(), err });
}
// Record metadata size for self-profiling