[commit: ghc] ghc-8.0: Overhaul the Overhauled Pattern Match Checker (6e23b68)

git at git.haskell.org git at git.haskell.org
Thu Feb 4 10:46:40 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : ghc-8.0
Link       : http://ghc.haskell.org/trac/ghc/changeset/6e23b68047a2c995562eba173fe9485cae18bff2/ghc

>---------------------------------------------------------------

commit 6e23b68047a2c995562eba173fe9485cae18bff2
Author: George Karachalias <george.karachalias at gmail.com>
Date:   Wed Feb 3 19:06:45 2016 +0100

    Overhaul the Overhauled Pattern Match Checker
    
    Overhaul the Overhauled Pattern Match Checker
    
    * 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`.
    Replaced with `fmax-pmcheck-iterations=n`. Still debatable what should
    the default `n` be.
    
    * 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.). his combined
    with the above seems to be enough to drop the memory increase for test
    T783 down to 18.7%.
    
    * Do not export function `dsPmWarn` (it is now called directly from
    within `checkSingle` and `checkMatches`).
    
    * Make `PmExprVar` hold a `Name` instead of an `Id`. The term oracle
    does not handle type information so using `Id` was a waste of
    time/space.
    
    * Added testcases T11195, T11303b (data families) and T11374
    
    The patch addresses at least the following:
    Trac #11195, #11276, #11303, #11374, #11162
    
    Test Plan: validate
    
    Reviewers: goldfire, bgamari, hvr, austin
    
    Subscribers: simonpj, thomie
    
    Differential Revision: https://phabricator.haskell.org/D1795
    
    (cherry picked from commit 28f951edfe50ea5182065144340061ec326781f5)


>---------------------------------------------------------------

6e23b68047a2c995562eba173fe9485cae18bff2
 compiler/deSugar/Check.hs                          | 1236 +++++++++-----------
 compiler/deSugar/DsMonad.hs                        |   39 +-
 compiler/deSugar/Match.hs                          |   16 +-
 compiler/deSugar/PmExpr.hs                         |   31 +-
 compiler/deSugar/TmOracle.hs                       |   34 +-
 compiler/ghci/RtClosureInspect.hs                  |    3 -
 compiler/main/DynFlags.hs                          |   12 +-
 compiler/nativeGen/Dwarf/Constants.hs              |    4 -
 compiler/typecheck/TcRnTypes.hs                    |    3 +-
 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/perf/compiler/all.T                |    4 +-
 testsuite/tests/pmcheck/should_compile/T11195.hs   |  189 +++
 testsuite/tests/pmcheck/should_compile/T11303b.hs  |   25 +
 testsuite/tests/pmcheck/should_compile/T11374.hs   |   59 +
 .../tests/pmcheck/should_compile/T2204.stderr      |    6 +-
 .../tests/pmcheck/should_compile/T9951b.stderr     |    6 +-
 testsuite/tests/pmcheck/should_compile/all.T       |    3 +
 .../tests/pmcheck/should_compile/pmc001.stderr     |   12 +-
 .../tests/pmcheck/should_compile/pmc007.stderr     |   12 +-
 utils/mkUserGuidePart/Options/Warnings.hs          |   13 -
 24 files changed, 914 insertions(+), 851 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 6e23b68047a2c995562eba173fe9485cae18bff2


More information about the ghc-commits mailing list