Files
rust/tests/ui/sanitizer/kcfi-c-variadic.rs
2025-09-22 12:30:47 +02:00

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);
}