[GHC] #7672: boot file entities are sometimes invisible and are not (semantically) unified with corresponding entities in implementing module

GHC ghc-devs at haskell.org
Tue Jun 2 09:34:05 UTC 2015


#7672: boot file entities are sometimes invisible and are not (semantically)
unified with corresponding entities in implementing module
-------------------------------------+-------------------------------------
        Reporter:  skilpat           |                   Owner:  ezyang
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:  7.12.1
       Component:  Compiler (Type    |                 Version:  7.4.2
  checker)                           |                Keywords:  backpack
      Resolution:                    |            Architecture:  x86_64
Operating System:  Linux             |  (amd64)
 Type of failure:  GHC rejects       |               Test Case:  T7672
  valid program                      |                Blocking:  10336
      Blocked By:                    |  Differential Revisions:
 Related Tickets:                    |
-------------------------------------+-------------------------------------

Comment (by Simon Peyton Jones <simonpj@…>):

 In [changeset:"9b73cb16485f331d9dc1f37826c6d503e24a5b0b/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="9b73cb16485f331d9dc1f37826c6d503e24a5b0b"
 Refactor the GlobalRdrEnv, fixing #7672

 This patch started innocently enough, by deleting a single
 call from rnImportDecl, namely

     let gbl_env = mkGlobalRdrEnv (filterOut from_this_mod gres)

 The 'filterOut' makes no sense, and was the cause of #7672.

 But that little loose end led to into a twisty maze of little
 passages, all alike, which has taken me an unreasonably long
 time to straighten out. Happily, I think the result is really
 much better.

 In particular:

  * INVARIANT 1 of the GlobalRdrEnv type was simply not true:
    we had multiple GlobalRdrElts in a list with the same
    gre_name field. This kludgily implmented one form of
    shadowing.

  * Meanwhile, extendGlobalRdrEnvRn implemented a second form of
    shadowing, by deleting stuff from the GlobalRdrEnv.

  * In turn, much of this shadowing stuff depended on the Names of
    the Ids bound in the GHCi InteractiveContext being Internal
    names, even though the TyCons and suchlike all had External
    Names. Very confusing.

 So I have made the following changes

  * I re-established INVARIANT 1 of GlobalRdrEnv.  As a result
    some strange code in RdrName.pickGREs goes away.

  * RnNames.extendGlobalRdrEnvRn now makes one call to deal with
    shadowing, where necessary, and another to extend the
    environment.  It deals separately with duplicate bindings.

    The very complicated RdrName.extendGlobalRdrEnv becomes much
    simpler; we need to export the shadowing function, now called
    RdrName.shadowNames; and we can nuke
    RdrName.findLocalDupsRdrEnv altogether.

    RdrName Note [GlobalRdrEnv shadowing] summarises the shadowing
    story

  * The Names of the Ids bound in the GHCi interactive context are
    now all External.  See Note [Interactively-bound Ids in GHCi]
    in HscTypes.

  * Names for Ids created by the debugger are now made by
    IfaceEnv.newInteractiveBinder.  This fixes a lurking bug which
    was that the debugger was using mkNewUniqueSupply 'I' to make
    uniques, which does NOT guarantee a fresh supply of uniques on
    successive calls.

  * Note [Template Haskell ambiguity] in RnEnv shows that one TH-related
    error is reported lazily (on occurrences) when it might be better
    reported when extending the environment.  In some (but not all) cases
    this was done before; but now it's uniformly at occurrences.  In
    some ways it'd be better to report when extending the environment,
    but it's a tiresome test and the error is rare, so I'm leaving it
    at the lookup site for now, with the above Note.

  * A small thing: RnNames.greAvail becomes RdrName.availFromGRE, where
    it joins the dual RdrName.gresFromAvail.
 }}}

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


More information about the ghc-tickets mailing list