From: simonpj Date: Thu, 28 Jul 2005 13:51:28 +0000 (+0000) Subject: [project @ 2005-07-28 13:51:28 by simonpj] X-Git-Tag: Initial_conversion_from_CVS_complete~290 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=a32d3e4da0aceb624c958f02cad7327e17ac94db;hp=106fcfb0003ae4555db0495904864f8921c49202;p=ghc-hetmet.git [project @ 2005-07-28 13:51:28 by simonpj] MERGE to STABLE Fix a TH name-reification bug. The problem is that when you say 'name in TH, you'd better load the home interface for "name", so that deprecations are reported properly. Fixes SourceForge [ghc-Bugs-1246483 ] Template Haskell panic with class names TH_reifyType2 is a test for it. --- diff --git a/ghc/compiler/rename/RnExpr.lhs b/ghc/compiler/rename/RnExpr.lhs index 0bf40e6..ad7ddc5 100644 --- a/ghc/compiler/rename/RnExpr.lhs +++ b/ghc/compiler/rename/RnExpr.lhs @@ -36,6 +36,7 @@ import PrelNames ( hasKey, assertIdKey, assertErrorName, import Name ( Name, nameOccName ) import NameSet import RdrName ( RdrName, emptyGlobalRdrEnv, extendLocalRdrEnv, lookupLocalRdrEnv ) +import LoadIface ( loadHomeInterface ) import UnicodeUtil ( stringToUtf8 ) import UniqFM ( isNullUFM ) import UniqSet ( emptyUniqSet ) @@ -526,14 +527,20 @@ rnRbinds str rbinds %************************************************************************ \begin{code} -rnBracket (VarBr n) = lookupOccRn n `thenM` \ name -> - returnM (VarBr name, unitFV name) -rnBracket (ExpBr e) = rnLExpr e `thenM` \ (e', fvs) -> - returnM (ExpBr e', fvs) -rnBracket (PatBr p) = rnLPat p `thenM` \ (p', fvs) -> - returnM (PatBr p', fvs) -rnBracket (TypBr t) = rnHsTypeFVs doc t `thenM` \ (t', fvs) -> - returnM (TypBr t', fvs) +rnBracket (VarBr n) = do { name <- lookupOccRn n + ; loadHomeInterface msg name -- Reason: deprecation checking asumes the + -- home interface is loaded, and this is the + -- only way that is going to happen + ; returnM (VarBr name, unitFV name) } + where + msg = ptext SLIT("Need interface for Template Haskell quoted Name") + +rnBracket (ExpBr e) = do { (e', fvs) <- rnLExpr e + ; return (ExpBr e', fvs) } +rnBracket (PatBr p) = do { (p', fvs) <- rnLPat p + ; return (PatBr p', fvs) } +rnBracket (TypBr t) = do { (t', fvs) <- rnHsTypeFVs doc t + ; return (TypBr t', fvs) } where doc = ptext SLIT("In a Template-Haskell quoted type") rnBracket (DecBr group)