diff options
| author | bors <bors@rust-lang.org> | 2018-09-29 07:23:00 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-09-29 07:23:00 +0000 |
| commit | d95fd2585d8d7327a83beee10d9e32129b26cd68 (patch) | |
| tree | a2ca39a5f9001a5a4d964fcb8e2b8d9816c3fa33 | |
| parent | 6622172734a6c456ea85e17b765ad1dbc0e42907 (diff) | |
| parent | 2819deffe3988b438bb7fab7463299fa6c917502 (diff) | |
| download | rust-d95fd2585d8d7327a83beee10d9e32129b26cd68.tar.gz rust-d95fd2585d8d7327a83beee10d9e32129b26cd68.zip | |
Auto merge of #54576 - froydnj:non-x86-abi-adjustment, r=alexcrichton
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.
| -rw-r--r-- | src/librustc_target/spec/mod.rs | 12 | ||||
| -rw-r--r-- | src/test/codegen/issue-32364.rs | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index 3c68b5a7ab1..3f1e8ee5528 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -761,7 +761,7 @@ impl Default for 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 @@ impl Target { 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 } } diff --git a/src/test/codegen/issue-32364.rs b/src/test/codegen/issue-32364.rs index 401253a315f..8feb10b5757 100644 --- a/src/test/codegen/issue-32364.rs +++ b/src/test/codegen/issue-32364.rs @@ -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 |
