From 1ead92dd64d256ec631fb05eb4d5723c179533cb Mon Sep 17 00:00:00 2001 From: Yoshiki Matsuda Date: Mon, 2 May 2022 16:37:26 +0900 Subject: [PATCH] call EncodedMetadata::empty in case of MetadataKind::None --- compiler/rustc_metadata/src/fs.rs | 56 +++++++++++--------- compiler/rustc_metadata/src/rmeta/encoder.rs | 5 ++ 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/compiler/rustc_metadata/src/fs.rs b/compiler/rustc_metadata/src/fs.rs index f6373438491..ed58d4595a0 100644 --- a/compiler/rustc_metadata/src/fs.rs +++ b/compiler/rustc_metadata/src/fs.rs @@ -68,37 +68,43 @@ pub fn encode_and_write_metadata( .unwrap_or_else(|err| tcx.sess.fatal(&format!("couldn't create a temp dir: {}", err))); let metadata_tmpdir = MaybeTempDir::new(metadata_tmpdir, tcx.sess.opts.cg.save_temps); let metadata_filename = metadata_tmpdir.as_ref().join(METADATA_FILENAME); - match metadata_kind { + let metadata = match metadata_kind { MetadataKind::None => { - let _ = emit_metadata(tcx.sess, &[], &metadata_tmpdir); + if tcx.sess.opts.json_artifact_notifications { + tcx.sess + .parse_sess + .span_diagnostic + .emit_artifact_notification(&out_filename, "metadata"); + } + EncodedMetadata::empty() } MetadataKind::Uncompressed | MetadataKind::Compressed => { - encode_metadata(tcx, &metadata_filename) + encode_metadata(tcx, &metadata_filename); + + let _prof_timer = tcx.sess.prof.generic_activity("write_crate_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)); + } + if tcx.sess.opts.json_artifact_notifications { + tcx.sess + .parse_sess + .span_diagnostic + .emit_artifact_notification(&out_filename, "metadata"); + } + (out_filename, None) + } else { + (metadata_filename, Some(metadata_tmpdir)) + }; + + EncodedMetadata::from_path(metadata_filename, metadata_tmpdir).unwrap_or_else(|e| { + tcx.sess.fatal(&format!("failed to create encoded metadata from file: {}", e)) + }) } }; - let _prof_timer = tcx.sess.prof.generic_activity("write_crate_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)); - } - if tcx.sess.opts.json_artifact_notifications { - tcx.sess - .parse_sess - .span_diagnostic - .emit_artifact_notification(&out_filename, "metadata"); - } - (out_filename, None) - } else { - (metadata_filename, Some(metadata_tmpdir)) - }; - 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)) - }); - let need_metadata_module = metadata_kind == MetadataKind::Compressed; (metadata, need_metadata_module) diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index c0750abf188..fc069a233f3 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -2158,6 +2158,11 @@ impl EncodedMetadata { Ok(Self { mmap, _temp_dir: temp_dir }) } + #[inline] + pub fn empty() -> Self { + Self { mmap: None, _temp_dir: None } + } + #[inline] pub fn raw_data(&self) -> &[u8] { self.mmap.as_ref().map(|mmap| mmap.as_ref()).unwrap_or_default()