[GHC] #13487: GHC panic with deferred custom type errors

GHC ghc-devs at haskell.org
Sun Mar 26 11:25:10 UTC 2017


#13487: GHC panic with deferred custom type errors
-------------------------------------+-------------------------------------
           Reporter:  DimaSamoz      |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.2
           Keywords:                 |  Operating System:  MacOS X
       Architecture:                 |   Type of failure:  Compile-time
  Unknown/Multiple                   |  crash or panic
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 I'm working on a music composition library that enforces composition rules
 at the type level. It makes heavy use of TypeInType and custom compiler
 errors. For example, it disallows dissonant major seventh intervals (e.g.,
 a C and a B) in harmonic composition. While testing the library, I
 encountered a GHC panic which I haven't seen anywhere – unfortunately I
 don't know enough about GHC to understand what is causing the panic and
 couldn't reproduce it in simpler examples. I was hoping that you could
 point me in the right direction so that I can find a smaller program that
 reproduces the error.

 In GHCi, with the -fdefer-type-errors flag set, the following code (which
 should throw a custom type error as it describes composing a B quarter
 note with a C quarter note) produces a panic:

 {{{
 λ: let t = c qn :-: b qn

 <interactive>:21:9: warning: [-Wdeferred-type-errors]
     • Can't have major sevenths in chords: C and B
     • In the expression: c qn :-: b qn
       In an equation for ‘t’: t = c qn :-: b qn
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.2 for x86_64-apple-darwin):
         nameModule system irred_aCeG

 Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
 }}}

 This does not appear when loading a source file, or when -fdefer-type-
 errors is disabled, and only happens when the expression is assigned to a
 new value. A lot of the literals in the library are generated by
 TemplateHaskell, but the error happens without them as well:

 {{{
 λ: let s = Note (Root :: Root (PitchRoot (Pitch B Natural Oct4))) (Dur ::
 Dur Quarter )
 λ: let t = Note (Root :: Root (PitchRoot (Pitch C Natural Oct4))) (Dur ::
 Dur Quarter )
 λ: let v = s :-: t

 <interactive>:27:9: warning: [-Wdeferred-type-errors]
     • Can't have major sevenths in chords: B and C
     • In the expression: s :-: t
       In an equation for ‘v’: v = s :-: t
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.2 for x86_64-apple-darwin):
         nameModule system irred_aCnF

 Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
 }}}

 The library is available on Hackage
 (https://hackage.haskell.org/package/mezzo) and the error is reproducible
 as soon as the main module is loaded.

 I'd happily try to find a smaller example which gives the same error, so I
 was hoping that you might have some ideas about what could be going wrong.

 Thank you!

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


More information about the ghc-tickets mailing list