diff options
author | Simon Marlow <marlowsd@gmail.com> | 2012-08-20 13:43:32 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2012-08-21 10:00:54 +0100 |
commit | 5af27e2ff1e6dff64d70b48cdb747d9d5d1e7578 (patch) | |
tree | d2f512cd092bb36bd3e2da611a8d1e8a97f6d235 /testsuite/tests/rts | |
parent | e6a9b9632cc919b5c8a9128c90008d18e165ae40 (diff) | |
download | haskell-5af27e2ff1e6dff64d70b48cdb747d9d5d1e7578.tar.gz |
add the test from #7160
Diffstat (limited to 'testsuite/tests/rts')
-rw-r--r-- | testsuite/tests/rts/T7160.hs | 27 | ||||
-rw-r--r-- | testsuite/tests/rts/T7160.stderr | 6 | ||||
-rw-r--r-- | testsuite/tests/rts/all.T | 1 |
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, ['']) |