Reset the demand info on bindings going to top level (since they cannot be strict)
authorsimonpj@microsoft.com <unknown>
Fri, 2 Feb 2007 15:12:06 +0000 (15:12 +0000)
committersimonpj@microsoft.com <unknown>
Fri, 2 Feb 2007 15:12:06 +0000 (15:12 +0000)
compiler/simplCore/SetLevels.lhs

index 5dbaec6..6dfb5f1 100644 (file)
@@ -842,9 +842,11 @@ cloneRecVars NotTopLevel env@(_,_,subst,_) vs ctxt_lvl dest_lvl
     returnUs (env', vs2)
 
        -- VERY IMPORTANT: we must zap the demand info 
-       -- if the thing is going to float out past a lambda
+       -- if the thing is going to float out past a lambda,
+       -- or if it's going to top level (where things can't be strict)
 zap_demand dest_lvl ctxt_lvl id
-  | ctxt_lvl == dest_lvl = id                  -- Stays put
-  | otherwise           = zapDemandIdInfo id   -- Floats out
+  | ctxt_lvl == dest_lvl,
+    not (isTopLvl dest_lvl) = id       -- Stays, and not going to top level
+  | otherwise              = zapDemandIdInfo id        -- Floats out
 \end{code}