//@ compile-flags: -C opt-level=3 #![feature(c_variadic)] // Test that the inline attributes are accepted on C-variadic functions. // // Currently LLVM is unable to inline C-variadic functions, but that is valid because despite // the name even `#[inline(always)]` is just a hint. #[inline(always)] unsafe extern "C" fn inline_always(mut ap: ...) -> u32 { ap.arg::() } #[inline] unsafe extern "C" fn inline(mut ap: ...) -> u32 { ap.arg::() } #[inline(never)] unsafe extern "C" fn inline_never(mut ap: ...) -> u32 { ap.arg::() } #[cold] unsafe extern "C" fn cold(mut ap: ...) -> u32 { ap.arg::() } #[unsafe(no_mangle)] #[inline(never)] fn helper() { // CHECK-LABEL: helper // CHECK-LABEL: call c_variadic_inline::inline_always // CHECK-LABEL: call c_variadic_inline::inline // CHECK-LABEL: call c_variadic_inline::inline_never // CHECK-LABEL: call c_variadic_inline::cold unsafe { inline_always(1); inline(2); inline_never(3); cold(4); } } fn main() { helper() }