Find the correct external ids when there's a wrapper
[ghc-hetmet.git] / compiler / main / TidyPgm.lhs
index 98ab1d9..0245978 100644 (file)
@@ -709,10 +709,17 @@ addExternal expose_all id = (new_needed_ids, show_unfold)
     mb_unfold_ids :: Maybe (IdSet, [Id])       -- Nothing => don't unfold
     mb_unfold_ids = case unfoldingInfo idinfo of
                      CoreUnfolding { uf_tmpl = unf_rhs, uf_src = src, uf_guidance = guide } 
-                       | show_unfolding src guide
-                       -> Just (exprFvsInOrder unf_rhs)
+                                         | show_unfolding src guide
+                                         -> Just (unf_ext_ids src unf_rhs)
                      DFunUnfolding _ ops -> Just (exprsFvsInOrder ops)
                      _                   -> Nothing
+                  where
+                    unf_ext_ids (InlineWrapper v) _ = (unitVarSet v, [v])
+                    unf_ext_ids _           unf_rhs = exprFvsInOrder unf_rhs
+                   -- For a wrapper, externalise the wrapper id rather than the
+                   -- fvs of the rhs.  The two usually come down to the same thing
+                   -- but I've seen cases where we had a wrapper id $w but a
+                   -- rhs where $w had been inlined; see Trac #3922
 
     show_unfolding unf_source unf_guidance
        =  expose_all        -- 'expose_all' says to expose all