Don't do binder-swap for GlobalIds
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 21 Feb 2019 09:34:01 +0000 (09:34 +0000)
committerMatthew Pickering <matthewtpickering@gmail.com>
Fri, 22 Feb 2019 06:56:08 +0000 (06:56 +0000)
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

compiler/simplCore/OccurAnal.hs

index 5287817..c3414b1 100644 (file)
@@ -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]