
#10872: More informative assertion for non-unique TH names -------------------------------------+------------------------------------- Reporter: jstolarek | Owner: Type: task | Status: new Priority: low | Milestone: Component: Compiler | Version: 7.11 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Revisions: | -------------------------------------+------------------------------------- Let's say that by accident I have duplicated uniques of Template Haskell built-in identifiers defined in `THNames` module: {{{#!hs 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. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10872 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler