#14171: STM causes program to suddenly exit ----------------------------------+---------------------------------------- Reporter: MichaelBurge | Owner: bgamari Type: bug | Status: new Priority: highest | Milestone: Component: libraries/stm | Version: 8.2.1 Resolution: | Keywords: Operating System: Linux | Architecture: Unknown/Multiple Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | ----------------------------------+---------------------------------------- Comment (by bgamari): I had another quick look at this and believe that the critical mistake is this, {{{ dmdAnal:app dmd = <C(C(S(SL))),C1(C1(U(U,A)))> expr = catchRetry# @ () (\ (s_a2KK [Dmd=<B,U>, OS=OneShot] :: State# RealWorld) -> case readTVar# @ RealWorld @ [Int] ww_s485 s_a2KK of { (# ipv_a2Kl [Dmd=<B,U>], ipv1_a2Km [Dmd=<B,A>] #) -> retry# @ () ipv_a2Kl }) fun dmd_ty = <xC(S),1*C1(U)><L,1*C1(U)><L,U> arg dmd = <xC(S),1*C1(U)> arg dmd_ty = ([s485 :-> <xB,U>], b) res dmd_ty = <L,1*C1(U)><L,U> overall res dmd_ty = <L,1*C1(U)><L,U>b {s485-><xB,U>} }}} Note that `arg dmd_ty` bottoms, due to its use of `retry#`. However, `arg dmd` is `ExnStr` and therefore should catch this bottom. However, `overall res dmd_ty` nevertheless bottoms. I'm not yet sure why, but it's quite intriguing. This all seems quite reminiscentv of #13916, but it doesn't seem to be the same issue. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14171#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler