summaryrefslogtreecommitdiff
path: root/testsuite/tests/rts
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-06-11 12:48:32 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-06-16 06:26:38 -0400
commita0f683795a72f7b82962d24098b1dc7c2b04ab29 (patch)
treeac3081c146b9360ac4c39d761d732295a5c1862f /testsuite/tests/rts
parent81608e82dfed7e78c1bba189f26c8c760f7c196a (diff)
downloadhaskell-a0f683795a72f7b82962d24098b1dc7c2b04ab29.tar.gz
testsuite: Ensure T5423 flushes C output buffer
Previously T5423 would fail to flush the printf output buffer. Consequently it was platform-dependent whether the C or Haskell print output would be emitted first.
Diffstat (limited to 'testsuite/tests/rts')
-rw-r--r--testsuite/tests/rts/Makefile3
-rw-r--r--testsuite/tests/rts/T5423.hs7
-rw-r--r--testsuite/tests/rts/T5423.stdout2
-rw-r--r--testsuite/tests/rts/T5423_c.c6
4 files changed, 15 insertions, 3 deletions
diff --git a/testsuite/tests/rts/Makefile b/testsuite/tests/rts/Makefile
index 32c2b17e27..51f2746c1f 100644
--- a/testsuite/tests/rts/Makefile
+++ b/testsuite/tests/rts/Makefile
@@ -37,7 +37,8 @@ T5423:
$(RM) T5423_cmm.o T5423.o T5423.hi T5423$(exeext)
"$(TEST_HC)" $(TEST_HC_OPTS) -v0 -c T5423_cmm.cmm
"$(TEST_HC)" $(TEST_HC_OPTS) -v0 -c T5423.hs
- "$(TEST_HC)" $(TEST_HC_OPTS) -v0 T5423.o T5423_cmm.o -o T5423$(exeext)
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 -c T5423_c.c
+ "$(TEST_HC)" $(TEST_HC_OPTS) -v0 T5423.o T5423_cmm.o T5423_c.o -o T5423$(exeext)
./T5423
.PHONY: T9405
diff --git a/testsuite/tests/rts/T5423.hs b/testsuite/tests/rts/T5423.hs
index 2565c3f002..cda87048d7 100644
--- a/testsuite/tests/rts/T5423.hs
+++ b/testsuite/tests/rts/T5423.hs
@@ -7,8 +7,13 @@ foreign import prim "test" test :: Int# -> Int# -> Int# -> Int# -> Int#
-> Int# -> Int# -> Int# -> Int# -> Int#
-> Int#
+foreign import ccall "flush_stdout" flush_stdout :: IO ()
+
v :: Int
v = I# (test 111# 112# 113# 114# 115# 116# 117# 118# 119# 120#)
main :: IO ()
-main = print v
+main = do
+ n <- return $! v
+ flush_stdout -- Ensure that libc output buffer is flushed
+ print n
diff --git a/testsuite/tests/rts/T5423.stdout b/testsuite/tests/rts/T5423.stdout
index 478bb27b19..fc92992860 100644
--- a/testsuite/tests/rts/T5423.stdout
+++ b/testsuite/tests/rts/T5423.stdout
@@ -1,2 +1,2 @@
-120
111 112 113 114 115 116 117 118 119 120
+120
diff --git a/testsuite/tests/rts/T5423_c.c b/testsuite/tests/rts/T5423_c.c
new file mode 100644
index 0000000000..efc9c845f5
--- /dev/null
+++ b/testsuite/tests/rts/T5423_c.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+void flush_stdout(void)
+{
+ fflush(stdout);
+}