
#8987: TH: panic in reportWarning when the message throws an exception -----------------------------------+--------------------------------------- Reporter: Yuras | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.1 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: Compile-time crash Unknown/Multiple | Test Case: Difficulty: Unknown | Blocking: Blocked By: | Related Tickets: | -----------------------------------+--------------------------------------- `reportWarning` and `reportError` doesn't force it's argument, so `ghc` panics when printing the message. To reproduce: {{{#!haskell test :: Q [Dec] test = do reportWarning undefined return [] }}} Output: {{{ main.hs:5:3: Warning:ghc: panic! (the 'impossible' happened) (GHC version 7.8.1 for x86_64-unknown-linux): Prelude.undefined Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug }}} The fix could be: {{{ --- a/compiler/typecheck/TcSplice.lhs +++ b/compiler/typecheck/TcSplice.lhs @@ -875,8 +875,8 @@ instance TH.Quasi (IOEnv (Env TcGblEnv TcLclEnv)) where ; let i = getKey u ; return (TH.mkNameU s i) } - qReport True msg = addErr (text msg) - qReport False msg = addWarn (text msg) + qReport True !msg = addErr (text msg) + qReport False !msg = addWarn (text msg) qLocation = do { m <- getModule ; l <- getSrcSpanM }}} But possibly it should `deepseq` the argument? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8987 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler