import Var
import IdInfo
import Coercion
-import DataCon ( dataConTyCon, dataConRepStrictness, dataConUnivTyVars )
-import TyCon ( tyConArity )
+import DataCon ( dataConRepStrictness, dataConUnivTyVars )
import CoreSyn
import NewDemand ( isStrictDmd )
import PprCore ( pprParendExpr, pprCoreExpr )
-- So it's up to the programmer: rules can cause divergence
; let in_scope = getInScope env
rules = getRules env
- maybe_rule = case activeRule env of
+ maybe_rule = case activeRule dflags env of
Nothing -> Nothing -- No rules apply
Just act_fn -> lookupRule act_fn in_scope
rules var args
-- The case binder is going to be evaluated later,
-- and the scrutinee is a simple variable
var_demanded_later (Var v) = isStrictDmd (idNewDemandInfo case_bndr)
+ && not (isTickBoxOp v)
+ -- ugly hack; covering this case is what
+ -- exprOkForSpeculation was intended for.
var_demanded_later other = False