| //@ 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!(); |
| } |