Commit 88d6d5aa authored by niteria's avatar niteria Committed by Ben Gamari
Browse files

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
parent 3e796e1a
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment