diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2020-10-19 16:52:47 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-10-27 14:02:34 -0400 |
commit | 0b3d23afcad8bc14f2ba69b8dbe05c314e6e7b29 (patch) | |
tree | 1851c76146d7de2e96d367213ec1cb7d2e134aaa /ghc.mk | |
parent | f3d8ab2ef6ffe30ec91c795e0223392dd96ea61a (diff) | |
download | haskell-0b3d23afcad8bc14f2ba69b8dbe05c314e6e7b29.tar.gz |
Fix two constraint solving problems
This patch fixes two problems in the constraint solver.
* An actual bug #18555: we were floating out a constraint to eagerly,
and that was ultimately fatal. It's explained in
Note [Do not float blocked constraints] in GHC.Core.Constraint.
This is all very delicate, but it's all going to become irrelevant
when we stop floating constraints (#17656).
* A major performance infelicity in the flattener. When flattening
(ty |> co) we *never* generated Refl, even when there was nothing
at all to do. Result: we would gratuitously rewrite the constraint
to exactly the same thing, wasting work. Described in #18413, and
came up again in #18855.
Solution: exploit the special case by calling the new function
castCoercionKind1. See Note [castCoercionKind1] in
GHC.Core.Coercion
Diffstat (limited to 'ghc.mk')
0 files changed, 0 insertions, 0 deletions