summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--testsuite/tests/ffi/should_run/5402.hs4
-rw-r--r--testsuite/tests/ffi/should_run/5402_main.c13
-rw-r--r--testsuite/tests/ffi/should_run/Makefile3
-rw-r--r--testsuite/tests/ffi/should_run/all.T9
4 files changed, 29 insertions, 0 deletions
diff --git a/testsuite/tests/ffi/should_run/5402.hs b/testsuite/tests/ffi/should_run/5402.hs
new file mode 100644
index 0000000000..6b20b9fb28
--- /dev/null
+++ b/testsuite/tests/ffi/should_run/5402.hs
@@ -0,0 +1,4 @@
+module Test where
+import System.Exit
+foreign export ccall hsmain :: IO ()
+hsmain = exitWith (ExitFailure 42)
diff --git a/testsuite/tests/ffi/should_run/5402_main.c b/testsuite/tests/ffi/should_run/5402_main.c
new file mode 100644
index 0000000000..6ef2c651a9
--- /dev/null
+++ b/testsuite/tests/ffi/should_run/5402_main.c
@@ -0,0 +1,13 @@
+#include "HsFFI.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "5402_stub.h"
+
+int main (int argc, char *argv[])
+{
+ hs_init(&argc,&argv);
+ hs_init(&argc,&argv);
+ hsmain();
+ printf("I shouldn't be here\n");
+ exit(1);
+}
diff --git a/testsuite/tests/ffi/should_run/Makefile b/testsuite/tests/ffi/should_run/Makefile
index c30f5565f4..64bc63a2d3 100644
--- a/testsuite/tests/ffi/should_run/Makefile
+++ b/testsuite/tests/ffi/should_run/Makefile
@@ -13,3 +13,6 @@ ffi018_ghci_setup :
ffi002_setup :
'$(TEST_HC)' $(TEST_HC_OPTS) -c ffi002.hs
+
+5402_setup :
+ '$(TEST_HC)' $(TEST_HC_OPTS) -c 5402.hs
diff --git a/testsuite/tests/ffi/should_run/all.T b/testsuite/tests/ffi/should_run/all.T
index cf1e169c25..d6fdc8cde4 100644
--- a/testsuite/tests/ffi/should_run/all.T
+++ b/testsuite/tests/ffi/should_run/all.T
@@ -166,3 +166,12 @@ test('4038', normal, compile_and_run, flagsFor4038)
test('4221', [ omit_ways(['ghci']), extra_clean(['4221_c.o']) ],
compile_and_run, ['4221_c.c'])
+test('5402', [ omit_ways(['ghci']),
+ exit_code(42),
+ extra_clean(['5402_main.o']),
+ # The 5402_setup hack is to ensure that we generate
+ # 5402_stub.h before compiling 5402_main.c, which
+ # needs it.
+ compile_cmd_prefix('$MAKE --no-print-directory 5402_setup && ') ],
+ compile_and_run, ["-no-hs-main 5402_main.c"])
+