rust/tests/extern-so/pass/call_extern_c_fn.rs
2022-08-26 17:40:26 -04:00

47 lines
1.1 KiB
Rust

//@only-target-linux
//@only-on-host
extern "C" {
fn add_one_int(x: i32) -> i32;
fn add_int16(x: i16) -> i16;
fn test_stack_spill(
a: i32,
b: i32,
c: i32,
d: i32,
e: i32,
f: i32,
g: i32,
h: i32,
i: i32,
j: i32,
k: i32,
l: i32,
) -> i32;
fn add_short_to_long(x: i16, y: i64) -> i64;
fn get_unsigned_int() -> u32;
fn printer();
}
fn main() {
unsafe {
// test function that adds 2 to a provided int
assert_eq!(add_one_int(1), 3);
// test function that takes the sum of its 12 arguments
assert_eq!(test_stack_spill(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), 78);
// test function that adds 3 to a 16 bit int
assert_eq!(add_int16(-1i16), 2i16);
// test function that adds an i16 to an i64
assert_eq!(add_short_to_long(-1i16, 123456789123i64), 123456789122i64);
// test function that returns -10 as an unsigned int
assert_eq!(get_unsigned_int(), (-10i32) as u32);
// test void function that prints from C
printer();
}
}