#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: | ----------------------------------+---------------------------------------- Changes (by bgamari): * owner: (none) => bgamari * priority: normal => highest Comment: This sounds quite bad. Furthermore, it seems that `check#` has absolutely no test coverage. I suspect this is due to our treatment of STM in the demand analyser; `x` in the above program ends up looking like this after strictness analysis, {{{#!hs x_s2KO :: E -> State# RealWorld -> (# State# RealWorld, () #) x_s2KO = \ (e_a2hN [Dmd=<xB,U(A,A,U(U))>] :: E) (eta_B1 [Dmd=<B,U>] :: State# RealWorld) -> atomically# @ () (\ (eta_a2K4 [Dmd=<B,U>, OS=OneShot] :: State# RealWorld) -> case catchRetry# @ () (\ (s_a2K5 [Dmd=<B,U>, OS=OneShot] :: State# RealWorld) -> case e_a2hN of { E ds_d2EV [Dmd=<B,A>] ds_d2EW [Dmd=<B,A>] ds_d2EX [Dmd=<B,1*U(U)>] -> case ds_d2EX of { GHC.Conc.Sync.TVar tvar#_a2JR [Dmd=<B,U>] -> case readTVar# @ RealWorld @ [Int] tvar#_a2JR s_a2K5 of { (# ipv_a2JG [Dmd=<B,U>], ipv1_a2JH [Dmd=<B,A>] #) -> retry# @ () ipv_a2JG } } }) GHC.Conc.Sync.always2 eta_a2K4 of { (# ipv_a2Kj [Dmd=<S,U>], ipv1_a2Kk [Dmd=<L,A>] #) -> case check# @ () (\ (s_a2Ki [Dmd=<S,U>] :: State# RealWorld) -> case e_a2hN of { E ds_d2EV [Dmd=<L,A>] ds_d2EW [Dmd=<L,A>] ds_d2EX [Dmd=<S(S),1*U(U)>] -> case ds_d2EX of { GHC.Conc.Sync.TVar tvar#_a2JR [Dmd=<S,U>] -> case readTVar# @ RealWorld @ [Int] tvar#_a2JR s_a2Ki of { (# ipv_a2JG [Dmd=<S,U>], ipv1_a2JH [Dmd=<L,A>] #) -> (# ipv_a2JG, GHC.Tuple.() #) } } }) ipv_a2Kj of s'_a2Kv [Dmd=<S,U>] { __DEFAULT -> (# s'_a2Kv, GHC.Tuple.() #) } }) eta_B1 }}} Which then leads us to conclude that the failure in `installSanityChecks` is redundant. Concerningly, this doesn't seem to be caught by the `-fcatch-bottoms` flag introduced in #13916. I'll try to come back to this tomorrow or after ICFP. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14171#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler