summaryrefslogtreecommitdiff
path: root/docs/users_guide/bugs.rst
diff options
context:
space:
mode:
authorGeorge Karachalias <george.karachalias@gmail.com>2016-02-01 11:43:12 +0100
committerGeorge Karachalias <george.karachalias@gmail.com>2016-02-01 11:43:12 +0100
commitb5df2cc6cf2af4508a4f34a718320a6d79f9adca (patch)
tree525e975eaf60e0200555e7f269fd79b7eaeb227d /docs/users_guide/bugs.rst
parenta883c1b7b08657102a2081b55c8fe68714d8bf73 (diff)
downloadhaskell-wip/gadtpm.tar.gz
Overhaul the Overhauled Pattern Match Checkerwip/gadtpm
* 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). A case writtern with pattern guards is not 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: #11195, #11276, #11303, #11374, #11162
Diffstat (limited to 'docs/users_guide/bugs.rst')
-rw-r--r--docs/users_guide/bugs.rst10
1 files changed, 0 insertions, 10 deletions
diff --git a/docs/users_guide/bugs.rst b/docs/users_guide/bugs.rst
index 8304e25e78..f0c522cf75 100644
--- a/docs/users_guide/bugs.rst
+++ b/docs/users_guide/bugs.rst
@@ -358,16 +358,6 @@ Bugs in GHC
This flag ensures that yield points are inserted at every function entrypoint
(at the expense of a bit of performance).
-- GHC's updated exhaustiveness and coverage checker (see
- :ref:`options-sanity`) is quite expressive but with a rather high
- performance cost (in terms of both time and memory consumption), mainly
- due to guards. Two flags have been introduced to give more control to
- the user over guard reasoning: :ghc-flag:`-Wtoo-many-guards`
- and :ghc-flag:`-ffull-guard-reasoning` (see :ref:`options-sanity`).
- When :ghc-flag:`-ffull-guard-reasoning` is on, pattern match checking for guards
- runs in full power, which may run out of memory/substantially increase
- compilation time.
-
- GHC does not allow you to have a data type with a context that
mentions type variables that are not data type parameters. For
example: