mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-01 17:04:13 +00:00
124 lines
5.9 KiB
Rust
124 lines
5.9 KiB
Rust
//@ 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
|
|
}
|