[GHC] #14880: GHC panic: updateRole

GHC ghc-devs at haskell.org
Thu Aug 30 21:29:44 UTC 2018


#14880: GHC panic: updateRole
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  goldfire
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.8.1
       Component:  Compiler (Type    |              Version:  8.2.2
  checker)                           |
      Resolution:                    |             Keywords:  TypeInType
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  crash or panic                     |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #15076            |  Differential Rev(s):  Phab:D4769
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by tdammers):

 Replying to [comment:94 goldfire]:
 > I have two takeaways from this:
 >
 > - An accumulator style is the Right Way to go when building up a set.
 This idea should probably be abstracted over right in the `VarSet`
 interface. But do we get these gains without eta-expanding everything?
 (See Note [FV eta expansion] in FV.)

 IIRC, I eta-reduced the relevant functions (`tyCoVarsOfXXXX`), but found
 no significant difference. I only did this for the `VarSet` approach
 though; I believe the reasoning in that note only holds for FV.

 Baking accumulator style into `VarSet` is logical, but if we do this, we
 also need to add the `in_scope` filtering thing found in `FV`, because, as
 the `nondet-no-in-scope` version shows, not doing this absolutely
 devastates performance. However, `VarSet` plus accumulator style is
 exactly `NDFV`, which is `FV` minus the list, which in turn makes no
 significant difference anyway. So effectively, this takeaway says we
 should be using `FV`.

 > - The extra work to track order has no effect. I find this surprising,
 but not overly so, because we can avoid the extra work via laziness.

 Well, when I wrote "no effect", I was actually lying a little bit -
 getting rid of the list reduces overall allocations by about 500 bytes.
 Which, I think, is about what you'd expect from removing something that
 never gets evaluated anyway.

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


More information about the ghc-tickets mailing list