From 88d6d5aae2ae86646084f3a060ae911eff589b7a Mon Sep 17 00:00:00 2001 From: Bartosz Nitka Date: Wed, 13 Jan 2016 14:44:58 +0100 Subject: 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 --- compiler/utils/Outputable.hs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'compiler/utils') 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 -- cgit v1.2.1