| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
This patch was authored by SPJ, and extracted from "Improve the handling
of used-once stuff" by Joachim.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Joachim and I are committing this onto a branch so that we can share it,
but we expect to do a bit more work before merging it onto head.
Nofib staus:
- Most programs, no change
- A few improve
- A couple get worse (cacheprof, tak, rfib)
Investigating the "get worse" set is what's holding up putting this
on head.
The major issue is this. Consider
map (f g) ys
where f's demand signature looks like
f :: <L,C1(C1(U))> -> <L,U> -> .
So 'f' is not saturated. What demand do we place on g?
Answer
C(C1(U))
That is, the inner C1 should stay, even though f is not saturated.
I found that this made a significant difference in the demand signatures
inferred in GHC.IO, which uses lots of higher-order exception handlers.
I also had to add used-once demand signatures for some of the
'catch' primops, so that we know their handlers are only called once.
|
|
|
|
|
| |
This patch was authored by SPJ and extracted from "Improve the handling
of used-once stuff" by Joachim.
|
|
|
|
|
| |
This patch was authored by SPJ, and extracted from "Improve the handling
of used-once stuff" by Joachim.
|
|
|
|
|
| |
This is authored by SPJ, and split out out "Improve the handling of
used-once stuff" by Joachim.
|
|
|
|
|
| |
This was authored by SPJ and extracted from the "Improve the handling of
used-once stuff" patch by Joachim.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a long-standing bug. We were generating a Given
equality between kind variables, and (at least until we support
kind coercions) we can't do that.
The fix is to drop such Given equalities entirely. That may
mean we can't prove some things, but that's fair enough -- the
current proof language can't express such proofs.
See Note [Do not create Given kind equalities] in TcSMonad
|
| |
|
|
|
|
|
| |
because it is not a top deman (see previous commit), and it is only used
in an argument to mkStrictSig.
|
|
|
|
|
|
|
|
|
| |
because topDmdType is ''not'' the top of the lattice, as it puts an
implicit absent demand on free variables, but Abs is the bottom of the
Usage lattice.
Why nopDmdType? Becuase it is the demand of doing nothing: Everything
lazy, everything absent, no definite divergence.
|
|
|
|
|
|
|
|
|
| |
but do forget about certain divergence, if required. Fixes one part of
ticket #8598.
The added function (deferAfterIO) can maybe be merged with existing
code, but given the ongoing work in the nested-cpr branch, I defer that
work.
|
|
|
|
|
|
|
| |
The existing flag -ddump-stranal dumps the full Core, which is very
verbose and not always helpful. This adds a more concise output (one
line per top-level bind) that is faster to read, and especially more
suitable to be used when writing test cases for the strictness analiser.
|
|
|
|
| |
After commit 55c703b8fdb0, this code is no longer used anywhere.
|
| |
|
|
|
|
|
| |
The lexer now uses unicode single quotation marks in its error messages
if possible. This is due to the use of the 'quotes' combinator.
|
|
|
|
| |
Helps fix #7396
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was an egregious error. If e :: T (Q ty1)
then when we have the splice
$e :: ty2
we must ensure that ty1~ty2 before we even think about
running the splice!
I took the opportunity to remove the dead-code tcSpliceDecls
altogether.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
We now do the allocation of the blackhole indirection closure inside the
RTS procedure 'newCAF' instead of generating the allocation code inline
in the closure body of each CAF. This slightly decreases code size in
modules with a lot of CAFs.
As a result of this change, for example, the size of DynFlags.o drops by
~60KB and HsExpr.o by ~100KB.
|
|
|
|
|
| |
as it seems that this code is now dead (due to
[Dropping derived constraints]) (See #8592)
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
we now print the precise class method, with types, where the coercion
failed.
|
| |
|
|
|
|
| |
See #8006 for the reason why. This is not a fix as such; more of a workaround.
|
|
|
|
|
|
| |
If "deriving (C)" fails, it will now, if possible, indicate which
particular field of which constructor has caused the failure. (This
fixes #8576)
|
|
|
|
|
|
| |
When doing non-standalone deriving, annotate each individual
unsimplified constraint with its own CtOrigin. This is just the
refactoring, so the CtOrigin is still CtDeriv in each case.
|
| |
|
|
|
|
| |
This note is a summary of an explanation by SPJ to me.
|
|
|
|
| |
That’s where all its users are...
|
| |
|
|
|
|
|
|
|
|
|
| |
This commit is just a refactoring, intended to make the use of
rejigConRes (which sorts out the return types of GADT-like constructors)
less delicate. The idea is that, if we perform role checking in a
second top-level pass, we can use checkValidDataCon to check for
valid return types. Previously, checking roles would force the
rejigConRes thunk before we knew that rejigConRes was safe to call!
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
It now reads
Could not coerce from ‛S a’ to ‛S (NT a)’
and does not mention Coercible any more (as discussed in #8567).
|
|
|
|
| |
just like other type errors occurring during deriving.
|
|
|
|
| |
in comments and function names, to use less names for the same thing.
|
|
|
|
|
|
| |
This commit was accidentally pushed.
This reverts commit 574ccfa231ca05d03d1da9d31e5bc81e74cc5e1e.
|
| |
|
| |
|
| |
|
| |
|