-
f707bab4
by Andreas Klebinger at 2025-07-12T14:56:16+01:00
Specialise: Improve specialisation by refactoring interestingDict
This MR addresses #26051, which concerns missed type-class specialisation.
The main payload of the MR is to completely refactor the key function
`interestingDict` in GHC.Core.Opt.Specialise
The main change is that we now also look at the structure of the
dictionary we consider specializing on, rather than only the type.
See the big `Note [Interesting dictionary arguments]`
-
ca7a9d42
by Simon Peyton Jones at 2025-07-12T14:56:16+01:00
Treat tuple dictionaries uniformly; don't unbox them
See `Note [Do not unbox class dictionaries]` in DmdAnal.hs,
sep (DNB1).
This MR reverses the plan in #23398, which suggested a special case to
unbox tuple dictionaries in worker/wrapper. But:
- This was the cause of a pile of complexity in the specialiser (#26158)
- Even with that complexity, specialision was still bad, very bad
See https://gitlab.haskell.org/ghc/ghc/-/issues/19747#note_626297
And it's entirely unnecessary! Specialision works fine without
unboxing tuple dictionaries.
-
be7296c9
by Andreas Klebinger at 2025-07-12T14:56:16+01:00
Remove complex special case from the type-class specialiser
There was a pretty tricky special case in Specialise which is no
longer necessary.
* Historical Note [Floating dictionaries out of cases]
* #26158
* #19747 https://gitlab.haskell.org/ghc/ghc/-/issues/19747#note_626297
This MR removes it. Hooray.
-
4acf3a86
by Ben Gamari at 2025-07-15T05:46:32-04:00
configure: bump version to 9.15
-
45efaf71
by Teo Camarasu at 2025-07-15T05:47:13-04:00
rts/nonmovingGC: remove n_free
We remove the nonmovingHeap.n_free variable.
We wanted this to track the length of nonmovingHeap.free.
But this isn't possible to do atomically.
When this isn't accurate we can get a segfault by going past the end of
the list.
Instead, we just count the length of the list when we grab it in
nonmovingPruneFreeSegment.
Resolves #26186
-
c635f164
by Ben Gamari at 2025-07-15T14:05:54-04:00
configure: Drop probing of ld.gold
As noted in #25716, `gold` has been dropped from binutils-2.44.
Fixes #25716.
Metric Increase:
size_hello_artifact_gzip
size_hello_unicode_gzip
ghc_prim_so
-
637bb538
by Ben Gamari at 2025-07-15T14:05:55-04:00
testsuite/recomp015: Ignore stderr
This is necessary since ld.bfd complains
that we don't have a .note.GNU-stack section,
potentially resulting in an executable stack.
-
d3cd4ec8
by Wen Kokke at 2025-07-15T14:06:39-04:00
Fix documentation for heap profile ID
-
73082769
by Ben Gamari at 2025-07-15T16:56:38-04:00
Bump win32-tarballs to v0.9
-
3b63b254
by Ben Gamari at 2025-07-15T16:56:39-04:00
rts/LoadArchive: Handle null terminated string tables
As of `llvm-ar` now emits filename tables terminated with null
characters instead of the usual POSIX `/\n` sequence.
Fixes #26150.
-
195f6527
by Tamar Christina at 2025-07-15T16:56:39-04:00
rts: rename label so name doesn't conflict with param
-
63373b95
by Tamar Christina at 2025-07-15T16:56:39-04:00
rts: Handle API set symbol versioning conflicts
-
48e9aa3e
by Tamar Christina at 2025-07-15T16:56:39-04:00
rts: Mark API set symbols as HIDDEN and correct symbol type
-
959e827a
by Tamar Christina at 2025-07-15T16:56:39-04:00
rts: Implement WEAK EXTERNAL undef redirection by target symbol name
-
65f19293
by Ben Gamari at 2025-07-15T16:56:39-04:00
rts/LoadArchive: Handle string table entries terminated with /
llvm-ar appears to terminate string table entries with `/\n` [1]. This
matters in the case of thin archives, since the filename is used. In the
past this worked since `llvm-ar` would produce archives with "small"
filenames when possible. However, now it appears to always use the
string table.
[1] https://github.com/llvm/llvm-project/blob/bfb686bb5ba503e9386dc899e1ebbe2488e6a0a8/llvm/lib/Object/ArchiveWriter.cpp#L314
-
9cbb3ef5
by Ben Gamari at 2025-07-15T16:56:39-04:00
testsuite: Mark T12497 as fixed
Thanks to the LLVM toolchain update.
Closes #22694.
-
2854407e
by Ben Gamari at 2025-07-15T16:56:39-04:00
testsuite: Accept new output of T11223_link_order_a_b_2_fail on Windows
The archive member number changed due to the fact that llvm-ar now uses a
string table.
-
28439593
by Ben Gamari at 2025-07-15T16:56:39-04:00
rts/linker/PEi386: Implement IMAGE_REL_AMD64_SECREL
This appears to now be used by libc++ as distributed by msys2.
-
2b053755
by Tamar Christina at 2025-07-15T16:56:39-04:00
rts: Cleanup merge resolution residue in lookupSymbolInDLL_PEi386 and make safe without dependent
-
e8acd2e7
by Wen Kokke at 2025-07-16T08:37:04-04:00
Remove the `profile_id` parameter from various RTS functions.
Various RTS functions took a `profile_id` parameter, intended to be used to
distinguish parallel heap profile breakdowns (e.g., `-hT` and `-hi`). However,
this feature was never implemented and the `profile_id` parameter was set to 0
throughout the RTS. This commit removes the parameter but leaves the hardcoded
profile ID in the functions that emit the encoded eventlog events as to not
change the protocol.
The affected functions are `traceHeapProfBegin`, `postHeapProfBegin`,
`traceHeapProfSampleString`, `postHeapProfSampleString`,
`traceHeapProfSampleCostCentre`, and `postHeapProfSampleCostCentre`.
-
76d392a2
by Wen Kokke at 2025-07-16T08:37:04-04:00
Make `traceHeapProfBegin` an init event.
-
bbaa44a7
by Peng Fan at 2025-07-16T16:50:42-04:00
NCG/LA64: Support finer-grained DBAR hints
For LA664 and newer uarchs, they have made finer granularity hints
available:
Bit4: ordering or completion (0: completion, 1: ordering)
Bit3: barrier for previous read (0: true, 1: false)
Bit2: barrier for previous write (0: true, 1: false)
Bit1: barrier for succeeding read (0: true, 1: false)
Bit0: barrier for succeeding write (0: true, 1: false)
And not affect the existing models because other hints are treated
as 'dbar 0' there.
-
7da86e16
by Andreas Klebinger at 2025-07-16T16:51:25-04:00
Disable -fprof-late-overloaded-calls for join points.
Currently GHC considers cost centres as destructive to
join contexts. Or in other words this is not considered valid:
join f x = ...
in
... -> scc<tick> jmp
This makes the functionality of `-fprof-late-overloaded-calls` not feasible
for join points in general. We used to try to work around this by putting the
ticks on the rhs of the join point rather than around the jump. However beyond
the loss of accuracy this was broken for recursive join points as we ended up
with something like:
rec-join f x = scc<tick> ... jmp f x
Which similarly is not valid as the tick once again destroys the tail call.
One might think we could limit ourselves to non-recursive tail calls and do
something clever like:
join f x = scc<tick> ...
in ... jmp f x
And sometimes this works! But sometimes the full rhs would look something like:
join g x = ....
join f x = scc<tick> ... -> jmp g x
Which, would again no longer be valid. I believe in the long run we can make
cost centre ticks non-destructive to join points. Or we could keep track of
where we are/are not allowed to insert a cost centre. But in the short term I will
simply disable the annotation of join calls under this flag.
-
7ee22fd5
by ARATA Mizuki at 2025-07-17T06:05:30-04:00
x86 NCG: Better lowering for shuffleFloatX4# and shuffleDoubleX2#
The new implementation
* make use of specialized instructions like (V)UNPCK{L,H}{PS,PD}, and
* do not require -mavx.
Close #26096
Co-authored-by: sheaf <sam.derbyshire@gmail.com>
-
c6cd2da1
by Jappie Klooster at 2025-07-17T06:06:20-04:00
Update interact docs to explain about buffering
We need to tell the user to set to the
appropriate buffer format.
Otherwise, this function may get randomly stuck,
or just behave confusingly.
issue: https://gitlab.haskell.org/ghc/ghc/-/issues/26131
NB, I'm running this with cabal *NOT* ghci. ghci messes with buffering anyway.
```haskell
interaction :: String -> String
interaction "jappie" = "hi"
interaction "jakob" = "hello"
interaction x = "unkown input: " <> x
main :: IO ()
main = interact interaction
```
so in my input (prefixed by `>`) I get:
```
> jappie
unkown input: jappie
```
we confirmed later this was due to lack of \n matching.
Anyway movnig on to more unexpected stuff:
```haskell
main :: IO ()
main = do
interact (concatMap interaction . lines)
```
get's stuck forever.
actually `^D` (ctrl+d) unstucks it and runs all input as expected.
for example you can get:
```
> sdfkds
> fakdsf
unkown input: sdfkdsunkown input: fakdsf
```
This program works!
```haskell
interaction :: String -> String
interaction "jappie" = "hi \n"
interaction "jakob" = "hello \n"
interaction x = "unkown input: " <> x <> "\n"
main :: IO ()
main = do
interact (concatMap interaction . lines)
```
the reason is that linebuffering is set for both in and output by default.
so lines eats the input lines, and all the \n postfixes make sure the buffer
is put out.
-
9fa590a6
by Zubin Duggal at 2025-07-17T06:07:03-04:00
fetch_gitlab: Ensure we copy users_guide.pdf and Haddock.pdf to the release docs directory
Fixes #24093
-
cc650b4b
by Andrew Lelechenko at 2025-07-17T12:30:24-04:00
Add Data.List.NonEmpty.mapMaybe
As per https://github.com/haskell/core-libraries-committee/issues/337
-
360fa82c
by Duncan Coutts at 2025-07-17T12:31:14-04:00
base: Deprecate GHC.Weak.Finalize.runFinalizerBatch
https://github.com/haskell/core-libraries-committee/issues/342
-
f4e8466c
by Alan Zimmerman at 2025-07-17T12:31:55-04:00
EPA: Update exact printing based on GHC 9.14 tests
As a result of migrating the GHC ghc-9.14 branch tests to
ghc-exactprint in
https://github.com/alanz/ghc-exactprint/tree/ghc-9.14, a couple of
discrepancies were picked up
- The opening paren for a DefaultDecl was printed in the wrong place
- The import declaration level specifiers were not printed.
This commit adds those fixes, and some tests for them.
The tests brought to light that the ImportDecl ppr instance had not
been updated for level specifiers, so it updates that too.
-
d70843f8
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
- Remove one `SrcSpan` field from `VAExpansion`. It is no longer needed.
- Make `tcExpr` take a `Maybe HsThingRn` which will be passed on to tcApp and used by splitHsApps to determine a more accurate `AppCtx`
- `tcXExpr` is less hacky now
- do not look through HsExpansion applications
- kill OrigPat and remove HsThingRn From VAExpansion
- look through XExpr ExpandedThingRn while inferring type of head
- always set in generated code after stepping inside a ExpandedThingRn
- fixing record update error messages
- remove special case of tcbody from tcLambdaMatches
- wrap last stmt expansion in a HsPar so that the error messages are prettier
- remove special case of dsExpr for ExpandedThingTc
- make EExpand (HsExpr GhcRn) instead of EExpand HsThingRn
- fixing error messages for rebindable
-
2b3c8450
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
fix the case where head of the application chain is an expanded expression and the argument is a type application c.f. T19167.hs
-
d8f3dfc0
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
move setQLInstLevel inside tcInstFun
-
33e11348
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
ignore ds warnings originating from gen locations
-
5acb3cfc
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
filter expr stmts error msgs
-
c30a3c45
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
exception for AppDo while making error ctxt
-
ada43b1d
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
moving around things for locations and error ctxts
-
46475c66
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
popErrCtxt doesn't push contexts and popErrCtxts in the first argument to bind and >> in do expansion statements
-
de83f212
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
accept test cases with changed error messages
-------------------------
Metric Decrease:
T9020
-------------------------
-
083bc8d2
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
look through PopErrCtxt while splitting exprs in application chains
-
25f07892
by Apoorv Ingle at 2025-07-20T18:41:01-05:00
check the right origin for record selector incomplete warnings
-
7ea6be0b
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
kill VAExpansion
-
c35b44bb
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
pass CtOrigin to tcApp for instantiateSigma
-
029d3acf
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
do not suppress pprArising
-
6929668d
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
kill VACall
-
db7bc4df
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
kill AppCtxt
-
7b38504e
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
remove addHeadCtxt
-
912e2d00
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
fix pprArising for MonadFailErrors
-
eabead83
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
rename ctxt to sloc
-
d5112e07
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
fix RepPolyDoBind error message herald
-
03e70c9e
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
SrcCodeCtxt
more changes
-
6ca2b543
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
make tcl_in_gen_code a SrcCodeCtxt and rename DoOrigin to DoStmtOrigin
-
612cade9
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
make error messages for records saner
-
508feefc
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
accept the right test output
-
8737968e
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
make make sure to set inGenerated code for RecordUpdate checks
-
00d11910
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
rename HsThingRn to SrcCodeOrigin
-
e131f506
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
minor lclenv getter setter changes
-
4ce0eb71
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
fix exprCtOrigin for HsProjection case. It was assigned to be SectionOrigin, but it should be GetFieldOrigin
-
67b74b00
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
undo test changes
-
185dcfee
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
fix unused do binding warning error location
-
4e1e9835
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
FRRRecordUpdate message change
-
2107f858
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
- kill tcl_in_gen_code
- It is subsumed by `ErrCtxtStack` which keep tracks of `ErrCtxt` and code ctxt
-
906ce0f1
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
kill ExpectedFunTyOrig
-
ad0ff7a9
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
update argument position number of CtOrigin
-
285c65c4
by Apoorv Ingle at 2025-07-20T18:41:02-05:00
fix suggestion in error message for record field and modify herald everywhere
-
18b66c85
by Apoorv Ingle at 2025-07-20T19:12:15-05:00
new CtOrigin ExpectedTySyntax