diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-03-09 16:21:17 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-09 16:21:17 +0100 |
| commit | 9ac5cc86d7ffcedb37ce52c43a6baca6bdf24df0 (patch) | |
| tree | 456b5549ea1e670d15e5399ed1955661ff5ed122 /compiler/rustc_metadata/src/rmeta | |
| parent | 577632d4d4b35d00a81b219144cd55e2f36d86e8 (diff) | |
| parent | fdff4d7682071b981a40dcc3575300a661a1f382 (diff) | |
| download | rust-9ac5cc86d7ffcedb37ce52c43a6baca6bdf24df0.tar.gz rust-9ac5cc86d7ffcedb37ce52c43a6baca6bdf24df0.zip | |
Rollup merge of #122187 - bjorn3:merge_header_version_checks, r=petrochenkov
Move metadata header and version checks together This will make it easier to report rustc versions for older metadata formats. Split out of https://github.com/rust-lang/rust/pull/120855
Diffstat (limited to 'compiler/rustc_metadata/src/rmeta')
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/decoder.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs index da384007c22..0467cf2969f 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder.rs @@ -684,13 +684,25 @@ impl<'a, 'tcx, I: Idx, T> Decodable<DecodeContext<'a, 'tcx>> for LazyTable<I, T> implement_ty_decoder!(DecodeContext<'a, 'tcx>); impl MetadataBlob { - pub(crate) fn is_compatible(&self) -> bool { - self.blob().starts_with(METADATA_HEADER) - } + pub(crate) fn check_compatibility( + &self, + cfg_version: &'static str, + ) -> Result<(), Option<String>> { + if !self.blob().starts_with(METADATA_HEADER) { + if self.blob().starts_with(b"rust") { + return Err(Some("<unknown rustc version>".to_owned())); + } + return Err(None); + } - pub(crate) fn get_rustc_version(&self) -> String { - LazyValue::<String>::from_position(NonZero::new(METADATA_HEADER.len() + 8).unwrap()) - .decode(self) + let found_version = + LazyValue::<String>::from_position(NonZero::new(METADATA_HEADER.len() + 8).unwrap()) + .decode(self); + if rustc_version(cfg_version) != found_version { + return Err(Some(found_version)); + } + + Ok(()) } fn root_pos(&self) -> NonZero<usize> { |
