aboutsummaryrefslogtreecommitdiffstats
path: root/community/ghc/0001-testsuite-Ensure-T5423-flushes-C-output-buffer.patch
blob: f2568318ca75b0bf6064219feea94e56f7beb90c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
From a0f683795a72f7b82962d24098b1dc7c2b04ab29 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Tue, 11 Jun 2019 12:48:32 -0400
Subject: 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.
---
 testsuite/tests/rts/Makefile     | 3 ++-
 testsuite/tests/rts/T5423.hs     | 7 ++++++-
 testsuite/tests/rts/T5423.stdout | 2 +-
 testsuite/tests/rts/T5423_c.c    | 6 ++++++
 4 files changed, 15 insertions(+), 3 deletions(-)
 create mode 100644 testsuite/tests/rts/T5423_c.c

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);
+}
-- 
2.17.1