[GHC] #15558: Locally handling an empty constraint

GHC ghc-devs at haskell.org
Fri Aug 24 16:20:37 UTC 2018


#15558: Locally handling an empty constraint
-------------------------------------+-------------------------------------
        Reporter:  Ericson2314       |                Owner:  (none)
            Type:  task              |               Status:  new
        Priority:  normal            |            Milestone:  ⊥
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Incorrect         |  Unknown/Multiple
  error/warning at compile-time      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Simon Peyton Jones <simonpj@…>):

 In [changeset:"ff29fc84c03c800cfa04c2a00eb8edf6fa5f4183/ghc"
 ff29fc84/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="ff29fc84c03c800cfa04c2a00eb8edf6fa5f4183"
 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.
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15558#comment:9>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list