make thiscall on unsupported platforms an error
This commit is contained in:
parent
efd0483949
commit
a46daf050b
5 changed files with 32 additions and 45 deletions
|
@ -1522,6 +1522,7 @@ impl Target {
|
||||||
AmdGpuKernel => self.arch == "amdgcn",
|
AmdGpuKernel => self.arch == "amdgcn",
|
||||||
AvrInterrupt | AvrNonBlockingInterrupt => self.arch == "avr",
|
AvrInterrupt | AvrNonBlockingInterrupt => self.arch == "avr",
|
||||||
Wasm => ["wasm32", "wasm64"].contains(&&self.arch[..]),
|
Wasm => ["wasm32", "wasm64"].contains(&&self.arch[..]),
|
||||||
|
Thiscall { .. } => self.arch == "x86",
|
||||||
// On windows these fall-back to platform native calling convention (C) when the
|
// On windows these fall-back to platform native calling convention (C) when the
|
||||||
// architecture is not supported.
|
// architecture is not supported.
|
||||||
//
|
//
|
||||||
|
@ -1552,15 +1553,13 @@ impl Target {
|
||||||
// > convention is used.
|
// > convention is used.
|
||||||
//
|
//
|
||||||
// -- https://docs.microsoft.com/en-us/cpp/cpp/argument-passing-and-naming-conventions
|
// -- https://docs.microsoft.com/en-us/cpp/cpp/argument-passing-and-naming-conventions
|
||||||
Stdcall { .. } | Fastcall | Thiscall { .. } | Vectorcall if self.is_like_windows => {
|
Stdcall { .. } | Fastcall | Vectorcall if self.is_like_windows => true,
|
||||||
true
|
|
||||||
}
|
|
||||||
// Outside of Windows we want to only support these calling conventions for the
|
// Outside of Windows we want to only support these calling conventions for the
|
||||||
// architectures for which these calling conventions are actually well defined.
|
// architectures for which these calling conventions are actually well defined.
|
||||||
Stdcall { .. } | Fastcall | Thiscall { .. } if self.arch == "x86" => true,
|
Stdcall { .. } | Fastcall if self.arch == "x86" => true,
|
||||||
Vectorcall if ["x86", "x86_64"].contains(&&self.arch[..]) => true,
|
Vectorcall if ["x86", "x86_64"].contains(&&self.arch[..]) => true,
|
||||||
// Return a `None` for other cases so that we know to emit a future compat lint.
|
// Return a `None` for other cases so that we know to emit a future compat lint.
|
||||||
Stdcall { .. } | Fastcall | Thiscall { .. } | Vectorcall => return None,
|
Stdcall { .. } | Fastcall | Vectorcall => return None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,9 +40,15 @@ error[E0570]: `"x86-interrupt"` is not a supported ABI for the current target
|
||||||
LL | extern "x86-interrupt" fn x86() {}
|
LL | extern "x86-interrupt" fn x86() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: use of calling convention not supported on this target
|
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||||
--> $DIR/unsupported.rs:43:1
|
--> $DIR/unsupported.rs:43:1
|
||||||
|
|
|
|
||||||
|
LL | extern "thiscall" fn thiscall() {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: use of calling convention not supported on this target
|
||||||
|
--> $DIR/unsupported.rs:47:1
|
||||||
|
|
|
||||||
LL | extern "stdcall" fn stdcall() {}
|
LL | extern "stdcall" fn stdcall() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
@ -50,15 +56,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||||
|
|
||||||
warning: use of calling convention not supported on this target
|
error: aborting due to 8 previous errors; 1 warning emitted
|
||||||
--> $DIR/unsupported.rs:50:1
|
|
||||||
|
|
|
||||||
LL | extern "thiscall" fn thiscall() {}
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
|
||||||
|
|
||||||
error: aborting due to 7 previous errors; 2 warnings emitted
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0570`.
|
For more information about this error, try `rustc --explain E0570`.
|
||||||
|
|
|
@ -34,9 +34,15 @@ error[E0570]: `"x86-interrupt"` is not a supported ABI for the current target
|
||||||
LL | extern "x86-interrupt" fn x86() {}
|
LL | extern "x86-interrupt" fn x86() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: use of calling convention not supported on this target
|
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||||
--> $DIR/unsupported.rs:43:1
|
--> $DIR/unsupported.rs:43:1
|
||||||
|
|
|
|
||||||
|
LL | extern "thiscall" fn thiscall() {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: use of calling convention not supported on this target
|
||||||
|
--> $DIR/unsupported.rs:47:1
|
||||||
|
|
|
||||||
LL | extern "stdcall" fn stdcall() {}
|
LL | extern "stdcall" fn stdcall() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
@ -44,15 +50,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||||
|
|
||||||
warning: use of calling convention not supported on this target
|
error: aborting due to 7 previous errors; 1 warning emitted
|
||||||
--> $DIR/unsupported.rs:50:1
|
|
||||||
|
|
|
||||||
LL | extern "thiscall" fn thiscall() {}
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
|
||||||
|
|
||||||
error: aborting due to 6 previous errors; 2 warnings emitted
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0570`.
|
For more information about this error, try `rustc --explain E0570`.
|
||||||
|
|
|
@ -40,6 +40,10 @@ extern "avr-interrupt" fn avr() {}
|
||||||
extern "x86-interrupt" fn x86() {}
|
extern "x86-interrupt" fn x86() {}
|
||||||
//[aarch64]~^ ERROR is not a supported ABI
|
//[aarch64]~^ ERROR is not a supported ABI
|
||||||
//[arm]~^^ ERROR is not a supported ABI
|
//[arm]~^^ ERROR is not a supported ABI
|
||||||
|
extern "thiscall" fn thiscall() {}
|
||||||
|
//[x64]~^ ERROR is not a supported ABI
|
||||||
|
//[aarch64]~^^ ERROR is not a supported ABI
|
||||||
|
//[arm]~^^^ ERROR is not a supported ABI
|
||||||
extern "stdcall" fn stdcall() {}
|
extern "stdcall" fn stdcall() {}
|
||||||
//[x64]~^ WARN use of calling convention not supported
|
//[x64]~^ WARN use of calling convention not supported
|
||||||
//[x64]~^^ WARN this was previously accepted
|
//[x64]~^^ WARN this was previously accepted
|
||||||
|
@ -47,10 +51,3 @@ extern "stdcall" fn stdcall() {}
|
||||||
//[aarch64]~^^^^ WARN this was previously accepted
|
//[aarch64]~^^^^ WARN this was previously accepted
|
||||||
//[arm]~^^^^^ WARN use of calling convention not supported
|
//[arm]~^^^^^ WARN use of calling convention not supported
|
||||||
//[arm]~^^^^^^ WARN this was previously accepted
|
//[arm]~^^^^^^ WARN this was previously accepted
|
||||||
extern "thiscall" fn thiscall() {}
|
|
||||||
//[x64]~^ WARN use of calling convention not supported
|
|
||||||
//[x64]~^^ WARN this was previously accepted
|
|
||||||
//[aarch64]~^^^ WARN use of calling convention not supported
|
|
||||||
//[aarch64]~^^^^ WARN this was previously accepted
|
|
||||||
//[arm]~^^^^^ WARN use of calling convention not supported
|
|
||||||
//[arm]~^^^^^^ WARN this was previously accepted
|
|
||||||
|
|
|
@ -34,9 +34,15 @@ error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||||
LL | extern "avr-interrupt" fn avr() {}
|
LL | extern "avr-interrupt" fn avr() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: use of calling convention not supported on this target
|
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||||
--> $DIR/unsupported.rs:43:1
|
--> $DIR/unsupported.rs:43:1
|
||||||
|
|
|
|
||||||
|
LL | extern "thiscall" fn thiscall() {}
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: use of calling convention not supported on this target
|
||||||
|
--> $DIR/unsupported.rs:47:1
|
||||||
|
|
|
||||||
LL | extern "stdcall" fn stdcall() {}
|
LL | extern "stdcall" fn stdcall() {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
@ -44,15 +50,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||||
|
|
||||||
warning: use of calling convention not supported on this target
|
error: aborting due to 7 previous errors; 1 warning emitted
|
||||||
--> $DIR/unsupported.rs:50:1
|
|
||||||
|
|
|
||||||
LL | extern "thiscall" fn thiscall() {}
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
|
||||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
|
||||||
|
|
||||||
error: aborting due to 6 previous errors; 2 warnings emitted
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0570`.
|
For more information about this error, try `rustc --explain E0570`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue