[Git][ghc/ghc][wip/dcoutts/capability-yield] 47 commits: testsuite: Show baseline sample count and range in perf failures
by Duncan Coutts (@dcoutts) 29 Aug '26
by Duncan Coutts (@dcoutts) 29 Aug '26
29 Aug '26
Duncan Coutts pushed to branch wip/dcoutts/capability-yield at Glasgow Haskell Compiler / GHC
Commits:
b9160962 by Simon Jakobi at 2026-08-20T14:57:52-04:00
testsuite: Show baseline sample count and range in perf failures
A perf baseline is the mean of all samples recorded for a commit, and
it prints as a single number, hiding how far the samples spread. When
the spread is wide, this can indicate an unstable metric that isn't
actually useful as a signal for the perf tests.
For example, in #27602, T27336's peak_megabytes_allocated baseline
showed as 757 when the underlying samples were 605 and 909.
When the baseline is averaged from more than one sample, say so in the
failure output: the one-line stat-failure reason shows the sample
range, and the detail block lists the raw samples. Single-sample
baselines print exactly as before.
Context: #27602
Assisted-by: Claude Fable 5
- - - - -
a4979877 by Simon Jakobi at 2026-08-20T14:57:52-04:00
testsuite: Fold Baseline into CommitMetric
A Baseline was just a CommitMetric plus the commit it came from, built
by copying fields across. Since get_commit_metric already knows that
commit, record it on CommitMetric itself and drop Baseline. This also
collapses both branches of find_baseline into plain returns.
Assisted-by: Claude Fable 5
- - - - -
99fb8d68 by Simon Jakobi at 2026-08-20T14:57:52-04:00
ci: Clarify comment on pushing perf notes after failures
Context: #27602
Assisted-by: Claude Fable 5
- - - - -
2ca87972 by Alan Zimmerman at 2026-08-20T14:58:36-04:00
EPA: Remove LocatedBC / SrcSpanBF
The custom annotations are now in the BooleanFormula TTG extension
points, so LBooleanFormula can now use the standard LocatedA.
- - - - -
d2bc32aa by Simon Peyton Jones at 2026-08-21T12:59:26-04:00
Better handling of serialisation of wired-in names
Fixes #27501
- - - - -
d2795ffc by Alan Zimmerman at 2026-08-21T13:00:05-04:00
EPA: Remove NoEpTok/NoEpUniTok, using an unhelpful SrcSpan instead
Also introduce helper functions noEpTok and noEpUniTok to serve
as simple replacements in code inserting an token annotation without
location information.
- - - - -
b5d29ab8 by Brandon Chinn at 2026-08-25T18:42:08-04:00
Add Data.RealFloat and Infinity/NegInfinity/NaN pattern synonyms (#26961)
- - - - -
e60eb3bc by Andreas Klebinger at 2026-08-25T18:42:59-04:00
rts linker: Fix pointer arithmetic issue in flushInstructionCacheRISCV64
We accidentally operated over `uint64_t*` when we should use `uint8_t`.
Fixes #27569
- - - - -
e9bbe8f9 by Andreas Klebinger at 2026-08-26T15:09:23-04:00
cmm dumps: Add machop width info with -dppr-debug for infix ops.
- - - - -
86e3a9d8 by Andreas Klebinger at 2026-08-26T15:09:24-04:00
CmmLint: Check for unsupported MachOp widths
machOpArgReps now maps MachOp + Width to a list of supported
argument widths or Nothing if the given operation is not supported
at the given width.
This allows us to check for nonsensical combinations like FloatToInt
at Word16.
Similarly we now check that every address is actually wordwidth.
- - - - -
13781cca by Andreas Klebinger at 2026-08-26T15:09:24-04:00
arm64 ncg: The big subword truncation fix.
A set of slightly related fixes to arm subword handling:
Bitmask immediates:
Don't produce overflowing assembly literals.
There is still another bug here that causes us to miss some valid
literals but we will fix that later.
Improve subword truncation handling:
We now use a small set of helpers to truncate `Register` values rather
than truncating immediate `Reg` values which greatly simplifies the code
structure. This fixes a great many bugs to do with sign/zero extending subwords
or the lack thereof.
We now establish the invariant that subword values are zero-extended at
every site at which they come into "scope" of the ncg, and rely on the
invariant throughout rather than pessimistically inserting redundant
extensions in a hodgepodge manner at the use sites of these values.
This fixes at least the bugs described in issues #27533, #27430
#27537, #27538, #27539, and #27550. But likely more bugs yet not
found.
Subword ffi results:
Apply truncations when calling functions returning
subword values.
genCondJump:
Don't sign extend signed values in the input register as
it might map to a local variable, corrupting the value stored within.
Fix subword store/load instructions.:
We used to read those at 32bit width even for smaller values possibly
resulting in invalid memory access. Now we construct the suffix for
subword variants based on the instruction format for these.
- - - - -
d8fa5d7c by Andreas Klebinger at 2026-08-26T15:09:24-04:00
arm64 ncg: Fix MO_V_Broadcast for non-literals.
We now use OpReg instead of OpScalarAsVec as required since we broadcast a gp register.
Also adds a test. Fixes #27565.
- - - - -
94822c95 by Andreas Klebinger at 2026-08-26T15:09:24-04:00
Add some test cases covering bugs in the arm ncg.
* Test for #27430 (subword ffi results)
* #27537 - subword conversions
* #27538 - subwords used in conditional
* #27533 - single byte read
- - - - -
dd1ba88a by Andreas Klebinger at 2026-08-26T15:09:24-04:00
cmmLint: Lint against MO_FS_Truncate subword use.
- - - - -
fd22f71e by Zubin Duggal at 2026-08-26T15:10:20-04:00
ghc-internal: annotateSTM should use catchSTM# rather than catch#
A catch# frame inside a transaction breaks retry and async exception
delivery.
Fixes #27657
- - - - -
bb324171 by Rodrigo Mesquita at 2026-08-26T15:10:59-04:00
rts: refactor to reduce THREADED_RTS in MSG_UPD_TSO_FLAGS
- No behavior change in this commit (well, a small optimization here
makes us do less work if the target TSO owned by the curr. capability)
- Move all THREADED_RTS CPP needed into `updThreadFlag`
- Merge MSG_SET_TSO_FLAGS and MSG_UNSET_TSO_FLAGS into MSG_UPD_TSO_FLAGS
plus a `set` bool field in the MessageUpdTSOFlag struct
Towards #27729
- - - - -
ed99b7b7 by Rodrigo Mesquita at 2026-08-26T15:10:59-04:00
rts: Fix race condition in MSG_UPD_TSO_FLAGS execution
The code for processing the MSG_UPD_TSO_FLAGS message was not taking
into consideration that the TSO's owner might have moved in between that
capability receiving the message (since it was its previous owner) and
starting to process its inbox (a point at which it was no longer the
owner)
Added Note [TSO owner may change in between Msg being sent and received]
to explain this race and the pattern used to fix this, where we just
forward the message to the new owner.
Fixes #27729
- - - - -
cd653714 by Alan Zimmerman at 2026-08-26T15:11:49-04:00
EPA: Uses Parsers.parseModule for exactprint tests
Parsers.parseModule is the advertised way to parse for use for exact
printing in the ghc-exactprint library. This commit updates the GHC
exact print testing to use it.
This requires moving the comment balancing that was occurring
only in the test path into the advertising parser path, so it moves
from Transforms.hs to Utils.hs.
Also update the comment adding to honour trailing annotations
- - - - -
d1d01fa5 by Wolfgang Jeltsch at 2026-08-27T13:17:59+03:00
Add `rethrowSTM` and improve STM-related documentation
Adding `rethrowSTM` resolves #26758.
The implementation of `rethrowSTM` is completely analogous to the one of
`rethrowIO`.
The following is established for the documentation of `throwSTM` and
`catchSTM`:
* Both operations are directly described as analogs of their `IO`
counterparts.
* There is no reference to `throw` in the documentation of `throwSTM`,
because, although such a reference is great in the documentation of
`throwIO`, it is somewhat out of place in the documentation of
`throwSTM`.
* Instead of repeating part of `throwIO`’s documentation, the
documentation of `throwSTM` just recommends using `throwSTM` instead
of `throw` and references the corresponding arguments in the
documentation of `throwIO`.
- - - - -
06fde293 by fendor at 2026-08-28T06:06:44-04:00
GHCi: Fix order of `PackageDBFlag`s for interactive home unit
`PackageDBFlag`s are stored in reverse order of cli specification.
When sorting the `PackageDBFlag`s by longest common prefix, we need thus
to reverse the package db stacks before calculating the prefix.
We make sure to reverse the package db stack for the interactive home
unit to uphold that later specified package dbs overwrite earlier ones.
Resolved and adds regression test for #27640
- - - - -
024c4d04 by fendor at 2026-08-28T06:07:23-04:00
Reuse the UnitIndexCache after initialising multiple home units
- - - - -
55326fa0 by Alan Zimmerman at 2026-08-28T06:08:03-04:00
EPA: Some Haddock processing tweaks
These changes to the Haddock postprocessing should not change
behaviour, but just bring it more closely in line with the
original, changed at 44309cd377f
And add some haddock exactprint tests to show they work.
- - - - -
b3ddee95 by Andreas Klebinger at 2026-08-28T13:57:46-04:00
hadrian: Deprecate quickest flavour.
It was more of a trap for new users than actually beneficial so we
deprecate it and suggest quick+no_dynamic_libs to users instead.
- - - - -
a1d81390 by Andreas Klebinger at 2026-08-28T13:58:37-04:00
cmm: Always favour entry block during block deduplication.
We now always keep the first block in the CmmGraph. This way we avoid
the need to update the entry info table.
Failing to do so caused #27722.
Fixes #27722.
- - - - -
5bd65f00 by Andreas Klebinger at 2026-08-28T13:59:16-04:00
test: FamAppCachePerf - Only collect bytes allocated. Fixes 27747
- - - - -
ced53ce6 by mangoiv at 2026-08-29T07:15:24-04:00
nightlies: output yaml to file only
Previously we would just output the metadata to stdout
which risks that it's clobbered by incidental debugt output.
We now output to file only.
Fixes #27511
- - - - -
578bd185 by Andreas Klebinger at 2026-08-29T07:16:05-04:00
Specialise: Stop looping on recursive dictionaries in interestingDict
interestingDict now doesn't look through loopbreaker unfoldings.
Doing so would cause infinite loops on certain dictionaries.
Fixes #27705.
- - - - -
9f945c90 by Duncan Coutts at 2026-08-29T14:57:04+01:00
Minor doc & comment improvements to releaseCapability_
- - - - -
29cd4bfa by Duncan Coutts at 2026-08-29T14:57:04+01:00
Remove redundant USED_IF_THREADS attribute on Capability utilities
- - - - -
414c6c64 by Duncan Coutts at 2026-08-29T14:57:04+01:00
Move several Capability utils from Schedule.{c,h} to Capability.{c,h}
They probably should have been there all along. This means all the
pending_sync functionality is within Capability.{c,h}. We only expose
pending_sync for the purpose of inline header functions.
- - - - -
aae57993 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Shuffle the pending sync type declarations for better readability
Move them together into the section with the related functions that use
them.
Also drop the legacy use of the C 'volatile' modifier on the
pending_sync variable. We use C atomics for such access, not volatile.
- - - - -
c1586415 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Rename returning task queue helpers
Follows a naming convention elsewhere. It also gives us suitable names
to distinguish appending vs prepending to the queue, and we're about to
add a prepend operation.
- - - - -
73798761 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Add a prepend operation for the returning task queue
With a pending sync (e.g. for GC), we really want to be able to
prioritise the task waiting on the sync over all other returning tasks.
To do that we will need to prepend to the queue rather than append.
- - - - -
c0d0b784 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Split waitForSomeCapability out of waitForCapability and adjust callers
Previously waitForCapability had a general interface covering serveral
situations, but it's more useful and easier to understand with two more
specialised functions.
Previously waitForCapability had an in/out Capability parameter: if the
cap was non-null then it would wait to acquire that specific capability
(though in this case it had to be the capability the task was already
associated with), or if it was null then it would pick a suitable
capability, associate the task with it and wait for that capability.
So overall, this required and in/out parameter and suggested that the
capability returned could be different from the one passed in. That was
true if the task was associated with no capability, but false if it was.
This complicated the call sites where we know that the task does have an
associated capability, as it implied the capability could change when in
fact it cannot.
So we now split it: waitForSomeCapability handles this general case
where the task may or may not have an associated capability, and it
returns that new capability. And the waitForCapability now assumes that
the task is associated with a capability and does not need to return
anything. Neither function needs a Capability *cap argument any more.
This simplifies several call sites.
- - - - -
4aa0363d by Duncan Coutts at 2026-08-29T14:57:05+01:00
Update stale comments related to waitFor[Some]Capability
In particular waitForCapability cannot change the capability.
Update a comment about grabbing a new Task in performGC_. This comment was
accurate in 2006, but it is no longer accurate since newBoundTask does not
in fact produce a new Task (typically). The right thing now is to talk about
InCalls, not tasks. That said, the code is still correct since
newBoundTask will push a new incall, but also deal with the general case
of an OS thread that does not yet have an associated Task.
- - - - -
84ec7bba by Duncan Coutts at 2026-08-29T14:57:05+01:00
Introduce waitForCapability_ with additional priority arg
Split waitForCapability into a wrapper with the existing type and a
worker with an extra argument.
The new high_priority argument controls whether the task is appended or
prepended to the returing task queue. The default, used by the
waitForCapability wrapper, is false, meaning append to the end of the
queue. This gives fairness.
The high_priority==true case will be used in the subsequent commit.
- - - - -
2463167d by Duncan Coutts at 2026-08-29T14:57:05+01:00
Make acquireAllCapabilities use high_priority on waitForCapability_
As discussed in issue #27473, a sync of all capabilities is something
that needs to happen promptly (but often doesn't).
One source of delay is that acquireAllCapabilities using
waitForCapability would put the task trying to acquire each capability
at the _end_ of the returning task queue. This gave every other returing
task a full timeslice to run. Meanwhile, several other capabilities are
blocked waiting for the sync to complete, leading to a loss of
throughput.
We use the new high_priority arg to waitForCapability_ to ensure that
the requesting task is put on the front of the returing task queue. This
will ensure that releaseCapability_ will prioritise giving the
capability to the task requesting the sync.
- - - - -
be6c45e8 by Duncan Coutts at 2026-08-29T14:57:05+01:00
In releaseCapability_ make the pending_sync case self-contained
Previously the pending_sync case had to be checked _after_ the returning
tasks case, since one of the possibilities (indeed the more likely
possibility) is that the task calling waitForCapability will have
enqueued itself as a returning task.
Now we make the pending_sync case self-contained. We note in a comment
the two possibilities: either the task calling waitForCapability has
enqueued itself already and is waiting, or it's not got there yet. We
can handle the first case by giving the capability to the task at the
head of the returning tasks queue, and the second case by leaving the
capability free.
Another way to look at this, is that we move a special case of handling
of the returning task case into the pending_sync case. That special case
being a returing task during a pending sync.
This makes the order of handling returning tasks vs pending sync
independent. This is good, because really they're in the wrong priority
order and we want to flip them around.
- - - - -
6bb34033 by Duncan Coutts at 2026-08-29T14:57:05+01:00
In releaseCapability_ prioritise pending sync over returning tasks
Fixes issue #27460
As explained in the issue, a pending sync (e.g. for GC) should be dealt
with promptly. Returning tasks are a lower priority.
Historically however we had to check returning tasks first, because the
synchronisation mechanism mixed up the task doing a sync with the tasks
returning from safe FFI calls. The task performing the sync was very
likely to be queued on the returning task list (and historically it was
at the _end_ of this list!).
We have now arranged that the task performing the sync is at the front
of the returning task list, and in the pending sync case we now check
the returning task list and run the first task from there if it there is
one.
This is by no means perfect, but it is better. See issue #27473 for a
more general issue of cleaning up the design of the pending sync.
- - - - -
74f2b836 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Eliminate a use of releaseCapability_ with always_wakeup
This one was purely artificial, just due to the unnecessarily strong
pre-condition. We can just weaken the precondition. The capability inbox
is non-empty so releaseCapability_ will certainly wake up a task for the
capability anyway.
We are trying to eliminate the always_wakeup parameter entirely since it
is a bit of a design wart.
- - - - -
6d52c0f4 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Eliminate another use of releaseCapability_ with always_wakeup
Previusly in schedulePushWork, it checked if there are sparks for the
capability and called releaseAndWakeupCapability if there were and
releaseCapability if there were none. This is unnecessary:
releaseCapability already ensures that a task will be worken if there
are sparks available for the capability.
This also lets us remove the now unused releaseAndWakeupCapability,
eliminating another use of always_wakeup==true.
- - - - -
69f6f66b by Duncan Coutts at 2026-08-29T14:57:05+01:00
Make prodCapability reliable, fix race condition
Also eliminate the last use of releaseCapability_ using the
always_wakeup param.
Add a Note that describes the problem and solution.
Now that prodCapability also does an interruptCapability (if the
capability is active) then we don't need to use interruptCapability as
well at call sites of prodCapability.
- - - - -
d60466e6 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Eliminate the now-unused always_wakeup param from releaseCapability_
releaseCapability_ had an extra bool param: always_wakeup. This was
rather a design wart. We have now eliminated all uses of it so we can
remove the param entirely.
This will also reduce churn at call site when we add a new (rarely
used) parameter in the subsequent commit.
- - - - -
ae30e363 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Add releaseCapability_ worker with a wakeup_worker modifier
Split releaseCapability_ into a worker and wrapper. The worker gains the
extra wakeup_worker parameter.
Document within releaseCapability__ the basic approach of looking for a
series of conditions in priority order and acting on them.
Then add a modifier, wakeup_worker and explain it in similar terms.
What it does is skip two of the conditions in the priority list, with
the effect that we prioritise waking up a worker task over a returning
task or bound task.
This feature is not yet used in this commit, but it will be used as
part of a scheme to allow in-RTS I/O managers in the threaded RTS. This
scheme will make use of being able to start a background worker thread,
and that will use this feature to start it promptly.
Also correct the yieldCapability docs to cover all the conditions, and
in priority order for consistency.
- - - - -
2e11787d by Duncan Coutts at 2026-08-29T14:57:05+01:00
Move enqueueWorker next to where it is used.
It's not general purpose at all. It's very specifically crafted to work
with it's only caller: yieldCapability. It does very suprising things
like releaseCapability_, release locks and terminate threads. This logic
would be much clearer if done within yieldCapability.
- - - - -
f74519cd by Duncan Coutts at 2026-08-29T14:57:05+01:00
Move code out of enqueueWorker and into releaseCapability_
Instead of directly releasing locks and terminating tasks, have it
return whether the enqueue was successful or not. In the latter case,
releaseCapability_ itself will release locks and terminate the task.
This makes the logic of releaseCapability_ a lot clearer. Fiddling with
tasks is what releaseCapability_ does, so it's better not to try and
encapsulate this within a helper function.
- - - - -
7ae21ca9 by Duncan Coutts at 2026-08-29T14:57:05+01:00
Clarify the logic and control flow in yieldCapability
yieldCapability is unfortunately a bit complicated. This change
restructures things slightly but should keep the behaviour the same.
Previously after calling releaseCapability_ we had a bunch of
alternatives, where in each branch we would use RELEASE_LOCK(cap->lock)
and do various things before/after the lock is released. This was a bit
hard to follow, or to extend (which we need to do).
So now we have unconditional acquire and release of the cap->lock, so
it's clear where that happens, with releaseCapability_ in between. Then
in between these steps we have the various other pre/post actions. Some
before releaseCapability_, some after while holing the lock, and some
after having released the lock.
We explain this structure in a longer comment, and refer back to the
structure from the code.
- - - - -
143 changed files:
- .gitlab-ci.yml
- .gitlab/ci.sh
- .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
- changelog.d/T27202
- + changelog.d/T27657
- + changelog.d/T27705
- + changelog.d/T27722-cbe-entry-block.md
- + changelog.d/arm_ncg_fixes_T27430
- + changelog.d/rethrow-stm
- changelog.d/unit-index
- compiler/GHC/Builtin.hs
- compiler/GHC/Cmm/CommonBlockElim.hs
- compiler/GHC/Cmm/Expr.hs
- compiler/GHC/Cmm/Lint.hs
- compiler/GHC/Cmm/MachOp.hs
- compiler/GHC/Cmm/Parser.y
- compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
- compiler/GHC/CmmToAsm/AArch64/Instr.hs
- compiler/GHC/CmmToAsm/AArch64/Ppr.hs
- compiler/GHC/Core/Opt/Specialise.hs
- compiler/GHC/Data/BooleanFormula.hs
- compiler/GHC/Driver/Session/Units.hs
- compiler/GHC/Hs.hs
- compiler/GHC/Hs/Dump.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/Iface/Binary.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Iface/Syntax.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Parser/PostProcess/Haddock.hs
- ghc/GHCi/UI.hs
- hadrian/README.md
- hadrian/doc/cross-compile.md
- hadrian/doc/flavours.md
- hadrian/doc/make.md
- hadrian/doc/windows.md
- hadrian/hadrian.cabal
- hadrian/src/CommandLine.hs
- hadrian/src/Flavour.hs
- hadrian/src/Settings.hs
- − hadrian/src/Settings/Flavours/Quickest.hs
- libraries/base/base.cabal.in
- libraries/base/changelog.md
- + libraries/base/src/Data/RealFloat.hs
- libraries/base/src/GHC/Conc.hs
- libraries/ghc-internal/src/GHC/Internal/STM.hs
- rts/Capability.c
- rts/Capability.h
- rts/CloneStack.c
- rts/Interpreter.c
- rts/Messages.c
- rts/RtsAPI.c
- rts/Schedule.c
- rts/Schedule.h
- rts/StgMiscClosures.cmm
- rts/Threads.c
- rts/Threads.h
- rts/include/rts/storage/Closures.h
- rts/include/stg/MiscClosures.h
- rts/linker/elf_reloc_riscv64.c
- rts/sm/GC.c
- testsuite/driver/perf_notes.py
- testsuite/driver/testglobals.py
- testsuite/tests/cmm/should_compile/Makefile
- + testsuite/tests/cmm/should_compile/T27368-ppr-debug.stderr
- − testsuite/tests/cmm/should_compile/T27368-ppr-debug.stdout
- testsuite/tests/cmm/should_compile/all.T
- + testsuite/tests/codeGen/should_run/T27430.hs
- + testsuite/tests/codeGen/should_run/T27430.stdout
- + testsuite/tests/codeGen/should_run/T27430_c.c
- + testsuite/tests/codeGen/should_run/T27533.hs
- + testsuite/tests/codeGen/should_run/T27533.stdout
- + testsuite/tests/codeGen/should_run/T27533_cmm.cmm
- + testsuite/tests/codeGen/should_run/T27537.hs
- + testsuite/tests/codeGen/should_run/T27537.stdout
- + testsuite/tests/codeGen/should_run/T27538.hs
- + testsuite/tests/codeGen/should_run/T27538.stdout
- testsuite/tests/codeGen/should_run/all.T
- + testsuite/tests/concurrent/should_run/T27657a.hs
- + testsuite/tests/concurrent/should_run/T27657a.stdout
- + testsuite/tests/concurrent/should_run/T27657b.hs
- + testsuite/tests/concurrent/should_run/T27657b.stdout
- testsuite/tests/concurrent/should_run/all.T
- testsuite/tests/ghc-api/exactprint/T22919.stderr
- testsuite/tests/ghc-api/exactprint/Test20239.stderr
- testsuite/tests/ghc-api/exactprint/ZeroWidthSemi.stderr
- + testsuite/tests/ghci/prog-mhu007/Makefile
- + testsuite/tests/ghci/prog-mhu007/a/A.hs
- + testsuite/tests/ghci/prog-mhu007/all.T
- + testsuite/tests/ghci/prog-mhu007/b/B.hs
- + testsuite/tests/ghci/prog-mhu007/prog-mhu007.script
- + testsuite/tests/ghci/prog-mhu007/prog-mhu007.stdout
- + testsuite/tests/ghci/prog-mhu007/testpkg-bar/Bar.hs
- + testsuite/tests/ghci/prog-mhu007/testpkg-bar/testpkg-bar.pkg
- + testsuite/tests/ghci/prog-mhu007/testpkg-foo/Foo.hs
- + testsuite/tests/ghci/prog-mhu007/testpkg-foo/testpkg-foo.pkg
- + testsuite/tests/ghci/prog-mhu007/unitA
- + testsuite/tests/ghci/prog-mhu007/unitB
- testsuite/tests/haddock/should_compile_flag_haddock/T17544.stderr
- testsuite/tests/haddock/should_compile_flag_haddock/T17544_kw.stderr
- testsuite/tests/haddock/should_compile_flag_haddock/T24221.stderr
- testsuite/tests/interface-stability/base-exports.stdout
- testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
- testsuite/tests/interface-stability/base-exports.stdout-mingw32
- testsuite/tests/module/mod185.stderr
- testsuite/tests/parser/should_compile/DumpParsedAst.stderr
- testsuite/tests/parser/should_compile/DumpParsedAstComments.stderr
- testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
- testsuite/tests/parser/should_compile/DumpSemis.stderr
- testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr
- testsuite/tests/parser/should_compile/KindSigs.stderr
- testsuite/tests/parser/should_compile/T14189.stderr
- testsuite/tests/parser/should_compile/T15323.stderr
- testsuite/tests/parser/should_compile/T20452.stderr
- testsuite/tests/parser/should_compile/T20718.stderr
- testsuite/tests/parser/should_compile/T20718b.stderr
- testsuite/tests/parser/should_compile/T20846.stderr
- testsuite/tests/parser/should_compile/T23315/T23315.stderr
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/printer/AnnotationNoListTuplePuns.stdout
- + testsuite/tests/printer/Haddock1.hs
- testsuite/tests/printer/Makefile
- testsuite/tests/printer/T18791.stderr
- testsuite/tests/printer/Test20297.stdout
- testsuite/tests/printer/Test24533.stdout
- testsuite/tests/printer/all.T
- + testsuite/tests/simd/should_run/T27565.hs
- + testsuite/tests/simd/should_run/T27565.stdout
- testsuite/tests/simd/should_run/all.T
- + testsuite/tests/simplCore/should_run/T27705.hs
- + testsuite/tests/simplCore/should_run/T27705.stdout
- + testsuite/tests/simplCore/should_run/T27705_Inst.hs
- testsuite/tests/simplCore/should_run/all.T
- utils/check-exact/ExactPrint.hs
- utils/check-exact/Main.hs
- utils/check-exact/Parsers.hs
- utils/check-exact/Transform.hs
- utils/check-exact/Utils.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Target.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e0e3f390a6acc3c6159a2e91d03625…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e0e3f390a6acc3c6159a2e91d03625…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/az/exactprint-annotation-rationalisation] 44 commits: Add `rethrowSTM` and improve STM-related documentation
by Alan Zimmerman (@alanz) 29 Aug '26
by Alan Zimmerman (@alanz) 29 Aug '26
29 Aug '26
Alan Zimmerman pushed to branch wip/az/exactprint-annotation-rationalisation at Glasgow Haskell Compiler / GHC
Commits:
d1d01fa5 by Wolfgang Jeltsch at 2026-08-27T13:17:59+03:00
Add `rethrowSTM` and improve STM-related documentation
Adding `rethrowSTM` resolves #26758.
The implementation of `rethrowSTM` is completely analogous to the one of
`rethrowIO`.
The following is established for the documentation of `throwSTM` and
`catchSTM`:
* Both operations are directly described as analogs of their `IO`
counterparts.
* There is no reference to `throw` in the documentation of `throwSTM`,
because, although such a reference is great in the documentation of
`throwIO`, it is somewhat out of place in the documentation of
`throwSTM`.
* Instead of repeating part of `throwIO`’s documentation, the
documentation of `throwSTM` just recommends using `throwSTM` instead
of `throw` and references the corresponding arguments in the
documentation of `throwIO`.
- - - - -
06fde293 by fendor at 2026-08-28T06:06:44-04:00
GHCi: Fix order of `PackageDBFlag`s for interactive home unit
`PackageDBFlag`s are stored in reverse order of cli specification.
When sorting the `PackageDBFlag`s by longest common prefix, we need thus
to reverse the package db stacks before calculating the prefix.
We make sure to reverse the package db stack for the interactive home
unit to uphold that later specified package dbs overwrite earlier ones.
Resolved and adds regression test for #27640
- - - - -
024c4d04 by fendor at 2026-08-28T06:07:23-04:00
Reuse the UnitIndexCache after initialising multiple home units
- - - - -
55326fa0 by Alan Zimmerman at 2026-08-28T06:08:03-04:00
EPA: Some Haddock processing tweaks
These changes to the Haddock postprocessing should not change
behaviour, but just bring it more closely in line with the
original, changed at 44309cd377f
And add some haddock exactprint tests to show they work.
- - - - -
b3ddee95 by Andreas Klebinger at 2026-08-28T13:57:46-04:00
hadrian: Deprecate quickest flavour.
It was more of a trap for new users than actually beneficial so we
deprecate it and suggest quick+no_dynamic_libs to users instead.
- - - - -
a1d81390 by Andreas Klebinger at 2026-08-28T13:58:37-04:00
cmm: Always favour entry block during block deduplication.
We now always keep the first block in the CmmGraph. This way we avoid
the need to update the entry info table.
Failing to do so caused #27722.
Fixes #27722.
- - - - -
5bd65f00 by Andreas Klebinger at 2026-08-28T13:59:16-04:00
test: FamAppCachePerf - Only collect bytes allocated. Fixes 27747
- - - - -
e9c6b1d3 by Alan Zimmerman at 2026-08-29T13:02:56+01:00
EPA Fix HsCmdDo exact print with comments
Exact printing of HsCmdDo was ignoring the location for the do
statements, and this is an annotation that can have comments in it.
Update it so we print the statements as a unit, including any
comments.
Also add the result of auditing that we capture comments in all needed
places, noting that the remaining Anno SrcSpan instances are benign.
- - - - -
a58d91ee by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Remove ListBanana / ListParens from AnnListBrackets
- - - - -
a16b92ae by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Tidy up mkHsDoPv, take AnnList directly
And some extra stuff by accident.
The main goal is to slim down AnnListBrackets to just have braces or
none.
This makes it clear that it serves only for lists which may have layout,
and opens the route to use EpLayout instead of AnnListBrackets
- - - - -
8ea2fbae by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Add specific layout field to AnnList
- - - - -
925dc42e by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Use EpaLocation in EpVirtualBraces
reword:
EPA Use vocurly as basis for AnnListLayout
For the existing cases that populate AnnList.
This also shows up AnnList usages that can never capture layout.
- - - - -
433b7ad5 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Use vocurly as basis for AnnListLayout
For the existing cases that populate AnnList.
This also shows up AnnList usages that can never capture layout.
- - - - -
85c3e0c8 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: AnnList clean up patch for empty where clause
- - - - -
da6e6619 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Add TTG fields to FamilyInfo
This commit is a simple add, with unused extension fields.
It lays the groundwork for using them for exact print annotations
- - - - -
10c45223 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
WIP annclassdecl
- - - - -
d396098f by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Update AnnClsInstDecl to contain AnnList
It was already separately tracking the '{', '}' and leading ';' values.
This aligns it with layout-introducing parser productions ('vocurly'),
so the layout processing can be handled uniformly
- - - - -
2c1b4504 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Tidy up markAnnListA'
It takes an action which can modify the AnnList, but this
is never used. So remove it.
- - - - -
abc2be7f by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Use AnnList for GADT declarations
- - - - -
5088c886 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Use AnnList in AnnClassDecl
- - - - -
a90b8091 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
MOVE EPA: Plan for Fixing AnnList Layout Properly
- - - - -
0e715517 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Make local binds located
Use LHsLocalBinds instead of HsLocalBinds
This reverses an earlier change, and brings processing of local binds
into alignement with the exact printing principle that the LocatedA
contents provide the location and extent of the enclosed item,
together with any comments or context-specific trailing items like
commas or semi colons.
The internal TTG extension points only carry exact print annotations
related to printing the item within its bounds.
This change brings back the problem of EmptyLocalBinds, which by
definition cannot have a location. These get a noSrcSpan location,
which is ignored in the exact printing process.
- - - - -
7da0d5df by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Use AnnList in HsMultiIf
It introduces layout, capture it
- - - - -
46f4a16c by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Use AnnList in DecBrl
- - - - -
b7a9ff4a by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Replace AnnListLayout / AnnListBrackets with EpLayout
- - - - -
888d7137 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
WIP: setLayoutBoth inside markAnnListA
Current problem is it is a global one-shot, and MG has one too
Check: is it needed?
if so, honouring EpLayout may be needed
- - - - -
297dbd2d by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA some tests for layout. WIP
- - - - -
42f5d7ae by Alan Zimmerman at 2026-08-29T13:05:21+01:00
Exactprint layout scope plan. Do not commit
- - - - -
6d3b9ad3 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: tidy up a bit. Combine somewhere else
- - - - -
8fa54611 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Introduce LayoutFrame stacks in ExactPrint state
- - - - -
06c27397 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
Align with ghc-exactprint
- - - - -
1b0782d2 by Alan Zimmerman at 2026-08-29T13:05:21+01:00
EPA: Fix AnnList leading semis when layout
When there is layout, anything printed triggers it, including leading
semis.
Add some test case examples too
- - - - -
1f1b180d by Alan Zimmerman at 2026-08-29T13:05:21+01:00
Exactprint: tidy up layout capturing
- - - - -
882f9d68 by Alan Zimmerman at 2026-08-29T14:28:34+01:00
EPA: add makeDelta test for Test20297
The original #20297 related to comment placement for exact printing
after running ExactPrint.makeDelta on ParsedSource. Add an additional
test that explicitly tests this.
- - - - -
5b9bcf1a by Alan Zimmerman at 2026-08-29T14:28:34+01:00
EPA: Make ValBinds LocatedA in HsLocalBindsLR
If we have items with an AnnList Annotation, as part of another, which
has different content, it must be LocatedA. This is a technical requirement
due to the way comment allocation happens during the makeDelta processing.
Comments are queued for printing, and as soon as any non-comment is to
be printed, the pending comments before that position are printed, and
in makeDelta processing these attached as preceding comments to the thing
just printed.
The means they end up captured inside the layout region of the AnnList item.
So for
foo = x
where -- comment
x = 3
the comment ends up as a preceding comment of `x = 3`, inside the
layout, and prints as
foo = x
where
-- comment
x = 3
- - - - -
babb1a27 by Alan Zimmerman at 2026-08-29T15:02:19+01:00
EPA: Make IPBinds LocatedA
- - - - -
cd7aabf7 by Alan Zimmerman at 2026-08-29T15:02:19+01:00
Extend Test20297 for additional occurrences
- - - - -
80743934 by Alan Zimmerman at 2026-08-29T15:02:19+01:00
Plan update DO NOT COMMIT
- - - - -
4c9e7330 by Alan Zimmerman at 2026-08-29T15:02:19+01:00
EPA: First pass implementation of HsList, for ClassDecls
Just as a straight list replacement to start with, no payload.
This shows the scope and invasiveness of the initial change
- - - - -
0c308d7c by Alan Zimmerman at 2026-08-29T15:02:19+01:00
EPA: HsList attempt WIP
- - - - -
bdddf33d by Alan Zimmerman at 2026-08-29T15:02:19+01:00
Enable ppr test for Haddock1. It currently fails
- - - - -
6aa9fbcd by Alan Zimmerman at 2026-08-29T15:02:19+01:00
WIP on removing NoEpAnn. Likely abandon
- - - - -
924c20d7 by Alan Zimmerman at 2026-08-29T15:02:19+01:00
EPA: Add an overview doc for exact printing
- - - - -
a8da5c0c by Simon Peyton Jones at 2026-08-29T15:02:19+01:00
Added an intro section
- - - - -
134 changed files:
- + ANNLIST-LAYOUT-PLAN.md
- + ExactPrint.md
- + LAYOUT-SCOPE-PLAN.md
- changelog.d/T27202
- + changelog.d/T27722-cbe-entry-block.md
- + changelog.d/rethrow-stm
- changelog.d/unit-index
- compiler/GHC/Cmm/CommonBlockElim.hs
- compiler/GHC/Driver/Backpack.hs
- compiler/GHC/Driver/Main/Interactive.hs
- compiler/GHC/Driver/Session/Units.hs
- compiler/GHC/Hs.hs
- compiler/GHC/Hs/Binds.hs
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/Doc.hs
- compiler/GHC/Hs/DocString.hs
- compiler/GHC/Hs/Dump.hs
- compiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/Extension/Pass.hs
- compiler/GHC/Hs/ImpExp.hs
- compiler/GHC/Hs/Instances.hs
- compiler/GHC/Hs/Pat.hs
- compiler/GHC/Hs/Stats.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Arrows.hs
- compiler/GHC/HsToCore/Expr.hs
- compiler/GHC/HsToCore/Expr.hs-boot
- compiler/GHC/HsToCore/Match.hs
- compiler/GHC/HsToCore/Pmc/Desugar.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/HsToCore/Ticks.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Parser/PostProcess/Haddock.hs
- compiler/GHC/Rename/Bind.hs
- compiler/GHC/Rename/Expr.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Rename/Splice.hs
- compiler/GHC/Rename/Utils.hs
- compiler/GHC/Runtime/Eval.hs
- compiler/GHC/Tc/Deriv.hs
- compiler/GHC/Tc/Deriv/Functor.hs
- compiler/GHC/Tc/Deriv/Generate.hs
- compiler/GHC/Tc/Gen/Arrow.hs
- compiler/GHC/Tc/Gen/Bind.hs
- compiler/GHC/Tc/Gen/Expr.hs
- compiler/GHC/Tc/Gen/Match.hs
- compiler/GHC/Tc/Module.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/Tc/TyCl/PatSyn.hs
- compiler/GHC/Tc/Types/Origin.hs
- compiler/GHC/Tc/Zonk/Type.hs
- compiler/GHC/ThToHs.hs
- compiler/Language/Haskell/Syntax.hs
- compiler/Language/Haskell/Syntax/Basic.hs
- compiler/Language/Haskell/Syntax/Binds.hs
- compiler/Language/Haskell/Syntax/Decls.hs
- compiler/Language/Haskell/Syntax/Expr.hs
- compiler/Language/Haskell/Syntax/Extension.hs
- ghc/GHCi/UI.hs
- hadrian/README.md
- hadrian/doc/cross-compile.md
- hadrian/doc/flavours.md
- hadrian/doc/make.md
- hadrian/doc/windows.md
- hadrian/hadrian.cabal
- hadrian/src/CommandLine.hs
- hadrian/src/Flavour.hs
- hadrian/src/Settings.hs
- − hadrian/src/Settings/Flavours/Quickest.hs
- libraries/base/src/GHC/Conc.hs
- libraries/ghc-internal/src/GHC/Internal/STM.hs
- testsuite/tests/ghc-api/T25121_status.stdout
- testsuite/tests/ghc-api/exactprint/T22919.stderr
- testsuite/tests/ghc-api/exactprint/Test20239.stderr
- testsuite/tests/ghc-api/exactprint/ZeroWidthSemi.stderr
- + testsuite/tests/ghci/prog-mhu007/Makefile
- + testsuite/tests/ghci/prog-mhu007/a/A.hs
- + testsuite/tests/ghci/prog-mhu007/all.T
- + testsuite/tests/ghci/prog-mhu007/b/B.hs
- + testsuite/tests/ghci/prog-mhu007/prog-mhu007.script
- + testsuite/tests/ghci/prog-mhu007/prog-mhu007.stdout
- + testsuite/tests/ghci/prog-mhu007/testpkg-bar/Bar.hs
- + testsuite/tests/ghci/prog-mhu007/testpkg-bar/testpkg-bar.pkg
- + testsuite/tests/ghci/prog-mhu007/testpkg-foo/Foo.hs
- + testsuite/tests/ghci/prog-mhu007/testpkg-foo/testpkg-foo.pkg
- + testsuite/tests/ghci/prog-mhu007/unitA
- + testsuite/tests/ghci/prog-mhu007/unitB
- testsuite/tests/haddock/should_compile_flag_haddock/T17544.stderr
- testsuite/tests/haddock/should_compile_flag_haddock/T17544_kw.stderr
- testsuite/tests/haddock/should_compile_flag_haddock/T24221.stderr
- testsuite/tests/module/mod185.stderr
- testsuite/tests/parser/should_compile/DumpParsedAst.stderr
- testsuite/tests/parser/should_compile/DumpParsedAstComments.stderr
- testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
- testsuite/tests/parser/should_compile/DumpSemis.hs
- testsuite/tests/parser/should_compile/DumpSemis.stderr
- testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr
- testsuite/tests/parser/should_compile/KindSigs.stderr
- testsuite/tests/parser/should_compile/T14189.stderr
- testsuite/tests/parser/should_compile/T15279.stderr
- testsuite/tests/parser/should_compile/T15323.stderr
- testsuite/tests/parser/should_compile/T20452.stderr
- testsuite/tests/parser/should_compile/T20718.stderr
- testsuite/tests/parser/should_compile/T20718b.stderr
- testsuite/tests/parser/should_compile/T20846.stderr
- testsuite/tests/parser/should_compile/T23315/T23315.stderr
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/perf/compiler/hard_hole_fits.stderr
- testsuite/tests/printer/AnnotationNoListTuplePuns.stdout
- + testsuite/tests/printer/Haddock1.hs
- + testsuite/tests/printer/Layout.hs
- testsuite/tests/printer/Makefile
- testsuite/tests/printer/T18791.stderr
- + testsuite/tests/printer/Test20297.expected.hs
- testsuite/tests/printer/Test20297.hs
- testsuite/tests/printer/Test20297.stdout
- + testsuite/tests/printer/Test20297MD.stdout
- testsuite/tests/printer/Test24533.stdout
- testsuite/tests/printer/all.T
- utils/check-exact/ExactPrint.hs
- utils/check-exact/Main.hs
- utils/check-exact/Parsers.hs
- utils/check-exact/Transform.hs
- utils/check-exact/Utils.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Target.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hoogle.hs
- utils/haddock/haddock-api/src/Haddock/Backends/LaTeX.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
- utils/haddock/haddock-api/src/Haddock/Convert.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Rename.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e6ce637d941d9ba727dd5c8e756860…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e6ce637d941d9ba727dd5c8e756860…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/dcoutts/io-manager-io-primop-exceptions] FIXUP Remove now-unused blockedOnBadFD
by Duncan Coutts (@dcoutts) 29 Aug '26
by Duncan Coutts (@dcoutts) 29 Aug '26
29 Aug '26
Duncan Coutts pushed to branch wip/dcoutts/io-manager-io-primop-exceptions at Glasgow Haskell Compiler / GHC
Commits:
31af093a by Duncan Coutts at 2026-08-29T13:38:27+01:00
FIXUP Remove now-unused blockedOnBadFD
- - - - -
1 changed file:
- libraries/ghc-internal/src/GHC/Internal/Event/Thread.hs
Changes:
=====================================
libraries/ghc-internal/src/GHC/Internal/Event/Thread.hs
=====================================
@@ -29,7 +29,7 @@ import GHC.Internal.Types ()
-- TODO: Use new Windows I/O manager
import qualified GHC.Internal.Stack.Types as Rebindable
import GHC.Internal.Base
-import GHC.Internal.Control.Exception (finally, SomeException, toException)
+import GHC.Internal.Control.Exception (finally)
import GHC.Internal.Data.Foldable (forM_, mapM_, sequence_)
import GHC.Internal.Data.IORef (IORef, newIORef, readIORef, writeIORef, atomicWriteIORef)
import GHC.Internal.Data.Maybe (fromMaybe)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/31af093ad9edcb56dd1d6b913fd4672…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/31af093ad9edcb56dd1d6b913fd4672…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc] Pushed new branch wip/az/epa-tidy-locatedxxx-22
by Alan Zimmerman (@alanz) 29 Aug '26
by Alan Zimmerman (@alanz) 29 Aug '26
29 Aug '26
Alan Zimmerman pushed new branch wip/az/epa-tidy-locatedxxx-22 at Glasgow Haskell Compiler / GHC
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/az/epa-tidy-locatedxxx-22
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][master] Specialise: Stop looping on recursive dictionaries in interestingDict
by Marge Bot (@marge-bot) 29 Aug '26
by Marge Bot (@marge-bot) 29 Aug '26
29 Aug '26
Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
578bd185 by Andreas Klebinger at 2026-08-29T07:16:05-04:00
Specialise: Stop looping on recursive dictionaries in interestingDict
interestingDict now doesn't look through loopbreaker unfoldings.
Doing so would cause infinite loops on certain dictionaries.
Fixes #27705.
- - - - -
6 changed files:
- + changelog.d/T27705
- compiler/GHC/Core/Opt/Specialise.hs
- + testsuite/tests/simplCore/should_run/T27705.hs
- + testsuite/tests/simplCore/should_run/T27705.stdout
- + testsuite/tests/simplCore/should_run/T27705_Inst.hs
- testsuite/tests/simplCore/should_run/all.T
Changes:
=====================================
changelog.d/T27705
=====================================
@@ -0,0 +1,5 @@
+section: compiler
+synopsis: Fixed an issue that caused the specializer to sometimes loop on recursive dictionary superclasses.
+issues: #27705
+mrs: !16559
+
=====================================
compiler/GHC/Core/Opt/Specialise.hs
=====================================
@@ -3120,8 +3120,8 @@ interestingDict :: SpecEnv -> CoreExpr -> Bool
-- This is a subtle and important function
-- See Note [Interesting dictionary arguments]
interestingDict env (Var v) -- See (ID3) and (ID5)
+ -- (ID6.a) Might fail for loop breaker dicts but that seems fine.
| Just rhs <- maybeUnfoldingTemplate (idUnfolding v)
- -- Might fail for loop breaker dicts but that seems fine.
= interestingDict env rhs
interestingDict env arg -- Main Plan: use exprIsConApp_maybe
@@ -3136,9 +3136,9 @@ interestingDict env arg -- Main Plan: use exprIsConApp_maybe
, isIPClass cls -- See (ID5)
-> False
- -- Otherwise we are unwrapping a unary type class
+ -- Shouldn't happen.
| otherwise
- -> exprIsHNF arg -- See (ID7)
+ -> pprTraceDebug "shouldn't happen anymore" (ppr arg) $ exprIsHNF arg -- See (ID7)
| Just (_, _, data_con, _tys, args) <- exprIsConApp_maybe in_scope_env arg
, Just cls <- tyConClass_maybe (dataConTyCon data_con)
@@ -3152,7 +3152,8 @@ interestingDict env arg -- Main Plan: use exprIsConApp_maybe
where
arg_ty = exprType arg
definitely_not_ip_like = not (couldBeIPLike arg_ty)
- in_scope_env = ISE (substInScopeSet $ se_subst env) realIdUnfolding
+ -- idUnfolding rather than realIdUnfolding: See (ID6.a)
+ in_scope_env = ISE (substInScopeSet $ se_subst env) idUnfolding
{- Note [Ticks on applications]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -3268,11 +3269,27 @@ case we can clearly specialise. But there are wrinkles:
(Remember: a constraint tuple is just a class with N superclasses and no methods.)
See discussion on #26831.
-(ID7) A unary (single-method) class is currently represented by (meth |> co). We
- will unwrap the cast (see (ID5)) and then want to reply "yes" if the method
- has any struture. We rather arbitrarily use `exprIsHNF` for this. (We plan a
- new story for unary classes, see #23109, and this special case will become
- irrelevant.)
+(ID6.a) If we deal with a recursive dictionary as in #27705 we want to avoid
+ infinite recursion while recursing into superclasses.
+
+ For example we might have:
+
+ class D1 a => D2 a
+ class D2 a => D1 a
+
+ The primary concern is that we want to avoid looping on recursive instances.
+ We can achieve this by simply not looking through loop breakers by using idUnfolding
+ rather than realIdUnfolding.
+
+ It's possible that this prevents specialization of edge cases that have loop breakers
+ in their recursive loop. But even if we can find a dictionary like this the simplifier
+ won't look through loopbreaker dictionaries either killing any potential benefit.
+ So while we could handle this case via a already-seen set or fuel we simply don't bother
+ for now.
+
+(ID7) A unary (single-method) class is currently handled by the same path as regular dicts
+ since they are represented by faking a regular Dictionary.
+ See Note [Unary class magic] for the details.
(ID8) Sadly, if `exprIsConApp_maybe` says Nothing, we still want to treat a
non-trivial argument as interesting. In T19695 we have this:
=====================================
testsuite/tests/simplCore/should_run/T27705.hs
=====================================
@@ -0,0 +1,9 @@
+module Main where
+
+import T27705_Inst
+
+-- The dictionaries (D1/D2) are mutually recursive. We have to watch
+-- out for the specializer looping on them. This was first detected in #22802
+-- but no test was added, which caused it to break again #27705 :(
+main :: IO ()
+main = print (b (3 :: Int))
=====================================
testsuite/tests/simplCore/should_run/T27705.stdout
=====================================
@@ -0,0 +1 @@
+42
=====================================
testsuite/tests/simplCore/should_run/T27705_Inst.hs
=====================================
@@ -0,0 +1,13 @@
+{-# LANGUAGE UndecidableInstances, UndecidableSuperClasses, FlexibleInstances #-}
+module T27705_Inst where
+
+-- The two dictionaries are mutually recursive, and we have to ensure the specialiser
+-- doesn't loop when it's peaking through their unfoldings.
+class D2 a => D1 a
+class D1 a => D2 a
+instance D2 Int => D1 Int
+instance D1 Int => D2 Int
+
+{-# NOINLINE b #-}
+b :: D1 a => a -> Int
+b _ = 42
=====================================
testsuite/tests/simplCore/should_run/all.T
=====================================
@@ -123,3 +123,5 @@ test('T24359b', normal, compile_and_run, ['-O'])
test('T23429', normal, compile_and_run, ['-O'])
test('T27071', normal, compile_and_run, ['-O -fworker-wrapper-cbv'])
test('T27005', [], multimod_compile_and_run, ['T27005', '-O'])
+test('T27705', [extra_hc_opts('+RTS -M500M -RTS')], multimod_compile_and_run,
+ ['T27705', '-O2 -fexpose-all-unfoldings'])
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/578bd18509f0d2aeb004231a197f7f3…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/578bd18509f0d2aeb004231a197f7f3…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
29 Aug '26
Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
ced53ce6 by mangoiv at 2026-08-29T07:15:24-04:00
nightlies: output yaml to file only
Previously we would just output the metadata to stdout
which risks that it's clobbered by incidental debugt output.
We now output to file only.
Fixes #27511
- - - - -
2 changed files:
- .gitlab-ci.yml
- .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -1300,7 +1300,7 @@ ghcup-metadata-nightly:
artifacts: false
- job: project-version
script:
- - nix shell -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml"
+ - nix shell -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" metadata_test.yaml
rules:
- if: $NIGHTLY
=====================================
.gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
=====================================
@@ -324,6 +324,7 @@ def main() -> None:
# TODO: We could work out the --version from the project-version CI job.
parser.add_argument('--version', required=True, type=str, help='Version of the GHC compiler')
parser.add_argument('--date', required=True, type=str, help='Date of the compiler release')
+ parser.add_argument('output_path', nargs='?', type=Path, help='Path to write the output to, if not set, dump to stdout')
args = parser.parse_args()
project = gl.projects.get(1, lazy=True)
@@ -352,13 +353,14 @@ def main() -> None:
with open(args.metadata, 'r') as file:
ghcup_metadata = yaml.safe_load(file)
if args.version in ghcup_metadata['ghcupDownloads']['GHC']:
- # if there are days without a commit, then the nightly metadata
- # is up to date by default, no need to fail, no need to upload anything
- print("Refusing to override existing version in metadata, exiting")
- sys.exit()
+ eprint("GHCUp nightly run produced the same metadata as last night")
setNightlyTags(ghcup_metadata)
ghcup_metadata['ghcupDownloads']['GHC'][args.version] = new_yaml
- print(yaml.dump(ghcup_metadata))
+ if args.output_path:
+ with open(args.output_path, 'w') as ofile:
+ yaml.dump(ghcup_metadata, ofile)
+ else:
+ print(yaml.dump(ghcup_metadata))
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ced53ce68910401394207ed6eec6f2d…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ced53ce68910401394207ed6eec6f2d…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: hadrian: Deprecate quickest flavour.
by Marge Bot (@marge-bot) 29 Aug '26
by Marge Bot (@marge-bot) 29 Aug '26
29 Aug '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
b3ddee95 by Andreas Klebinger at 2026-08-28T13:57:46-04:00
hadrian: Deprecate quickest flavour.
It was more of a trap for new users than actually beneficial so we
deprecate it and suggest quick+no_dynamic_libs to users instead.
- - - - -
a1d81390 by Andreas Klebinger at 2026-08-28T13:58:37-04:00
cmm: Always favour entry block during block deduplication.
We now always keep the first block in the CmmGraph. This way we avoid
the need to update the entry info table.
Failing to do so caused #27722.
Fixes #27722.
- - - - -
5bd65f00 by Andreas Klebinger at 2026-08-28T13:59:16-04:00
test: FamAppCachePerf - Only collect bytes allocated. Fixes 27747
- - - - -
e3760dba by mangoiv at 2026-08-29T03:15:03-04:00
nightlies: output yaml to file only
Previously we would just output the metadata to stdout
which risks that it's clobbered by incidental debugt output.
We now output to file only.
Fixes #27511
- - - - -
0a5cb788 by Andreas Klebinger at 2026-08-29T03:15:03-04:00
Specialise: Stop looping on recursive dictionaries in interestingDict
interestingDict now doesn't look through loopbreaker unfoldings.
Doing so would cause infinite loops on certain dictionaries.
Fixes #27705.
- - - - -
22 changed files:
- .gitlab-ci.yml
- .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
- + changelog.d/T27705
- + changelog.d/T27722-cbe-entry-block.md
- compiler/GHC/Cmm/CommonBlockElim.hs
- compiler/GHC/Core/Opt/Specialise.hs
- hadrian/README.md
- hadrian/doc/cross-compile.md
- hadrian/doc/flavours.md
- hadrian/doc/make.md
- hadrian/doc/windows.md
- hadrian/hadrian.cabal
- hadrian/src/CommandLine.hs
- hadrian/src/Flavour.hs
- hadrian/src/Settings.hs
- − hadrian/src/Settings/Flavours/Quickest.hs
- testsuite/tests/perf/compiler/all.T
- + testsuite/tests/simplCore/should_run/T27705.hs
- + testsuite/tests/simplCore/should_run/T27705.stdout
- + testsuite/tests/simplCore/should_run/T27705_Inst.hs
- testsuite/tests/simplCore/should_run/all.T
- utils/ghc-toolchain/src/GHC/Toolchain/Target.hs
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -1300,7 +1300,7 @@ ghcup-metadata-nightly:
artifacts: false
- job: project-version
script:
- - nix shell -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml"
+ - nix shell -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" metadata_test.yaml
rules:
- if: $NIGHTLY
=====================================
.gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
=====================================
@@ -324,6 +324,7 @@ def main() -> None:
# TODO: We could work out the --version from the project-version CI job.
parser.add_argument('--version', required=True, type=str, help='Version of the GHC compiler')
parser.add_argument('--date', required=True, type=str, help='Date of the compiler release')
+ parser.add_argument('output_path', nargs='?', type=Path, help='Path to write the output to, if not set, dump to stdout')
args = parser.parse_args()
project = gl.projects.get(1, lazy=True)
@@ -352,13 +353,14 @@ def main() -> None:
with open(args.metadata, 'r') as file:
ghcup_metadata = yaml.safe_load(file)
if args.version in ghcup_metadata['ghcupDownloads']['GHC']:
- # if there are days without a commit, then the nightly metadata
- # is up to date by default, no need to fail, no need to upload anything
- print("Refusing to override existing version in metadata, exiting")
- sys.exit()
+ eprint("GHCUp nightly run produced the same metadata as last night")
setNightlyTags(ghcup_metadata)
ghcup_metadata['ghcupDownloads']['GHC'][args.version] = new_yaml
- print(yaml.dump(ghcup_metadata))
+ if args.output_path:
+ with open(args.output_path, 'w') as ofile:
+ yaml.dump(ghcup_metadata, ofile)
+ else:
+ print(yaml.dump(ghcup_metadata))
=====================================
changelog.d/T27705
=====================================
@@ -0,0 +1,5 @@
+section: compiler
+synopsis: Fixed an issue that caused the specializer to sometimes loop on recursive dictionary superclasses.
+issues: #27705
+mrs: !16559
+
=====================================
changelog.d/T27722-cbe-entry-block.md
=====================================
@@ -0,0 +1,5 @@
+section: cmm
+issues: #27722
+mrs: !16592
+synopsis:
+ Fix common block elimination dropping entry block info table in hand written cmm.
=====================================
compiler/GHC/Cmm/CommonBlockElim.hs
=====================================
@@ -26,6 +26,7 @@ import GHC.Types.Literal.Floating
import GHC.Types.Unique.FM
import GHC.Types.Unique
import GHC.Utils.Word64 (truncateWord64ToWord32)
+import GHC.Utils.Panic.Plain (assert)
import Control.Arrow (first, second)
import Data.List.NonEmpty (NonEmpty (..))
import qualified Data.List.NonEmpty as NE
@@ -60,16 +61,31 @@ import qualified Data.List.NonEmpty as NE
-- TODO: Use optimization fuel
elimCommonBlocks :: CmmGraph -> CmmGraph
-elimCommonBlocks g = replaceLabels env $ copyTicks env g
+elimCommonBlocks g =
+ assert (g_entry g == g_entry g') g'
where
+ g' = replaceLabels env $ copyTicks env g
env = iterate mapEmpty blocks_with_key
-- The order of blocks doesn't matter here. While we could use
-- revPostorder which drops unreachable blocks this is done in
-- ContFlowOpt already which runs before this pass. So we use
-- toBlockList since it is faster.
- groups = groupByInt hash_block (toBlockList g) :: [[CmmBlock]]
+ -- One exception: The entry block most come first or we risk eliminating it
+ -- in favour of another block. See Note [Retain entry block during common block elimination.]
+ groups = groupByInt hash_block (toBlockListEntryFirst g) :: [[CmmBlock]]
blocks_with_key = [ [ (successors b, [b]) | b <- bs] | bs <- groups]
+-- Note [Retain entry block during common block elimination.]
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- At the stage we run common block elimination (CBE) we only have one info
+-- table for the entry label. Which means we can get away without applying the
+-- block label substitution to the info table *as long as we keep the first block*.
+-- When combining blocks the first block in the list of blocks is kept, and the later
+-- one eliminated, so we can achieve this by simply using toBlockListEntryFirst.
+--
+-- If we don't we end up with #27722 where the entry block was eliminated in favour
+-- of another block.
+
-- Invariant: The blocks in the list are pairwise distinct
-- (so avoid comparing them again)
type DistinctBlocks = [CmmBlock]
=====================================
compiler/GHC/Core/Opt/Specialise.hs
=====================================
@@ -3120,8 +3120,8 @@ interestingDict :: SpecEnv -> CoreExpr -> Bool
-- This is a subtle and important function
-- See Note [Interesting dictionary arguments]
interestingDict env (Var v) -- See (ID3) and (ID5)
+ -- (ID6.a) Might fail for loop breaker dicts but that seems fine.
| Just rhs <- maybeUnfoldingTemplate (idUnfolding v)
- -- Might fail for loop breaker dicts but that seems fine.
= interestingDict env rhs
interestingDict env arg -- Main Plan: use exprIsConApp_maybe
@@ -3136,9 +3136,9 @@ interestingDict env arg -- Main Plan: use exprIsConApp_maybe
, isIPClass cls -- See (ID5)
-> False
- -- Otherwise we are unwrapping a unary type class
+ -- Shouldn't happen.
| otherwise
- -> exprIsHNF arg -- See (ID7)
+ -> pprTraceDebug "shouldn't happen anymore" (ppr arg) $ exprIsHNF arg -- See (ID7)
| Just (_, _, data_con, _tys, args) <- exprIsConApp_maybe in_scope_env arg
, Just cls <- tyConClass_maybe (dataConTyCon data_con)
@@ -3152,7 +3152,8 @@ interestingDict env arg -- Main Plan: use exprIsConApp_maybe
where
arg_ty = exprType arg
definitely_not_ip_like = not (couldBeIPLike arg_ty)
- in_scope_env = ISE (substInScopeSet $ se_subst env) realIdUnfolding
+ -- idUnfolding rather than realIdUnfolding: See (ID6.a)
+ in_scope_env = ISE (substInScopeSet $ se_subst env) idUnfolding
{- Note [Ticks on applications]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -3268,11 +3269,27 @@ case we can clearly specialise. But there are wrinkles:
(Remember: a constraint tuple is just a class with N superclasses and no methods.)
See discussion on #26831.
-(ID7) A unary (single-method) class is currently represented by (meth |> co). We
- will unwrap the cast (see (ID5)) and then want to reply "yes" if the method
- has any struture. We rather arbitrarily use `exprIsHNF` for this. (We plan a
- new story for unary classes, see #23109, and this special case will become
- irrelevant.)
+(ID6.a) If we deal with a recursive dictionary as in #27705 we want to avoid
+ infinite recursion while recursing into superclasses.
+
+ For example we might have:
+
+ class D1 a => D2 a
+ class D2 a => D1 a
+
+ The primary concern is that we want to avoid looping on recursive instances.
+ We can achieve this by simply not looking through loop breakers by using idUnfolding
+ rather than realIdUnfolding.
+
+ It's possible that this prevents specialization of edge cases that have loop breakers
+ in their recursive loop. But even if we can find a dictionary like this the simplifier
+ won't look through loopbreaker dictionaries either killing any potential benefit.
+ So while we could handle this case via a already-seen set or fuel we simply don't bother
+ for now.
+
+(ID7) A unary (single-method) class is currently handled by the same path as regular dicts
+ since they are represented by faking a regular Dictionary.
+ See Note [Unary class magic] for the details.
(ID8) Sadly, if `exprIsConApp_maybe` says Nothing, we still want to treat a
non-trivial argument as interesting. In T19695 we have this:
=====================================
hadrian/README.md
=====================================
@@ -55,10 +55,9 @@ changes. Build results are placed into `_build` by default.
There are many different ways to build a compiler, each way is called a flavour.
* `--flavour=FLAVOUR`: choose a build flavour. The following settings are
-currently supported: `default`, `quick`, `quickest`, `perf`, `prof`, `devel1`
-and `devel2`. As an example, the `quickest` flavour adds `-O0` flag to all GHC
-invocations and builds libraries only in the `vanilla` way, which speeds up
-builds by 3-4x.
+currently supported: `default`, `quick`, `perf`, `prof`, `devel1`
+and `devel2`. As an example, the `quick` flavour builds the GHC binary with `-O0`
+which speeds up builds and rebuilds significantly.
In addition to the overall build flavour there are also "flavour transformers"
which can slightly modify the build settings for a flavour. Some common flavour
=====================================
hadrian/doc/cross-compile.md
=====================================
@@ -16,7 +16,7 @@ After all the dependencies are in place:
- `git submodule update --init`
- `./configure --target=arm-linux-gnueabihf`
- `cd hadrian`
-- Build the compiler by e.g. `./build.sh --flavour=quickest --integer-simple -V -j`
+- Build the compiler by e.g. `./build.sh --flavour=quick --integer-simple -V -j`
After that, you should have built `inplace/bin/ghc-stage1` cross compiler. We will go to the next section to validate this.
=====================================
hadrian/doc/flavours.md
=====================================
@@ -82,18 +82,6 @@ when compiling the `compiler` library, and `hsGhc` when compiling/linking the GH
<td>-O</td>
<td>-debug (link)</td>
</tr>
- <tr>
- <th>quickest</td>
- <td></td>
- <td>-O0<br>+RTS<br>-O64M<br>-RTS</td>
- <td>-O0<br>+RTS<br>-O64M<br>-RTS</td>
- <td></td>
- <td></td>
- <td>-O</td>
- <td></td>
- <td>-O</td>
- <td></td>
- </tr>
<tr>
<th>perf</td>
<td> Yes (on supported platforms) </td>
@@ -367,11 +355,4 @@ information. The following table lists ways that are built in different flavours
<td>debug<br>threaded<br>threadedDebug<br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic</td>
<td>debug<br>threaded<br>threadedDebug<br>debugDynamic<br>threadedDynamic<br>threadedDebugDynamic</td>
</tr>
-<tr>
- <th>quickest</th>
- <td>vanilla</td>
- <td>vanilla</td>
- <td>vanilla<br>threaded</td>
- <td>vanilla<br>threaded</td>
-</tr>
</table>
=====================================
hadrian/doc/make.md
=====================================
@@ -80,15 +80,15 @@ time you fire up a build. This is not possible with the Make build system.
build _build/stage1/lib/package.conf.d/text-1.2.3.0.conf # OR actual path
```
-- Building with a particular flavour (e.g `quickest`)
+- Building with a particular flavour (e.g `quick`)
``` sh
# Make
- echo "BuildFlavour=quickest" >> mk/build.mk
+ echo "BuildFlavour=quick" >> mk/build.mk
make
# Hadrian
- build --flavour=quickest
+ build --flavour=quick
```
See [flavours documentation](https://gitlab.haskell.org/ghc/ghc/blob/master/hadrian/doc/f… for info on flavours.
=====================================
hadrian/doc/windows.md
=====================================
@@ -20,7 +20,7 @@ stack exec -- pacman -S autoconf automake-wrapper make patch python tar --noconf
stack build
# Build GHC
-stack exec hadrian -- --directory ".." -j --flavour=quickest
+stack exec hadrian -- --directory ".." -j --flavour=quick
# Test GHC
cd ..
@@ -28,7 +28,7 @@ _build\stage1\bin\ghc -e 1+2
```
The entire process should take about 20 minutes. Note, this will build GHC
-without optimisations. If you need an optimised GHC, drop the `--flavour=quickest`
+without optimisations. If you need an optimised GHC, drop the `--flavour=quick`
flag from the build command line (this will slow down the build to about an hour).
These are currently not the
@@ -37,7 +37,7 @@ but are much simpler and may also be more robust.
The `stack build` and `stack exec hadrian` commands can be replaced by an
invocation of Hadrian's Stack-based build script:
-`build-stack.bat -j --flavour=quickest`. Use this script if you plan to work on
+`build-stack.bat -j --flavour=quick`. Use this script if you plan to work on
Hadrian and/or rebuild GHC often.
## Prerequisites
=====================================
hadrian/hadrian.cabal
=====================================
@@ -125,7 +125,6 @@ executable hadrian
, Settings.Flavours.Performance
, Settings.Flavours.Quick
, Settings.Flavours.QuickCross
- , Settings.Flavours.Quickest
, Settings.Flavours.Validate
, Settings.Flavours.Release
, Settings.Packages
=====================================
hadrian/src/CommandLine.hs
=====================================
@@ -281,7 +281,7 @@ optDescrs =
, Option ['o'] ["build-root"] (ReqArg readBuildRoot "BUILD_ROOT")
"Where to store build artifacts. (Default _build)."
, Option [] ["flavour"] (OptArg readFlavour "FLAVOUR")
- "Build flavour (Default, Devel1, Devel2, Perf, Prof, Quick or Quickest)."
+ "Build flavour (Default, Devel1, Devel2, Perf, Prof or Quick)."
, Option [] ["freeze1"] (NoArg readFreeze1)
"Freeze Stage1 GHC."
, Option [] ["freeze2"] (NoArg readFreeze2)
=====================================
hadrian/src/Flavour.hs
=====================================
@@ -531,7 +531,7 @@ It now also offers a more "old-school" interface, in the form of
@foo.bar.baz = v@ or @foo.bar.baz += v@ expressions, that one can
pass on the command line that invokes hadrian:
-> $ hadrian/build --flavour=quickest -j "stage1.ghc-bin.ghc.link.opts += -v3"
+> $ hadrian/build --flavour=quick -j "stage1.ghc-bin.ghc.link.opts += -v3"
or in a file at <build root>/hadrian.settings, where <build root>
is the build root to be used for the build, which is _build by default.
=====================================
hadrian/src/Settings.hs
=====================================
@@ -19,7 +19,6 @@ import Settings.Flavours.Development
import Settings.Flavours.GhcInGhci
import Settings.Flavours.Performance
import Settings.Flavours.Quick
-import Settings.Flavours.Quickest
import Settings.Flavours.QuickCross
import Settings.Flavours.Validate
import Settings.Flavours.Release
@@ -55,7 +54,6 @@ hadrianFlavours =
, developmentFlavour Stage2, performanceFlavour
, releaseFlavour
, quickFlavour, quickValidateFlavour, quickDebugFlavour
- , quickestFlavour
, quickCrossFlavour
, ghcInGhciFlavour, validateFlavour, slowValidateFlavour
]
@@ -69,6 +67,10 @@ hadrianFlavours =
flavour :: Action Flavour
flavour = do
flavourName <- fromMaybe userDefaultFlavour <$> cmdFlavour
+ when ("quickest" `isPrefixOf` flavourName) $
+ fail $ "The `quickest` flavour has been deprecated. Use `quick` instead.\n"
+ ++ "Skip building dynamic libraries with `quick+no_dynamic_libs`\n"
+ ++ "to get closer to the old quickest behaviour."
kvs <- userSetting ([] :: [KeyVal])
let flavours = hadrianFlavours ++ userFlavours
(settingErrs, tweak) = applySettings kvs
=====================================
hadrian/src/Settings/Flavours/Quickest.hs deleted
=====================================
@@ -1,21 +0,0 @@
-module Settings.Flavours.Quickest (quickestFlavour) where
-
-import Expression
-import Flavour
-import {-# SOURCE #-} Settings.Default
-
--- Please update doc/flavours.md when changing this file.
-quickestFlavour :: Flavour
-quickestFlavour = disableDynamicLibs $ disableProfiledLibs $ defaultFlavour
- { name = "quickest"
- , extraArgs = quickestArgs
- }
-
-quickestArgs :: Args
-quickestArgs = sourceArgs SourceArgs
- { hsDefault = mconcat $
- [ pure ["-O0", "+RTS", "-O64M", "-RTS"]
- ]
- , hsLibrary = mempty
- , hsCompiler = stage0 ? arg "-O"
- , hsGhc = stage0 ? arg "-O" }
=====================================
testsuite/tests/perf/compiler/all.T
=====================================
@@ -192,7 +192,6 @@ test ('T13386',
# Performance test for lookups in the family application cache
test('FamAppCachePerf',
[ only_ways(['normal'])
- , collect_compiler_residency(20)
, collect_compiler_stats('bytes allocated',2)
],
compile,
=====================================
testsuite/tests/simplCore/should_run/T27705.hs
=====================================
@@ -0,0 +1,9 @@
+module Main where
+
+import T27705_Inst
+
+-- The dictionaries (D1/D2) are mutually recursive. We have to watch
+-- out for the specializer looping on them. This was first detected in #22802
+-- but no test was added, which caused it to break again #27705 :(
+main :: IO ()
+main = print (b (3 :: Int))
=====================================
testsuite/tests/simplCore/should_run/T27705.stdout
=====================================
@@ -0,0 +1 @@
+42
=====================================
testsuite/tests/simplCore/should_run/T27705_Inst.hs
=====================================
@@ -0,0 +1,13 @@
+{-# LANGUAGE UndecidableInstances, UndecidableSuperClasses, FlexibleInstances #-}
+module T27705_Inst where
+
+-- The two dictionaries are mutually recursive, and we have to ensure the specialiser
+-- doesn't loop when it's peaking through their unfoldings.
+class D2 a => D1 a
+class D1 a => D2 a
+instance D2 Int => D1 Int
+instance D1 Int => D2 Int
+
+{-# NOINLINE b #-}
+b :: D1 a => a -> Int
+b _ = 42
=====================================
testsuite/tests/simplCore/should_run/all.T
=====================================
@@ -123,3 +123,5 @@ test('T24359b', normal, compile_and_run, ['-O'])
test('T23429', normal, compile_and_run, ['-O'])
test('T27071', normal, compile_and_run, ['-O -fworker-wrapper-cbv'])
test('T27005', [], multimod_compile_and_run, ['T27005', '-O'])
+test('T27705', [extra_hc_opts('+RTS -M500M -RTS')], multimod_compile_and_run,
+ ['T27705', '-O2 -fexpose-all-unfoldings'])
=====================================
utils/ghc-toolchain/src/GHC/Toolchain/Target.hs
=====================================
@@ -199,7 +199,7 @@ tgtSupportsSMP Target{..} = do
-- 5. The testsuite driver will use dyn way for TH/ghci tests even
-- when host GHC is static.
-- 6. TH/ghci doesn't work if stage1 is built without shared libraries
--- (e.g. quickest/fully_static).
+-- (e.g. no_dynamic_libs/fully_static).
tgtRTSLinkerOnlySupportsSharedLibs :: Target -> Bool
tgtRTSLinkerOnlySupportsSharedLibs Target{tgtArchOs} =
archOS_arch tgtArchOs `elem`
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1eab24e6d5ab03bc9dd40d6f549113…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1eab24e6d5ab03bc9dd40d6f549113…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/TTG-Fewer-Orphans] Resolving even more TTG related orphan type-class instances
by recursion-ninja (@recursion-ninja) 28 Aug '26
by recursion-ninja (@recursion-ninja) 28 Aug '26
28 Aug '26
recursion-ninja pushed to branch wip/TTG-Fewer-Orphans at Glasgow Haskell Compiler / GHC
Commits:
d350ace7 by Recursion Ninja at 2026-08-28T18:55:11-04:00
Resolving even more TTG related orphan type-class instances
Related to #21262 and #27469, both closed by 43dd2b15a2.
This commit addresses the technical debt remaining the end of the TTG project.
Orphan instances of data-types from within 'L.H.S' have been moved to either:
1. The module which defines the data-type
2. The module which defines the type-class;
i.e. moving an orphan 'Binary' instance to 'GHC.Utils.Binary'
The instances remaining after 43dd2b15a2 could not be relocated verbatim.
'GHC.Utils.Outputable' and 'GHC.Utils.Binary' sat below the AST in the import
graph, so a type-class module could see the 'GhcPass' type-family equations
that the instance bodies rely on.
A new module, 'GHC.Hs.Extension.Instances', collects the 'GhcPass'
instantiation of the Trees-that-Grow extension points previously declared in
'GHC.Hs.Extension.Pass', allowing more orphan type-class instance to be reolved.
Orphan instances resolved (82):
| Data-type | Resolved instance(s) | Former orphan module(s) |
| ------------------- | -------------------------------------- | ------------------------------ |
| BCOByteArray | Binary | GHC.ByteCode.Binary |
| BCONPtr | Binary | GHC.ByteCode.Binary |
| BCOPtr | Binary | GHC.ByteCode.Binary |
| ByteCodeHpcInfo | Binary | GHC.ByteCode.Binary |
| CompiledByteCode | Binary | GHC.ByteCode.Binary |
| UnlinkedBCO | Binary | GHC.ByteCode.Binary |
| BooleanFormula | Outputable | GHC.Data.BooleanFormula |
| HsLocalBindsLR | Outputable | GHC.Hs.Binds |
| RecordPatSynField | Outputable | GHC.Hs.Binds |
| ValBind | HasLoc | GHC.Hs.Binds |
| DerivClauseTys | Outputable | GHC.Hs.Decls |
| DocDecl | Outputable | GHC.Hs.Decls |
| FamilyInfo | Outputable | GHC.Hs.Decls |
| ForeignExport | Outputable | GHC.Hs.Decls |
| FunDep | Outputable | GHC.Hs.Decls |
| HsDecl | Outputable | GHC.Hs.Decls |
| InstDecl | Outputable | GHC.Hs.Decls |
| RoleAnnotDecl | Outputable | GHC.Hs.Decls |
| SpliceDecoration | Outputable | GHC.Hs.Decls |
| StandaloneKindSig | Outputable | GHC.Hs.Decls |
| TyClGroup | Outputable | GHC.Hs.Decls |
| WarnDecl | Outputable | GHC.Hs.Decls |
| HsDocString | Binary, Outputable, Show | GHC.Hs.DocString |
| ArithSeqInfo | Outputable | GHC.Hs.Expr |
| DotFieldOcc | Outputable | GHC.Hs.Expr |
| FieldLabelStrings | Outputable, OutputableBndr | GHC.Hs.Expr |
| HsArrowMatchContext | Outputable | GHC.Hs.Expr |
| HsLamVariant | Outputable | GHC.Hs.Expr |
| HsMatchContext | Outputable | GHC.Hs.Expr |
| Located | OutputableBndr | GHC.Hs.Expr |
| ParStmtBlock | Outputable | GHC.Hs.Expr |
| DataConCantHappen | Outputable | GHC.Hs.Extension |
| NoExtField | Outputable | GHC.Hs.Extension |
| IEWrappedName | Outputable, OutputableBndr, HasOccName | GHC.Hs.ImpExp |
| FractionalLit | Outputable, Show | GHC.Hs.Lit |
| HsLit | Outputable | GHC.Hs.Lit |
| HsQualLit | Outputable | GHC.Hs.Lit |
| IntegralLit | Outputable, Show | GHC.Hs.Lit |
| OverLitVal | Outputable | GHC.Hs.Lit |
| QualLitVal | Outputable | GHC.Hs.Lit |
| StringLiteral | Outputable, Show | GHC.Hs.Lit |
| HsFieldBind | Outputable | GHC.Hs.Pat |
| FieldOcc | Outputable, OutputableBndr | GHC.Hs.Type |
| GenLocated | OutputableBndr | GHC.Hs.Type |
| HsBndrVar | Outputable | GHC.Hs.Type |
| HsConDetails | Outputable | GHC.Hs.Type |
| HsContextDetails | Outputable | GHC.Hs.Type |
| HsForAllTelescope | Outputable | GHC.Hs.Type |
| HsIPName | Outputable, OutputableBndr | GHC.Hs.Type |
| HsPatSigType | Outputable | GHC.Hs.Type |
| HsTyPat | Outputable | GHC.Hs.Type |
| HsWildCardBndrs | Outputable | GHC.Hs.Type |
| LHsQTyVars | Outputable | GHC.Hs.Type |
| HsArg | Outputable, HasLoc | GHC.Hs.Type, GHC.Iface.Ext.Ast |
| DataDefnCons | HasLoc | GHC.Iface.Ext.Ast |
| HsDataDefn | HasLoc | GHC.Iface.Ext.Ast |
| CCallConv | Binary, Outputable | GHC.Types.ForeignCall |
| CCallTarget | Binary | GHC.Types.ForeignCall |
| CExportSpec | Binary, Outputable | GHC.Types.ForeignCall |
| CType | Binary | GHC.Types.ForeignCall |
| ForeignKind | Binary | GHC.Types.ForeignCall |
| Header | Binary, Outputable | GHC.Types.ForeignCall |
| Safety | Binary, Outputable | GHC.Types.ForeignCall |
| FieldLabel | NFData | GHC.Types.Name |
| InWarningCategory | Outputable | GHC.Unit.Module.Warnings |
| WarningCategory | Binary, Outputable | GHC.Unit.Module.Warnings |
Two instances for 'GhcPass' cannot have thier orphaned status resolved,
but were migrated to a "more defensible" home instead:
- 'WrapXRec' to 'GHC.Hs.Extension'
- 'BooleanFormulaDefault' to 'GHC.Hs.Extension.Instances'
- - - - -
32 changed files:
- compiler/GHC/ByteCode/Binary.hs
- compiler/GHC/ByteCode/Types.hs
- compiler/GHC/Core/Class.hs
- compiler/GHC/Data/BooleanFormula.hs
- compiler/GHC/Hs/Binds.hs
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/DocString.hs
- compiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/Extension.hs
- + compiler/GHC/Hs/Extension/Instances.hs
- compiler/GHC/Hs/Extension/Pass.hs
- compiler/GHC/Hs/ImpExp.hs
- compiler/GHC/Hs/Lit.hs
- compiler/GHC/Hs/Pat.hs
- compiler/GHC/Hs/Type.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Types/FieldLabel.hs
- compiler/GHC/Types/ForeignCall.hs
- compiler/GHC/Types/Name.hs
- compiler/GHC/Types/Name/Occurrence.hs
- compiler/GHC/Types/SourceText.hs
- compiler/GHC/Types/SrcLoc.hs
- compiler/GHC/Unit/Module/Warnings.hs
- compiler/GHC/Utils/Binary.hs
- compiler/GHC/Utils/Lexeme.hs
- compiler/GHC/Utils/Outputable.hs
- compiler/Language/Haskell/Syntax/Doc.hs
- compiler/Language/Haskell/Syntax/ImpExp.hs
- compiler/Language/Haskell/Syntax/Lit.hs
- compiler/ghc.cabal.in
- testsuite/tests/count-deps/CountDepsParser.stdout
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d350ace750e86e5091fb1e2751a6a9f…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d350ace750e86e5091fb1e2751a6a9f…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/dcoutts/io-manager-io-primop-exceptions] FIXUP Change the encoding of results from the I/O manager to I/O primops
by Duncan Coutts (@dcoutts) 28 Aug '26
by Duncan Coutts (@dcoutts) 28 Aug '26
28 Aug '26
Duncan Coutts pushed to branch wip/dcoutts/io-manager-io-primop-exceptions at Glasgow Haskell Compiler / GHC
Commits:
765afda7 by Duncan Coutts at 2026-08-28T23:25:35+01:00
FIXUP Change the encoding of results from the I/O manager to I/O primops
- - - - -
1 changed file:
- rts/PrimOps.cmm
Changes:
=====================================
rts/PrimOps.cmm
=====================================
@@ -2314,32 +2314,32 @@ stg_waitReadyFd ( W_ fd, CInt rw )
(result) = ccall syncIOWaitReady(Capability_iomgr(MyCapability()) "ptr",
CurrentTSO "ptr", rw, fd);
- /* See Note [Encoding of I/O manager operation results to primops] */
+ /* See Note [Encoding of result of I/O manager operations] */
/* case IOSubmitResultAsyncContinue */
- if (result == 0) (likely: True) {
+ if (result == 0::CInt) (likely: True) {
/* See Note [Thread blocking for new I/O primops] */
jump stg_block_io_unit();
}
/* case IOSubmitResultSyncSuccess*/
- if (result == 1) {
+ if (result == 1::CInt) {
/* Success, don't even go via scheduler. */
return ();
}
/* negative numbers are -errno error codes */
- if (result < 0) {
+ if (result < 0::CInt) {
/* See Note [Calling convention for raisePrimIOException] */
W_ dummyR1; W_ errno;
dummyR1 = 0;
- errno = -result;
+ errno = TO_W_(-result);
jump %ENTRY_CODE(HsIface_raisePrimIOException_info(W_[ghc_hs_iface]))
- (dummyR1, result);
+ (dummyR1, errno);
}
/* case IOSubmitResultHeapOverflow */
- if (result == 2) {
+ if (result == 2::CInt) {
jump stg_raisezh(HsIface_heapOverflow_closure(W_[ghc_hs_iface]));
}
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/765afda7934e972b2da8f96ecbaaf60…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/765afda7934e972b2da8f96ecbaaf60…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/TTG-Fewer-Orphans] Resolving even more TTG related orphan type-class instances
by recursion-ninja (@recursion-ninja) 28 Aug '26
by recursion-ninja (@recursion-ninja) 28 Aug '26
28 Aug '26
recursion-ninja pushed to branch wip/TTG-Fewer-Orphans at Glasgow Haskell Compiler / GHC
Commits:
df67ac71 by Recursion Ninja at 2026-08-28T17:37:09-04:00
Resolving even more TTG related orphan type-class instances
Related to #21262 and #27469, both closed by 43dd2b15a2.
This commit addresses the technical debt remaining the end of the TTG project.
Orphan instances of data-types from within 'L.H.S' have been moved to either:
1. The module which defines the data-type
2. The module which defines the type-class;
i.e. moving an orphan 'Binary' instance to 'GHC.Utils.Binary'
The instances remaining after 43dd2b15a2 could not be relocated verbatim.
'GHC.Utils.Outputable' and 'GHC.Utils.Binary' sat below the AST in the import
graph, so a type-class module could see the 'GhcPass' type-family equations
that the instance bodies rely on.
A new module, 'GHC.Hs.Extension.Instances', collects the 'GhcPass'
instantiation of the Trees-that-Grow extension points previously declared in
'GHC.Hs.Extension.Pass', allowing more orphan type-class instance to be reolved.
Orphan instances resolved (82):
| Data-type | Resolved instance(s) | Former orphan module(s) |
| ------------------- | -------------------------------------- | ------------------------------ |
| BCOByteArray | Binary | GHC.ByteCode.Binary |
| BCONPtr | Binary | GHC.ByteCode.Binary |
| BCOPtr | Binary | GHC.ByteCode.Binary |
| ByteCodeHpcInfo | Binary | GHC.ByteCode.Binary |
| CompiledByteCode | Binary | GHC.ByteCode.Binary |
| UnlinkedBCO | Binary | GHC.ByteCode.Binary |
| BooleanFormula | Outputable | GHC.Data.BooleanFormula |
| HsLocalBindsLR | Outputable | GHC.Hs.Binds |
| RecordPatSynField | Outputable | GHC.Hs.Binds |
| ValBind | HasLoc | GHC.Hs.Binds |
| DerivClauseTys | Outputable | GHC.Hs.Decls |
| DocDecl | Outputable | GHC.Hs.Decls |
| FamilyInfo | Outputable | GHC.Hs.Decls |
| ForeignExport | Outputable | GHC.Hs.Decls |
| FunDep | Outputable | GHC.Hs.Decls |
| HsDecl | Outputable | GHC.Hs.Decls |
| InstDecl | Outputable | GHC.Hs.Decls |
| RoleAnnotDecl | Outputable | GHC.Hs.Decls |
| SpliceDecoration | Outputable | GHC.Hs.Decls |
| StandaloneKindSig | Outputable | GHC.Hs.Decls |
| TyClGroup | Outputable | GHC.Hs.Decls |
| WarnDecl | Outputable | GHC.Hs.Decls |
| HsDocString | Binary, Outputable, Show | GHC.Hs.DocString |
| ArithSeqInfo | Outputable | GHC.Hs.Expr |
| DotFieldOcc | Outputable | GHC.Hs.Expr |
| FieldLabelStrings | Outputable, OutputableBndr | GHC.Hs.Expr |
| HsArrowMatchContext | Outputable | GHC.Hs.Expr |
| HsLamVariant | Outputable | GHC.Hs.Expr |
| HsMatchContext | Outputable | GHC.Hs.Expr |
| Located | OutputableBndr | GHC.Hs.Expr |
| ParStmtBlock | Outputable | GHC.Hs.Expr |
| DataConCantHappen | Outputable | GHC.Hs.Extension |
| NoExtField | Outputable | GHC.Hs.Extension |
| IEWrappedName | Outputable, OutputableBndr, HasOccName | GHC.Hs.ImpExp |
| FractionalLit | Outputable, Show | GHC.Hs.Lit |
| HsLit | Outputable | GHC.Hs.Lit |
| HsQualLit | Outputable | GHC.Hs.Lit |
| IntegralLit | Outputable, Show | GHC.Hs.Lit |
| OverLitVal | Outputable | GHC.Hs.Lit |
| QualLitVal | Outputable | GHC.Hs.Lit |
| StringLiteral | Outputable, Show | GHC.Hs.Lit |
| HsFieldBind | Outputable | GHC.Hs.Pat |
| FieldOcc | Outputable, OutputableBndr | GHC.Hs.Type |
| GenLocated | OutputableBndr | GHC.Hs.Type |
| HsBndrVar | Outputable | GHC.Hs.Type |
| HsConDetails | Outputable | GHC.Hs.Type |
| HsContextDetails | Outputable | GHC.Hs.Type |
| HsForAllTelescope | Outputable | GHC.Hs.Type |
| HsIPName | Outputable, OutputableBndr | GHC.Hs.Type |
| HsPatSigType | Outputable | GHC.Hs.Type |
| HsTyPat | Outputable | GHC.Hs.Type |
| HsWildCardBndrs | Outputable | GHC.Hs.Type |
| LHsQTyVars | Outputable | GHC.Hs.Type |
| HsArg | Outputable, HasLoc | GHC.Hs.Type, GHC.Iface.Ext.Ast |
| DataDefnCons | HasLoc | GHC.Iface.Ext.Ast |
| HsDataDefn | HasLoc | GHC.Iface.Ext.Ast |
| CCallConv | Binary, Outputable | GHC.Types.ForeignCall |
| CCallTarget | Binary | GHC.Types.ForeignCall |
| CExportSpec | Binary, Outputable | GHC.Types.ForeignCall |
| CType | Binary | GHC.Types.ForeignCall |
| ForeignKind | Binary | GHC.Types.ForeignCall |
| Header | Binary, Outputable | GHC.Types.ForeignCall |
| Safety | Binary, Outputable | GHC.Types.ForeignCall |
| FieldLabel | NFData | GHC.Types.Name |
| InWarningCategory | Outputable | GHC.Unit.Module.Warnings |
| WarningCategory | Binary, Outputable | GHC.Unit.Module.Warnings |
Two instances for 'GhcPass' cannot have thier orphaned status resolved,
but were migrated to a "more defensible" home instead:
- 'WrapXRec' to 'GHC.Hs.Extension'
- 'BooleanFormulaDefault' to 'GHC.Hs.Extension.Instances'
- - - - -
31 changed files:
- compiler/GHC/ByteCode/Binary.hs
- compiler/GHC/ByteCode/Types.hs
- compiler/GHC/Core/Class.hs
- compiler/GHC/Data/BooleanFormula.hs
- compiler/GHC/Hs/Binds.hs
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/DocString.hs
- compiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/Extension.hs
- + compiler/GHC/Hs/Extension/Instances.hs
- compiler/GHC/Hs/Extension/Pass.hs
- compiler/GHC/Hs/ImpExp.hs
- compiler/GHC/Hs/Lit.hs
- compiler/GHC/Hs/Pat.hs
- compiler/GHC/Hs/Type.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Types/FieldLabel.hs
- compiler/GHC/Types/ForeignCall.hs
- compiler/GHC/Types/Name.hs
- compiler/GHC/Types/Name/Occurrence.hs
- compiler/GHC/Types/SourceText.hs
- compiler/GHC/Types/SrcLoc.hs
- compiler/GHC/Unit/Module/Warnings.hs
- compiler/GHC/Utils/Binary.hs
- compiler/GHC/Utils/Lexeme.hs
- compiler/GHC/Utils/Outputable.hs
- compiler/Language/Haskell/Syntax/Doc.hs
- compiler/Language/Haskell/Syntax/ImpExp.hs
- compiler/Language/Haskell/Syntax/Lit.hs
- compiler/ghc.cabal.in
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/df67ac719ed384ffc01b7ef6bdd968d…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/df67ac719ed384ffc01b7ef6bdd968d…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0