
#14079: Failure to do CPR in the presence of a local letrec -------------------------------------+------------------------------------- Reporter: nomeata | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.3 Resolution: | Keywords: JoinPoints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): When `e` is small we don't to w/w; insteead we inline the function bodily at all call sites. If you make it bigger, thus {{{ {-# NOINLINE dummy #-} dummy x = x e :: (Int, Int) -> Int -> Int -> (Int, Int) e x y n = je x y where je !x y | y > 0 = x | otherwise = je x (dummy y + dummy n) }}} then `e` is big enough, and full w/w happens. Actually it looks fine to me. All the right things are happening. So is ther a bug here at all? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14079#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler