From 116134b1319e60ff38fc3710bd764cff34554837 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 26 Oct 2010 21:15:46 +0000 Subject: [PATCH] Use removeDups to find top-level duplicate names findDupsEq is quadratic, whereas removeDups is n log n. Fixes T1969 regression. --- compiler/coreSyn/CoreLint.lhs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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) -- 1.7.10.4