21 lines
501 B
Rust
21 lines
501 B
Rust
//@ needs-sanitizer-kcfi
|
|
//@ no-prefer-dynamic
|
|
//@ compile-flags: -Zsanitizer=kcfi -Cpanic=abort -Cunsafe-allow-abi-mismatch=sanitizer
|
|
//@ ignore-backends: gcc
|
|
//@ run-pass
|
|
|
|
#![feature(c_variadic)]
|
|
|
|
trait Trait {
|
|
unsafe extern "C" fn foo(x: i32, y: i32, mut ap: ...) -> i32 {
|
|
x + y + ap.arg::<i32>() + ap.arg::<i32>()
|
|
}
|
|
}
|
|
|
|
impl Trait for i32 {}
|
|
|
|
fn main() {
|
|
let f = i32::foo as unsafe extern "C" fn(i32, i32, ...) -> i32;
|
|
assert_eq!(unsafe { f(1, 2, 3, 4) }, 1 + 2 + 3 + 4);
|
|
}
|