Skip to content

ci: pin legacy EH job to nightly-2026-05-12#5155

Merged
guybedford merged 3 commits into
mainfrom
fix-legacy-eh-pin-nightly
May 13, 2026
Merged

ci: pin legacy EH job to nightly-2026-05-12#5155
guybedford merged 3 commits into
mainfrom
fix-legacy-eh-pin-nightly

Conversation

@guybedford

Copy link
Copy Markdown
Contributor

The legacy EH CI job has started failing because recent nightlies emit wasm-gc value types (e.g. noexternref) in the standard library that Node.js 20's V8 11.3 cannot validate, even when explicitly opted into legacy EH via -Cllvm-args=-wasm-use-legacy-eh.

The failure surfaces during wasm validation, not the EH wrappers themselves:

CompileError: WebAssembly.Module(): Compiling function ... failed:
invalid value type 'noexternref', enable with --experimental-wasm-gc

Pin the legacy EH job to nightly-2026-05-12 (the last nightly without this issue) so we keep Node 20 compatibility coverage. Dated nightlies remain available on the rust-lang dist server indefinitely, so this pin is durable.

The catch-unwind guide and CHANGELOG Notices section are updated to call out the same requirement so downstream users targeting Node 20 know to pin their nightly too.

The legacy EH CI job has started failing because recent nightlies emit
wasm-gc value types (e.g. `noexternref`) in the standard library that
Node.js 20's V8 11.3 cannot validate, even when explicitly opted into
legacy EH via `-Cllvm-args=-wasm-use-legacy-eh`.

Pin the legacy EH job to `nightly-2026-05-12` (the last nightly without
this issue) so we keep Node 20 compatibility coverage. Dated nightlies
remain available on the rust-lang dist server indefinitely.

Also note this requirement in the catch-unwind guide and changelog so
downstream users targeting Node 20 know to pin their nightly too.
2026-05-12 still has the noexternref issue. Try the previous day.
Two adjustments to the legacy EH job:

* Pin nightly to 2026-05-06 (last nightly before rust-lang/rust#156061
  flipped the wasm target spec to force modern EH). Plain
  `-Cpanic=unwind` again produces legacy EH wasm.
  `-Cllvm-args=-wasm-use-legacy-eh` cannot override the new target
  spec's `-wasm-use-legacy-eh=false` because LLVM is last-wins and
  rustc puts target args after user args, so a pinned nightly is
  currently the only reliable way to keep legacy EH coverage.

* Bump Node to 22.22.3 \u2014 wasm-bindgen's legacy EH catch handlers
  import `WebAssembly.JSTag`, which is only available in Node 22.4+.
  Node 20 has legacy EH instructions but not the JSTag global.

Document the Node 22.22.3+ floor in the catch-unwind guide and
changelog, with a pointer to #5151 for tracking Node 20 support.
Comment thread .github/workflows/main.yml
@guybedford
guybedford merged commit e4fdb2c into main May 13, 2026
64 of 65 checks passed
@guybedford
guybedford deleted the fix-legacy-eh-pin-nightly branch May 13, 2026 19:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants