| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
| |
separate file and add -ddump-cmm-verbose-by-proc to keep old behaviour (#16930)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GHC used to reject programs of this form:
```
newtype Age = MkAge Int
deriving Eq via Const Int a
```
That's because an earlier implementation of `DerivingVia` would
generate the following instance:
```
instance Eq Age where
(==) = coerce @(Const Int a -> Const Int a -> Bool)
@(Age -> Age -> Bool)
(==)
```
Note that the `a` in `Const Int a` is not bound anywhere, which
causes all sorts of issues. I figured that no one would ever want to
write code like this anyway, so I simply banned "floating" `via` type
variables like `a`, checking for their presence in the aptly named
`reportFloatingViaTvs` function.
`reportFloatingViaTvs` ended up being implemented in a subtly
incorrect way, as #15831 demonstrates. Following counsel with the
sage of gold fire, I decided to abandon `reportFloatingViaTvs`
entirely and opt for a different approach that would _accept_
the instance above. This is because GHC now generates this instance
instead:
```
instance forall a. Eq Age where
(==) = coerce @(Const Int a -> Const Int a -> Bool)
@(Age -> Age -> Bool)
(==)
```
Notice that we now explicitly quantify the `a` in
`instance forall a. Eq Age`, so everything is peachy scoping-wise.
See `Note [Floating `via` type variables]` in `TcDeriv` for the full
scoop.
A pleasant benefit of this refactoring is that it made it much easier
to catch the problem observed in #16181, so this patch fixes that
issue too.
Fixes #15831. Fixes #16181.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
To display the free variables for a single breakpoint, GHCi pulls out the
information from the fields `modBreaks_breakInfo` and `modBreaks_vars`
of the `ModBreaks` data structure. For a specific breakpoint this gives 2
lists of types 'Id` (`Var`) and `OccName`. They are used to create the Id's
for the free variables and must be kept in sync:
If we remove an element from the Names list, then we also must remove the
corresponding element from the OccNames list.
|
|
|
|
|
|
|
|
|
|
|
| |
Kqueue/kevent implementation used to ignore events to be unsubscribed
from when events to be subscribed to were provided. This resulted in a
lost notification subscription, when GHC runtime didn't listen for any
events, yet the kernel considered otherwise and kept waking up the IO
manager thread.
This commit fixes this issue by always adding and removing all of the
provided subscriptions.
|
|
|
|
|
| |
This commit fixes #16874 by using `fsep` rather than `sep` when pretty
printing long patterns and expressions.
|
|
|
|
| |
Fixed in #14759.
|
|
|
|
|
| |
This requires code loading and therefore can't be run in the profiled
ways when GHC is dynamically linked.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Otherwise the unique counter starts at 0, causing us to immediately
underflow.
|
|
|
|
| |
See #16803.
|
| |
|
|
|
|
|
|
|
| |
Unfortunately this will require more work; register allocation is
quite broken.
This reverts commit acd795583625401c5554f8e04ec7efca18814011.
|
| |
|
|
|
|
|
|
|
|
| |
These are unexploded minds as far as the linter is concerned. I don't
want to hit in my MRs by mistake!
I did this with `sed`, and then rolled back some changes in the docs,
config.guess, and the linter itself.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In one spot in kcConDecl we were passing in the return
kind signature rether than the return kind. e.g. #16828
newtype instance Foo :: Type -> Type where
MkFoo :: a -> Foo a
We were giving kcConDecl the kind (Type -> Type), whereas it
was expecting the ultimate return kind, namely Type.
This "looking past arrows" was being done, independently,
in several places, but we'd missed one. This patch moves it all
to one place -- the new function kcConDecls (note the plural).
I also took the opportunity to rename
tcDataFamHeader to tcDataFamInstHeader
(The previous name was consistently a source of confusion.)
|
|
|
|
| |
in case -fwrite-interface was specified (#16670)
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, GHC would typecheck the `via` type once per class in a
`deriving` clause, which caused the problems observed in #16923.
This patch restructures some of the functionality in `TcDeriv` and
`TcHsType` to avoid this problem. We now typecheck the `via` type
exactly once per `deriving` clause and *then* typecheck all of the
classes in the clause.
See `Note [Don't typecheck too much in DerivingVia]` in `TcDeriv`
for the full details.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The simple optimiser was making an invalid transformation
to join points -- yikes. The fix is easy.
I also added some documentation about the fact that GHC uses
a slightly more restrictive version of join points than does
the paper.
Fix #16918
|
| |
|
|
|
|
|
| |
slightly larger testcase for :type-at and :uses
so we can see changes, if #16804 is done.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Rename requires_th to req_th for consistency with other req functions
(e.g. req_interp, req_profiling etc.)
- req_th (previously requires_th) now checks for interpreter (via
req_interp). With this running TH tests are skipped when running the
test suite with stage=1.
- Test tweaks:
- T9360a, T9360b: Use req_interp
- recomp009, T13938, RAE_T32a: Use req_th
- Fix check-makefiles linter: it now looks for Makefiles instead of .T
files (which are actually Python files)
|
|
|
|
|
| |
Renames performance metrics to include whether they are compile-time or
runtime metrics.
|
|
|
|
|
|
|
| |
If the union of dependencies of imported modules change, the `mi_deps`
field of the interface files should change as well. Because of that, we
need to check for changes in this in recompilation checker which we are
not doing right now. This adds a checks for that.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To avoid having to `panic` any time a TTG extension constructor is
consumed, this MR introduces an uninhabited 'NoExtCon' type and uses
that in every extension constructor's type family instance where it
is appropriate. This also introduces a 'noExtCon' function which
eliminates a 'NoExtCon', much like 'Data.Void.absurd' eliminates
a 'Void'.
I also renamed the existing `NoExt` type to `NoExtField` to better
distinguish it from `NoExtCon`. Unsurprisingly, there is a lot of
code churn resulting from this.
Bumps the Haddock submodule. Fixes #15247.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Attach the `SrcSpan` of the first pattern synonym binding involved in
the recursive group when throwing the corresponding error message,
similarly to how it is done for type synonyms.
Fixes #16900.
|
|
|
|
|
|
|
|
| |
Ticket #16247 showed that we were discarding an implication
constraint that had empty ic_wanted, when we still needed to
keep it so we could check whether it had a bad telescope.
Happily it's a one line fix. All the rest is comments!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the eager unifier, when unifying (tv1 ~ tv2),
when we decide to swap them over, to unify (tv2 ~ tv1),
I'd forgotten to ensure that tv1's kind was fully zonked,
which is an invariant of uUnfilledTyVar2.
That could lead us to build an infinite kind, or (in the
case of #16902) update the same unification variable twice.
Yikes.
Now we get an error message rather than non-termination,
which is much better. The error message is not great,
but it's a very strange program, and I can't see an easy way
to improve it, so for now I'm just committing this fix.
Here's the decl
data F (a :: k) :: (a ~~ k) => Type where
MkF :: F a
and the rather error message of which I am not proud
T16902.hs:11:10: error:
• Expected a type, but found something with kind ‘a1’
• In the type ‘F a’
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this refactoring:
* DerivInfo for data family instances was returned from tcTyAndClassDecls
* DerivInfo for data declarations was generated with mkDerivInfos and added at a
later stage of the pipeline in tcInstDeclsDeriv
After this refactoring:
* DerivInfo for both data family instances and data declarations is returned from
tcTyAndClassDecls in a single list.
This uniform treatment results in a more convenient arrangement to fix #16731.
|
|
|
|
|
|
|
| |
Commit cef80c0b9edca3d21b5c762f51dfbab4c5857d8a debuted a breaking
change to `template-haskell`, so in order to guard against it
properly with CPP, we need to bump the `template-haskell` version
number accordingly.
|
|
|
|
|
|
|
| |
This adds support for constructing vector types from Float#, Double# etc
and performing arithmetic operations on them
Cleaned-Up-By: Ben Gamari <ben@well-typed.com>
|
|
|
|
|
| |
just use the test to show the defective behaviour, so we can see
the difference, when it gets fixed
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
This allows us to run (but ignore the result of) fragile testcases.
Hopefully this should allow us to more easily spot when a fragile test
becomes un-fragile.
|
| |
|
|
|
|
| |
This is the same as T5611 but with an unsafe call to sleep.
|
|
|
|
|
| |
The original issue, #5611, was concerned with safe calls. However, the
test inexplicably used an unsafe call. Fix this.
|
|
|
|
|
| |
The test seems to have been missing the name of its script and didn't
build with HEAD. How it made it through CI is beyond me.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit partly reverts e69619e923e84ae61a6bb4357f06862264daa94b
commit by reintroducing Sf_SafeInferred SafeHaskellMode.
We preserve whether module was declared or inferred Safe. When
declared-Safe module imports inferred-Safe, we warn. This inferred
status is volatile, often enough it's a happy coincidence, something
which cannot be relied upon. However, explicitly Safe or Trustworthy
packages won't accidentally become Unsafe.
Updates haddock submodule.
|
|
|
|
|
| |
Metric Increase:
haddock.Cabal
|