about summary refs log tree commit diff
path: root/tests/ui/macros/macros-in-extern.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/macros/macros-in-extern.rs')
-rw-r--r--tests/ui/macros/macros-in-extern.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/ui/macros/macros-in-extern.rs b/tests/ui/macros/macros-in-extern.rs
new file mode 100644
index 00000000000..568ae3a8539
--- /dev/null
+++ b/tests/ui/macros/macros-in-extern.rs
@@ -0,0 +1,51 @@
+// run-pass
+// ignore-wasm32
+
+#![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!();
+}