Remove -Zemscripten-wasm-eh - #156928
Conversation
|
Some changes occurred in cfg and check-cfg configuration cc @Urgau |
|
r? @TaKO8Ki rustbot has assigned @TaKO8Ki. Use Why was this reviewer chosen?The reviewer was selected based on:
|
| /// Allows using anonymous lifetimes in argument-position impl-trait. | ||
| (unstable, anonymous_lifetime_in_impl_trait, "1.63.0", None), | ||
| /// Allows access to the emscripten_wasm_eh config, used by panic_unwind and unwind | ||
| (internal, cfg_emscripten_wasm_eh, "1.86.0", None), |
There was a problem hiding this comment.
I haven't moved this to the list of removed features as it is an internal feature.
|
@purplesyringa @hoodmane @curiousdannii @kripken @aheejin (I hope I didn't forget any major stakeholder) Has it indeed been long enough since switching to wasm exceptions by default that we can safely remove this flag? |
|
It's fine with me. I won't ever be turning it off again. |
This comment has been minimized.
This comment has been minimized.
5ac842d to
802c141
Compare
Upstream PR: rust-lang/rust#156928
|
Happy to see this finally happen! No concerns on my side. |
This comment has been minimized.
This comment has been minimized.
|
I'm now using panic=abort, so I think it doesn't matter for me. |
802c141 to
be3e3c7
Compare
|
Some changes occurred in src/doc/rustc/src/platform-support cc @Noratrieb |
be3e3c7 to
24d9697
Compare
This comment has been minimized.
This comment has been minimized.
This was necessary when transitioning from JS to wasm exception handling on Emscripten. Enough time has probably passed that we no longer need to support JS exception handling on Emscripten. This enables cleaning up a fair bit of code.
24d9697 to
9b7623a
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
@bors r+ rollup |
…r=TaKO8Ki Remove -Zemscripten-wasm-eh This was necessary when transitioning from JS to wasm exception handling on Emscripten. Enough time has probably passed that we no longer need to support JS exception handling on Emscripten. This enables cleaning up a fair bit of code. This is the final step of rust-lang#112195.
Rollup of 7 pull requests Successful merges: - #155763 (Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2) - #156928 (Remove -Zemscripten-wasm-eh) - #157236 (Reorganize `tests/ui/issues` [3/N]) - #157294 (Split coroutine layout computation to its own file) - #157328 (windows: Elide division-by-zero checks in Instant::now()) - #157331 (Rewrite target checking for `#[link]`) - #157336 (Enable `clippy::mem_replace_with_default`)
…r=TaKO8Ki Remove -Zemscripten-wasm-eh This was necessary when transitioning from JS to wasm exception handling on Emscripten. Enough time has probably passed that we no longer need to support JS exception handling on Emscripten. This enables cleaning up a fair bit of code. This is the final step of rust-lang#112195.
…r=TaKO8Ki Remove -Zemscripten-wasm-eh This was necessary when transitioning from JS to wasm exception handling on Emscripten. Enough time has probably passed that we no longer need to support JS exception handling on Emscripten. This enables cleaning up a fair bit of code. This is the final step of rust-lang#112195.
…uwer Rollup of 15 pull requests Successful merges: - #155763 (Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2) - #156953 (delegation: emit error when there is an infer lifetime in user-specified args) - #157248 (delegation: move statements out of the first arg) - #157263 (rustc_codegen_ssa: Refactor `ArchiveEntry` to include entry kind) - #157311 (Use weak linkage for EII defaults) - #156089 (Fix unused_parens for pinned reference patterns) - #156928 (Remove -Zemscripten-wasm-eh) - #157236 (Reorganize `tests/ui/issues` [3/N]) - #157287 (Const generics: remove AliasTerm::kind(), and small fixes) - #157294 (Split coroutine layout computation to its own file) - #157328 (windows: Elide division-by-zero checks in Instant::now()) - #157331 (Rewrite target checking for `#[link]`) - #157336 (Enable `clippy::mem_replace_with_default`) - #157362 (Fix trivial wf module argument/doc comment name mismatches) - #157364 (Rewrite target checking of `rustc_dummy`) Failed merges: - #157332 (Rewrite target checking for `#[sanitize]`)
Rollup merge of #156928 - bjorn3:emscripten_always_wasm_eh, r=TaKO8Ki Remove -Zemscripten-wasm-eh This was necessary when transitioning from JS to wasm exception handling on Emscripten. Enough time has probably passed that we no longer need to support JS exception handling on Emscripten. This enables cleaning up a fair bit of code. This is the final step of #112195.
|
I think it makes sense to mention this in the relnotes even though it is unstable as it might affect some Emscripten users. |
… under wasmtime Researched Emscripten's STANDALONE_WASM/PURE_WASI modes against rustc's own docs and prior art before writing this. Priors point toward 'probably not' (Emscripten's own maintainer: 'likely not compatible with wasmtime/WASI... use wasi-sdk, not emscripten' -- no confirmed Rust case found anywhere), but rust-lang/rust#156928 (merged 2026-06-03) removed the JS-exceptions escape hatch this target used to need, forcing native wasm-EH unconditionally -- the exact JS dependency that broke every prior known attempt. larql-cli has no Emscripten C/C++ port dependency forcing the old ABI, making this a genuinely untested combination worth running for real rather than assuming.
All Pyodide wheel builds fail on every branch. Two independent pieces of
upstream drift, plus a matrix setting that hid the second behind the first.
1. pyodide-build was pinned to the Pyodide RUNTIME version
-----------------------------------------------------------
HTTPError: 404 Client Error: Not Found for url:
https://raw.githubusercontent.com/pyodide/pyodide/main/pyodide-cross-build-environments.json
The workflow installed `pyodide-build==${{ matrix.pyodide-version }}`, pinning
the build TOOL to the runtime it targets. Those are independent axes.
pyodide-build 0.27.3 and 0.29.3 both hardcode the metadata URL above, which
upstream removed, so `xbuildenv install` died on a 404 before compiling
anything. The justfile's 0.29 recipes had the same pin.
One current pyodide-build serves every runtime; the runtime is selected by the
argument to `xbuildenv install`. Install 0.32.0 (already locked in uv.lock, and
what the 0.27 justfile path has used via `uv run` all along).
Deliberately NOT worked around with PYODIDE_CROSS_BUILD_ENV_METADATA_URL: that
would paper over the dead URL while leaving the tool pinned to a stale release.
Verified locally with pyodide-build 0.32.0:
xbuildenv install 0.27.3 (Python 3.12) -> ok, emscripten 3.1.58
xbuildenv install 0.29.3 (Python 3.13) -> ok, emscripten 4.0.9
Both match the emscripten versions pinned in the matrix. The runtime still
dictates the HOST Python — installing the 0.29.x xbuildenv under 3.12 is
refused — which is why the matrix uses 3.13 there and the justfile's 0.29
recipes use pyenv. Unchanged.
2. rustc removed -Zemscripten-wasm-eh
--------------------------------------
error: unknown unstable option: `emscripten-wasm-eh`
With (1) fixed, the 0.29 build got as far as compiling the Cython extension to
wasm and then died linking the Rust one. rust-lang/rust#156928 ("Remove
-Zemscripten-wasm-eh", merged 2026-06-03) deleted the flag: wasm exception
handling is now unconditional on Emscripten, so opting in is meaningless.
Dropped from the 0.29 matrix entry and the two justfile 0.29 recipes.
Reproduced and verified against nightly-2026-08-15 (rustc 1.99.0-nightly):
-Zemscripten-wasm-eh -> unknown unstable option
(no flag) -> panic="unwind" (wasm EH default)
0.27's -C panic=abort opt-out -> panic="abort" (still accepted)
The 0.27 entry is left alone: its flags are still valid. Note the upstream PR
says JS exception handling on Emscripten is no longer supported, so the 0.27
path (Emscripten 3.1.58, no __cpp_exception tag) may need its own follow-up if
it fails at link time — it had not reached linking before being cancelled.
3. fail-fast hid the second failure behind the first
-----------------------------------------------------
The matrix defaulted to fail-fast, so when 0.29 failed, 0.27 was cancelled
mid-compile and reported as "fail". That made one broken runtime look like two
and sent the first round of debugging at the wrong job. Set fail-fast: false so
each runtime reports independently.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Port libxrk's wasm-to-PyPI release setup (libxrk v0.13.0): - Repair the Pyodide 0.29 build, broken by two pieces of upstream drift: pyodide-build 0.29.3 hardcodes a cross-build-env metadata URL upstream removed (404 on xbuildenv install), and rustc removed -Zemscripten-wasm-eh (rust-lang/rust#156928; wasm EH is now unconditional on Emscripten). Install pyodide-build 0.39.0 (one current build tool serves every runtime) and drop the flag, linking through the emcc/wasm-opt shims instead. - Add a Pyodide 314 (Python 3.14) matrix entry that builds a PEP 783 pyemscripten_2026_0 wheel on stable Rust with the xbuildenv's rustflags, and test both runtimes in CI. - Publish the PEP 783 wheel to PyPI alongside the CPython wheels and sdist. The legacy pyodide_2025_0 wheel predates the PEP, is rejected by PyPI, and keeps shipping as a GitHub Release asset only. - Bump version to 0.0.5 for the release. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uwer Rollup of 15 pull requests Successful merges: - rust-lang/rust#155763 (Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2) - rust-lang/rust#156953 (delegation: emit error when there is an infer lifetime in user-specified args) - rust-lang/rust#157248 (delegation: move statements out of the first arg) - rust-lang/rust#157263 (rustc_codegen_ssa: Refactor `ArchiveEntry` to include entry kind) - rust-lang/rust#157311 (Use weak linkage for EII defaults) - rust-lang/rust#156089 (Fix unused_parens for pinned reference patterns) - rust-lang/rust#156928 (Remove -Zemscripten-wasm-eh) - rust-lang/rust#157236 (Reorganize `tests/ui/issues` [3/N]) - rust-lang/rust#157287 (Const generics: remove AliasTerm::kind(), and small fixes) - rust-lang/rust#157294 (Split coroutine layout computation to its own file) - rust-lang/rust#157328 (windows: Elide division-by-zero checks in Instant::now()) - rust-lang/rust#157331 (Rewrite target checking for `#[link]`) - rust-lang/rust#157336 (Enable `clippy::mem_replace_with_default`) - rust-lang/rust#157362 (Fix trivial wf module argument/doc comment name mismatches) - rust-lang/rust#157364 (Rewrite target checking of `rustc_dummy`) Failed merges: - rust-lang/rust#157332 (Rewrite target checking for `#[sanitize]`)
This MR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [rust](https://github.com/rust-lang/rust) | tools | minor | `1.97.1` → `1.98.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>rust-lang/rust (rust)</summary> ### [`v1.98.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1980-2026-08-20) [Compare Source](rust-lang/rust@1.97.1...1.98.0) \========================== <a id="1.98.0-Language"></a> ## Language - [Allow shortening lifetime of `&mut` when unsize-coercing, even in an invariant position.](rust-lang/rust#149219) For example, you can now coerce a `Cell<&'long mut i32>` to a `Cell<&'short mut dyn Send>`. Such shortenings were already previously allowed when coercing a `&mut` to a `&`, or coercing a `&` to a `&`. - [Add deny-by-default `invalid_runtime_symbol_definitions` lint and warn-by-default `suspicious_runtime_symbol_definitions` lint](rust-lang/rust#155521) - The lints currently specifically targets `core` runtime symbols like `memcmp`, `memset`, `strlen`, ... and is planned to be expanded in the next few releases. - [Add warn-by-default `c_void_returns` lint to check `core::ffi::c_void` as a return type](rust-lang/rust#156379) <a id="1.98.0-Platform-Support"></a> ## Platform Support - [Add `powerpc64-unknown-linux-gnuelfv2` as Tier 3](rust-lang/rust#144220) - [Add `aarch64-unknown-linux-pauthtest` as Tier 3 target](rust-lang/rust#155722) - [Promote `thumbv7a-none-eabi` to Tier 2](rust-lang/rust#155763) - [Promote `thumbv7a-none-eabihf` to Tier 2](rust-lang/rust#155763) - [Promote `thumbv7r-none-eabi` to Tier 2](rust-lang/rust#155763) - [Promote `thumbv7r-none-eabihf` to Tier 2](rust-lang/rust#155763) - [Promote `thumbv8r-none-eabihf` to Tier 2](rust-lang/rust#155763) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. [platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html <a id="1.98.0-Libraries"></a> ## Libraries - [Change `Location<'_>` lifetime to `'static` in `Panic[Hook]Info`](rust-lang/rust#146561) - [Document panic in `RangeInclusive::from(legacy::RangeInclusive)`](rust-lang/rust#155421) - [Document that `ManuallyDrop`'s `Box` interaction has been fixed](rust-lang/rust#155750) - [Stabilize LoongArch CRC Intrinsics](rust-lang/rust#156908) - [The `derive` macro is available at `{core,std}::derive`.](rust-lang/rust#154645) This was previously [unintentionally stabilized in 1.96](rust-lang/rust#159856), but is now [explicitly accepted](rust-lang/rust#154645) as a stabilized API. - Please note that the MSRV for `{core,std}::derive` will be 1.96, and not 1.98. <a id="1.98.0-Stabilized-APIs"></a> ## Stabilized APIs - [`str::substr_range`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.substr_range) - [`[T]::subslice_range`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.subslice_range) - [`core::fmt::NumBuffer`](https://doc.rust-lang.org/stable/core/fmt/struct.NumBuffer.html) - [`<{integer}>::format_into`](https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into) - [`Send/Sync for std::process::CommandArgs`](https://doc.rust-lang.org/stable/std/process/struct.CommandArgs.html#impl-Send-for-CommandArgs%3C'a%3E) - [`{fN}::algebraic_add`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_add) - [`{fN}::algebraic_sub`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_sub) - [`{fN}::algebraic_mul`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_mul) - [`{fN}::algebraic_div`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_div) - [`{fN}::algebraic_rem`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_rem) - [`NonZero<{integer}>::from_str_radix`](https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#method.from_str_radix-4) - [`String::from_utf16le`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le) - [`String::from_utf16le_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le_lossy) - [`String::from_utf16be`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be) - [`String::from_utf16be_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be_lossy) - [`[T]::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.strip_circumfix) - [`str::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.strip_circumfix) - [`Atomic<T>::from_mut`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut) - [`Atomic<T>::get_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.get_mut_slice) - [`Atomic<T>::from_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut_slice) - [`std::range::legacy`](https://doc.rust-lang.org/stable/std/range/legacy/index.html) <a id="1.98.0-Compatibility-Notes"></a> ## Compatibility Notes - [If fully elided, lifetime bounds of trait object types may now resolve differently or even get rejected in very specific niche scenarios](rust-lang/rust#129543) - [Error in more cases of ambiguous imports](rust-lang/rust#145108) - [Switch the destructors implementation for thread locals on Windows to use Fiber Local Storage (FLS)](rust-lang/rust#148799) - [Convert some cases of the `ambiguous_glob_imports` lint into a hard error](rust-lang/rust#149195) - [Where-bounds of the form `Type = Type` and `Type == Type` are no longer syntactically allowed](rust-lang/rust#153513) - [Ensure Send/Sync is not implemented for std::env::Vars{,Os}](rust-lang/rust#155153) - [Fix that in some attributes, arguments were not properly rejected](rust-lang/rust#155193) - [`repr(transparent)` is now more strict about which fields have "trivial" layout and hence can be ignored: `repr(C)` types, types with private fields, and `#[non_exhaustive]` types are no longer considered "trivial"](rust-lang/rust#155299) - [Correctly check whether types have equal size in `transmute()` when some `repr` attributes are involved.](rust-lang/rust#155418) - [More characters are escaped when printing strings and chars](rust-lang/rust#155527) - [Implement fast path for `derive(PartialOrd)` when deriving `Ord`](rust-lang/rust#155598) This can break crates in practice where a type's PartialOrd and Ord impls were inconsistent with each other. - [Add temporary scope to `assert_eq` and `assert_ne`](rust-lang/rust#155739) - Closed a hole in the pattern matching [structural equality](https://doc.rust-lang.org/reference/patterns.html#constant-patterns) check, preventing cases where a match of a constant would be allowed, despite disagreeing with a manually written `PartialEq` implementation, when a `derive(PartialEq)` implementation for that type also exists. - [On Emscripten the WASM exception handling ABI is now unconditionally used](rust-lang/rust#156928) The `-Zemscripten-wasm-eh=false` flag to switch back to JS exceptions has been removed. - [The UNSAFE\_CODE lint is now consistently emitted for all unsafe attributes](rust-lang/rust#157201) - [Solaris: remove `File::lock` implementation, it has the wrong semantics (return "unsupported" instead)](rust-lang/rust#157509) - [Windows-gnu targets now specify baseline tools versions](rust-lang/rust#158020) - [rustfmt now discovers module files that are defined in `cfg_select!`](rust-lang/rust#158372) This may cause more code to be formatted which was previously ignored. </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
This was necessary when transitioning from JS to wasm exception handling on Emscripten. Enough time has probably passed that we no longer need to support JS exception handling on Emscripten. This enables cleaning up a fair bit of code.
This is the final step of #112195.