//@ run-pass #![feature(decl_macro)] macro_rules! returns_isize( ($ident:ident) => ( fn $ident() -> isize; ) ); macro takes_u32_returns_u32($ident:ident) { fn $ident(arg: u32) -> u32; } macro_rules! emits_nothing( () => () ); macro_rules! emits_multiple( () => { fn f1() -> u32; fn f2() -> u32; } ); mod defs { #[no_mangle] extern "C" fn f1() -> u32 { 1 } #[no_mangle] extern "C" fn f2() -> u32 { 2 } } fn main() { assert_eq!(unsafe { rust_get_test_int() }, 1); assert_eq!(unsafe { rust_dbg_extern_identity_u32(0xDEADBEEF) }, 0xDEADBEEFu32); assert_eq!(unsafe { f1() }, 1); assert_eq!(unsafe { f2() }, 2); } #[link(name = "rust_test_helpers", kind = "static")] extern "C" { returns_isize!(rust_get_test_int); takes_u32_returns_u32!(rust_dbg_extern_identity_u32); emits_nothing!(); emits_multiple!(); }