Commit 0d9f105b authored by Ben Gamari's avatar Ben Gamari 🐢

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.
parent 372b5d1b
......@@ -87,7 +87,7 @@ import Unique ( Unique, Uniquable(..) )
import FastString
import Data.Maybe
import NameCache (lookupOrigNameCache)
import IfaceEnv ( lookupOrigIO )
import GhcPrelude
import MonadUtils ( mapMaybeM )
import Convert ( thRdrNameGuesses )
......@@ -127,6 +127,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
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment