Fix Trac #7092, involving Template Hsakell and name shadowing
authorSimon Peyton Jones <simonpj@microsoft.com>
Tue, 28 Aug 2012 12:32:55 +0000 (13:32 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Tue, 28 Aug 2012 12:32:55 +0000 (13:32 +0100)
All the mechanism was there, but it wasn't being use for the
name-shadowing test.

compiler/rename/RnEnv.lhs

index d73ebe4..c3fd407 100644 (file)
@@ -1277,12 +1277,14 @@ checkDupRdrNames rdr_names_w_loc
 
 checkDupNames :: [Name] -> RnM ()
 -- Check for duplicated names in a binding group
-checkDupNames names
+checkDupNames names = check_dup_names (filterOut isSystemName names)
+                -- See Note [Binders in Template Haskell] in Convert
+
+check_dup_names :: [Name] -> RnM ()
+check_dup_names names
   = mapM_ (dupNamesErr nameSrcSpan) dups
   where
-    (_, dups) = removeDups (\n1 n2 -> nameOccName n1 `compare` nameOccName n2) $
-                filterOut isSystemName names
-                -- See Note [Binders in Template Haskell] in Convert
+    (_, dups) = removeDups (\n1 n2 -> nameOccName n1 `compare` nameOccName n2) names
 
 ---------------------
 checkShadowedRdrNames :: [Located RdrName] -> RnM ()
@@ -1294,10 +1296,12 @@ checkShadowedRdrNames loc_rdr_names
 
 checkDupAndShadowedNames :: (GlobalRdrEnv, LocalRdrEnv) -> [Name] -> RnM ()
 checkDupAndShadowedNames envs names
-  = do { checkDupNames names
+  = do { check_dup_names filtered_names
        ; checkShadowedOccs envs loc_occs }
   where
-    loc_occs = [(nameSrcSpan name, nameOccName name) | name <- names]
+    filtered_names = filterOut isSystemName names
+                -- See Note [Binders in Template Haskell] in Convert
+    loc_occs = [(nameSrcSpan name, nameOccName name) | name <- filtered_names]
 
 -------------------------------------
 checkShadowedOccs :: (GlobalRdrEnv, LocalRdrEnv) -> [(SrcSpan,OccName)] -> RnM ()