summaryrefslogtreecommitdiff
path: root/testsuite/tests/rts
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-08-20 13:43:32 +0100
committerSimon Marlow <marlowsd@gmail.com>2012-08-21 10:00:54 +0100
commit5af27e2ff1e6dff64d70b48cdb747d9d5d1e7578 (patch)
treed2f512cd092bb36bd3e2da611a8d1e8a97f6d235 /testsuite/tests/rts
parente6a9b9632cc919b5c8a9128c90008d18e165ae40 (diff)
downloadhaskell-5af27e2ff1e6dff64d70b48cdb747d9d5d1e7578.tar.gz
add the test from #7160
Diffstat (limited to 'testsuite/tests/rts')
-rw-r--r--testsuite/tests/rts/T7160.hs27
-rw-r--r--testsuite/tests/rts/T7160.stderr6
-rw-r--r--testsuite/tests/rts/all.T1
3 files changed, 34 insertions, 0 deletions
diff --git a/testsuite/tests/rts/T7160.hs b/testsuite/tests/rts/T7160.hs
new file mode 100644
index 0000000000..8f5ef43ea8
--- /dev/null
+++ b/testsuite/tests/rts/T7160.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE ForeignFunctionInterface, MagicHash #-}
+import GHC.ForeignPtr
+import GHC.Ptr
+import System.Mem
+
+-- one should really use own C function rather than this varargs one to avoid
+-- possible ABI issues
+foreign import ccall "&debugBelch" fun :: FunPtr (Ptr () -> Ptr () -> IO ())
+
+new name = do
+ p <- newForeignPtr_ (Ptr name)
+ addForeignPtrFinalizerEnv fun (Ptr "finalizer 1 (%s)\n"#) p
+ addForeignPtrFinalizerEnv fun (Ptr "finalizer 2 (%s)\n"#) p
+ return p
+
+main = do
+ p <- new "p"#
+ q <- new "q"#
+ r <- new "r"#
+ performGC -- collect p. finalizer order: 2, then 1.
+-- print q
+ touchForeignPtr q
+ performGC -- collect q. finalizer order: 1, then 2.
+ -- expected order: 2, then 1.
+-- print r
+ touchForeignPtr r
+ performGC -- collect r. finalizer order: 2, then 1.
diff --git a/testsuite/tests/rts/T7160.stderr b/testsuite/tests/rts/T7160.stderr
new file mode 100644
index 0000000000..ad3c9fd752
--- /dev/null
+++ b/testsuite/tests/rts/T7160.stderr
@@ -0,0 +1,6 @@
+finalizer 2 (p)
+finalizer 1 (p)
+finalizer 2 (q)
+finalizer 1 (q)
+finalizer 2 (r)
+finalizer 1 (r)
diff --git a/testsuite/tests/rts/all.T b/testsuite/tests/rts/all.T
index 5f4874b25c..62de3b9255 100644
--- a/testsuite/tests/rts/all.T
+++ b/testsuite/tests/rts/all.T
@@ -149,3 +149,4 @@ test('T7037',
['$MAKE -s --no-print-directory T7037'])
test('7087', exit_code(1), compile_and_run, [''])
+test('T7160', normal, compile_and_run, [''])