[GHC] #14163: Stack Overflow with ApplicativeDo

GHC ghc-devs at haskell.org
Tue Aug 29 21:37:27 UTC 2017


#14163: Stack Overflow with ApplicativeDo
-------------------------------------+-------------------------------------
        Reporter:  lippling          |                Owner:  simonmar
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.2.2
       Component:  Compiler          |              Version:  8.2.1
      Resolution:                    |             Keywords:  ApplicativeDo
Operating System:  MacOS X           |         Architecture:  x86_64
 Type of failure:  Compile-time      |  (amd64)
  crash or panic                     |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by dfeuer):

 I have a pretty decent guess about the problem. We have

 {{{#!hs
 mkStmtTreeHeuristic :: [(ExprLStmt GhcRn, FreeVars)] -> ExprStmtTree
 mkStmtTreeHeuristic [one] = StmtTreeOne one
 mkStmtTreeHeuristic stmts =
   case segments stmts of
     [one] -> split one
     segs -> StmtTreeApplicative (map split segs)
  where
   split [one] = StmtTreeOne one
   split stmts =
     StmtTreeBind (mkStmtTreeHeuristic before) (mkStmtTreeHeuristic after)
     where (before, after) = splitSegment stmts
 }}}

 The `do` block in question can't actually be split at all (all the pattern
 matches are strict). So I ''think'' the trick is probably to make sure
 `before` is non-empty before producing `StmtTreeBind`. I'll give this a
 whirl.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14163#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list