about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src/llvm_util.rs
diff options
context:
space:
mode:
authorNoa <coolreader18@gmail.com>2024-02-21 17:32:58 -0600
committerNoa <coolreader18@gmail.com>2024-02-22 16:45:26 -0600
commit3908a935ef821c2828a7d825eac859f8ff54702a (patch)
treedd62444f5a135976635b66ee483fe4bae0a79101 /compiler/rustc_codegen_llvm/src/llvm_util.rs
parentf8131a48a46ac3bc8a3d0fe0477055b132cffdc3 (diff)
downloadrust-3908a935ef821c2828a7d825eac859f8ff54702a.tar.gz
rust-3908a935ef821c2828a7d825eac859f8ff54702a.zip
std support for wasm32 panic=unwind
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/llvm_util.rs')
-rw-r--r--compiler/rustc_codegen_llvm/src/llvm_util.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs
index 54e8ed85e32..e383673e1d4 100644
--- a/compiler/rustc_codegen_llvm/src/llvm_util.rs
+++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs
@@ -5,6 +5,7 @@ use crate::errors::{
 };
 use crate::llvm;
 use libc::c_int;
+use rustc_codegen_ssa::base::wants_wasm_eh;
 use rustc_codegen_ssa::traits::PrintBackendInfo;
 use rustc_data_structures::fx::{FxHashMap, FxHashSet};
 use rustc_data_structures::small_c_str::SmallCStr;
@@ -98,8 +99,12 @@ unsafe fn configure_llvm(sess: &Session) {
             }
         }
 
-        if sess.target.os == "emscripten" && sess.panic_strategy() == PanicStrategy::Unwind {
-            add("-enable-emscripten-cxx-exceptions", false);
+        if sess.panic_strategy() == PanicStrategy::Unwind {
+            if sess.target.os == "emscripten" {
+                add("-enable-emscripten-cxx-exceptions", false);
+            } else if wants_wasm_eh(sess) {
+                add("-wasm-enable-eh", false);
+            }
         }
 
         // HACK(eddyb) LLVM inserts `llvm.assume` calls to preserve align attributes
@@ -520,6 +525,10 @@ pub(crate) fn global_llvm_features(sess: &Session, diagnostics: bool) -> Vec<Str
             .map(String::from),
     );
 
+    if wants_wasm_eh(sess) && sess.panic_strategy() == PanicStrategy::Unwind {
+        features.push("+exception-handling".into());
+    }
+
     // -Ctarget-features
     let supported_features = sess.target.supported_target_features();
     let mut featsmap = FxHashMap::default();