diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2018-08-24 16:40:28 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2018-08-24 16:47:22 +0100 |
commit | ff29fc84c03c800cfa04c2a00eb8edf6fa5f4183 (patch) | |
tree | 16660e00d3d8f57af74384eb642a3723b45f4f4e /utils/ghc-pkg | |
parent | 4b79329f24dfdf907f223ff9fc41c77d9df86e04 (diff) | |
download | haskell-ff29fc84c03c800cfa04c2a00eb8edf6fa5f4183.tar.gz |
Better error reporting for inaccessible code
This patch fixes Trac #15558. There turned out to be
two distinct problems
* In TcExpr.tc_poly_expr_nc we had
tc_poly_expr_nc (L loc expr) res_ty
= do { traceTc "tcPolyExprNC" (ppr res_ty)
; (wrap, expr')
<- tcSkolemiseET GenSigCtxt res_ty $ \ res_ty ->
setSrcSpan loc $
-- NB: setSrcSpan *after* skolemising,
-- so we get better skolem locations
tcExpr expr res_ty
Putting the setSrcSpan inside the tcSkolemise means that
the location on the Implication constraint is the /call/
to the function rather than the /argument/ to the call,
and that is really quite wrong.
I don't know what Richard's comment NB means -- I moved the
setSrcSpan outside, and the "binding site" info in error
messages actually improved.
The reason I found this is that it affects the span reported
for Trac #15558.
* In TcErrors.mkGivenErrorReporter we carefully munge the location
for an insoluble Given constraint (Note [Inaccessible code]).
But the 'implic' passed in wasn't necesarily the immediately-
enclosing implication -- but for location-munging purposes
it jolly well should be.
Solution: use the innermost implication. This actually
simplifies the code -- no need to pass an implication in to
mkGivenErrorReporter.
Diffstat (limited to 'utils/ghc-pkg')
0 files changed, 0 insertions, 0 deletions