From f459aefdc79abbe159cfd07e0efce620ebeb5d75 Mon Sep 17 00:00:00 2001 From: Ben Kimock Date: Sat, 15 Feb 2025 12:28:07 -0500 Subject: [PATCH 1/2] Add some rmeta instrumentation --- compiler/rustc_metadata/src/rmeta/encoder.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index 81fb918c6040a..e6ccf1b8fb161 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -599,6 +599,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { macro_rules! stat { ($label:literal, $f:expr) => {{ let orig_pos = self.position(); + $label.encode(&mut self.opaque); let res = $f(); stats.push(($label, self.position() - orig_pos)); res From b88d2fd6b70d2a64ef9e4b45f5d39cfbc709f774 Mon Sep 17 00:00:00 2001 From: Ben Kimock Date: Sat, 15 Feb 2025 15:41:31 -0500 Subject: [PATCH 2/2] instrument harder --- compiler/rustc_metadata/src/rmeta/mod.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_metadata/src/rmeta/mod.rs b/compiler/rustc_metadata/src/rmeta/mod.rs index 7b34e605c5307..5237d9ea17a05 100644 --- a/compiler/rustc_metadata/src/rmeta/mod.rs +++ b/compiler/rustc_metadata/src/rmeta/mod.rs @@ -333,12 +333,32 @@ pub(crate) struct CrateDep { pub is_private: bool, } -#[derive(MetadataEncodable, MetadataDecodable)] pub(crate) struct TraitImpls { trait_id: (u32, DefIndex), impls: LazyArray<(DefIndex, Option)>, } +use rustc_serialize::{Encodable, Decodable}; +impl<'tcx, '__a> Encodable> for TraitImpls { + #[inline] + fn encode(&self, s: &mut EncodeContext<'__a, 'tcx>) { + (&b"<>"[..]).encode(s); + self.trait_id.encode(s); + self.impls.encode(s); + } +} + +impl<'tcx, '__a> Decodable> for TraitImpls { + #[inline] + fn decode(d: &mut DecodeContext<'__a, 'tcx>) -> Self { + let _header: Vec = Decodable::decode(d); + Self { + trait_id: Decodable::decode(d), + impls: Decodable::decode(d), + } + } +} + #[derive(MetadataEncodable, MetadataDecodable)] pub(crate) struct IncoherentImpls { self_ty: SimplifiedType,