From: Simon Marlow Date: Mon, 3 Aug 2009 11:28:03 +0000 (+0000) Subject: Fix #3412: the worker of an Id might not be a local Id X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=38b739b7fce555768cf8f0208a081f62eea479cc Fix #3412: the worker of an Id might not be a local Id --- diff --git a/compiler/main/TidyPgm.lhs b/compiler/main/TidyPgm.lhs index b0fb7d3..d198a3f 100644 --- a/compiler/main/TidyPgm.lhs +++ b/compiler/main/TidyPgm.lhs @@ -613,7 +613,7 @@ chooseExternalIds hsc_env mod omit_prags binds | otherwise = do (occ_env', name') <- tidyTopName mod nc_var (Just referrer) occ_env id let - rhs = expectJust "chooseExternalIds" $ lookupVarEnv bind_env id + rhs = expectJust (showSDoc (text "chooseExternalIds: " <> ppr id)) $ lookupVarEnv bind_env id (new_ids, show_unfold) | omit_prags = ([], False) | otherwise = addExternal id rhs @@ -635,7 +635,8 @@ addExternal :: Id -> CoreExpr -> ([Id],Bool) addExternal id rhs = (new_needed_ids, show_unfold) where new_needed_ids = unfold_ids ++ - filter (not . (`elemVarSet` unfold_set)) + filter (\id -> isLocalId id && + not (id `elemVarSet` unfold_set)) (varSetElems worker_ids ++ varSetElems spec_ids) -- XXX non-det ordering