summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2021-06-24 11:30:53 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2021-07-20 09:44:08 +0100
commit27223765072d76d84d1e263ac0cee1db5c05c805 (patch)
tree9a2ef40c0090032cd283b7692ee951ffc11e95b5
parent451fd35ab257fb0ebc9883b55d2459853f113aff (diff)
downloadhaskell-wip/T19790.tar.gz
Extend the in-scope set to silence substExpr warningswip/T19790
substExpr warns if it finds a LocalId that isn't in the in-scope set. This patch extends the in-scope set to silence the warnings. (It has no effect on behaviour.)
-rw-r--r--compiler/GHC/Core/SimpleOpt.hs12
1 files changed, 10 insertions, 2 deletions
diff --git a/compiler/GHC/Core/SimpleOpt.hs b/compiler/GHC/Core/SimpleOpt.hs
index 16906df1c1..abc1968b1b 100644
--- a/compiler/GHC/Core/SimpleOpt.hs
+++ b/compiler/GHC/Core/SimpleOpt.hs
@@ -1174,7 +1174,12 @@ exprIsConApp_maybe (in_scope, id_unf) expr
-- Look through dictionary functions; see Note [Unfolding DFuns]
| DFunUnfolding { df_bndrs = bndrs, df_con = con, df_args = dfun_args } <- unfolding
, bndrs `equalLength` args -- See Note [DFun arity check]
- , let subst = mkOpenSubst in_scope (bndrs `zip` args)
+ , let in_scope' = extend_in_scope (exprsFreeVars dfun_args)
+ subst = mkOpenSubst in_scope' (bndrs `zip` args)
+ -- We extend the in-scope set here to silence warnings from
+ -- substExpr when it finds not-in-scope Ids in dfun_args.
+ -- simplOptExpr initialises the in-scope set with exprFreeVars,
+ -- but that doesn't account for DFun unfoldings
= succeedWith in_scope floats $
pushCoDataCon con (map (substExpr subst) dfun_args) co
@@ -1185,7 +1190,7 @@ exprIsConApp_maybe (in_scope, id_unf) expr
-- CPR'd workers getting inlined back into their wrappers,
| idArity fun == 0
, Just rhs <- expandUnfolding_maybe unfolding
- , let in_scope' = extendInScopeSetSet in_scope (exprFreeVars rhs)
+ , let in_scope' = extend_in_scope (exprFreeVars rhs)
= go (Left in_scope') floats rhs cont
-- See Note [exprIsConApp_maybe on literal strings]
@@ -1197,6 +1202,9 @@ exprIsConApp_maybe (in_scope, id_unf) expr
dealWithStringLiteral fun str co
where
unfolding = id_unf fun
+ extend_in_scope unf_fvs
+ | isLocalId fun = in_scope `extendInScopeSetSet` unf_fvs
+ | otherwise = in_scope
go _ _ _ _ = Nothing