From fc3c5d241499e1281e8c3693dcbad0589816a42b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:18:51 +0100 Subject: [PATCH] Properly use the VersionMarker in CachedFunc (#6062) --- cranelift/codegen/src/incremental_cache.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cranelift/codegen/src/incremental_cache.rs b/cranelift/codegen/src/incremental_cache.rs index fe41eb57da..8e72d5e76e 100644 --- a/cranelift/codegen/src/incremental_cache.rs +++ b/cranelift/codegen/src/incremental_cache.rs @@ -116,8 +116,10 @@ impl std::fmt::Display for CacheKeyHash { #[derive(serde::Serialize, serde::Deserialize)] struct CachedFunc { - stencil: CompiledCodeStencil, + // Note: The version marker must be first to ensure deserialization stops in case of a version + // mismatch before attempting to deserialize the actual compiled code. version_marker: VersionMarker, + stencil: CompiledCodeStencil, } /// Key for caching a single function's compilation. @@ -216,8 +218,8 @@ pub fn serialize_compiled( result: CompiledCodeStencil, ) -> (CompiledCodeStencil, Result, bincode::Error>) { let cached = CachedFunc { - stencil: result, version_marker: VersionMarker, + stencil: result, }; let result = bincode::serialize(&cached); (cached.stencil, result)