Commit d5183f31 authored by Simon Marlow's avatar Simon Marlow
Browse files

Workaround for #1959: assume untracked names have changed

This fixes the 1959 test, but will do more recompilation than is
strictly necessary (but only when -O is on).  Still, more
recompilation is better than segfaults, link errors or other random
breakage.
parent 89cc3988
......@@ -704,15 +704,21 @@ computeChangedOccs ver_fn this_module old_usages eq_info
-- return True if an external name has changed
name_changed :: Name -> Bool
name_changed nm
| Just ents <- lookupUFM usg_modmap (moduleName mod)
= case lookupUFM ents parent_occ of
Nothing -> pprTrace "WARNING: computeChangedOccs" (ppr nm) $ False
Just v -> v < new_version
| Just ents <- lookupUFM usg_modmap (moduleName mod),
Just v <- lookupUFM ents parent_occ
= v < new_version
| modulePackageId mod == this_pkg
= WARN(True, ptext SLIT("computeChangedOccs") <+> ppr nm) True
-- should really be a panic, see #1959. The problem is that the usages doesn't
-- contain all the names that might be referred to by unfoldings. So as a
-- conservative workaround we just assume these names have changed.
| otherwise = False -- must be in another package
where
mod = nameModule nm
(parent_occ, new_version) = ver_fn nm
this_pkg = modulePackageId this_module
-- Turn the usages from the old ModIface into a mapping
usg_modmap = listToUFM [ (usg_name usg, listToUFM (usg_entities usg))
| usg <- old_usages ]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment