[commit: ghc] master: Add regression test for #11555 (c937f42)

git at git.haskell.org git at git.haskell.org
Fri Mar 11 12:26:59 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/c937f424e4acd61d1c558e8fe9b47e7d580fdbd8/ghc

>---------------------------------------------------------------

commit c937f424e4acd61d1c558e8fe9b47e7d580fdbd8
Author: Ben Gamari <ben at smart-cactus.org>
Date:   Fri Mar 11 11:20:43 2016 +0100

    Add regression test for #11555


>---------------------------------------------------------------

c937f424e4acd61d1c558e8fe9b47e7d580fdbd8
 testsuite/tests/stranal/should_run/T11555a.hs     | 38 +++++++++++++++++++++++
 testsuite/tests/stranal/should_run/T11555a.stdout |  2 ++
 testsuite/tests/stranal/should_run/all.T          |  1 +
 3 files changed, 41 insertions(+)

diff --git a/testsuite/tests/stranal/should_run/T11555a.hs b/testsuite/tests/stranal/should_run/T11555a.hs
new file mode 100644
index 0000000..29f2a49
--- /dev/null
+++ b/testsuite/tests/stranal/should_run/T11555a.hs
@@ -0,0 +1,38 @@
+module Main(main) where
+
+import Control.Monad
+import Control.Exception
+import Control.Monad.Trans.Cont
+import GHC.Exts
+
+
+type RAW a = ContT () IO a
+
+-- See https://ghc.haskell.org/trac/ghc/ticket/11555
+catchSafe1, catchSafe2 :: IO a -> (SomeException -> IO a) -> IO a
+catchSafe1 a b = lazy a `catch` b
+catchSafe2 a b = join (evaluate a) `catch` b
+
+-- | Run and then call a continuation.
+runRAW1, runRAW2 :: RAW a -> (Either SomeException a -> IO ()) -> IO ()
+runRAW1 m k = m `runContT` (k . Right) `catchSafe1` \e -> k $ Left e
+runRAW2 m k = m `runContT` (k . Right) `catchSafe2` \e -> k $ Left e
+
+{-# NOINLINE run1 #-}
+run1 :: RAW ()-> IO ()
+run1 rs = do
+    runRAW1 rs $ \x -> case x of
+        Left e -> putStrLn "CAUGHT"
+        Right x -> return x
+
+{-# NOINLINE run2 #-}
+run2 :: RAW ()-> IO ()
+run2 rs = do
+    runRAW2 rs $ \x -> case x of
+        Left e -> putStrLn "CAUGHT"
+        Right x -> return x
+
+main :: IO ()
+main = do
+    run1 $ error "MISSED"
+    run2 $ error "MISSED"
diff --git a/testsuite/tests/stranal/should_run/T11555a.stdout b/testsuite/tests/stranal/should_run/T11555a.stdout
new file mode 100644
index 0000000..16ff8b4
--- /dev/null
+++ b/testsuite/tests/stranal/should_run/T11555a.stdout
@@ -0,0 +1,2 @@
+CAUGHT
+CAUGHT
diff --git a/testsuite/tests/stranal/should_run/all.T b/testsuite/tests/stranal/should_run/all.T
index efd1afa..a4b550e 100644
--- a/testsuite/tests/stranal/should_run/all.T
+++ b/testsuite/tests/stranal/should_run/all.T
@@ -11,3 +11,4 @@ test('T9254', normal, compile_and_run, [''])
 test('T10148', normal, compile_and_run, [''])
 test('T10218', normal, compile_and_run, [''])
 test('T11076', normal, multimod_compile_and_run, ['T11076.hs', 'T11076_prim.cmm'])
+test('T11555a', normal, compile_and_run, [''])



More information about the ghc-commits mailing list