Repository: bytecodealliance/wasmtime
Pull request #8899 (2024-07-03 19:46:49)

Wasmtime: Pop GC LIFO roots even when there is no GC heap
We can create and root `i31ref`s without ever allocating a GC heap for the store, so we can't guard popping LIFO roots on the presence of a GC heap or else we risk unbounded growth of the LIFO root set.

<!--
Please make sure you include the following information:

- If this work has been discussed elsewhere, please include a link to that
  conversation. If it was discussed in an issue, just mention "issue #...".

- Explain why this change is needed. If the details are in an issue already,
  this can be brief.

Our development process is documented in the Wasmtime book:
https://docs.wasmtime.dev/contributing-development-process.html

Please ensure all communication follows the code of conduct:
https://github.com/bytecodealliance/wasmtime/blob/main/CODE_OF_CONDUCT.md
-->



Patch:
diff --git a/Cargo.lock b/Cargo.lock
index 47e695e49..3166cb2b4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -216,7 +216,7 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
 
 [[package]]
 name = "byte-array-literals"
-version = "23.0.0"
+version = "24.0.0"
 
 [[package]]
 name = "byteorder"
@@ -556,7 +556,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-frontend",
@@ -569,14 +569,14 @@ dependencies = [
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-entity",
 ]
 
 [[package]]
 name = "cranelift-bitset"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "serde",
  "serde_derive",
@@ -584,7 +584,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "anyhow",
  "bumpalo",
@@ -615,25 +615,25 @@ dependencies = [
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-codegen-shared",
 ]
 
 [[package]]
 name = "cranelift-codegen-shared"
-version = "0.110.0"
+version = "0.111.0"
 
 [[package]]
 name = "cranelift-control"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "arbitrary",
 ]
 
 [[package]]
 name = "cranelift-entity"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-bitset",
  "serde",
@@ -671,7 +671,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-codegen",
  "hashbrown 0.14.3",
@@ -695,7 +695,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-interpreter"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -709,7 +709,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-isle"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "codespan-reporting",
  "log",
@@ -718,7 +718,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-jit"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "anyhow",
  "cranelift",
@@ -739,7 +739,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-module"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -751,7 +751,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-native"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-codegen",
  "libc",
@@ -760,7 +760,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-object"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -775,7 +775,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-reader"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -785,7 +785,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-serde"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "clap",
  "cranelift-codegen",
@@ -829,7 +829,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.110.0"
+version = "0.111.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -841,7 +841,7 @@ dependencies = [
  "serde_derive",
  "smallvec",
  "target-lexicon",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmtime-types",
  "wat",
 ]
@@ -1044,7 +1044,7 @@ checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
 
 [[package]]
 name = "embedding"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "dlmalloc",
@@ -1846,7 +1846,7 @@ dependencies = [
 
 [[package]]
 name = "min-platform-host"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "libloading",
@@ -2752,7 +2752,7 @@ dependencies = [
  "cargo_metadata",
  "heck 0.4.0",
  "wasmtime",
- "wit-component 0.211.1",
+ "wit-component 0.212.0",
 ]
 
 [[package]]
@@ -3079,10 +3079,10 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
 
 [[package]]
 name = "verify-component-adapter"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wat",
 ]
 
@@ -3129,7 +3129,7 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasi-common"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "bitflags 2.4.1",
@@ -3169,13 +3169,13 @@ dependencies = [
 
 [[package]]
 name = "wasi-preview1-component-adapter"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "bitflags 2.4.1",
  "byte-array-literals",
  "object 0.36.0",
  "wasi",
- "wasm-encoder 0.211.1",
+ "wasm-encoder 0.212.0",
  "wit-bindgen-rust-macro",
 ]
 
@@ -3244,12 +3244,12 @@ dependencies = [
 
 [[package]]
 name = "wasm-encoder"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e7d931a1120ef357f32b74547646b6fa68ea25e377772b72874b131a9ed70d4"
+checksum = "501940df4418b8929eb6d52f1aade1fdd15a5b86c92453cb696e3c906bd3fc33"
 dependencies = [
  "leb128",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
 ]
 
 [[package]]
@@ -3270,9 +3270,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-metadata"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f56bad1c68558c44e7f60be865117dc9d8c3a066bcf3b2232cb9a9858965fd5"
+checksum = "8a1849fac257fd76c43268555e73d74848c8dff23975c238c2cbad61cffe5045"
 dependencies = [
  "anyhow",
  "indexmap 2.2.6",
@@ -3280,36 +3280,36 @@ dependencies = [
  "serde_derive",
  "serde_json",
  "spdx",
- "wasm-encoder 0.211.1",
- "wasmparser 0.211.1",
+ "wasm-encoder 0.212.0",
+ "wasmparser 0.212.0",
 ]
 
 [[package]]
 name = "wasm-mutate"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4281d9c72b0a3c47eec052755ad98cb854309e3a40edf9887aa8f3ed939f7ab"
+checksum = "ff58202fe6f3750ba930d160a2451087973d902e09a2632b9a78ab7c86150a59"
 dependencies = [
  "egg",
  "log",
  "rand",
  "thiserror",
- "wasm-encoder 0.211.1",
- "wasmparser 0.211.1",
+ "wasm-encoder 0.212.0",
+ "wasmparser 0.212.0",
 ]
 
 [[package]]
 name = "wasm-smith"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94ae0d1bd7d17e7ae175f9e3cf646d9b39b7115240ed8d40141c4670bab49f96"
+checksum = "a8185faf41a5630ec7cf301fa1f63bb757f4c267a057f8b6b56bde0cba1144c1"
 dependencies = [
  "anyhow",
  "arbitrary",
  "flagset",
  "indexmap 2.2.6",
  "leb128",
- "wasm-encoder 0.211.1",
+ "wasm-encoder 0.212.0",
 ]
 
 [[package]]
@@ -3367,9 +3367,9 @@ dependencies = [
 
 [[package]]
 name = "wasmparser"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3189cc8a91f547390e2f043ca3b3e3fe0892f7d581767fd4e4b7f3dc3fe8e561"
+checksum = "8d28bc49ba1e5c5b61ffa7a2eace10820443c4b7d1c0b144109261d14570fdf8"
 dependencies = [
  "ahash",
  "bitflags 2.4.1",
@@ -3390,18 +3390,18 @@ dependencies = [
 
 [[package]]
 name = "wasmprinter"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23708dd7a986bd9b12fca26eff525bbc3659a336e947fd9ed9fdf79086825aec"
+checksum = "dfac65326cc561112af88c3028f6dfdb140acff67ede33a8e86be2dc6b8956f7"
 dependencies = [
  "anyhow",
  "termcolor",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
 ]
 
 [[package]]
 name = "wasmtime"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "addr2line",
  "anyhow",
@@ -3440,8 +3440,8 @@ dependencies = [
  "target-lexicon",
  "tempfile",
  "wasi-common",
- "wasm-encoder 0.211.1",
- "wasmparser 0.211.1",
+ "wasm-encoder 0.212.0",
+ "wasmparser 0.212.0",
  "wasmtime-asm-macros",
  "wasmtime-cache",
  "wasmtime-component-macro",
@@ -3461,14 +3461,14 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-asm-macros"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "cfg-if",
 ]
 
 [[package]]
 name = "wasmtime-bench-api"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cap-std",
@@ -3484,14 +3484,14 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-c-api"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "wasmtime-c-api-impl",
 ]
 
 [[package]]
 name = "wasmtime-c-api-impl"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cap-std",
@@ -3509,7 +3509,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-c-api-macros"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3517,7 +3517,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cache"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "base64",
@@ -3539,7 +3539,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cli"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3583,7 +3583,7 @@ dependencies = [
  "tracing",
  "walkdir",
  "wasi-common",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmtime",
  "wasmtime-cache",
  "wasmtime-cli-flags",
@@ -3597,15 +3597,15 @@ dependencies = [
  "wasmtime-wasi-nn",
  "wasmtime-wasi-threads",
  "wasmtime-wast",
- "wast 211.0.1",
+ "wast 212.0.0",
  "wat",
  "windows-sys 0.52.0",
- "wit-component 0.211.1",
+ "wit-component 0.212.0",
 ]
 
 [[package]]
 name = "wasmtime-cli-flags"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "clap",
@@ -3618,7 +3618,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-component-macro"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "component-macro-test-helpers",
@@ -3633,16 +3633,16 @@ dependencies = [
  "wasmtime",
  "wasmtime-component-util",
  "wasmtime-wit-bindgen",
- "wit-parser 0.211.1",
+ "wit-parser 0.212.0",
 ]
 
 [[package]]
 name = "wasmtime-component-util"
-version = "23.0.0"
+version = "24.0.0"
 
 [[package]]
 name = "wasmtime-cranelift"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -3657,14 +3657,14 @@ dependencies = [
  "object 0.36.0",
  "target-lexicon",
  "thiserror",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmtime-environ",
  "wasmtime-versioned-export-macros",
 ]
 
 [[package]]
 name = "wasmtime-environ"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "clap",
@@ -3682,8 +3682,8 @@ dependencies = [
  "serde",
  "serde_derive",
  "target-lexicon",
- "wasm-encoder 0.211.1",
- "wasmparser 0.211.1",
+ "wasm-encoder 0.212.0",
+ "wasmparser 0.212.0",
  "wasmprinter",
  "wasmtime-component-util",
  "wasmtime-types",
@@ -3698,7 +3698,7 @@ dependencies = [
  "component-fuzz-util",
  "env_logger",
  "libfuzzer-sys",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmprinter",
  "wasmtime-environ",
  "wat",
@@ -3706,7 +3706,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-explorer"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "capstone",
@@ -3721,7 +3721,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-fiber"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "backtrace",
@@ -3756,7 +3756,7 @@ dependencies = [
  "rand",
  "smallvec",
  "target-lexicon",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmtime",
  "wasmtime-fuzzing",
 ]
@@ -3777,12 +3777,12 @@ dependencies = [
  "target-lexicon",
  "tempfile",
  "v8",
- "wasm-encoder 0.211.1",
+ "wasm-encoder 0.212.0",
  "wasm-mutate",
  "wasm-smith",
  "wasm-spec-interpreter",
  "wasmi",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmprinter",
  "wasmtime",
  "wasmtime-wast",
@@ -3791,7 +3791,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-jit-debug"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "object 0.36.0",
  "once_cell",
@@ -3801,7 +3801,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-jit-icache-coherence"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -3811,7 +3811,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-slab"
-version = "23.0.0"
+version = "24.0.0"
 
 [[package]]
 name = "wasmtime-test-macros"
@@ -3825,19 +3825,19 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-types"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cranelift-entity",
  "serde",
  "serde_derive",
  "smallvec",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
 ]
 
 [[package]]
 name = "wasmtime-versioned-export-macros"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3846,7 +3846,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3879,7 +3879,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi-http"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3905,7 +3905,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi-nn"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cap-std",
@@ -3925,7 +3925,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi-threads"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "log",
@@ -3936,24 +3936,24 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wast"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "log",
  "wasmtime",
- "wast 211.0.1",
+ "wast 212.0.0",
 ]
 
 [[package]]
 name = "wasmtime-winch"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
  "gimli",
  "object 0.36.0",
  "target-lexicon",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmtime-cranelift",
  "wasmtime-environ",
  "winch-codegen",
@@ -3961,17 +3961,17 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wit-bindgen"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "heck 0.4.0",
  "indexmap 2.2.6",
- "wit-parser 0.211.1",
+ "wit-parser 0.212.0",
 ]
 
 [[package]]
 name = "wasmtime-wmemcheck"
-version = "23.0.0"
+version = "24.0.0"
 
 [[package]]
 name = "wast"
@@ -3984,24 +3984,24 @@ dependencies = [
 
 [[package]]
 name = "wast"
-version = "211.0.1"
+version = "212.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b25506dd82d00da6b14a87436b3d52b1d264083fa79cdb72a0d1b04a8595ccaa"
+checksum = "4606a05fb0aae5d11dd7d8280a640d88a63ee019360ba9be552da3d294b8d1f5"
 dependencies = [
  "bumpalo",
  "leb128",
  "memchr",
  "unicode-width",
- "wasm-encoder 0.211.1",
+ "wasm-encoder 0.212.0",
 ]
 
 [[package]]
 name = "wat"
-version = "1.211.1"
+version = "1.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb716ca6c86eecac2d82541ffc39860118fc0af9309c4f2670637bea2e1bdd7d"
+checksum = "c74ca7f93f11a5d6eed8499f2a8daaad6e225cab0151bc25a091fff3b987532f"
 dependencies = [
- "wast 211.0.1",
+ "wast 212.0.0",
 ]
 
 [[package]]
@@ -4038,7 +4038,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -4055,7 +4055,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-generate"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "anyhow",
  "heck 0.4.0",
@@ -4068,7 +4068,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-macro"
-version = "23.0.0"
+version = "24.0.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4123,7 +4123,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
 [[package]]
 name = "winch-codegen"
-version = "0.21.0"
+version = "0.22.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -4131,7 +4131,7 @@ dependencies = [
  "regalloc2",
  "smallvec",
  "target-lexicon",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
  "wasmtime-cranelift",
  "wasmtime-environ",
 ]
@@ -4385,9 +4385,9 @@ dependencies = [
 
 [[package]]
 name = "wit-component"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "079a38b7d679867424bf2bcbdd553a2acf364525307e43dfb910fa4a2c6fd9f2"
+checksum = "8ed5b0f9fc3d6424787d2a49e1142bf954ae4f26ee891992c144f0cfd68c4b7f"
 dependencies = [
  "anyhow",
  "bitflags 2.4.1",
@@ -4396,10 +4396,10 @@ dependencies = [
  "serde",
  "serde_derive",
  "serde_json",
- "wasm-encoder 0.211.1",
- "wasm-metadata 0.211.1",
- "wasmparser 0.211.1",
- "wit-parser 0.211.1",
+ "wasm-encoder 0.212.0",
+ "wasm-metadata 0.212.0",
+ "wasmparser 0.212.0",
+ "wit-parser 0.212.0",
 ]
 
 [[package]]
@@ -4422,9 +4422,9 @@ dependencies = [
 
 [[package]]
 name = "wit-parser"
-version = "0.211.1"
+version = "0.212.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3cc90c50c7ec8a824b5d2cddddff13b2dc12b7a96bf8684d11474223c2ea22f"
+checksum = "ceeb0424aa8679f3fcf2d6e3cfa381f3d6fa6179976a2c05a6249dd2bb426716"
 dependencies = [
  "anyhow",
  "id-arena",
@@ -4435,7 +4435,7 @@ dependencies = [
  "serde_derive",
  "serde_json",
  "unicode-xid",
- "wasmparser 0.211.1",
+ "wasmparser 0.212.0",
 ]
 
 [[package]]
diff --git a/Cargo.toml b/Cargo.toml
index ff42046e1..4c6c74c9c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -153,7 +153,7 @@ exclude = [
 ]
 
 [workspace.package]
-version = "23.0.0"
+version = "24.0.0"
 authors = ["The Wasmtime Project Developers"]
 edition = "2021"
 # Wasmtime's current policy is that this number can be no larger than the
@@ -176,57 +176,57 @@ all = 'allow'
 
 [workspace.dependencies]
 arbitrary = { version = "1.3.1" }
-wasmtime-wmemcheck = { path = "crates/wmemcheck", version = "=23.0.0" }
-wasmtime = { path = "crates/wasmtime", version = "23.0.0", default-features = false }
-wasmtime-c-api-macros = { path = "crates/c-api-macros", version = "=23.0.0" }
-wasmtime-cache = { path = "crates/cache", version = "=23.0.0" }
-wasmtime-cli-flags = { path = "crates/cli-flags", version = "=23.0.0" }
-wasmtime-cranelift = { path = "crates/cranelift", version = "=23.0.0" }
-wasmtime-winch = { path = "crates/winch", version = "=23.0.0" }
-wasmtime-environ = { path = "crates/environ", version = "=23.0.0" }
-wasmtime-explorer = { path = "crates/explorer", version = "=23.0.0" }
-wasmtime-fiber = { path = "crates/fiber", version = "=23.0.0" }
-wasmtime-types = { path = "crates/types", version = "23.0.0" }
-wasmtime-jit-debug = { path = "crates/jit-debug", version = "=23.0.0" }
-wasmtime-wast = { path = "crates/wast", version = "=23.0.0" }
-wasmtime-wasi = { path = "crates/wasi", version = "23.0.0", default-features = false }
-wasmtime-wasi-http = { path = "crates/wasi-http", version = "=23.0.0", default-features = false }
-wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "23.0.0" }
-wasmtime-wasi-threads = { path = "crates/wasi-threads", version = "23.0.0" }
-wasmtime-component-util = { path = "crates/component-util", version = "=23.0.0" }
-wasmtime-component-macro = { path = "crates/component-macro", version = "=23.0.0" }
-wasmtime-asm-macros = { path = "crates/asm-macros", version = "=23.0.0" }
-wasmtime-versioned-export-macros = { path = "crates/versioned-export-macros", version = "=23.0.0" }
-wasmtime-slab = { path = "crates/slab", version = "=23.0.0" }
+wasmtime-wmemcheck = { path = "crates/wmemcheck", version = "=24.0.0" }
+wasmtime = { path = "crates/wasmtime", version = "24.0.0", default-features = false }
+wasmtime-c-api-macros = { path = "crates/c-api-macros", version = "=24.0.0" }
+wasmtime-cache = { path = "crates/cache", version = "=24.0.0" }
+wasmtime-cli-flags = { path = "crates/cli-flags", version = "=24.0.0" }
+wasmtime-cranelift = { path = "crates/cranelift", version = "=24.0.0" }
+wasmtime-winch = { path = "crates/winch", version = "=24.0.0" }
+wasmtime-environ = { path = "crates/environ", version = "=24.0.0" }
+wasmtime-explorer = { path = "crates/explorer", version = "=24.0.0" }
+wasmtime-fiber = { path = "crates/fiber", version = "=24.0.0" }
+wasmtime-types = { path = "crates/types", version = "24.0.0" }
+wasmtime-jit-debug = { path = "crates/jit-debug", version = "=24.0.0" }
+wasmtime-wast = { path = "crates/wast", version = "=24.0.0" }
+wasmtime-wasi = { path = "crates/wasi", version = "24.0.0", default-features = false }
+wasmtime-wasi-http = { path = "crates/wasi-http", version = "=24.0.0", default-features = false }
+wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "24.0.0" }
+wasmtime-wasi-threads = { path = "crates/wasi-threads", version = "24.0.0" }
+wasmtime-component-util = { path = "crates/component-util", version = "=24.0.0" }
+wasmtime-component-macro = { path = "crates/component-macro", version = "=24.0.0" }
+wasmtime-asm-macros = { path = "crates/asm-macros", version = "=24.0.0" }
+wasmtime-versioned-export-macros = { path = "crates/versioned-export-macros", version = "=24.0.0" }
+wasmtime-slab = { path = "crates/slab", version = "=24.0.0" }
 component-test-util = { path = "crates/misc/component-test-util" }
 component-fuzz-util = { path = "crates/misc/component-fuzz-util" }
-wiggle = { path = "crates/wiggle", version = "=23.0.0", default-features = false }
-wiggle-macro = { path = "crates/wiggle/macro", version = "=23.0.0" }
-wiggle-generate = { path = "crates/wiggle/generate", version = "=23.0.0" }
-wasi-common = { path = "crates/wasi-common", version = "=23.0.0", default-features = false }
+wiggle = { path = "crates/wiggle", version = "=24.0.0", default-features = false }
+wiggle-macro = { path = "crates/wiggle/macro", version = "=24.0.0" }
+wiggle-generate = { path = "crates/wiggle/generate", version = "=24.0.0" }
+wasi-common = { path = "crates/wasi-common", version = "=24.0.0", default-features = false }
 wasmtime-fuzzing = { path = "crates/fuzzing" }
-wasmtime-jit-icache-coherence = { path = "crates/jit-icache-coherence", version = "=23.0.0" }
-wasmtime-wit-bindgen = { path = "crates/wit-bindgen", version = "=23.0.0" }
+wasmtime-jit-icache-coherence = { path = "crates/jit-icache-coherence", version = "=24.0.0" }
+wasmtime-wit-bindgen = { path = "crates/wit-bindgen", version = "=24.0.0" }
 test-programs-artifacts = { path = 'crates/test-programs/artifacts' }
 
-cranelift-wasm = { path = "cranelift/wasm", version = "0.110.0" }
-cranelift-codegen = { path = "cranelift/codegen", version = "0.110.0", default-features = false, features = ["std", "unwind", "trace-log"] }
-cranelift-frontend = { path = "cranelift/frontend", version = "0.110.0" }
-cranelift-entity = { path = "cranelift/entity", version = "0.110.0" }
-cranelift-native = { path = "cranelift/native", version = "0.110.0" }
-cranelift-module = { path = "cranelift/module", version = "0.110.0" }
-cranelift-interpreter = { path = "cranelift/interpreter", version = "0.110.0" }
-cranelift-reader = { path = "cranelift/reader", version = "0.110.0" }
+cranelift-wasm = { path = "cranelift/wasm", version = "0.111.0" }
+cranelift-codegen = { path = "cranelift/codegen", version = "0.111.0", default-features = false, features = ["std", "unwind", "trace-log"] }
+cranelift-frontend = { path = "cranelift/frontend", version = "0.111.0" }
+cranelift-entity = { path = "cranelift/entity", version = "0.111.0" }
+cranelift-native = { path = "cranelift/native", version = "0.111.0" }
+cranelift-module = { path = "cranelift/module", version = "0.111.0" }
+cranelift-interpreter = { path = "cranelift/interpreter", version = "0.111.0" }
+cranelift-reader = { path = "cranelift/reader", version = "0.111.0" }
 cranelift-filetests = { path = "cranelift/filetests" }
-cranelift-object = { path = "cranelift/object", version = "0.110.0" }
-cranelift-jit = { path = "cranelift/jit", version = "0.110.0" }
+cranelift-object = { path = "cranelift/object", version = "0.111.0" }
+cranelift-jit = { path = "cranelift/jit", version = "0.111.0" }
 cranelift-fuzzgen = { path = "cranelift/fuzzgen" }
-cranelift-bforest = { path = "cranelift/bforest", version = "0.110.0" }
-cranelift-bitset = { path = "cranelift/bitset", version = "0.110.0" }
-cranelift-control = { path = "cranelift/control", version = "0.110.0" }
-cranelift = { path = "cranelift/umbrella", version = "0.110.0" }
+cranelift-bforest = { path = "cranelift/bforest", version = "0.111.0" }
+cranelift-bitset = { path = "cranelift/bitset", version = "0.111.0" }
+cranelift-control = { path = "cranelift/control", version = "0.111.0" }
+cranelift = { path = "cranelift/umbrella", version = "0.111.0" }
 
-winch-codegen = { path = "winch/codegen", version = "=0.21.0" }
+winch-codegen = { path = "winch/codegen", version = "=0.22.0" }
 
 wasi-preview1-component-adapter = { path = "crates/wasi-preview1-component-adapter" }
 byte-array-literals = { path = "crates/wasi-preview1-component-adapter/byte-array-literals" }
@@ -253,15 +253,15 @@ wit-bindgen = { version = "0.26.0", default-features = false }
 wit-bindgen-rust-macro = { version = "0.26.0", default-features = false }
 
 # wasm-tools family:
-wasmparser = { version = "0.211.1", default-features = false }
-wat = "1.211.1"
-wast = "211.0.1"
-wasmprinter = "0.211.1"
-wasm-encoder = "0.211.1"
-wasm-smith = "0.211.1"
-wasm-mutate = "0.211.1"
-wit-parser = "0.211.1"
-wit-component = "0.211.1"
+wasmparser = { version = "0.212.0", default-features = false }
+wat = "1.212.0"
+wast = "212.0.0"
+wasmprinter = "0.212.0"
+wasm-encoder = "0.212.0"
+wasm-smith = "0.212.0"
+wasm-mutate = "0.212.0"
+wit-parser = "0.212.0"
+wit-component = "0.212.0"
 
 # Non-Bytecode Alliance maintained dependencies:
 # --------------------------
diff --git a/RELEASES.md b/RELEASES.md
index 938ad5b68..3939938ec 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,4 +1,4 @@
-## 23.0.0
+## 24.0.0
 
 Unreleased.
 
@@ -12,6 +12,7 @@ Release notes for previous releases of Wasmtime can be found on the respective
 release branches of the Wasmtime repository.
 
 <!-- ARCHIVE_START -->
+* [23.0.x](https://github.com/bytecodealliance/wasmtime/blob/release-23.0.0/RELEASES.md)
 * [22.0.x](https://github.com/bytecodealliance/wasmtime/blob/release-22.0.0/RELEASES.md)
 * [21.0.x](https://github.com/bytecodealliance/wasmtime/blob/release-21.0.0/RELEASES.md)
 * [20.0.x](https://github.com/bytecodealliance/wasmtime/blob/release-20.0.0/RELEASES.md)
diff --git a/cranelift/bforest/Cargo.toml b/cranelift/bforest/Cargo.toml
index 29df51fdc..98e3fa8f5 100644
--- a/cranelift/bforest/Cargo.toml
+++ b/cranelift/bforest/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-bforest"
-version = "0.110.0"
+version = "0.111.0"
 description = "A forest of B+-trees"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-bforest"
diff --git a/cranelift/bitset/Cargo.toml b/cranelift/bitset/Cargo.toml
index f0958cc5e..0731e450b 100644
--- a/cranelift/bitset/Cargo.toml
+++ b/cranelift/bitset/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-bitset"
-version = "0.110.0"
+version = "0.111.0"
 description = "Various bitset stuff for use inside Cranelift"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-bitset"
diff --git a/cranelift/codegen/Cargo.toml b/cranelift/codegen/Cargo.toml
index 68744d2bb..53ef59c0c 100644
--- a/cranelift/codegen/Cargo.toml
+++ b/cranelift/codegen/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen"
-version = "0.110.0"
+version = "0.111.0"
 description = "Low-level code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-codegen"
@@ -19,7 +19,7 @@ workspace = true
 anyhow = { workspace = true, optional = true, features = ['std'] }
 bumpalo = "3"
 capstone = { workspace = true, optional = true }
-cranelift-codegen-shared = { path = "./shared", version = "0.110.0" }
+cranelift-codegen-shared = { path = "./shared", version = "0.111.0" }
 cranelift-entity = { workspace = true }
 cranelift-bforest = { workspace = true }
 cranelift-bitset = { workspace = true }
@@ -47,8 +47,8 @@ similar = "2.1.0"
 env_logger = { workspace = true }
 
 [build-dependencies]
-cranelift-codegen-meta = { path = "meta", version = "0.110.0" }
-cranelift-isle = { path = "../isle/isle", version = "=0.110.0" }
+cranelift-codegen-meta = { path = "meta", version = "0.111.0" }
+cranelift-isle = { path = "../isle/isle", version = "=0.111.0" }
 
 [features]
 default = ["std", "unwind", "host-arch", "timing"]
diff --git a/cranelift/codegen/meta/Cargo.toml b/cranelift/codegen/meta/Cargo.toml
index 406386fea..d2c1c681f 100644
--- a/cranelift/codegen/meta/Cargo.toml
+++ b/cranelift/codegen/meta/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cranelift-codegen-meta"
 authors = ["The Cranelift Project Developers"]
-version = "0.110.0"
+version = "0.111.0"
 description = "Metaprogram for cranelift-codegen code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -15,4 +15,4 @@ workspace = true
 rustdoc-args = [ "--document-private-items" ]
 
 [dependencies]
-cranelift-codegen-shared = { path = "../shared", version = "0.110.0" }
+cranelift-codegen-shared = { path = "../shared", version = "0.111.0" }
diff --git a/cranelift/codegen/shared/Cargo.toml b/cranelift/codegen/shared/Cargo.toml
index 0ddcb9578..bc868ac10 100644
--- a/cranelift/codegen/shared/Cargo.toml
+++ b/cranelift/codegen/shared/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen-shared"
-version = "0.110.0"
+version = "0.111.0"
 description = "For code shared between cranelift-codegen-meta and cranelift-codegen"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/codegen/src/isa/riscv64/lower.isle b/cranelift/codegen/src/isa/riscv64/lower.isle
index 04de11d1f..3019d4739 100644
--- a/cranelift/codegen/src/isa/riscv64/lower.isle
+++ b/cranelift/codegen/src/isa/riscv64/lower.isle
@@ -1554,11 +1554,21 @@
 (rule 1 (is_fneg (fneg x)) (IsFneg.Result 1 x))
 (rule 0 (is_fneg x) (IsFneg.Result 0 x))
 
+(decl pure is_fneg_neg (IsFneg) u64)
+(rule (is_fneg_neg (IsFneg.Result n _)) n)
+
+(decl pure get_fneg_value (IsFneg) Value)
+(rule (get_fneg_value (IsFneg.Result _ v)) v)
+
 (rule (lower (has_type ty (fma x_src y_src z_src)))
-  (if-let (IsFneg.Result neg_x x) (is_fneg x_src))
-  (if-let (IsFneg.Result neg_y y) (is_fneg y_src))
-  (if-let (IsFneg.Result neg_z z) (is_fneg z_src))
-  (rv_fma ty (u64_xor neg_x neg_y) neg_z x y z))
+  (let
+    ((x_res IsFneg (is_fneg x_src))
+     (y_res IsFneg (is_fneg y_src))
+     (z_res IsFneg (is_fneg z_src))
+     (x Value (get_fneg_value x_res))
+     (y Value (get_fneg_value y_res))
+     (z Value (get_fneg_value z_res)))
+    (rv_fma ty (u64_xor (is_fneg_neg x_res) (is_fneg_neg y_res)) (is_fneg_neg z_res) x y z)))
 
 ; parity arguments indicate whether to negate the x*y term or the z term, respectively
 (decl rv_fma (Type u64 u64 Value Value Value) InstOutput)
diff --git a/cranelift/control/Cargo.toml b/cranelift/control/Cargo.toml
index 0a897825d..df0d85dd2 100644
--- a/cranelift/control/Cargo.toml
+++ b/cranelift/control/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-control"
-version = "0.110.0"
+version = "0.111.0"
 description = "White-box fuzz testing framework"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/entity/Cargo.toml b/cranelift/entity/Cargo.toml
index ef907f997..a17396244 100644
--- a/cranelift/entity/Cargo.toml
+++ b/cranelift/entity/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-entity"
-version = "0.110.0"
+version = "0.111.0"
 description = "Data structures using entity references as mapping keys"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-entity"
diff --git a/cranelift/frontend/Cargo.toml b/cranelift/frontend/Cargo.toml
index f896e8e26..3155defa0 100644
--- a/cranelift/frontend/Cargo.toml
+++ b/cranelift/frontend/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-frontend"
-version = "0.110.0"
+version = "0.111.0"
 description = "Cranelift IR builder helper"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-frontend"
diff --git a/cranelift/interpreter/Cargo.toml b/cranelift/interpreter/Cargo.toml
index 49aaf091e..e1ffb0a41 100644
--- a/cranelift/interpreter/Cargo.toml
+++ b/cranelift/interpreter/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-interpreter"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "Interpret Cranelift IR"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/isle/isle/Cargo.toml b/cranelift/isle/isle/Cargo.toml
index ff8505049..2fba97be7 100644
--- a/cranelift/isle/isle/Cargo.toml
+++ b/cranelift/isle/isle/Cargo.toml
@@ -6,7 +6,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 name = "cranelift-isle"
 readme = "../README.md"
 repository = "https://github.com/bytecodealliance/wasmtime/tree/main/cranelift/isle"
-version = "0.110.0"
+version = "0.111.0"
 
 [lints]
 workspace = true
diff --git a/cranelift/jit/Cargo.toml b/cranelift/jit/Cargo.toml
index 5f80bf56b..4eba1e54c 100644
--- a/cranelift/jit/Cargo.toml
+++ b/cranelift/jit/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-jit"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "A JIT library backed by Cranelift"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/module/Cargo.toml b/cranelift/module/Cargo.toml
index a941e933e..5ac7b85d6 100644
--- a/cranelift/module/Cargo.toml
+++ b/cranelift/module/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-module"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "Support for linking functions and data with Cranelift"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/native/Cargo.toml b/cranelift/native/Cargo.toml
index cf3d48ce7..672edbdb4 100644
--- a/cranelift/native/Cargo.toml
+++ b/cranelift/native/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-native"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "Support for targeting the host with Cranelift"
 documentation = "https://docs.rs/cranelift-native"
diff --git a/cranelift/object/Cargo.toml b/cranelift/object/Cargo.toml
index 44af256cb..230d4541f 100644
--- a/cranelift/object/Cargo.toml
+++ b/cranelift/object/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-object"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "Emit Cranelift output to native object files with `object`"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/reader/Cargo.toml b/cranelift/reader/Cargo.toml
index f5188f525..db6d016ad 100644
--- a/cranelift/reader/Cargo.toml
+++ b/cranelift/reader/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-reader"
-version = "0.110.0"
+version = "0.111.0"
 description = "Cranelift textual IR reader"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-reader"
diff --git a/cranelift/serde/Cargo.toml b/cranelift/serde/Cargo.toml
index accf25aeb..805c76c8c 100644
--- a/cranelift/serde/Cargo.toml
+++ b/cranelift/serde/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-serde"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "Serializer/Deserializer for Cranelift IR"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/umbrella/Cargo.toml b/cranelift/umbrella/Cargo.toml
index 4a507b1a6..615a69f00 100644
--- a/cranelift/umbrella/Cargo.toml
+++ b/cranelift/umbrella/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift"
-version = "0.110.0"
+version = "0.111.0"
 description = "Umbrella for commonly-used cranelift crates"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift"
diff --git a/cranelift/wasm/Cargo.toml b/cranelift/wasm/Cargo.toml
index 3b33c3d84..67b82d1c2 100644
--- a/cranelift/wasm/Cargo.toml
+++ b/cranelift/wasm/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-wasm"
-version = "0.110.0"
+version = "0.111.0"
 authors = ["The Cranelift Project Developers"]
 description = "Translator from WebAssembly to Cranelift IR"
 documentation = "https://docs.rs/cranelift-wasm"
diff --git a/crates/c-api/include/wasmtime.h b/crates/c-api/include/wasmtime.h
index 9abffb85f..b11f325dd 100644
--- a/crates/c-api/include/wasmtime.h
+++ b/crates/c-api/include/wasmtime.h
@@ -206,11 +206,11 @@
 /**
  * \brief Wasmtime version string.
  */
-#define WASMTIME_VERSION "23.0.0"
+#define WASMTIME_VERSION "24.0.0"
 /**
  * \brief Wasmtime major version number.
  */
-#define WASMTIME_VERSION_MAJOR 23
+#define WASMTIME_VERSION_MAJOR 24
 /**
  * \brief Wasmtime minor version number.
  */
diff --git a/crates/cli-flags/src/lib.rs b/crates/cli-flags/src/lib.rs
index 8aafa447b..ab39e9997 100644
--- a/crates/cli-flags/src/lib.rs
+++ b/crates/cli-flags/src/lib.rs
@@ -254,6 +254,8 @@ wasmtime_option_group! {
         pub memory64: Option<bool>,
         /// Configure support for the component-model proposal.
         pub component_model: Option<bool>,
+        /// Configure support for 33+ flags in the component model.
+        pub component_model_more_flags: Option<bool>,
         /// Configure support for the function-references proposal.
         pub function_references: Option<bool>,
         /// Configure support for the GC proposal.
@@ -674,6 +676,7 @@ impl CommonOptions {
 
         handle_conditionally_compiled! {
             ("component-model", component_model, wasm_component_model)
+            ("component-model", component_model_more_flags, wasm_component_model_more_flags)
             ("threads", threads, wasm_threads)
             ("gc", gc, wasm_gc)
             ("gc", reference_types, wasm_reference_types)
diff --git a/crates/wasi-common/Cargo.toml b/crates/wasi-common/Cargo.toml
index d15c02994..579d92f9f 100644
--- a/crates/wasi-common/Cargo.toml
+++ b/crates/wasi-common/Cargo.toml
@@ -79,7 +79,6 @@ wasmtime = [
 # This feature enables an implementation of the Wasi traits for a
 # synchronous wasmtime embedding.
 sync = [
-    "wasmtime",
     "dep:cap-fs-ext",
     "dep:cap-time-ext",
     "dep:fs-set-times",
diff --git a/crates/wasmtime/src/config.rs b/crates/wasmtime/src/config.rs
index 3c4e49b00..841f56448 100644
--- a/crates/wasmtime/src/config.rs
+++ b/crates/wasmtime/src/config.rs
@@ -984,6 +984,18 @@ impl Config {
         self
     }
 
+    /// Configures whether components support more than 32 flags in each `flags`
+    /// type.
+    ///
+    /// This is part of the transition plan in
+    /// https://github.com/WebAssembly/component-model/issues/370.
+    #[cfg(feature = "component-model")]
+    pub fn wasm_component_model_more_flags(&mut self, enable: bool) -> &mut Self {
+        self.features
+            .set(WasmFeatures::COMPONENT_MODEL_MORE_FLAGS, enable);
+        self
+    }
+
     /// Configures which compilation strategy will be used for wasm modules.
     ///
     /// This method can be used to configure which compiler is used for wasm
diff --git a/crates/wasmtime/src/engine/serialization.rs b/crates/wasmtime/src/engine/serialization.rs
index f350f9286..c9e86cdb0 100644
--- a/crates/wasmtime/src/engine/serialization.rs
+++ b/crates/wasmtime/src/engine/serialization.rs
@@ -202,6 +202,7 @@ struct WasmFeatures {
     function_references: bool,
     gc: bool,
     custom_page_sizes: bool,
+    component_model_more_flags: bool,
 }
 
 impl Metadata<'_> {
@@ -227,6 +228,7 @@ impl Metadata<'_> {
             shared_everything_threads,
             component_model_values,
             component_model_nested_names,
+            component_model_more_flags,
 
             // Always on; we don't currently have knobs for these.
             mutable_global: _,
@@ -264,6 +266,7 @@ impl Metadata<'_> {
                 function_references,
                 gc,
                 custom_page_sizes,
+                component_model_more_flags,
             },
         }
     }
@@ -469,6 +472,7 @@ impl Metadata<'_> {
             function_references,
             gc,
             custom_page_sizes,
+            component_model_more_flags,
         } = self.features;
 
         use wasmparser::WasmFeatures as F;
@@ -550,6 +554,11 @@ impl Metadata<'_> {
             other.contains(F::CUSTOM_PAGE_SIZES),
             "WebAssembly custom-page-sizes support",
         )?;
+        Self::check_bool(
+            component_model_more_flags,
+            other.contains(F::COMPONENT_MODEL_MORE_FLAGS),
+            "WebAssembly component model support for more than 32 flags",
+        )?;
 
         Ok(())
     }
diff --git a/crates/wasmtime/src/runtime/gc/disabled/rooting.rs b/crates/wasmtime/src/runtime/gc/disabled/rooting.rs
index a63a65126..7c3065265 100644
--- a/crates/wasmtime/src/runtime/gc/disabled/rooting.rs
+++ b/crates/wasmtime/src/runtime/gc/disabled/rooting.rs
@@ -45,7 +45,7 @@ impl RootSet {
         usize::MAX
     }
 
-    pub(crate) fn exit_lifo_scope(&mut self, _gc_store: &mut GcStore, _scope: usize) {}
+    pub(crate) fn exit_lifo_scope(&mut self, _gc_store: Option<&mut GcStore>, _scope: usize) {}
 
     pub(crate) fn with_lifo_scope<T>(
         store: &mut StoreOpaque,
diff --git a/crates/wasmtime/src/runtime/gc/enabled/rooting.rs b/crates/wasmtime/src/runtime/gc/enabled/rooting.rs
index 74fe5be87..632ee02f2 100644
--- a/crates/wasmtime/src/runtime/gc/enabled/rooting.rs
+++ b/crates/wasmtime/src/runtime/gc/enabled/rooting.rs
@@ -417,7 +417,7 @@ impl RootSet {
     ///
     /// Calls to `{enter,exit}_lifo_scope` must happen in a strict LIFO order.
     #[inline]
-    pub(crate) fn exit_lifo_scope(&mut self, gc_store: &mut GcStore, scope: usize) {
+    pub(crate) fn exit_lifo_scope(&mut self, gc_store: Option<&mut GcStore>, scope: usize) {
         debug_assert!(self.lifo_roots.len() >= scope);
 
         // If we actually have roots to unroot, call an out-of-line slow path.
@@ -428,7 +428,7 @@ impl RootSet {
 
     #[inline(never)]
     #[cold]
-    fn exit_lifo_scope_slow(&mut self, gc_store: &mut GcStore, scope: usize) {
+    fn exit_lifo_scope_slow(&mut self, mut gc_store: Option<&mut GcStore>, scope: usize) {
         self.lifo_generation += 1;
 
         // TODO: In the case where we have a tracing GC that doesn't need to
@@ -438,7 +438,13 @@ impl RootSet {
 
         let mut lifo_roots = mem::take(&mut self.lifo_roots);
         for root in lifo_roots.drain(scope..) {
-            gc_store.drop_gc_ref(root.gc_ref);
+            // Only drop the GC reference if we actually have a GC store. How
+            // can we have a GC reference but not a GC store? If we've only
+            // create `i31refs`, we never force a GC store's allocation. This is
+            // fine because `i31ref`s never need drop barriers.
+            if let Some(gc_store) = &mut gc_store {
+                gc_store.drop_gc_ref(root.gc_ref);
+            }
         }
         self.lifo_roots = lifo_roots;
     }
diff --git a/crates/wasmtime/src/runtime/store.rs b/crates/wasmtime/src/runtime/store.rs
index 16eb424d2..944cca644 100644
--- a/crates/wasmtime/src/runtime/store.rs
+++ b/crates/wasmtime/src/runtime/store.rs
@@ -1584,9 +1584,7 @@ impl StoreOpaque {
 
     #[inline]
     pub(crate) fn exit_gc_lifo_scope(&mut self, scope: usize) {
-        if let Some(gc_store) = self.gc_store.as_mut() {
-            self.gc_roots.exit_lifo_scope(gc_store, scope);
-        }
+        self.gc_roots.exit_lifo_scope(self.gc_store.as_mut(), scope);
     }
 
     #[cfg(feature = "gc")]
diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock
index 7ba7fdf9d..b588240c5 100644
--- a/supply-chain/imports.lock
+++ b/supply-chain/imports.lock
@@ -17,6 +17,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-bforest]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -33,6 +37,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-bforest]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-codegen]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -49,6 +57,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-codegen]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-codegen-meta]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -65,6 +77,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-codegen-meta]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-codegen-shared]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -81,6 +97,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-codegen-shared]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-control]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -97,6 +117,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-control]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-entity]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -113,6 +137,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-entity]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-frontend]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -129,6 +157,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-frontend]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-interpreter]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -145,6 +177,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-interpreter]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-isle]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -161,6 +197,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-isle]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-jit]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -177,6 +217,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-jit]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-module]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -193,6 +237,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-module]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-native]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -209,6 +257,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-native]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-object]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -225,6 +277,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-object]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-reader]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -241,6 +297,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-reader]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-serde]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -257,6 +317,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-serde]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.cranelift-wasm]]
 version = "0.107.0"
 audited_as = "0.105.2"
@@ -273,6 +337,10 @@ audited_as = "0.107.1"
 version = "0.110.0"
 audited_as = "0.108.1"
 
+[[unpublished.cranelift-wasm]]
+version = "0.111.0"
+audited_as = "0.109.0"
+
 [[unpublished.wasi-common]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -289,6 +357,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasi-common]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -305,6 +377,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-asm-macros]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -321,6 +397,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-asm-macros]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-cache]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -337,6 +417,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-cache]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-cli]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -353,6 +437,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-cli]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-cli-flags]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -369,6 +457,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-cli-flags]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-component-macro]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -385,6 +477,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-component-macro]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-component-util]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -401,6 +497,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-component-util]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-cranelift]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -417,6 +517,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-cranelift]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-cranelift-shared]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -437,6 +541,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-environ]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-explorer]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -453,6 +561,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-explorer]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-fiber]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -469,6 +581,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-fiber]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-jit-debug]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -485,6 +601,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-jit-debug]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-jit-icache-coherence]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -501,6 +621,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-jit-icache-coherence]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-runtime]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -525,6 +649,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-slab]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-types]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -541,6 +669,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-types]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wasi]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -557,6 +689,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wasi]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wasi-http]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -573,6 +709,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wasi-http]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wasi-nn]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -589,6 +729,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wasi-nn]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wasi-threads]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -605,6 +749,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wasi-threads]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wast]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -621,6 +769,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wast]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-winch]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -637,6 +789,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-winch]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wit-bindgen]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -653,6 +809,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wit-bindgen]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wasmtime-wmemcheck]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -669,6 +829,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wasmtime-wmemcheck]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wiggle]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -685,6 +849,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wiggle]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wiggle-generate]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -701,6 +869,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wiggle-generate]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wiggle-macro]]
 version = "20.0.0"
 audited_as = "18.0.2"
@@ -717,6 +889,10 @@ audited_as = "20.0.1"
 version = "23.0.0"
 audited_as = "21.0.1"
 
+[[unpublished.wiggle-macro]]
+version = "24.0.0"
+audited_as = "22.0.0"
+
 [[unpublished.wiggle-test]]
 version = "0.0.0"
 audited_as = "0.1.0"
@@ -737,6 +913,10 @@ audited_as = "0.18.1"
 version = "0.21.0"
 audited_as = "0.19.1"
 
+[[unpublished.winch-codegen]]
+version = "0.22.0"
+audited_as = "0.20.0"
+
 [[publisher.aho-corasick]]
 version = "1.0.2"
 when = "2023-06-04"
@@ -936,6 +1116,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-bforest]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -960,6 +1146,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-bforest]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-codegen]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -984,6 +1176,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-codegen]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-codegen-meta]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1008,6 +1206,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-codegen-meta]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-codegen-shared]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1032,6 +1236,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-codegen-shared]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-control]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1056,6 +1266,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-control]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-entity]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1080,6 +1296,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-entity]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-frontend]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1104,6 +1326,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-frontend]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-interpreter]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1128,6 +1356,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-interpreter]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-isle]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1152,6 +1386,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-isle]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-jit]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1176,6 +1416,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-jit]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-module]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1200,6 +1446,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-module]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-native]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1224,6 +1476,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-native]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-object]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1248,6 +1506,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-object]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-reader]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1272,6 +1536,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-reader]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-serde]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1296,6 +1566,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-serde]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-wasm]]
 version = "0.105.2"
 when = "2024-02-28"
@@ -1320,6 +1596,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-wasm]]
+version = "0.109.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.derive_arbitrary]]
 version = "1.3.0"
 when = "2023-03-13"
@@ -1749,6 +2031,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasi-common]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasm-bindgen]]
 version = "0.2.87"
 when = "2023-06-12"
@@ -1844,6 +2132,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasm-encoder]]
+version = "0.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasm-metadata]]
 version = "0.201.0"
 when = "2024-02-27"
@@ -1904,6 +2198,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasm-metadata]]
+version = "0.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasm-mutate]]
 version = "0.201.0"
 when = "2024-02-27"
@@ -2036,6 +2336,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmparser]]
+version = "0.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmprinter]]
 version = "0.201.0"
 when = "2024-02-27"
@@ -2096,6 +2402,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmprinter]]
+version = "0.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2120,6 +2432,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-asm-macros]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2144,6 +2462,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-asm-macros]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cache]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2168,6 +2492,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cache]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cli]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2192,6 +2522,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cli]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cli-flags]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2216,6 +2552,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cli-flags]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-component-macro]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2240,6 +2582,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-component-macro]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-component-util]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2264,6 +2612,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-component-util]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cranelift]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2288,6 +2642,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cranelift]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-environ]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2312,6 +2672,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-environ]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-explorer]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2336,6 +2702,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-explorer]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-fiber]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2360,6 +2732,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-fiber]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-jit-debug]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2384,6 +2762,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-jit-debug]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-jit-icache-coherence]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2408,6 +2792,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-jit-icache-coherence]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-slab]]
 version = "19.0.0"
 when = "2024-03-20"
@@ -2432,6 +2822,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-slab]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-types]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2456,6 +2852,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-types]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2480,6 +2882,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi-http]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2504,6 +2912,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi-http]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi-nn]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2528,6 +2942,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi-nn]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi-threads]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2552,6 +2972,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi-threads]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wast]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2576,6 +3002,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wast]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-winch]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2600,6 +3032,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-winch]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wit-bindgen]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2624,6 +3062,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wit-bindgen]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wmemcheck]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2648,6 +3092,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wmemcheck]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wast]]
 version = "201.0.0"
 when = "2024-02-27"
@@ -2708,6 +3158,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wast]]
+version = "212.0.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wat]]
 version = "1.201.0"
 when = "2024-02-27"
@@ -2768,6 +3224,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wat]]
+version = "1.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2792,6 +3254,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wiggle]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle-generate]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2816,6 +3284,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wiggle-generate]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle-macro]]
 version = "18.0.2"
 when = "2024-02-28"
@@ -2840,6 +3314,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wiggle-macro]]
+version = "22.0.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle-test]]
 version = "0.1.0"
 when = "2020-03-12"
@@ -2878,6 +3358,12 @@ when = "2024-05-22"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.winch-codegen]]
+version = "0.20.0"
+when = "2024-06-20"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.windows]]
 version = "0.52.0"
 when = "2023-11-15"
@@ -3206,6 +3692,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-component]]
+version = "0.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wit-parser]]
 version = "0.201.0"
 when = "2024-02-27"
@@ -3266,6 +3758,12 @@ when = "2024-06-19"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-parser]]
+version = "0.212.0"
+when = "2024-06-27"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.witx]]
 version = "0.9.1"
 when = "2021-06-22"
diff --git a/winch/codegen/Cargo.toml b/winch/codegen/Cargo.toml
index 8f82dec22..093234c7a 100644
--- a/winch/codegen/Cargo.toml
+++ b/winch/codegen/Cargo.toml
@@ -4,7 +4,7 @@ name = "winch-codegen"
 description = "Winch code generation library"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
-version = "0.21.0"
+version = "0.22.0"
 edition.workspace = true
 
 [lints]


Test patch:
diff --git a/tests/all/component_model/macros.rs b/tests/all/component_model/macros.rs
index cf59adb48..d2112be87 100644
--- a/tests/all/component_model/macros.rs
+++ b/tests/all/component_model/macros.rs
@@ -4,7 +4,7 @@ use super::{make_echo_component, TypedFuncExt};
 use anyhow::Result;
 use component_macro_test::{add_variants, flags_test};
 use wasmtime::component::{Component, ComponentType, Lift, Linker, Lower};
-use wasmtime::Store;
+use wasmtime::{Engine, Store};
 
 #[test]
 fn record_derive() -> Result<()> {
@@ -337,7 +337,9 @@ fn enum_derive() -> Result<()> {
 
 #[test]
 fn flags() -> Result<()> {
-    let engine = super::engine();
+    let mut config = component_test_util::config();
+    config.wasm_component_model_more_flags(true);
+    let engine = Engine::new(&config)?;
     let mut store = Store::new(&engine, ());
 
     // Simple 8-bit flags
diff --git a/tests/all/i31ref.rs b/tests/all/i31ref.rs
new file mode 100644
index 000000000..de5308f24
--- /dev/null
+++ b/tests/all/i31ref.rs
@@ -0,0 +1,21 @@
+use wasmtime::*;
+
+#[test]
+fn always_pop_i31ref_lifo_roots() -> Result<()> {
+    let mut config = Config::new();
+    config.wasm_function_references(true);
+    config.wasm_gc(true);
+
+    let engine = Engine::new(&config)?;
+    let mut store = Store::new(&engine, ());
+
+    let anyref = {
+        let mut scope = RootScope::new(&mut store);
+        AnyRef::from_i31(&mut scope, I31::wrapping_u32(42))
+    };
+
+    // The anyref has left its rooting scope and been unrooted.
+    assert!(anyref.is_i31(&store).is_err());
+
+    Ok(())
+}
diff --git a/tests/all/main.rs b/tests/all/main.rs
index 85eb3ea84..b9f2c4b66 100644
--- a/tests/all/main.rs
+++ b/tests/all/main.rs
@@ -16,6 +16,7 @@ mod funcref;
 mod gc;
 mod globals;
 mod host_funcs;
+mod i31ref;
 mod iloop;
 mod import_calling_export;
 mod import_indexes;
diff --git a/tests/wast.rs b/tests/wast.rs
index 076a6ccb3..789ab1cb7 100644
--- a/tests/wast.rs
+++ b/tests/wast.rs
@@ -254,7 +254,9 @@ fn run_wast(wast: &Path, strategy: Strategy, pooling: bool) -> anyhow::Result<()
         cfg.cranelift_debug_verifier(true);
     }
 
-    cfg.wasm_component_model(feature_found(wast, "component-model"));
+    let component_model = feature_found(wast, "component-model");
+    cfg.wasm_component_model(component_model)
+        .wasm_component_model_more_flags(component_model);
 
     if feature_found(wast, "canonicalize-nan") && is_cranelift {
         cfg.cranelift_nan_canonicalization(true);