diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index e0c534a30..ee0e36a1d 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -18,7 +18,6 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: "1.50" override: true - name: Install LLVM shell: bash diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 637eef9ec..e1e0d25e4 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -19,7 +19,6 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: "1.50" override: true components: rustfmt, clippy - name: Install LLVM (Linux) diff --git a/Cargo.lock b/Cargo.lock index df124b509..b16ca6245 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1723,9 +1723,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.4.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70de01b38fe7baba4ecdd33b777096d2b326993d8ea99bc5b6ede691883d3010" +checksum = "0d683f1540522e9ad21b786d534b274ff49b0e974bf3af31d7a930a6c3e3599d" dependencies = [ "memoffset", "ptr_meta", @@ -1735,9 +1735,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a169f6bc5a81033e86ed39d0f4150e2608160b73d2b93c6e8e6a3efa873f14" +checksum = "c848da2aad0c8395f7986a717b8f28a8fc05dd94463d949673803f4955d9f73a" dependencies = [ "proc-macro2", "quote", diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index 7c281012a..7ce1fb7e0 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -844,9 +844,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.4.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70de01b38fe7baba4ecdd33b777096d2b326993d8ea99bc5b6ede691883d3010" +checksum = "0d683f1540522e9ad21b786d534b274ff49b0e974bf3af31d7a930a6c3e3599d" dependencies = [ "memoffset", "ptr_meta", @@ -856,9 +856,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a169f6bc5a81033e86ed39d0f4150e2608160b73d2b93c6e8e6a3efa873f14" +checksum = "c848da2aad0c8395f7986a717b8f28a8fc05dd94463d949673803f4955d9f73a" dependencies = [ "proc-macro2", "quote", diff --git a/lib/compiler/Cargo.toml b/lib/compiler/Cargo.toml index c61654c87..c4be078a2 100644 --- a/lib/compiler/Cargo.toml +++ b/lib/compiler/Cargo.toml @@ -21,7 +21,7 @@ serde = { version = "1.0", features = ["derive"], optional = true } thiserror = "1.0" serde_bytes = { version = "0.11", optional = true } smallvec = "1.6" -rkyv = { version = "0.4.3", optional = true } +rkyv = { version = "0.6", optional = true } loupe = "0.1" [features] diff --git a/lib/engine-native/Cargo.toml b/lib/engine-native/Cargo.toml index b2418df99..62fd656dd 100644 --- a/lib/engine-native/Cargo.toml +++ b/lib/engine-native/Cargo.toml @@ -23,7 +23,7 @@ leb128 = "0.2" libloading = "0.7" tempfile = "3.1" which = "4.0" -rkyv = "0.4.3" +rkyv = "0.6" loupe = "0.1" [features] diff --git a/lib/types/Cargo.toml b/lib/types/Cargo.toml index 3a86972ea..3c8b0b8b5 100644 --- a/lib/types/Cargo.toml +++ b/lib/types/Cargo.toml @@ -14,7 +14,7 @@ edition = "2018" serde = { version = "1.0", features = ["derive"], optional = true, default-features = false } thiserror = "1.0" indexmap = { version = "1.4", features = ["serde-1"] } -rkyv = { version = "0.4.3", optional = true } +rkyv = { version = "0.6", optional = true } loupe = "0.1" [features] diff --git a/lib/types/src/archives.rs b/lib/types/src/archives.rs index 0b9e04b7b..611b99dfa 100644 --- a/lib/types/src/archives.rs +++ b/lib/types/src/archives.rs @@ -2,7 +2,6 @@ use crate::entity::{EntityRef, PrimaryMap, SecondaryMap}; use indexmap::IndexMap; use rkyv::{ - offset_of, ser::Serializer, std_impl::{ArchivedVec, VecResolver}, Archive, Archived, Deserialize, DeserializeUnsized, Fallible, MetadataResolver, Serialize, @@ -12,7 +11,7 @@ use rkyv::{ use core::{hash::Hash, marker::PhantomData}; #[cfg(feature = "std")] -use std::{collections::HashMap, hash::Hash, marker::PhantomData}; +use std::{collections::HashMap, hash::Hash, marker::PhantomData, mem::MaybeUninit}; /// PrimaryMap after archive pub struct ArchivedPrimaryMap(ArchivedVec, PhantomData); @@ -24,8 +23,15 @@ where type Archived = ArchivedPrimaryMap; type Resolver = VecResolver>; - fn resolve(&self, pos: usize, resolver: Self::Resolver) -> Self::Archived { - ArchivedPrimaryMap(Vec::resolve(&self.elems, pos, resolver), PhantomData) + fn resolve(&self, pos: usize, resolver: Self::Resolver, out: &mut MaybeUninit) { + let mut vec = MaybeUninit::uninit(); + Vec::resolve(&self.elems, pos, resolver, &mut vec); + // This is correct because the `resolve` method can never fail [citation needed] + let vec = unsafe { vec.assume_init() }; + let archived_primary_map = ArchivedPrimaryMap(vec, PhantomData); + unsafe { + out.as_mut_ptr().write(archived_primary_map); + } } } diff --git a/lib/vm/Cargo.toml b/lib/vm/Cargo.toml index 8bd4ee232..f51babb25 100644 --- a/lib/vm/Cargo.toml +++ b/lib/vm/Cargo.toml @@ -21,7 +21,7 @@ more-asserts = "0.2" cfg-if = "0.1" backtrace = "0.3" serde = { version = "1.0", features = ["derive", "rc"] } -rkyv = { version = "0.4.3", optional = true} +rkyv = { version = "0.6", optional = true} loupe = { version = "0.1", features = ["enable-indexmap"] } [target.'cfg(target_os = "windows")'.dependencies] diff --git a/lib/vm/src/module.rs b/lib/vm/src/module.rs index a31b61f95..e2f1e3581 100644 --- a/lib/vm/src/module.rs +++ b/lib/vm/src/module.rs @@ -15,6 +15,8 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::fmt; use std::iter::ExactSizeIterator; +#[cfg(feature = "enable-rkyv")] +use std::mem::MaybeUninit; use std::sync::atomic::{AtomicUsize, Ordering::SeqCst}; use std::sync::Arc; use wasmer_types::entity::{EntityRef, PrimaryMap}; @@ -224,8 +226,8 @@ impl Archive for ModuleInfo { type Archived = ::Archived; type Resolver = ::Resolver; - fn resolve(&self, pos: usize, resolver: Self::Resolver) -> Self::Archived { - ArchivableModuleInfo::from(self).resolve(pos, resolver) + fn resolve(&self, pos: usize, resolver: Self::Resolver, out: &mut MaybeUninit) { + ArchivableModuleInfo::from(self).resolve(pos, resolver, out) } } diff --git a/rust-toolchain b/rust-toolchain index ec8bede26..08369aae5 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.50 +1.51