ignore {std,fast,vector,this}call on non-x86 windows
MSVC ignores these keywords for C/C++ and uses the standard system calling convention. Rust should do so as well. Fixes #54569.
This commit is contained in:
parent
31789a658b
commit
2819deffe3
@ -761,7 +761,7 @@ fn default() -> TargetOptions {
|
||||
}
|
||||
|
||||
impl Target {
|
||||
/// Given a function ABI, turn "System" into the correct ABI for this target.
|
||||
/// Given a function ABI, turn it into the correct ABI for this target.
|
||||
pub fn adjust_abi(&self, abi: Abi) -> Abi {
|
||||
match abi {
|
||||
Abi::System => {
|
||||
@ -771,6 +771,16 @@ pub fn adjust_abi(&self, abi: Abi) -> Abi {
|
||||
Abi::C
|
||||
}
|
||||
},
|
||||
// These ABI kinds are ignored on non-x86 Windows targets.
|
||||
// See https://docs.microsoft.com/en-us/cpp/cpp/argument-passing-and-naming-conventions
|
||||
// and the individual pages for __stdcall et al.
|
||||
Abi::Stdcall | Abi::Fastcall | Abi::Vectorcall | Abi::Thiscall => {
|
||||
if self.options.is_like_windows && self.arch != "x86" {
|
||||
Abi::C
|
||||
} else {
|
||||
abi
|
||||
}
|
||||
},
|
||||
abi => abi
|
||||
}
|
||||
}
|
||||
|
@ -8,8 +8,9 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-arm
|
||||
// ignore-aarch64
|
||||
// Test that `extern "stdcall"` is properly translated.
|
||||
|
||||
// only-x86
|
||||
|
||||
// compile-flags: -C no-prepopulate-passes
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user