Add -fghci-leak-check to check for space leaks
authorSimon Marlow <marlowsd@gmail.com>
Wed, 2 May 2018 10:01:13 +0000 (11:01 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 25 May 2018 09:07:45 +0000 (10:07 +0100)
commit5b6ef59f99590128394b9dd9717b07fa971f6fc0
treed3180b9e41cbdfda9e70adb532f666258d874278
parent5ca623a5a06b96478efe0ac6e37bae4789c1d1c0
Add -fghci-leak-check to check for space leaks

Summary:
(re-applying this patch now that D4659 is committed)

Space leaks in GHCi emerge from time to time and tend to come back again
after they get fixed. This is an attempt to limit regressions by

* adding a reliable detection for some classes of space leaks in GHCi
* turning on leak checking for all GHCi tests in the test suite, so that
  we'll notice if the leak appears again.

The idea for detecting space leaks is quite simple:

* find some data that we expect to be GC'd later, make a weak pointer to it
* when we expect the data to be dead, do a `performGC` and then check
  the status of the weak pointer.

It would be nice to apply this trick to lots of things in GHC,
e.g. ensuring that HsSyn is not retained after the desugarer, or
ensuring that CoreSyn from the previous simplifier pass is not retained.

Test Plan: validate

Reviewers: bgamari, simonpj, erikd, niteria

Subscribers: thomie, carter

GHC Trac Issues: #15111
compiler/main/DynFlags.hs
docs/users_guide/ghci.rst
ghc/GHCi/Leak.hs [new file with mode: 0644]
ghc/GHCi/UI.hs
ghc/ghc-bin.cabal.in
testsuite/config/ghc
testsuite/tests/ghci/scripts/T9293.stdout
testsuite/tests/ghci/scripts/ghci057.stdout