[GHC] #14759: ListSetOps WARNING causes tests to fail

GHC ghc-devs at haskell.org
Mon Apr 30 12:55:28 UTC 2018


#14759: ListSetOps WARNING causes tests to fail
-------------------------------------+-------------------------------------
        Reporter:  ezyang            |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D4628
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 >  I think this can work, but we'd have to remove dups from A's imp_finsts
 before computing imp_finsts for B if B imports A. Otherwise for bigger
 module hierarchies a lot of duplicates will accumulate.

 Yes, the idea is to allow dups to accumulate (which happens for free, just
 by `unionBags`) and then when ''consuming'' the bag simply avoid doing
 things twice.  I think that's good, because generally we accumulate the
 `imp_fints` and then remove dups, sort, etc to make `dep_finists` for this
 module.  But this approach does depend on the "accumulate and consume
 once" pattern.

 > Perhaps we could avoid explicitly storing the whole transitive closure
 if when checking type family consistency we did a traversal with pruning
 instead

 Maybe so, but I'm not certain.  For sure you'd want to know whether a
 module had family instances either in itself or in its transitive imports.
 Let's call that the "finst flag" Then, to look for imported instances, you
 could say

 * For each imported module M, if its finst-flag is off, ignore M.
 * Otherwise, check for family instances in M, and then
 * Consider each direct import of M

 That'd require you to traverse a path of .hi files to get to the one with
 the family instances in it.  (Currently we can jump direct to the latter.)
 But perhaps that's fine.  Looks like a good thing to explore.

 We could do the same for orphan-instance modules.

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


More information about the ghc-tickets mailing list