More informative assertion for non-unique TH names
Let's say that by accident I have duplicated uniques of Template Haskell built-in identifiers defined in THNames
module:
returnQIdKey = mkPreludeMiscIdUnique 200
bindQIdKey = mkPreludeMiscIdUnique 200
If I have a debugging build (-DDEBUG
) and start a GHCi session it crashes immediately with a very uninformative error message:
GHCi, version 7.11.20150903: http://www.haskell.org/ghc/ :? for help
<interactive>:1:1: error:
Bad interface file: /dane/projekty/ghc/build/libraries/base/dist-install/build/Prelude.hi
ghc-stage2: panic! (the 'impossible' happened)
(GHC version 7.11.20150903 for x86_64-unknown-linux):
ASSERT failed!
<<details unavailable>>
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
I have no idea where this assertion comes from as it gives absolutely no clue as to what caused the problem. During ICFP this costed me and Richard a total of around 6 man-hours. We should replace that assertion with something more meaningful. One thing we could do is add an assertion to the definition of THNames.templateHaskellNames
that makes sure that length templateHaskellNames == length (nub templateHaskellNames)
. That by itself is very simple but the problem is that the uninformative assertion given above still kicks in first.
Trac metadata
Trac field | Value |
---|---|
Version | 7.11 |
Type | Task |
TypeOfFailure | OtherFailure |
Priority | low |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |