about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlisa Sireneva <me@purplesyringa.moe>2025-07-25 15:07:55 +0300
committerAlisa Sireneva <me@purplesyringa.moe>2025-07-25 18:28:03 +0300
commit17519aeaef0b4b9c1a6bcb6d558aba4b26d044a8 (patch)
tree316de9c0a38e3f98d6d5cf29606b457d53bac755
parented11a396435fc1de59bf40b39789cf8b5c7f5307 (diff)
downloadrust-17519aeaef0b4b9c1a6bcb6d558aba4b26d044a8.tar.gz
rust-17519aeaef0b4b9c1a6bcb6d558aba4b26d044a8.zip
Allow ffi_unwind_calls for `arch::wasm32::throw`
-rw-r--r--library/stdarch/crates/core_arch/src/wasm32/mod.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/library/stdarch/crates/core_arch/src/wasm32/mod.rs b/library/stdarch/crates/core_arch/src/wasm32/mod.rs
index 2c4361f1639..60049c73295 100644
--- a/library/stdarch/crates/core_arch/src/wasm32/mod.rs
+++ b/library/stdarch/crates/core_arch/src/wasm32/mod.rs
@@ -191,6 +191,16 @@ unsafe extern "C-unwind" {
 // #[cfg_attr(test, assert_instr(throw, TAG = 0, ptr = core::ptr::null_mut()))]
 #[inline]
 #[unstable(feature = "wasm_exception_handling_intrinsics", issue = "122465")]
+// FIXME: Since this instruction unwinds, `core` built with `-C panic=unwind`
+//        cannot be linked with `-C panic=abort` programs. But that's not
+//        entirely supported anyway, because runtimes without EH support won't
+//        be able to handle `try` blocks in `-C panic=unwind` crates either.
+//        We ship `-C panic=abort` `core`, so this doesn't affect users
+//        directly. Resolving this will likely require patching out both `try`
+//        and `throw` instructions, at which point we can look into whitelisting
+//        this function in the compiler to allow linking.
+//        See https://github.com/rust-lang/rust/issues/118168.
+#[allow(ffi_unwind_calls)]
 pub unsafe fn throw<const TAG: i32>(ptr: *mut u8) -> ! {
     static_assert!(TAG == 0); // LLVM only supports tag 0 == C++ right now.
     wasm_throw(TAG, ptr)