56 lines
1.1 KiB
Rust
56 lines
1.1 KiB
Rust
//@ run-pass
|
|
#![allow(improper_ctypes)] // FIXME: this test is inherently not FFI-safe.
|
|
|
|
// Test a foreign function that accepts empty struct.
|
|
|
|
//@ pretty-expanded FIXME #23616
|
|
//@ ignore-msvc
|
|
//@ ignore-emscripten emcc asserts on an empty struct as an argument
|
|
|
|
#[repr(C)]
|
|
struct TwoU8s {
|
|
one: u8,
|
|
two: u8,
|
|
}
|
|
|
|
#[repr(C)]
|
|
struct ManyInts {
|
|
arg1: i8,
|
|
arg2: i16,
|
|
arg3: i32,
|
|
arg4: i16,
|
|
arg5: i8,
|
|
arg6: TwoU8s,
|
|
}
|
|
|
|
#[repr(C)]
|
|
struct Empty;
|
|
|
|
#[link(name = "rust_test_helpers", kind = "static")]
|
|
extern "C" {
|
|
fn rust_dbg_extern_empty_struct(v1: ManyInts, e: Empty, v2: ManyInts);
|
|
}
|
|
|
|
pub fn main() {
|
|
unsafe {
|
|
let x = ManyInts {
|
|
arg1: 2,
|
|
arg2: 3,
|
|
arg3: 4,
|
|
arg4: 5,
|
|
arg5: 6,
|
|
arg6: TwoU8s { one: 7, two: 8 },
|
|
};
|
|
let y = ManyInts {
|
|
arg1: 1,
|
|
arg2: 2,
|
|
arg3: 3,
|
|
arg4: 4,
|
|
arg5: 5,
|
|
arg6: TwoU8s { one: 6, two: 7 },
|
|
};
|
|
let empty = Empty;
|
|
rust_dbg_extern_empty_struct(x, empty, y);
|
|
}
|
|
}
|