summaryrefslogtreecommitdiffstats
path: root/tests/ui/macros/macros-in-extern.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /tests/ui/macros/macros-in-extern.rs
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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 000000000..568ae3a85
--- /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!();
+}