| //@ check-pass |
| //@ edition:2018 |
| //@ aux-crate:fn_header_aux=fn-header-aux.rs |
| |
| #![feature(c_variadic)] |
| #![feature(fn_delegation)] |
| #![allow(incomplete_features)] |
| #![deny(unused_unsafe)] |
| |
| mod to_reuse { |
| pub unsafe fn unsafe_fn() {} |
| pub extern "C" fn extern_fn() {} |
| pub unsafe extern "C" fn variadic_fn(n: usize, mut args: ...) {} |
| pub const fn const_fn() {} |
| pub async fn async_fn() {} |
| } |
| |
| reuse to_reuse::unsafe_fn; |
| reuse to_reuse::extern_fn; |
| reuse to_reuse::variadic_fn; |
| reuse to_reuse::const_fn; |
| reuse to_reuse::async_fn; |
| |
| reuse fn_header_aux::unsafe_fn_extern; |
| reuse fn_header_aux::extern_fn_extern; |
| reuse fn_header_aux::variadic_fn_extern; |
| reuse fn_header_aux::const_fn_extern; |
| reuse fn_header_aux::async_fn_extern; |
| |
| const fn const_check() { |
| const_fn(); |
| const_fn_extern(); |
| } |
| |
| async fn async_check() { |
| async_fn().await; |
| async_fn_extern().await; |
| } |
| |
| fn main() { |
| unsafe { |
| unsafe_fn(); |
| unsafe_fn_extern(); |
| } |
| extern_fn(); |
| extern_fn_extern(); |
| let _: extern "C" fn() = extern_fn; |
| let _: extern "C" fn() = extern_fn_extern; |
| unsafe { |
| variadic_fn(0); |
| variadic_fn(0, 1); |
| variadic_fn_extern(0); |
| variadic_fn_extern(0, 1); |
| } |
| let _: unsafe extern "C" fn(usize, ...) = variadic_fn; |
| let _: unsafe extern "C" fn(usize, ...) = variadic_fn_extern; |
| } |