Commit cd753410 authored by Ben Gamari's avatar Ben Gamari 🐢

CoreToStg: Enable CAFfyness checking with -dstg-lint

The debugging involved in finding #16846 wouldn't have been necessary
had the consistentCafInfo check been enabled. However, :wq
parent 1faf4982
......@@ -268,7 +268,7 @@ coreTopBindToStg dflags this_mod env ccs (NonRec id rhs)
bind = StgTopLifted $ StgNonRec id stg_rhs
ASSERT2(consistentCafInfo id bind, ppr id )
assertConsistentCaInfo dflags id bind (ppr bind)
-- NB: previously the assertion printed 'rhs' and 'bind'
-- as well as 'id', but that led to a black hole
-- where printing the assertion error tripped the
......@@ -296,9 +296,18 @@ coreTopBindToStg dflags this_mod env ccs (Rec pairs)
bind = StgTopLifted $ StgRec (zip binders stg_rhss)
ASSERT2(consistentCafInfo (head binders) bind, ppr binders)
assertConsistentCaInfo dflags (head binders) bind (ppr binders)
(env', ccs', bind)
-- | CAF consistency issues will generally result in segfaults and are quite
-- difficult to debug (see #16846). We enable checking of the
-- 'consistentCafInfo' invariant with @-dstg-lint@ to increase the chance that
-- we catch these issues.
assertConsistentCaInfo :: DynFlags -> Id -> StgTopBinding -> SDoc -> a -> a
assertConsistentCaInfo dflags id bind err_doc result
| gopt Opt_DoStgLinting dflags || debugIsOn
, not $ consistentCafInfo id bind = pprPanic "assertConsistentCaInfo" err_doc
| otherwise = result
-- Assertion helper: this checks that the CafInfo on the Id matches
-- what CoreToStg has figured out about the binding's SRT. The
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment