[GHC] #12996: Memory leak in recursion when switching from -O1 to -O2

GHC ghc-devs at haskell.org
Tue Dec 20 00:19:30 UTC 2016


#12996: Memory leak in recursion when switching from -O1 to -O2
-------------------------------------+-------------------------------------
        Reporter:  AndreasK          |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:  Memory leak,
                                     |  optimization
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Runtime           |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 This turns out to be an example of #11731. It turns out that the thunk for
 `cycleState state` is wrongly marked "used-once", and that's why there's a
 massive slow-down.   (Each iteration evaluates it twice, so it goes
 exponential.)

 The patch for #11731 fixes it, but it never made it into GHC 8.0.   I'll
 mark it thus in case we ship 8.0.3.  It really is quite a serious bug.

 I'll make this bug into a test case.

 Meanwhile:

 > Demand analyzer thinks appLoop is not strict on s.

 It looks strict, but the demand analyser has a hack for I/O: earlier
 operations migth throw an exception, and so we treat them as lazy in their
 continuation.  See `Note [IO hack in the demand analyser]` in `DmdAnal`.

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


More information about the ghc-tickets mailing list