From c26c461c0c0f4ee81616a794b1ac3cb41a3f17a6 Mon Sep 17 00:00:00 2001 From: Yoshiki Matsuda Date: Thu, 28 Apr 2022 10:55:04 +0900 Subject: [PATCH] construct EncodedMetadata in encode_and_write_metadata --- compiler/rustc_metadata/src/fs.rs | 15 +++++++++------ compiler/rustc_metadata/src/rmeta/encoder.rs | 14 ++++++++------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/compiler/rustc_metadata/src/fs.rs b/compiler/rustc_metadata/src/fs.rs index 71052195fad..950009397ce 100644 --- a/compiler/rustc_metadata/src/fs.rs +++ b/compiler/rustc_metadata/src/fs.rs @@ -68,11 +68,9 @@ 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); - let metadata = match metadata_kind { + match metadata_kind { MetadataKind::None => { - let metadata = EncodedMetadata::new(); - let _ = emit_metadata(tcx.sess, metadata.raw_data(), &metadata_tmpdir); - metadata + let _ = emit_metadata(tcx.sess, &[], &metadata_tmpdir); } MetadataKind::Uncompressed | MetadataKind::Compressed => { encode_metadata(tcx, &metadata_filename) @@ -82,7 +80,7 @@ pub fn encode_and_write_metadata( let _prof_timer = tcx.sess.prof.generic_activity("write_crate_metadata"); let need_metadata_file = tcx.sess.opts.output_types.contains_key(&OutputType::Metadata); - if need_metadata_file { + let metadata_filename = 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)); } @@ -92,7 +90,12 @@ pub fn encode_and_write_metadata( .span_diagnostic .emit_artifact_notification(&out_filename, "metadata"); } - } + out_filename + } else { + metadata_filename + }; + let raw_data = std::fs::read(metadata_filename).unwrap(); + let metadata = EncodedMetadata::from_raw_data(raw_data); let need_metadata_module = metadata_kind == MetadataKind::Compressed; diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index 9ea383331b6..f18a05fcb1d 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -2146,13 +2146,18 @@ impl EncodedMetadata { EncodedMetadata { raw_data: Vec::new() } } + #[inline] + pub fn from_raw_data(raw_data: Vec) -> Self { + Self { raw_data } + } + #[inline] pub fn raw_data(&self) -> &[u8] { &self.raw_data } } -pub fn encode_metadata(tcx: TyCtxt<'_>, path: impl AsRef) -> EncodedMetadata { +pub fn encode_metadata(tcx: TyCtxt<'_>, path: impl AsRef) { let _prof_timer = tcx.prof.verbose_generic_activity("generate_crate_metadata"); // Since encoding metadata is not in a query, and nothing is cached, @@ -2170,11 +2175,10 @@ pub fn encode_metadata(tcx: TyCtxt<'_>, path: impl AsRef) -> EncodedMetada // It can be removed if it turns out to cause trouble or be detrimental to performance. join(|| prefetch_mir(tcx), || tcx.exported_symbols(LOCAL_CRATE)); }, - ) - .0 + ); } -fn encode_metadata_impl(tcx: TyCtxt<'_>, path: impl AsRef) -> EncodedMetadata { +fn encode_metadata_impl(tcx: TyCtxt<'_>, path: impl AsRef) { let mut encoder = opaque::FileEncoder::new(path.as_ref()) .unwrap_or_else(|err| tcx.sess.fatal(&format!("failed to create file encoder: {}", err))); encoder.emit_raw_bytes(METADATA_HEADER); @@ -2226,8 +2230,6 @@ fn encode_metadata_impl(tcx: TyCtxt<'_>, path: impl AsRef) -> EncodedMetad // Record metadata size for self-profiling tcx.prof.artifact_size("crate_metadata", "crate_metadata", result.len() as u64); - - EncodedMetadata { raw_data: result } } pub fn provide(providers: &mut Providers) {