
#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 simonpj): Just to record that we decided that the experiment in comment:68 is misleading. There are two main changes in Richard's patch 1. Do `closeOverKinds` at the end, here: {{{ -- NEW tyCoVarsOfType = closeOverKinds . tcvs_of_type }}} rather than independently at each leaf: {{{ -- OLD tyCoFVsOfType (TyVarTy v) a b c = (unitFV v `unionFV` tyCoFVsOfType (tyVarKind v)) a b c -- NEW tcvs_of_type (TyVarTy v) = unitVarSet v }}} 2. Insetad of using `FV` and then taking its `VarSet`, use `VarSets` directly. This jolly well ought to be faster. But in comment:68, Tobias used the new (1) but the old (2) and thus closed over the kind vars ''both'' at the leaves ''and'' at the end. That's not going to be fast. We agreed that a it'd be iluminating to start from the existing GHC baseline and try (2) alone: is `VarSet` faster than `FV`? Then add (1). NB: it is (1) that fixes the actual bug in this ticket. Ultimately it is not optional. But (1) should be a perf boost too! If a variable occurs N times, we'll take the free vars of its kind once instead of N times. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14880#comment:70 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler