diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-06-21 11:24:50 -0400 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-06-25 22:20:24 -0400 |
commit | 5ff0a171aa199f34054092e728b56ddf6d58a093 (patch) | |
tree | 9024f0253ec5847f0fcf22fb46cb190e95312704 /compiler | |
parent | 8a03d5a178cd63c01b8dedd6c58f302a1635ff61 (diff) | |
download | haskell-5ff0a171aa199f34054092e728b56ddf6d58a093.tar.gz |
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
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/stgSyn/CoreToStg.hs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/compiler/stgSyn/CoreToStg.hs b/compiler/stgSyn/CoreToStg.hs index 6717ad9587..caa012124b 100644 --- a/compiler/stgSyn/CoreToStg.hs +++ b/compiler/stgSyn/CoreToStg.hs @@ -268,7 +268,7 @@ coreTopBindToStg dflags this_mod env ccs (NonRec id rhs) bind = StgTopLifted $ StgNonRec id stg_rhs in - 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) in - 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 |