[GHC] #8603: GHC crashes on some code using StateT monad transformer

GHC ghc-devs at haskell.org
Mon Dec 30 12:11:07 UTC 2013


#8603: GHC crashes on some code using StateT monad transformer
--------------------------------------------+------------------------------
        Reporter:  person1729               |            Owner:
            Type:  bug                      |           Status:  new
        Priority:  normal                   |        Milestone:
       Component:  Compiler (Type checker)  |          Version:  7.6.3
      Resolution:                           |         Keywords:
Operating System:  MacOS X                  |     Architecture:  x86_64
 Type of failure:  Compile-time crash       |  (amd64)
       Test Case:  Attached                 |       Difficulty:  Unknown
        Blocking:                           |       Blocked By:
                                            |  Related Tickets:
--------------------------------------------+------------------------------

Comment (by Simon Peyton Jones <simonpj@…>):

 In [changeset:"8721743e88f4c8c385eb0ceb0ca6804b2143a8fa/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="8721743e88f4c8c385eb0ceb0ca6804b2143a8fa"
 Re-factor TcCanonical (again), fixes Trac #8603

 This is a substantial refactoring of the canonicaliser. The proximate
 cause was that we were sometimes failing to correctly orient a
 tyvar/tyvar equality (x ~ y), because the kind of x or y was not fully
 zonked at the moment we compared them.  That in turn led me to look
 closely at the way that canEvNC (which decomposes equalities) worked.

 * The big change is that the 'reOrient' and 'classify' functions are gone,
   along with classify's 'TypeClassifier' return type.  Instead the
   re-orientation is built into canEqNC.  When we find a type variable
   we divert into canEqTyVar, and so on, very much as in TcUnify.

 * TcCanonical.canEqTyVar, canEqLeafFun, etc now carry a SwapFlag (to
   reduce duplication), just as in TcUnify; now SwapFlag itself is
   defined in BasicTypes

 * I renamed TcSMonad.rewriteCtFlavor to rewriteEvidence,

 * I added a new specialised version of rewriteEvidence, called
   TcSMonad.rewriteEqEvidence.  It is easier to use, and removes
   the crafty but brain-mangling higher order casts that we were
   using before.

 The result is not exactly simpler, but it's pretty clear and, I think,
 significantly more efficient.  And it fixes Trac #8603!
 }}}

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


More information about the ghc-tickets mailing list