From: Simon Marlow Date: Thu, 6 Dec 2007 08:45:56 +0000 (+0000) Subject: FIX part of #1959: declaration versions were not being incremented correctly X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;ds=sidebyside;h=89cc39884310a8d1d60681a9c64f89f17848f17e;p=ghc-hetmet.git FIX part of #1959: declaration versions were not being incremented correctly We were building a mapping from ModuleName to [Occ] from the usage list, using the usg_mod field as the key. Unfortunately, due to a very poor naming decision, usg_mod is actually the module version, not the ModuleName. usg_name is the ModuleName. Since Version is also an instance of Uniquable, there was no type error: all that happened was lookups in the map never succeeded. I shall rename the fields of Usage in a separate patch. This doesn't completely fix #1959, but it gets part of the way there. I have to take partial blame as the person who wrote this fragment of code in late 2006 (patch "Interface file optimisation and removal of nameParent"). --- diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs index c0b9717..3c33647 100644 --- a/compiler/iface/MkIface.lhs +++ b/compiler/iface/MkIface.lhs @@ -706,7 +706,7 @@ computeChangedOccs ver_fn this_module old_usages eq_info name_changed nm | Just ents <- lookupUFM usg_modmap (moduleName mod) = case lookupUFM ents parent_occ of - Nothing -> pprPanic "computeChangedOccs" (ppr nm) + Nothing -> pprTrace "WARNING: computeChangedOccs" (ppr nm) $ False Just v -> v < new_version | otherwise = False -- must be in another package where @@ -714,7 +714,7 @@ computeChangedOccs ver_fn this_module old_usages eq_info (parent_occ, new_version) = ver_fn nm -- Turn the usages from the old ModIface into a mapping - usg_modmap = listToUFM [ (usg_mod usg, listToUFM (usg_entities usg)) + usg_modmap = listToUFM [ (usg_name usg, listToUFM (usg_entities usg)) | usg <- old_usages ] get_local_eq_info :: GenIfaceEq NameSet -> GenIfaceEq OccSet