summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Price <ben@brprice.uk>2020-01-27 13:53:32 +0000
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-05-21 12:12:17 -0400
commit24e61aad37355fa3a5503b11a60ab7b314a3f405 (patch)
tree1b4d381aec62d8d064d0102bbbabd3c4ca6830cf
parenta9311cd53d33439e8fe79967ba5fb85bcd114fec (diff)
downloadhaskell-24e61aad37355fa3a5503b11a60ab7b314a3f405.tar.gz
Lint should say when it is checking a rule
It is rather confusing that when lint finds an error in a rule attached to a binder, it reports the error as in the RHS, not the rule: ... In the RHS of foo We add a clarifying line: ... In the RHS of foo In a rule attached to foo The implication that the rule lives inside the RHS is a bit odd, but this niggle is already present for unfoldings, whose pattern we are following.
-rw-r--r--compiler/GHC/Core/Lint.hs6
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/GHC/Core/Lint.hs b/compiler/GHC/Core/Lint.hs
index 872a081f47..f0222ec632 100644
--- a/compiler/GHC/Core/Lint.hs
+++ b/compiler/GHC/Core/Lint.hs
@@ -659,7 +659,7 @@ lintLetBind top_lvl rec_flag binder rhs rhs_ty
ppr binder)
_ -> return ()
- ; mapM_ (lintCoreRule binder binder_ty) (idCoreRules binder)
+ ; addLoc (RuleOf binder) $ mapM_ (lintCoreRule binder binder_ty) (idCoreRules binder)
; addLoc (UnfoldingOf binder) $
lintIdUnfolding binder binder_ty (idUnfolding binder) }
@@ -2293,6 +2293,7 @@ data LintLocInfo
= RhsOf Id -- The variable bound
| OccOf Id -- Occurrence of id
| LambdaBodyOf Id -- The lambda-binder
+ | RuleOf Id -- Rules attached to a binder
| UnfoldingOf Id -- Unfolding of a binder
| BodyOfLetRec [Id] -- One of the binders
| CaseAlt CoreAlt -- Case alternative
@@ -2511,6 +2512,9 @@ dumpLoc (OccOf v)
dumpLoc (LambdaBodyOf b)
= (getSrcLoc b, text "In the body of lambda with binder" <+> pp_binder b)
+dumpLoc (RuleOf b)
+ = (getSrcLoc b, text "In a rule attached to" <+> pp_binder b)
+
dumpLoc (UnfoldingOf b)
= (getSrcLoc b, text "In the unfolding of" <+> pp_binder b)