[commit: ghc] wip/gadtpm: Overhaul the Overhauled Pattern Match Checker (cd12c8d)
git at git.haskell.org
git at git.haskell.org
Mon Jan 18 13:13:59 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/gadtpm
Link : http://ghc.haskell.org/trac/ghc/changeset/cd12c8dc2cbd7d2c1916c1598a1ef4edeb50bebc/ghc
>---------------------------------------------------------------
commit cd12c8dc2cbd7d2c1916c1598a1ef4edeb50bebc
Author: George Karachalias <george.karachalias at gmail.com>
Date: Mon Jan 18 14:07:57 2016 +0100
Overhaul the Overhauled Pattern Match Checker
Summary:
* Changed the representation of Value Set Abstractions.
Instead of using a prefix tree, we now use a list of
Value Vector Abstractions. The set of constraints `Delta`
for every Value Vector Abstraction is the oracle state so
that we solve everything only once.
* Instead of doing everything lazily, we prune at once (and
in general everything is much stricter). Hence, an example
written with pattern guards is checked in almost the same
time as the equivalent with pattern matching.
* Do not store the covered and the divergent sets at all.
Since what we only need is a yes/no (does this clause
cover anything? Does it force any thunk?) We just keep a
boolean for each.
* Removed flags -Wtoo-many-guards and -ffull-guard-reasoning.
The checker does not seem to explode anymore. Even if it
does, we can instead set a number of iterations (possibly
settable by the user) for the checker which is much
cleaner (Still a TODO).
* When a guard is for sure not going to contribute anything,
we treat it as such: The oracle is not called and cases
`CGuard`, `UGuard` and `DGuard` from the paper are not
happening at all (the generation of a fresh variable, the
unfolding of the pattern list etc.). This combined with
the above seems to be enough to drop the memory increase
for test T783 down to 18.7%.
* Added testcases T11195, T11303b (data families) and T11374
>---------------------------------------------------------------
cd12c8dc2cbd7d2c1916c1598a1ef4edeb50bebc
compiler/deSugar/Check.hs | 1037 +++++++-------------
compiler/deSugar/Match.hs | 17 +-
compiler/deSugar/TmOracle.hs | 19 +-
compiler/ghci/RtClosureInspect.hs | 3 -
compiler/main/DynFlags.hs | 8 +-
compiler/nativeGen/Dwarf/Constants.hs | 4 -
compiler/types/OptCoercion.hs | 4 +-
docs/users_guide/8.0.1-notes.rst | 9 -
docs/users_guide/bugs.rst | 10 -
docs/users_guide/using-warnings.rst | 34 -
libraries/base/Foreign/C/Error.hs | 1 -
testsuite/tests/pmcheck/should_compile/T11195.hs | 183 ++++
testsuite/tests/pmcheck/should_compile/T11303b.hs | 25 +
testsuite/tests/pmcheck/should_compile/T11374.hs | 59 ++
.../tests/pmcheck/should_compile/T2204.stderr | 7 +-
.../tests/pmcheck/should_compile/T9951b.stderr | 7 +-
testsuite/tests/pmcheck/should_compile/all.T | 3 +
.../tests/pmcheck/should_compile/pmc001.stderr | 13 +-
.../tests/pmcheck/should_compile/pmc007.stderr | 13 +-
utils/mkUserGuidePart/Options/Warnings.hs | 13 -
20 files changed, 693 insertions(+), 776 deletions(-)
Diff suppressed because of size. To see it, use:
git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc cd12c8dc2cbd7d2c1916c1598a1ef4edeb50bebc
More information about the ghc-commits
mailing list