diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/GHC/Rename/Env.hs | 16 | ||||
-rw-r--r-- | compiler/GHC/Tc/Errors/Ppr.hs | 20 | ||||
-rw-r--r-- | compiler/GHC/Tc/Errors/Types.hs | 42 | ||||
-rw-r--r-- | compiler/GHC/Types/Error/Codes.hs | 5 |
4 files changed, 29 insertions, 54 deletions
diff --git a/compiler/GHC/Rename/Env.hs b/compiler/GHC/Rename/Env.hs index 0c0e944d64..ec423d0087 100644 --- a/compiler/GHC/Rename/Env.hs +++ b/compiler/GHC/Rename/Env.hs @@ -187,7 +187,7 @@ newTopSrcBinder (L loc rdr_name) if isExternalName name then do { this_mod <- getModule ; unless (this_mod == nameModule name) - (addErrAt (locA loc) (badOrigBinding rdr_name)) + (addErrAt (locA loc) (TcRnBindingOfExistingName rdr_name)) ; return name } else -- See Note [Binders in Template Haskell] in "GHC.ThToHs" do { this_mod <- getModule @@ -196,7 +196,7 @@ newTopSrcBinder (L loc rdr_name) | Just (rdr_mod, rdr_occ) <- isOrig_maybe rdr_name = do { this_mod <- getModule ; unless (rdr_mod == this_mod || rdr_mod == rOOT_MAIN) - (addErrAt (locA loc) (badOrigBinding rdr_name)) + (addErrAt (locA loc) (TcRnBindingOfExistingName rdr_name)) -- When reading External Core we get Orig names as binders, -- but they should agree with the module gotten from the monad -- @@ -205,7 +205,7 @@ newTopSrcBinder (L loc rdr_name) -- the constructor is parsed as a type, and then GHC.Parser.PostProcess.tyConToDataCon -- uses setRdrNameSpace to make it into a data constructors. At that point -- the nice Exact name for the TyCon gets swizzled to an Orig name. - -- Hence the badOrigBinding error message. + -- Hence the TcRnBindingOfExistingName error message. -- -- MP 2022: I suspect this code path is never called for `rOOT_MAIN` anymore @@ -2118,13 +2118,3 @@ lookupQualifiedDoName ctxt std_name = case qualifiedDoModuleName_maybe ctxt of Nothing -> lookupSyntaxName std_name Just modName -> lookupNameWithQualifier std_name modName - - --- Error messages - -badOrigBinding :: RdrName -> TcRnMessage -badOrigBinding name - | Just _ <- isBuiltInOcc_maybe occ = TcRnIllegalBindingOfBuiltIn occ - | otherwise = TcRnNameByTemplateHaskellQuote name - where - occ = rdrNameOcc $ filterCTuple name diff --git a/compiler/GHC/Tc/Errors/Ppr.hs b/compiler/GHC/Tc/Errors/Ppr.hs index 984cf95903..e173567844 100644 --- a/compiler/GHC/Tc/Errors/Ppr.hs +++ b/compiler/GHC/Tc/Errors/Ppr.hs @@ -25,7 +25,7 @@ module GHC.Tc.Errors.Ppr import GHC.Prelude import GHC.Builtin.Names -import GHC.Builtin.Types ( boxedRepDataConTyCon, tYPETyCon ) +import GHC.Builtin.Types ( boxedRepDataConTyCon, tYPETyCon, filterCTuple ) import GHC.Core.Coercion import GHC.Core.Unify ( tcMatchTys ) @@ -968,10 +968,6 @@ instance Diagnostic TcRnMessage where -> mkSimpleDecorated $ text "You cannot SPECIALISE" <+> quotes (ppr name) <+> text "because its definition is not visible in this module" - TcRnNameByTemplateHaskellQuote name -> mkSimpleDecorated $ - text "Cannot redefine a Name retrieved by a Template Haskell quote:" <+> ppr name - TcRnIllegalBindingOfBuiltIn name -> mkSimpleDecorated $ - text "Illegal binding of built-in syntax:" <+> ppr name TcRnPragmaWarning {pragma_warning_occ, pragma_warning_msg, pragma_warning_import_mod, pragma_warning_defined_mod} -> mkSimpleDecorated $ sep [ sep [ text "In the use of" @@ -1238,6 +1234,8 @@ instance Diagnostic TcRnMessage where Left gbl_names -> vcat (map (\name -> quotes (ppr $ grePrintableName name) <+> pprNameProvenance name) gbl_names) Right lcl_name -> quotes (ppr lcl_name) <+> text "defined at" <+> ppr (nameSrcLoc lcl_name) + TcRnBindingOfExistingName name -> mkSimpleDecorated $ + text "Illegal binding of an existing name:" <+> ppr (filterCTuple name) diagnosticReason = \case TcRnUnknownMessage m @@ -1552,10 +1550,6 @@ instance Diagnostic TcRnMessage where -> WarningWithoutFlag TcRnSpecialiseNotVisible{} -> WarningWithoutFlag - TcRnNameByTemplateHaskellQuote{} - -> ErrorWithoutFlag - TcRnIllegalBindingOfBuiltIn{} - -> ErrorWithoutFlag TcRnPragmaWarning{} -> WarningWithFlag Opt_WarnWarningsDeprecations TcRnIllegalHsigDefaultMethods{} @@ -1646,6 +1640,8 @@ instance Diagnostic TcRnMessage where -> ErrorWithoutFlag TcRnCapturedTermName{} -> WarningWithFlag Opt_WarnTermVariableCapture + TcRnBindingOfExistingName{} + -> ErrorWithoutFlag diagnosticHints = \case TcRnUnknownMessage m @@ -1962,10 +1958,6 @@ instance Diagnostic TcRnMessage where -> noHints TcRnSpecialiseNotVisible name -> [SuggestSpecialiseVisibilityHints name] - TcRnNameByTemplateHaskellQuote{} - -> noHints - TcRnIllegalBindingOfBuiltIn{} - -> noHints TcRnPragmaWarning{} -> noHints TcRnIllegalHsigDefaultMethods{} @@ -2059,6 +2051,8 @@ instance Diagnostic TcRnMessage where -> [suggestExtension LangExt.TupleSections] TcRnCapturedTermName{} -> [SuggestRenameTypeVariable] + TcRnBindingOfExistingName{} + -> noHints diagnosticCode = constructorCode diff --git a/compiler/GHC/Tc/Errors/Types.hs b/compiler/GHC/Tc/Errors/Types.hs index add396957c..3846dd874d 100644 --- a/compiler/GHC/Tc/Errors/Types.hs +++ b/compiler/GHC/Tc/Errors/Types.hs @@ -2193,32 +2193,6 @@ data TcRnMessage where -} TcRnSpecialiseNotVisible :: !Name -> TcRnMessage - {- TcRnNameByTemplateHaskellQuote is an error that occurs when one tries - to use a Template Haskell splice to define a top-level identifier with - an already existing name. - - (See issue #13968 (closed) on GHC's issue tracker for more details) - - Example(s): - - $(pure [ValD (VarP 'succ) (NormalB (ConE 'True)) []]) - - Test cases: - T13968 - -} - TcRnNameByTemplateHaskellQuote :: !RdrName -> TcRnMessage - - {- TcRnIllegalBindingOfBuiltIn is an error that occurs when one uses built-in - syntax for data constructors or class names. - - Use an OccName here because we don't want to print Prelude.(,) - - Test cases: - rename/should_fail/T14907b - rename/should_fail/rnfail042 - -} - TcRnIllegalBindingOfBuiltIn :: !OccName -> TcRnMessage - {- TcRnPragmaWarning is a warning that can happen when usage of something is warned or deprecated by pragma. @@ -2773,6 +2747,22 @@ data TcRnMessage where -} TcRnSectionWithoutParentheses :: HsExpr GhcPs -> TcRnMessage + {- TcRnBindingOfExistingName is an error triggered by an attempt to rebind + built-in syntax, punned list or tuple syntax, or a name quoted via Template Haskell. + + Examples: + + data [] + data (->) + $(pure [ValD (VarP 'succ) (NormalB (ConE 'True)) []]) + + Test cases: rename/should_fail/T14907b + rename/should_fail/T22839 + rename/should_fail/rnfail042 + th/T13968 + -} + TcRnBindingOfExistingName :: RdrName -> TcRnMessage + deriving Generic -- | Things forbidden in @type data@ declarations. diff --git a/compiler/GHC/Types/Error/Codes.hs b/compiler/GHC/Types/Error/Codes.hs index 544ebc905f..c46320da0d 100644 --- a/compiler/GHC/Types/Error/Codes.hs +++ b/compiler/GHC/Types/Error/Codes.hs @@ -468,8 +468,6 @@ type family GhcDiagnosticCode c = n | n -> c where GhcDiagnosticCode "TcRnNonOverloadedSpecialisePragma" = 35827 GhcDiagnosticCode "TcRnSpecialiseNotVisible" = 85337 GhcDiagnosticCode "TcRnIllegalTypeOperatorDecl" = 50649 - GhcDiagnosticCode "TcRnNameByTemplateHaskellQuote" = 40027 - GhcDiagnosticCode "TcRnIllegalBindingOfBuiltIn" = 69639 GhcDiagnosticCode "TcRnIllegalHsigDefaultMethods" = 93006 GhcDiagnosticCode "TcRnBadGenericMethod" = 59794 @@ -502,6 +500,7 @@ type family GhcDiagnosticCode c = n | n -> c where GhcDiagnosticCode "TcRnBadFamInstDecl" = 06206 GhcDiagnosticCode "TcRnNotOpenFamily" = 06207 GhcDiagnosticCode "TcRnCapturedTermName" = 54201 + GhcDiagnosticCode "TcRnBindingOfExistingName" = 58805 -- IllegalNewtypeReason GhcDiagnosticCode "DoesNotHaveSingleField" = 23517 @@ -607,6 +606,8 @@ type family GhcDiagnosticCode c = n | n -> c where -- no longer reports. These are collected below. GhcDiagnosticCode "Example outdated error" = 00000 + GhcDiagnosticCode "TcRnNameByTemplateHaskellQuote" = 40027 + GhcDiagnosticCode "TcRnIllegalBindingOfBuiltIn" = 69639 {- ********************************************************************* * * |