Migrate panic_unwind to use cfg_select!

This commit is contained in:
Josh Stone
2025-08-20 16:45:24 -07:00
parent 040a98af70
commit d41cd48655
4 changed files with 20 additions and 14 deletions

View File

@@ -192,7 +192,6 @@ name = "panic_unwind"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"alloc", "alloc",
"cfg-if",
"libc", "libc",
"rustc-std-workspace-core", "rustc-std-workspace-core",
"unwind", "unwind",

View File

@@ -13,7 +13,6 @@ doc = false
[dependencies] [dependencies]
alloc = { path = "../alloc" } alloc = { path = "../alloc" }
cfg-if = { version = "1.0", features = ['rustc-dep-of-std'] }
core = { path = "../rustc-std-workspace-core", package = "rustc-std-workspace-core" } core = { path = "../rustc-std-workspace-core", package = "rustc-std-workspace-core" }
unwind = { path = "../unwind" } unwind = { path = "../unwind" }

View File

@@ -15,6 +15,7 @@
#![unstable(feature = "panic_unwind", issue = "32837")] #![unstable(feature = "panic_unwind", issue = "32837")]
#![doc(issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")] #![doc(issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")]
#![feature(cfg_emscripten_wasm_eh)] #![feature(cfg_emscripten_wasm_eh)]
#![feature(cfg_select)]
#![feature(core_intrinsics)] #![feature(core_intrinsics)]
#![feature(lang_items)] #![feature(lang_items)]
#![feature(panic_unwind)] #![feature(panic_unwind)]
@@ -33,18 +34,21 @@ use alloc::boxed::Box;
use core::any::Any; use core::any::Any;
use core::panic::PanicPayload; use core::panic::PanicPayload;
cfg_if::cfg_if! { cfg_select! {
if #[cfg(all(target_os = "emscripten", not(emscripten_wasm_eh)))] { all(target_os = "emscripten", not(emscripten_wasm_eh)) => {
#[path = "emcc.rs"] #[path = "emcc.rs"]
mod imp; mod imp;
} else if #[cfg(target_os = "hermit")] { }
target_os = "hermit" => {
#[path = "hermit.rs"] #[path = "hermit.rs"]
mod imp; mod imp;
} else if #[cfg(target_os = "l4re")] { }
target_os = "l4re" => {
// L4Re is unix family but does not yet support unwinding. // L4Re is unix family but does not yet support unwinding.
#[path = "dummy.rs"] #[path = "dummy.rs"]
mod imp; mod imp;
} else if #[cfg(any( }
any(
all(target_family = "windows", target_env = "gnu"), all(target_family = "windows", target_env = "gnu"),
target_os = "psp", target_os = "psp",
target_os = "xous", target_os = "xous",
@@ -52,19 +56,22 @@ cfg_if::cfg_if! {
all(target_family = "unix", not(any(target_os = "espidf", target_os = "nuttx"))), all(target_family = "unix", not(any(target_os = "espidf", target_os = "nuttx"))),
all(target_vendor = "fortanix", target_env = "sgx"), all(target_vendor = "fortanix", target_env = "sgx"),
target_family = "wasm", target_family = "wasm",
))] { ) => {
#[path = "gcc.rs"] #[path = "gcc.rs"]
mod imp; mod imp;
} else if #[cfg(miri)] { }
miri => {
// Use the Miri runtime on Windows as miri doesn't support funclet based unwinding, // Use the Miri runtime on Windows as miri doesn't support funclet based unwinding,
// only landingpad based unwinding. Also use the Miri runtime on unsupported platforms. // only landingpad based unwinding. Also use the Miri runtime on unsupported platforms.
#[path = "miri.rs"] #[path = "miri.rs"]
mod imp; mod imp;
} else if #[cfg(all(target_env = "msvc", not(target_arch = "arm")))] { }
all(target_env = "msvc", not(target_arch = "arm")) => {
// LLVM does not support unwinding on 32 bit ARM msvc (thumbv7a-pc-windows-msvc) // LLVM does not support unwinding on 32 bit ARM msvc (thumbv7a-pc-windows-msvc)
#[path = "seh.rs"] #[path = "seh.rs"]
mod imp; mod imp;
} else { }
_ => {
// Targets that don't support unwinding. // Targets that don't support unwinding.
// - os=none ("bare metal" targets) // - os=none ("bare metal" targets)
// - os=uefi // - os=uefi

View File

@@ -289,10 +289,11 @@ macro_rules! define_cleanup {
} }
} }
} }
cfg_if::cfg_if! { cfg_select! {
if #[cfg(target_arch = "x86")] { target_arch = "x86" => {
define_cleanup!("thiscall" "thiscall-unwind"); define_cleanup!("thiscall" "thiscall-unwind");
} else { }
_ => {
define_cleanup!("C" "C-unwind"); define_cleanup!("C" "C-unwind");
} }
} }