-
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
-
d12115a4
by Recursion Ninja at 2026-08-28T17:23:25-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'