//@ add-core-stubs //@ needs-llvm-components: x86 //@ compile-flags: --target=i686-pc-windows-gnu --crate-type=rlib #![no_core] #![feature(no_core, lang_items, c_variadic)] // Test that ABIs for which C-variadics are not supported report an error. extern crate minicore; use minicore::*; #[rustfmt::skip] mod foreign { extern "Rust" { fn rust_foreign_explicit(_: ...); } //~^ ERROR C-variadic functions with the "Rust" calling convention are not supported extern "C" { fn c_foreign(_: ...); } extern "C-unwind" { fn c_unwind_foreign(_: ...); } extern "cdecl" { fn cdecl_foreign(_: ...); } extern "cdecl-unwind" { fn cdecl_unwind_foreign(_: ...); } extern "stdcall" { fn stdcall_foreign(_: ...); } //~^ ERROR C-variadic functions with the "stdcall" calling convention are not supported extern "stdcall-unwind" { fn stdcall_unwind_foreign(_: ...); } //~^ ERROR C-variadic functions with the "stdcall-unwind" calling convention are not supported extern "thiscall" { fn thiscall_foreign(_: ...); } //~^ ERROR C-variadic functions with the "thiscall" calling convention are not supported extern "thiscall-unwind" { fn thiscall_unwind_foreign(_: ...); } //~^ ERROR C-variadic functions with the "thiscall-unwind" calling convention are not supported } #[lang = "va_list"] struct VaList(*mut u8); unsafe fn rust_free(_: ...) {} //~^ ERROR `...` is not supported for non-extern functions unsafe extern "Rust" fn rust_free_explicit(_: ...) {} //~^ ERROR `...` is not supported for `extern "Rust"` functions unsafe extern "C" fn c_free(_: ...) {} unsafe extern "C-unwind" fn c_unwind_free(_: ...) {} unsafe extern "cdecl" fn cdecl_free(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl"` functions unsafe extern "cdecl-unwind" fn cdecl_unwind_free(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl-unwind"` functions unsafe extern "stdcall" fn stdcall_free(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall"` functions unsafe extern "stdcall-unwind" fn stdcall_unwind_free(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall-unwind"` functions unsafe extern "thiscall" fn thiscall_free(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall"` functions unsafe extern "thiscall-unwind" fn thiscall_unwind_free(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall-unwind"` functions struct S; impl S { unsafe fn rust_method(_: ...) {} //~^ ERROR `...` is not supported for non-extern functions unsafe extern "Rust" fn rust_method_explicit(_: ...) {} //~^ ERROR `...` is not supported for `extern "Rust"` functions unsafe extern "C" fn c_method(_: ...) {} unsafe extern "C-unwind" fn c_unwind_method(_: ...) {} unsafe extern "cdecl" fn cdecl_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl"` functions unsafe extern "cdecl-unwind" fn cdecl_unwind_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl-unwind"` functions unsafe extern "stdcall" fn stdcall_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall"` functions unsafe extern "stdcall-unwind" fn stdcall_unwind_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall-unwind"` functions unsafe extern "thiscall" fn thiscall_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall"` functions unsafe extern "thiscall-unwind" fn thiscall_unwind_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall-unwind"` functions } trait T { unsafe fn rust_trait_method(_: ...) {} //~^ ERROR `...` is not supported for non-extern functions unsafe extern "Rust" fn rust_trait_method_explicit(_: ...) {} //~^ ERROR `...` is not supported for `extern "Rust"` functions unsafe extern "C" fn c_trait_method(_: ...) {} unsafe extern "C-unwind" fn c_unwind_trait_method(_: ...) {} unsafe extern "cdecl" fn cdecl_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl"` functions unsafe extern "cdecl-unwind" fn cdecl_unwind_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl-unwind"` functions unsafe extern "stdcall" fn stdcall_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall"` functions unsafe extern "stdcall-unwind" fn stdcall_unwind_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall-unwind"` functions unsafe extern "thiscall" fn thiscall_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall"` functions unsafe extern "thiscall-unwind" fn thiscall_unwind_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall-unwind"` functions } impl T for S { unsafe fn rust_trait_method(_: ...) {} //~^ ERROR `...` is not supported for non-extern functions unsafe extern "Rust" fn rust_trait_method_explicit(_: ...) {} //~^ ERROR `...` is not supported for `extern "Rust"` functions unsafe extern "C" fn c_trait_method(_: ...) {} unsafe extern "C-unwind" fn c_unwind_trait_method(_: ...) {} unsafe extern "cdecl" fn cdecl_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl"` functions unsafe extern "cdecl-unwind" fn cdecl_unwind_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "cdecl-unwind"` functions unsafe extern "stdcall" fn stdcall_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall"` functions unsafe extern "stdcall-unwind" fn stdcall_unwind_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "stdcall-unwind"` functions unsafe extern "thiscall" fn thiscall_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall"` functions unsafe extern "thiscall-unwind" fn thiscall_unwind_trait_method(_: ...) {} //~^ ERROR `...` is not supported for `extern "thiscall-unwind"` functions }