From: simonpj@microsoft.com Date: Wed, 5 Jan 2011 00:27:12 +0000 (+0000) Subject: Fix Trac #4870: get the inlining for an imported INLINABLE Id X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=0aebf9c6b0de711b7eefa8c4cdd56d9328886697 Fix Trac #4870: get the inlining for an imported INLINABLE Id We need the unfolding even for a *recursive* function (indeed that's the point) and I was using the wrong function to get it (idUnfolding rather than realIdUnfolding). --- diff --git a/compiler/deSugar/DsBinds.lhs b/compiler/deSugar/DsBinds.lhs index 57c7482..815c0d1 100644 --- a/compiler/deSugar/DsBinds.lhs +++ b/compiler/deSugar/DsBinds.lhs @@ -526,13 +526,14 @@ dsSpec mb_poly_rhs (L loc (SpecPrag poly_id spec_co spec_inl)) where is_local_id = isJust mb_poly_rhs poly_rhs | Just rhs <- mb_poly_rhs - = rhs - | Just unfolding <- maybeUnfoldingTemplate (idUnfolding poly_id) - = unfolding + = rhs -- Local Id; this is its rhs + | Just unfolding <- maybeUnfoldingTemplate (realIdUnfolding poly_id) + = unfolding -- Imported Id; this is its unfolding + -- Use realIdUnfolding so we get the unfolding + -- even when it is a loop breaker. + -- We want to specialise recursive functions! | otherwise = pprPanic "dsImpSpecs" (ppr poly_id) - -- In the Nothing case the specialisation is for an imported Id - -- whose unfolding gives the RHS to be specialised - -- The type checker has checked that it has an unfolding + -- The type checker has checked that it *has* an unfolding specUnfolding :: (CoreExpr -> CoreExpr) -> Type -> Unfolding -> DsM (Unfolding, OrdList (Id,CoreExpr))