summaryrefslogtreecommitdiff
path: root/compiler/GHC/Core/Coercion.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Core/Coercion.hs')
-rw-r--r--compiler/GHC/Core/Coercion.hs7
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/GHC/Core/Coercion.hs b/compiler/GHC/Core/Coercion.hs
index 8a13ecb51b..06bc235913 100644
--- a/compiler/GHC/Core/Coercion.hs
+++ b/compiler/GHC/Core/Coercion.hs
@@ -2234,13 +2234,18 @@ liftEnvSubstRight = liftEnvSubst pSnd
liftEnvSubst :: (forall a. Pair a -> a) -> Subst -> LiftCoEnv -> Subst
liftEnvSubst selector subst lc_env
- = composeTCvSubst (Subst emptyInScopeSet emptyIdSubstEnv tenv cenv) subst
+ = composeTCvSubst (Subst in_scope emptyIdSubstEnv tenv cenv) subst
where
pairs = nonDetUFMToList lc_env
-- It's OK to use nonDetUFMToList here because we
-- immediately forget the ordering by creating
-- a VarEnv
(tpairs, cpairs) = partitionWith ty_or_co pairs
+ -- Make sure the in-scope set is wide enough to cover the range of the
+ -- substitution (#22235).
+ in_scope = mkInScopeSet $
+ tyCoVarsOfTypes (map snd tpairs) `unionVarSet`
+ tyCoVarsOfCos (map snd cpairs)
tenv = mkVarEnv_Directly tpairs
cenv = mkVarEnv_Directly cpairs