[GHC] #12035: hs-boot knot tying insufficient for ghc --make
GHC
ghc-devs at haskell.org
Tue May 10 09:47:18 UTC 2016
#12035: hs-boot knot tying insufficient for ghc --make
-------------------------------------+-------------------------------------
Reporter: ezyang | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
(Type checker) |
Keywords: hs-boot | Operating System: Unknown/Multiple
backpack |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
GHC in one-shot mode goes through great pains to make sure that if we are
typechecking A.hs with an A.hs-boot, any references to A in the interfaces
we load in should point to the `TyThing`s from our LOCAL `tcg_type_env`
(`_var`), not the declarations from the `hs-boot`. Indeed, it is never
right to load the hi-boot file into the EPS (#10182, #10336). Because in
one-shot compilation we are loading things into the EPS anew, there is not
much risk of having stale `TyThing`s lying around which still refer to the
old `hs-boot` ModDetails.
`ghc --make` does not do a sufficient job as knot tying. Specifically, any
`Id`s/`TyThing`s from the HPT which were built against the `hs-boot`
ModDetails will have out-of-date information. We do manage to tie the knot
if we use `tcLookupGlobal` directly, which does look in the local type
environment (e.g., #12034 affects both `-c` and `--make`), but if we get
our hands on a `TyThing` indirectly, we're in trouble. The case where this
is most obvious is unfoldings; see #10083 for an example of GHC behaving
differently between `-c` and `--make` (although, ironically, `--make`s bad
behavior masks the bug).
It's not entirely clear how to fix this problem. In analogy to what
happens in `-c`, we should clear the stale `TyThing`s from our HPT and
retypecheck them after we have setup the type environment for our `hs`
file. But presently in `--make` we don't lazily load types from our home
package. Maybe we should!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12035>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list