From 2caef4d67eaa3a14d2873df0a31f6afba69a308c Mon Sep 17 00:00:00 2001 From: Simon Peyton Jones <simonpj@microsoft.com> Date: Tue, 28 Aug 2012 13:32:55 +0100 Subject: [PATCH] Fix Trac #7092, involving Template Hsakell and name shadowing All the mechanism was there, but it wasn't being use for the name-shadowing test. MERGED from commit b2e8bed817483e80d721cc69720d3d547edab4f5 --- compiler/rename/RnEnv.lhs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/compiler/rename/RnEnv.lhs b/compiler/rename/RnEnv.lhs index 61b56359fc91..9c930740b438 100644 --- a/compiler/rename/RnEnv.lhs +++ b/compiler/rename/RnEnv.lhs @@ -1284,12 +1284,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 () @@ -1301,10 +1303,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 () -- GitLab