From: Ian Lynagh Date: Tue, 26 Oct 2010 21:15:46 +0000 (+0000) Subject: Use removeDups to find top-level duplicate names X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=116134b1319e60ff38fc3710bd764cff34554837;p=ghc-hetmet.git Use removeDups to find top-level duplicate names findDupsEq is quadratic, whereas removeDups is n log n. Fixes T1969 regression. --- diff --git a/compiler/coreSyn/CoreLint.lhs b/compiler/coreSyn/CoreLint.lhs index c347ed2..0ca5c43 100644 --- a/compiler/coreSyn/CoreLint.lhs +++ b/compiler/coreSyn/CoreLint.lhs @@ -117,11 +117,11 @@ lintCoreBindings binds -- M.n{r3} = ... -- M.n{r29} = ... -- becuase they both get the same linker symbol - ext_dups = findDupsEq eq_ext (map Var.varName binders) - eq_ext n1 n2 | Just m1 <- nameModule_maybe n1 - , Just m2 <- nameModule_maybe n2 - = m1==m2 && nameOccName n1 == nameOccName n2 - | otherwise = False + ext_dups = snd (removeDups ord_ext (map Var.varName binders)) + ord_ext n1 n2 | Just m1 <- nameModule_maybe n1 + , Just m2 <- nameModule_maybe n2 + = compare (m1, nameOccName n1) (m2, nameOccName n2) + | otherwise = LT lint_bind (Rec prs) = mapM_ (lintSingleBinding TopLevel Recursive) prs lint_bind (NonRec bndr rhs) = lintSingleBinding TopLevel NonRecursive (bndr,rhs)