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

git at git.haskell.org git at git.haskell.org
Thu Jan 28 14:56:04 UTC 2016


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

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

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

commit 30a4631a4796bdf8a9b7da9dd1d24360ed763f7a
Author: George Karachalias <george.karachalias at gmail.com>
Date:   Thu Jan 28 14:39:39 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.). his 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
    
    The patch addresses: #11195, #11276, #11303, #11374, #11162


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

30a4631a4796bdf8a9b7da9dd1d24360ed763f7a
 compiler/deSugar/Check.hs                          | 1139 ++++++++------------
 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, 801 insertions(+), 810 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 30a4631a4796bdf8a9b7da9dd1d24360ed763f7a


More information about the ghc-commits mailing list