[GHC] #15385: -Wincomplete-patterns gets confused when combining GADTs and pattern guards

GHC ghc-devs at haskell.org
Mon Jul 30 12:55:49 UTC 2018


#15385: -Wincomplete-patterns gets confused when combining GADTs and pattern guards
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  8.5
      Resolution:                    |             Keywords:
                                     |  PatternMatchWarnings
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D4968
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ryan Scott <ryan.gl.scott@…>):

 In [changeset:"9d388eb83e797fd28e14868009c4786f3f1a8aa6/ghc"
 9d388eb8/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="9d388eb83e797fd28e14868009c4786f3f1a8aa6"
 Fix #15385 by using addDictsDs in matchGuards

 Summary:
 When coverage checking pattern-matches, we rely on the call
 sites in the desugarer to populate the local dictionaries and term
 evidence in scope using `addDictsDs` and `addTmCsDs`. But it turns
 out that only the call site for desugaring `case` expressions was
 actually doing this properly. In another part of the desugarer,
 `matchGuards` (which handles pattern guards), it did not update the
 local dictionaries in scope at all, leading to #15385.

 Fixing this is relatively straightforward: just augment the
 `BindStmt` case of `matchGuards` to use `addDictsDs` and `addTmCsDs`.
 Accomplishing this took a little bit of import/export tweaking:

 * We now need to export `collectEvVarsPat` from `HsPat.hs`.
 * To avoid an import cycle with `Check.hs`, I moved `isTrueLHsExpr`
   from `DsGRHSs.hs` to `DsUtils.hs`, which resides lower on the
   import chain.

 Test Plan: make test TEST=T15385

 Reviewers: simonpj, bgamari

 Reviewed By: simonpj

 Subscribers: rwbarton, thomie, carter

 GHC Trac Issues: #15385

 Differential Revision: https://phabricator.haskell.org/D4968
 }}}

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


More information about the ghc-tickets mailing list