summaryrefslogtreecommitdiffstats
path: root/src/test/ui/macros/macros-in-extern.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/macros/macros-in-extern.rs')
-rw-r--r--src/test/ui/macros/macros-in-extern.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/test/ui/macros/macros-in-extern.rs b/src/test/ui/macros/macros-in-extern.rs
new file mode 100644
index 000000000..568ae3a85
--- /dev/null
+++ b/src/test/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!();
+}