summaryrefslogtreecommitdiff
path: root/compiler/simplCore
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2019-02-21 09:34:01 +0000
committerMatthew Pickering <matthewtpickering@gmail.com>2019-02-22 06:56:08 +0000
commit0eb7cf03da3783ca887d5de44d312cf6f3a4113c (patch)
treebf2c4ace3c6729d6bbef8dbffb26089a581ae681 /compiler/simplCore
parenta07f46ead660caa7fc6073e7b9bd1c8b7c4cdfe2 (diff)
downloadhaskell-0eb7cf03da3783ca887d5de44d312cf6f3a4113c.tar.gz
Don't do binder-swap for GlobalIds
This patch disables the binder-swap transformation in the (relatively rare) case when the scrutinee is a GlobalId. Reason: we are getting Lint errors so that GHC doesn't even validate. Trac #16346. This is NOT the final solution -- it's just a stop-gap to get us running again. The final solution is in Trac #16296
Diffstat (limited to 'compiler/simplCore')
-rw-r--r--compiler/simplCore/OccurAnal.hs11
1 files changed, 8 insertions, 3 deletions
diff --git a/compiler/simplCore/OccurAnal.hs b/compiler/simplCore/OccurAnal.hs
index 5287817def..c3414b1fdb 100644
--- a/compiler/simplCore/OccurAnal.hs
+++ b/compiler/simplCore/OccurAnal.hs
@@ -2402,9 +2402,14 @@ mkAltEnv env@(OccEnv { occ_gbl_scrut = pe }) scrut case_bndr
_ -> (env { occ_encl = OccVanilla }, Nothing)
where
- add_scrut v rhs = ( env { occ_encl = OccVanilla
- , occ_gbl_scrut = pe `extendVarSet` v }
- , Just (localise v, rhs) )
+ add_scrut v rhs
+ | isGlobalId v = (env { occ_encl = OccVanilla }, Nothing)
+ | otherwise = ( env { occ_encl = OccVanilla
+ , occ_gbl_scrut = pe `extendVarSet` v }
+ , Just (localise v, rhs) )
+ -- ToDO: this isGlobalId stuff is a TEMPORARY FIX
+ -- to avoid the binder-swap for GlobalIds
+ -- See Trac #16346
case_bndr' = Var (zapIdOccInfo case_bndr)
-- See Note [Zap case binders in proxy bindings]