[commit: ghc] wip/ghc-8.6-merge: GhcPlugins: Fix lookup of TH names (9807e00)

git at git.haskell.org git at git.haskell.org
Sat Feb 9 18:22:58 UTC 2019


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/ghc-8.6-merge
Link       : http://ghc.haskell.org/trac/ghc/changeset/9807e0042f42adc91faea92a002a94e86e461b55/ghc

>---------------------------------------------------------------

commit 9807e0042f42adc91faea92a002a94e86e461b55
Author: Ben Gamari <ben at smart-cactus.org>
Date:   Sat Jan 19 13:59:18 2019 -0500

    GhcPlugins: Fix lookup of TH names
    
    Previously `thNameToGhcName` was calling `lookupOrigNameCache` directly, which
    failed to handle the case that the name wasn't already in the name cache. This
    happens, for instance, when the name was in scope in a plugin being used during
    compilation but not in scope in the module being compiled. In this case we the
    interface file containing the name won't be loaded and `lookupOrigNameCache`
    fails. This was the cause of #16104.
    
    The solution is simple: use the nicely packaged `lookupOrigIO` instead.
    
    (cherry picked from commit 0d9f105ba423af4f2ca215a18d04d4c8e2c372a8)


>---------------------------------------------------------------

9807e0042f42adc91faea92a002a94e86e461b55
 compiler/simplCore/CoreMonad.hs | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/compiler/simplCore/CoreMonad.hs b/compiler/simplCore/CoreMonad.hs
index 912ff99..683fb04 100644
--- a/compiler/simplCore/CoreMonad.hs
+++ b/compiler/simplCore/CoreMonad.hs
@@ -67,6 +67,7 @@ import Annotations
 
 import IOEnv hiding     ( liftIO, failM, failWithM )
 import qualified IOEnv  ( liftIO )
+import IfaceEnv         ( lookupOrigIO )
 import TcEnv            ( lookupGlobal )
 import Var
 import Outputable
@@ -821,6 +822,6 @@ thNameToGhcName th_name
       | Just n <- isExact_maybe rdr_name   -- This happens in derived code
       = return $ if isExternalName n then Just n else Nothing
       | Just (rdr_mod, rdr_occ) <- isOrig_maybe rdr_name
-      = do { cache <- getOrigNameCache
-           ; return $ lookupOrigNameCache cache rdr_mod rdr_occ }
+      = do { hsc_env <- getHscEnv
+           ; Just <$> liftIO (lookupOrigIO hsc_env rdr_mod rdr_occ) }
       | otherwise = return Nothing



More information about the ghc-commits mailing list