From 7eb64b4901f43d01aa6bd9a39ef299c0380fd600 Mon Sep 17 00:00:00 2001 From: Yoshiki Matsuda Date: Sun, 8 May 2022 14:19:04 +0900 Subject: [PATCH] flush and assert when counting zero bytes --- compiler/rustc_metadata/src/rmeta/encoder.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index f3853255f7b..3ae4fbb70a5 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -733,14 +733,18 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { assert_eq!(total_bytes, computed_total_bytes); if tcx.sess.meta_stats() { + self.opaque.flush().unwrap(); + + let pos_before_rewind = self.opaque.file().stream_position().unwrap(); let mut zero_bytes = 0; - self.opaque.file().seek(std::io::SeekFrom::Start(0)).unwrap(); + self.opaque.file().rewind().unwrap(); let file = std::io::BufReader::new(self.opaque.file()); for e in file.bytes() { if e.unwrap() == 0 { zero_bytes += 1; } } + assert_eq!(self.opaque.file().stream_position().unwrap(), pos_before_rewind); let perc = |bytes| (bytes * 100) as f64 / total_bytes as f64; let p = |label, bytes| {