Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
Source project has a limited visibility.
Matthew Pickering's avatar
Matthew Pickering authored
It is important that `heapCensus` and `LdvCensusForDead` traverse the
same areas.

`heapCensus` increases the `not_used` counter which tracks how many
closures are live but haven't been used yet.

`LdvCensusForDead` increases the `void_total` counter which tracks how
many dead closures there are.

The `LAG` is then calculated by substracting the `void_total` from
`not_used` and so it is essential that `not_used >= void_total`. This
fact is checked by quite a few assertions.

However, if a program has low maximum residency but allocates a lot in
the nursery then these assertions were failing (see #16753 and #15903)
because `LdvCensusForDead` was observing dead closures from the nursery
which totalled more than the `not_used`. The same closures were not
counted by `heapCensus`.

Therefore, it seems that the correct fix is to make `LdvCensusForDead`
agree with `heapCensus` and not traverse the nursery for dead closures.

Fixes #16100 #16753 #15903 #8982
07cffc49
History
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Name Last commit Last update
..