Skip to content
Snippets Groups Projects
Commit 38b739b7 authored by Simon Marlow's avatar Simon Marlow
Browse files

Fix #3412: the worker of an Id might not be a local Id

parent fee305ed
No related branches found
No related tags found
No related merge requests found
...@@ -613,7 +613,7 @@ chooseExternalIds hsc_env mod omit_prags binds ...@@ -613,7 +613,7 @@ chooseExternalIds hsc_env mod omit_prags binds
| otherwise = do | otherwise = do
(occ_env', name') <- tidyTopName mod nc_var (Just referrer) occ_env id (occ_env', name') <- tidyTopName mod nc_var (Just referrer) occ_env id
let let
rhs = expectJust "chooseExternalIds" $ lookupVarEnv bind_env id rhs = expectJust (showSDoc (text "chooseExternalIds: " <> ppr id)) $ lookupVarEnv bind_env id
(new_ids, show_unfold) (new_ids, show_unfold)
| omit_prags = ([], False) | omit_prags = ([], False)
| otherwise = addExternal id rhs | otherwise = addExternal id rhs
...@@ -635,7 +635,8 @@ addExternal :: Id -> CoreExpr -> ([Id],Bool) ...@@ -635,7 +635,8 @@ addExternal :: Id -> CoreExpr -> ([Id],Bool)
addExternal id rhs = (new_needed_ids, show_unfold) addExternal id rhs = (new_needed_ids, show_unfold)
where where
new_needed_ids = unfold_ids ++ new_needed_ids = unfold_ids ++
filter (not . (`elemVarSet` unfold_set)) filter (\id -> isLocalId id &&
not (id `elemVarSet` unfold_set))
(varSetElems worker_ids ++ (varSetElems worker_ids ++
varSetElems spec_ids) -- XXX non-det ordering varSetElems spec_ids) -- XXX non-det ordering
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment