summaryrefslogtreecommitdiff
path: root/compiler/rename
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rename')
-rw-r--r--compiler/rename/RnPat.lhs20
1 files changed, 18 insertions, 2 deletions
diff --git a/compiler/rename/RnPat.lhs b/compiler/rename/RnPat.lhs
index c3b40fe0f2..9738585aa4 100644
--- a/compiler/rename/RnPat.lhs
+++ b/compiler/rename/RnPat.lhs
@@ -121,10 +121,26 @@ wrapSrcSpanCps fn (L loc a)
lookupConCps :: Located RdrName -> CpsRn (Located Name)
lookupConCps con_rdr
= CpsRn (\k -> do { con_name <- lookupLocatedOccRn con_rdr
- ; (r, fvs) <- k con_name
- ; return (r, fvs `plusFV` unitFV (unLoc con_name)) })
+ ; k con_name })
+ -- We do not add the constructor name to the free vars
+ -- See Note [Patterns are not uses]
\end{code}
+Note [Patterns are not uses]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Consider
+ module Foo( f, g ) where
+ data T = T1 | T2
+
+ f T1 = True
+ f T2 = False
+
+ g _ = T1
+
+Arguaby we should report T2 as unused, even though it appears in a
+pattern, because it never occurs in a constructed position. See
+Trac #7336.
+
%*********************************************************
%* *
Name makers