diff --git a/compiler/rustc_metadata/src/rmeta/table.rs b/compiler/rustc_metadata/src/rmeta/table.rs index 03bd4170ea990..e74e999832a8d 100644 --- a/compiler/rustc_metadata/src/rmeta/table.rs +++ b/compiler/rustc_metadata/src/rmeta/table.rs @@ -172,8 +172,16 @@ where pub(crate) fn encode(&self, buf: &mut Encoder) -> Lazy> { let pos = buf.position(); + // Since all of the data are serialized as u32, adding some padding + // should make encoding/decoding slightly faster. + let pad = (4 - (pos % 4)) % 4; + let pad_bytes = [0, 0, 0]; + buf.emit_raw_bytes(&pad_bytes[..pad]); buf.emit_raw_bytes(&self.bytes); - Lazy::from_position_and_meta(NonZeroUsize::new(pos as usize).unwrap(), self.bytes.len()) + Lazy::from_position_and_meta( + NonZeroUsize::new(pos as usize + pad).unwrap(), + self.bytes.len(), + ) } }