diff options
| author | Ralf Jung <post@ralfj.de> | 2025-02-21 12:19:21 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2025-02-21 12:21:38 +0100 |
| commit | f7ae9e11fc67f6bbbe06c095983c928225f39b88 (patch) | |
| tree | 3d44bf86fca73aace32c46620efcdadc77f9c8a1 /compiler | |
| parent | a18bd8acfc32dbfbbe150cd52eecf24e67fb69b6 (diff) | |
| download | rust-f7ae9e11fc67f6bbbe06c095983c928225f39b88.tar.gz rust-f7ae9e11fc67f6bbbe06c095983c928225f39b88.zip | |
adjust_abi: make fallback logic for ABIs a bit easier to read
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_target/src/spec/mod.rs | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 65736770efb..4c633bb9f51 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -2862,20 +2862,35 @@ impl Target { // On Windows, `extern "system"` behaves like msvc's `__stdcall`. // `__stdcall` only applies on x86 and on non-variadic functions: // https://learn.microsoft.com/en-us/cpp/cpp/stdcall?view=msvc-170 - System { unwind } if self.is_like_windows && self.arch == "x86" && !c_variadic => { - Stdcall { unwind } + System { unwind } => { + if self.is_like_windows && self.arch == "x86" && !c_variadic { + Stdcall { unwind } + } else { + C { unwind } + } + } + + EfiApi => { + if self.arch == "arm" { + Aapcs { unwind: false } + } else if self.arch == "x86_64" { + Win64 { unwind: false } + } else { + C { unwind: false } + } } - System { unwind } => C { unwind }, - EfiApi if self.arch == "arm" => Aapcs { unwind: false }, - EfiApi if self.arch == "x86_64" => Win64 { unwind: false }, - EfiApi => C { unwind: false }, // See commentary in `is_abi_supported`. - Stdcall { .. } | Thiscall { .. } if self.arch == "x86" => abi, - Stdcall { unwind } | Thiscall { unwind } => C { unwind }, - Fastcall { .. } if self.arch == "x86" => abi, - Vectorcall { .. } if ["x86", "x86_64"].contains(&&self.arch[..]) => abi, - Fastcall { unwind } | Vectorcall { unwind } => C { unwind }, + Stdcall { unwind } | Thiscall { unwind } | Fastcall { unwind } => { + if self.arch == "x86" { abi } else { C { unwind } } + } + Vectorcall { unwind } => { + if ["x86", "x86_64"].contains(&&*self.arch) { + abi + } else { + C { unwind } + } + } // The Windows x64 calling convention we use for `extern "Rust"` // <https://learn.microsoft.com/en-us/cpp/build/x64-software-conventions#register-volatility-and-preservation> |
