summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--testsuite/tests/rts/linker/T21556/T21556_lib.c5
-rw-r--r--testsuite/tests/rts/linker/T21556/T21556a.hs7
-rw-r--r--testsuite/tests/rts/linker/T21556/T21556a.stdout1
-rw-r--r--testsuite/tests/rts/linker/T21556/T21556b.hs7
-rw-r--r--testsuite/tests/rts/linker/T21556/T21556b.stdout1
-rw-r--r--testsuite/tests/rts/linker/T21556/T21556b_c.c6
-rw-r--r--testsuite/tests/rts/linker/T21556/all.T6
7 files changed, 33 insertions, 0 deletions
diff --git a/testsuite/tests/rts/linker/T21556/T21556_lib.c b/testsuite/tests/rts/linker/T21556/T21556_lib.c
new file mode 100644
index 0000000000..dbeab24f85
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/T21556_lib.c
@@ -0,0 +1,5 @@
+#include <stdio.h>
+
+__attribute__((weak)) void hello(int x) {
+ printf("hello %d\n", x+1);
+}
diff --git a/testsuite/tests/rts/linker/T21556/T21556a.hs b/testsuite/tests/rts/linker/T21556/T21556a.hs
new file mode 100644
index 0000000000..5e66be0c3e
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/T21556a.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+import Foreign.C.Types
+
+foreign import ccall unsafe "hello" hello :: CInt -> IO ()
+
+main = hello 42
diff --git a/testsuite/tests/rts/linker/T21556/T21556a.stdout b/testsuite/tests/rts/linker/T21556/T21556a.stdout
new file mode 100644
index 0000000000..c91bc968f9
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/T21556a.stdout
@@ -0,0 +1 @@
+hello 43
diff --git a/testsuite/tests/rts/linker/T21556/T21556b.hs b/testsuite/tests/rts/linker/T21556/T21556b.hs
new file mode 100644
index 0000000000..5e66be0c3e
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/T21556b.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+import Foreign.C.Types
+
+foreign import ccall unsafe "hello" hello :: CInt -> IO ()
+
+main = hello 42
diff --git a/testsuite/tests/rts/linker/T21556/T21556b.stdout b/testsuite/tests/rts/linker/T21556/T21556b.stdout
new file mode 100644
index 0000000000..09c51b84cb
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/T21556b.stdout
@@ -0,0 +1 @@
+world 42
diff --git a/testsuite/tests/rts/linker/T21556/T21556b_c.c b/testsuite/tests/rts/linker/T21556/T21556b_c.c
new file mode 100644
index 0000000000..87c3139f01
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/T21556b_c.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+void hello(int x) {
+ printf("world %d\n", x);
+}
+
diff --git a/testsuite/tests/rts/linker/T21556/all.T b/testsuite/tests/rts/linker/T21556/all.T
new file mode 100644
index 0000000000..fad0e9758f
--- /dev/null
+++ b/testsuite/tests/rts/linker/T21556/all.T
@@ -0,0 +1,6 @@
+setTestOpts([
+ unless(opsys('mingw32'), skip),
+ extra_files(['T21556_lib.c'])
+])
+test('T21556a', normal, multimod_compile_and_run, ['T21556a', 'T21556_lib.c'])
+test('T21556b', normal, multimod_compile_and_run, ['T21556b', 'T21556_lib.c T21556b_c.c'])