Commit 4f990f34 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Fix pragmas in binder-swapping

In the case binder-swap operation (which is done in OccurAnal),
we deliberately use shadowing. But the new shadowing binder should
not inherit any fancy INLINE or NOINLINE pragmas from its parent.
parent eaeca51e
......@@ -22,6 +22,7 @@ import CoreFVs
import CoreUtils ( exprIsTrivial, isDefaultAlt )
import Coercion ( mkSymCoercion )
import Id
import Name ( localiseName )
import IdInfo
import BasicTypes
......@@ -1153,12 +1154,15 @@ occAnalAlt env case_bndr mb_scrut_var (con, bndrs, rhs)
, not (any shadowing bndrs) -- (b)
-> (addOneOcc usg_wo_scrut case_bndr NoOccInfo,
-- See Note [Case binder usage] for the NoOccInfo
(con, bndrs', Let (NonRec scrut_var' scrut_rhs) rhs'))
(con, bndrs', Let (NonRec scrut_var2 scrut_rhs) rhs'))
where
(usg_wo_scrut, scrut_var') = tagBinder alt_usg (localiseId scrut_var)
-- Note the localiseId; we're making a new binding
-- for it, and it might have an External Name, or
scrut_var1 = mkLocalId (localiseName (idName scrut_var)) (idType scrut_var)
-- Localise the scrut_var before shadowing it; we're making a
-- new binding for it, and it might have an External Name, or
-- even be a GlobalId; Note [Binder swap on GlobalId scrutinees]
-- Also we don't want any INLILNE or NOINLINE pragmas!
(usg_wo_scrut, scrut_var2) = tagBinder alt_usg scrut_var1
shadowing bndr = bndr `elemVarSet` rhs_fvs
rhs_fvs = exprFreeVars scrut_rhs
......
Supports Markdown
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