aboutsummaryrefslogtreecommitdiffstats
path: root/community/ghc/0001-testsuite-Ensure-that-ffi005-output-order-is-predict.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/ghc/0001-testsuite-Ensure-that-ffi005-output-order-is-predict.patch')
-rw-r--r--community/ghc/0001-testsuite-Ensure-that-ffi005-output-order-is-predict.patch95
1 files changed, 95 insertions, 0 deletions
diff --git a/community/ghc/0001-testsuite-Ensure-that-ffi005-output-order-is-predict.patch b/community/ghc/0001-testsuite-Ensure-that-ffi005-output-order-is-predict.patch
new file mode 100644
index 0000000000..ba72fbaf51
--- /dev/null
+++ b/community/ghc/0001-testsuite-Ensure-that-ffi005-output-order-is-predict.patch
@@ -0,0 +1,95 @@
+From e647752e7b99c2fb198b652bc00c531cf31878cf Mon Sep 17 00:00:00 2001
+From: Ben Gamari <ben@smart-cactus.org>
+Date: Tue, 11 Jun 2019 13:09:55 -0400
+Subject: testsuite: Ensure that ffi005 output order is predictable
+
+The libc output buffer wasn't being flushed, making the order
+system-depedent.
+---
+ testsuite/tests/ffi/should_run/all.T | 4 ++--
+ testsuite/tests/ffi/should_run/ffi005.hs | 7 +++++--
+ testsuite/tests/ffi/should_run/ffi005.stdout | 4 ++--
+ testsuite/tests/ffi/should_run/ffi005_c.c | 5 +++++
+ 4 files changed, 14 insertions(+), 6 deletions(-)
+ create mode 100644 testsuite/tests/ffi/should_run/ffi005_c.c
+
+diff --git a/testsuite/tests/ffi/should_run/all.T b/testsuite/tests/ffi/should_run/all.T
+index fa78c56b80..1a85e8ac66 100644
+--- a/testsuite/tests/ffi/should_run/all.T
++++ b/testsuite/tests/ffi/should_run/all.T
+@@ -28,11 +28,11 @@ test('ffi004', skip, compile_and_run, [''])
+ # On x86, the test suffers from floating-point differences due to the
+ # use of 80-bit internal precision when using the native code generator.
+ #
+-test('ffi005', [ omit_ways(prof_ways),
++test('ffi005', [ omit_ways(prof_ways + ['ghci']),
+ when(arch('i386'), skip),
+ when(platform('i386-apple-darwin'), expect_broken(4105)),
+ exit_code(3) ],
+- compile_and_run, [''])
++ compile_and_run, ['ffi005_c.c'])
+
+ test('ffi006', normal, compile_and_run, [''])
+
+diff --git a/testsuite/tests/ffi/should_run/ffi005.hs b/testsuite/tests/ffi/should_run/ffi005.hs
+index 9c17441954..85437a422f 100644
+--- a/testsuite/tests/ffi/should_run/ffi005.hs
++++ b/testsuite/tests/ffi/should_run/ffi005.hs
+@@ -20,10 +20,12 @@ main = do
+ -- putStrLn $ "errno == " ++ show err
+
+ putStrLn "\nTesting puts (and withString)"
+- withCString "Test successful" puts
++ hFlush stdout
++ withCString "Test puts successful" puts
++ flushStdout -- Flush the libc output buffer
+
+ putStrLn "\nTesting peekArray0"
+- s <- withCString "Test successful" (peekArray0 (castCharToCChar '\0'))
++ s <- withCString "Test peekArray0 successful" (peekArray0 (castCharToCChar '\0'))
+ putStr (map castCCharToChar s)
+
+ -- disabled due to use of non-portable constants in arguments to open:
+@@ -71,6 +73,7 @@ withBuffer sz m = do
+ return s
+
+ foreign import ccall puts :: CString -> IO CInt
++foreign import ccall "flush_stdout" flushStdout :: IO ()
+
+ -- foreign import ccall "open" open' :: CString -> CInt -> IO CInt
+ -- foreign import ccall "open" open2' :: CString -> CInt -> CInt -> IO CInt
+diff --git a/testsuite/tests/ffi/should_run/ffi005.stdout b/testsuite/tests/ffi/should_run/ffi005.stdout
+index bc0a137514..bc29221ccf 100644
+--- a/testsuite/tests/ffi/should_run/ffi005.stdout
++++ b/testsuite/tests/ffi/should_run/ffi005.stdout
+@@ -3,9 +3,10 @@ Testing sin==mysin (should return lots of Trues)
+ [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
+
+ Testing puts (and withString)
++Test puts successful
+
+ Testing peekArray0
+-Test successful
++Test peekArray0 successful
+ Testing sin==dynamic_sin (should return lots of Trues)
+ [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
+
+@@ -16,4 +17,3 @@ Testing sin==Id wrapped_sin (should return lots of Trues)
+ [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
+
+ Testing exit
+-Test successful
+diff --git a/testsuite/tests/ffi/should_run/ffi005_c.c b/testsuite/tests/ffi/should_run/ffi005_c.c
+new file mode 100644
+index 0000000000..e5a88e1b4e
+--- /dev/null
++++ b/testsuite/tests/ffi/should_run/ffi005_c.c
+@@ -0,0 +1,5 @@
++#include <stdio.h>
++void flush_stdout(void)
++{
++ fflush(stdout);
++}
+--
+2.17.1
+