summaryrefslogtreecommitdiff
path: root/testsuite/tests/dependent
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2018-08-24 16:40:28 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2018-08-24 16:47:22 +0100
commitff29fc84c03c800cfa04c2a00eb8edf6fa5f4183 (patch)
tree16660e00d3d8f57af74384eb642a3723b45f4f4e /testsuite/tests/dependent
parent4b79329f24dfdf907f223ff9fc41c77d9df86e04 (diff)
downloadhaskell-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 'testsuite/tests/dependent')
-rw-r--r--testsuite/tests/dependent/should_fail/T14066d.stderr2
1 files changed, 1 insertions, 1 deletions
diff --git a/testsuite/tests/dependent/should_fail/T14066d.stderr b/testsuite/tests/dependent/should_fail/T14066d.stderr
index 3f5eb9825a..8ece51029b 100644
--- a/testsuite/tests/dependent/should_fail/T14066d.stderr
+++ b/testsuite/tests/dependent/should_fail/T14066d.stderr
@@ -4,7 +4,7 @@ T14066d.hs:11:35: error:
‘b1’ is a rigid type variable bound by
a type expected by the context:
forall c b1 (a :: c). (Proxy a, Proxy c, b1)
- at T14066d.hs:11:33-35
+ at T14066d.hs:11:35
‘b’ is a rigid type variable bound by
the type signature for:
f :: forall b. b -> (Proxy Maybe, ())