UNSUPPORTED_CALLING_CONVENTIONS in rustc_lint::builtin - Rust
Description: The `unsupported_calling_conventions` lint is output whenever there is a use of the `stdcall`, `fastcall`, and `cdecl` calling conventions (or their unwind variants) on targets that cannot meaningfully be supported for the requested target.

Skip to main content

## UNSUPPORTED_CALLING_CONVENTIONS

# Static UNSUPPORTED_CALLING_CONVENTIONS

Source

    pub static UNSUPPORTED_CALLING_CONVENTIONS: &'static Lint

Expand description

The `unsupported_calling_conventions` lint is output whenever there is a use of the `stdcall`, `fastcall`, and `cdecl` calling conventions (or their unwind variants) on targets that cannot meaningfully be supported for the requested target.

For example, `stdcall` does not make much sense for a x86_64 or, more apparently, powerpc code, because this calling convention was never specified for those targets.

Historically, MSVC toolchains have fallen back to the regular C calling convention for targets other than x86, but Rust doesn’t really see a similar need to introduce a similar hack across many more targets.

#### §Example

ⓘ

    extern "stdcall" fn stdcall() {}

This will produce:

    warning: use of calling convention not supported on this target
      --> $DIR/unsupported.rs:39:1
       |
    LL | extern "stdcall" fn stdcall() {}
       | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = note: `#[warn(unsupported_calling_conventions)]` on by default
       = 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 ...

#### §Explanation

On most of the targets, the behaviour of `stdcall` and similar calling conventions is not defined at all, but was previously accepted due to a bug in the implementation of the compiler.