summaryrefslogtreecommitdiff
path: root/compiler/utils/Outputable.hs
diff options
context:
space:
mode:
authorBartosz Nitka <niteria@gmail.com>2016-01-13 14:44:58 +0100
committerBen Gamari <ben@smart-cactus.org>2016-01-13 14:52:37 +0100
commit88d6d5aae2ae86646084f3a060ae911eff589b7a (patch)
tree655d293aa89ad51b5bc8883585efdda56416dac7 /compiler/utils/Outputable.hs
parent3e796e1ae8b13ec1c607a1864894171a58cef592 (diff)
downloadhaskell-88d6d5aae2ae86646084f3a060ae911eff589b7a.tar.gz
Use implicit CallStacks for ASSERT when available
This aids with debugging, since all you have to do to get more stack frames is add a constraint `(?callStack :: CallStack) =>`. Old output: ``` ghc-stage2: panic! (the 'impossible' happened) (GHC version 8.1.20160107 for x86_64-unknown-linux): ASSERT failed! file compiler/types/TyCoRep.hs line 1800 InScope [] [Xuv :-> n_av5[sk]] [] ``` New output: ``` ghc-stage2: panic! (the 'impossible' happened) (GHC version 8.1.20160107 for x86_64-unknown-linux): ASSERT failed! CallStack (from ImplicitParams): assertPprPanic, called at compiler/types/TyCoRep.hs:1800:95 in ghc:TyCoRep InScope [] [Xuv :-> n_av5[sk]] [] ``` Test Plan: harbormaster manual testing Reviewers: austin, gridaphobe, bgamari Reviewed By: gridaphobe, bgamari Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D1751
Diffstat (limited to 'compiler/utils/Outputable.hs')
-rw-r--r--compiler/utils/Outputable.hs13
1 files changed, 11 insertions, 2 deletions
diff --git a/compiler/utils/Outputable.hs b/compiler/utils/Outputable.hs
index c3bdf5eb79..35a59c6409 100644
--- a/compiler/utils/Outputable.hs
+++ b/compiler/utils/Outputable.hs
@@ -1096,15 +1096,24 @@ warnPprTrace True file line msg x
where
heading = hsep [text "WARNING: file", text file <> comma, text "line", int line]
+-- | Panic with an assertation failure, recording the given file and
+-- line number. Should typically be accessed with the ASSERT family of macros
+#if __GLASGOW_HASKELL__ > 710
+assertPprPanic :: (?callStack :: CallStack) => String -> Int -> SDoc -> a
+assertPprPanic _file _line msg
+ = pprPanic "ASSERT failed!" doc
+ where
+ doc = sep [ text (prettyCallStack ?callStack)
+ , msg ]
+#else
assertPprPanic :: String -> Int -> SDoc -> a
--- ^ Panic with an assertation failure, recording the given file and line number.
--- Should typically be accessed with the ASSERT family of macros
assertPprPanic file line msg
= pprPanic "ASSERT failed!" doc
where
doc = sep [ hsep [ text "file", text file
, text "line", int line ]
, msg ]
+#endif
pprDebugAndThen :: DynFlags -> (String -> a) -> SDoc -> SDoc -> a
pprDebugAndThen dflags cont heading pretty_msg