[commit: ghc] wip/gadtpm: Overhaul the Overhauled Pattern Match Checker (be3e867)

git at git.haskell.org git at git.haskell.org
Sun Jan 24 17:29:32 UTC 2016


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

On branch  : wip/gadtpm
Link       : http://ghc.haskell.org/trac/ghc/changeset/be3e867db82201c1b54728f425916f4b50999dda/ghc

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

commit be3e867db82201c1b54728f425916f4b50999dda
Author: George Karachalias <george.karachalias at gmail.com>
Date:   Sun Jan 24 18:29:01 2016 +0100

    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.). 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
    
    (Expected to address at least: #11195, #11276, #11303, #11374, #11162)


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

be3e867db82201c1b54728f425916f4b50999dda
 compiler/deSugar/Check.hs                          | 1134 ++++++++------------
 compiler/deSugar/DsMonad.hs                        |   36 +-
 compiler/deSugar/Match.hs                          |   13 +-
 compiler/deSugar/TmOracle.hs                       |   18 +-
 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/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 -
 22 files changed, 799 insertions(+), 807 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 be3e867db82201c1b54728f425916f4b50999dda


More information about the ghc-commits mailing list