diff --git a/tests/all.T b/tests/all.T
index 8f50fb5be42faee50ebad89182f2ed79ebd00417..c704f5ec41f18efb63f40f76aa61e6bb0ab5cda0 100644
--- a/tests/all.T
+++ b/tests/all.T
@@ -6,8 +6,7 @@ test('stm050', [extra_run_opts('10000')], compile_and_run, ['-package stm'])
 
 test('stm054', normal, compile_and_run, ['-package stm'])
 test('stm055', [exit_code(1), js_broken(22576)], compile_and_run, ['-package stm'])
-test('stm056', only_ways(['threaded1','threaded2']),
-                compile_and_run, ['-package stm'])
+test('stm056', only_ways(['threaded1','threaded2']), compile_and_run, ['-package stm'])
 
 test('stm061', normal, compile_and_run, ['-package stm'])
 test('T2411', ignore_stdout, compile_and_run, ['-package stm'])
diff --git a/tests/stm056.hs b/tests/stm056.hs
index de854f6e78f161b7d1a1de2ee92c31db72e81d0e..acee49f74ad7125febad6e78de3f102f94186714 100644
--- a/tests/stm056.hs
+++ b/tests/stm056.hs
@@ -11,8 +11,9 @@ inc tv = do
   writeTVar tv (v + 1)
 
 bad :: MVar () -> IO ()
-bad m = do { evaluate (1 `quot` 0); return () }
-         `finally` putMVar m ()
+bad m = handle (\(_ :: SomeException) -> putStrLn "bad" >> putMVar m ()) $ do
+  evaluate (1 `quot` 0)
+  return ()
 
 main :: IO ()
 main = do
@@ -22,3 +23,4 @@ main = do
   forkOS (bad m)
   takeMVar m
   threadDelay 100000 -- allow time for the exception to be printed
+
diff --git a/tests/stm056.stderr b/tests/stm056.stderr
deleted file mode 100644
index 1af622f069623c4797e1b1c0e7f2fb05464ba420..0000000000000000000000000000000000000000
--- a/tests/stm056.stderr
+++ /dev/null
@@ -1 +0,0 @@
-stm056: divide by zero
diff --git a/tests/stm056.stdout b/tests/stm056.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..67be85f1274474029aad8a75b823592324305aa4
--- /dev/null
+++ b/tests/stm056.stdout
@@ -0,0 +1 @@
+bad