
#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: | Phab:D5141 -------------------------------------+------------------------------------- Comment (by simonpj):
If a variable is not in the bound-var set (in other words, if we look at it at all), then no variable in its kind is in the bound-var set (so we can zap the bound-var set).
No, not at all! Suppose (b::k) is free in some type `(forall k. b -> T k)`. Then, when we encounter `b` * `b` is not in the bound-var set * But `k` certainly is, and should be * But it's a ''different k'', despite having the same name So it's not just that we ''can'' zap the bound-var set; we ''must'' zap it!! Consider: if we instead waited until the end we'd have `b::k` in our free var set. Then we call `closeOverKinds` (that was our plan, before comment:123). Well, at that point the bound-var set is certainly empty (we are at the top), and we find the free vars of `k` (namely `k` itself) using that empty bound-var set. Regardless, this still looks solid to me, if Tobias can just test it. (It could conceivably be worth doing `TcType.candidateQTyVarsOfType` the same way, for consistency; but that is an un-forced change.) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14880#comment:125 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler