summaryrefslogtreecommitdiff
path: root/compiler/GHC/Core/Opt/Simplify.hs
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2021-11-09 13:49:56 +0000
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-11-12 21:23:15 -0500
commit43cab5f752b6dcbeda5caa76861089539f54ef54 (patch)
treef8ac08b5d5cd35329ba6332c9280c95375149b40 /compiler/GHC/Core/Opt/Simplify.hs
parent4143bd21bbef16022628a4260d77a945523ce4b8 (diff)
downloadhaskell-43cab5f752b6dcbeda5caa76861089539f54ef54.tar.gz
Get the in-scope set right in simplArg
This was a simple (but long standing) error in simplArg, revealed by #20639
Diffstat (limited to 'compiler/GHC/Core/Opt/Simplify.hs')
-rw-r--r--compiler/GHC/Core/Opt/Simplify.hs7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/GHC/Core/Opt/Simplify.hs b/compiler/GHC/Core/Opt/Simplify.hs
index 407f84a6c5..8ce2eb857a 100644
--- a/compiler/GHC/Core/Opt/Simplify.hs
+++ b/compiler/GHC/Core/Opt/Simplify.hs
@@ -1584,8 +1584,11 @@ simplArg env dup_flag arg_env arg
| isSimplified dup_flag
= return (dup_flag, arg_env, arg)
| otherwise
- = do { arg' <- simplExpr (arg_env `setInScopeFromE` env) arg
- ; return (Simplified, zapSubstEnv arg_env, arg') }
+ = do { let arg_env' = arg_env `setInScopeFromE` env
+ ; arg' <- simplExpr arg_env' arg
+ ; return (Simplified, zapSubstEnv arg_env', arg') }
+ -- Return a StaticEnv that includes the in-scope set from 'env',
+ -- because arg' may well mention those variables (#20639)
{-
************************************************************************