[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