[Git][ghc/ghc][ghc-9.4] 147 commits: winio: do not re-translate input when handle is uncooked

Zubin (@wz1000) gitlab at gitlab.haskell.org
Sun Apr 16 17:36:59 UTC 2023



Zubin pushed to branch ghc-9.4 at Glasgow Haskell Compiler / GHC


Commits:
e10a1966 by Tamar Christina at 2023-03-28T11:26:33+05:30
winio: do not re-translate input when handle is uncooked

(cherry picked from commit 626652f7c172f307bd87afaee59c7f0e2825c55d)

- - - - -
0f46d481 by Andreas Klebinger at 2023-04-04T13:39:24+05:30
ghc-the-library: Retain cafs in both static in dynamic builds.

We use keepCAFsForGHCi.c to force -fkeep-cafs behaviour by using a
__attribute__((constructor)) function.

This broke for static builds where the linker discarded the object file
since it was not reverenced from any exported code. We fix this by
asserting that the flag is enabled using a function in the same module
as the constructor. Which causes the object file to be retained by the
linker, which in turn causes the constructor the be run in static builds.

This changes nothing for dynamic builds using the ghc library. But causes
static to also retain CAFs (as we expect them to).

Fixes #22417.

-------------------------
Metric Decrease:
    T21839r
-------------------------

(cherry picked from commit 08ba87200ff068aa37cac082e61ee7e2d534daf5)
(cherry picked from commit 96ab827a0d1ffd81bd906262b42409f2df808375)

- - - - -
e7d033c1 by sheaf at 2023-04-04T13:39:24+05:30
RTS: declare setKeepCAFs symbol

Commit 08ba8720 failed to declare the dependency of keepCAFsForGHCi on
the symbol setKeepCAFs in the RTS, which led to undefined symbol errors
on Windows, as exhibited by the testcase frontend001.

Thanks to Moritz Angermann and Ryan Scott for the diagnosis and fix.

Fixes #22961

(cherry picked from commit cf564dd71548771394249e9bf959512a21bbcec0)
(cherry picked from commit c17668466a404de8a7fc5ef5b2931790da9440b6)

- - - - -
7d8cc70a by Simon Peyton Jones at 2023-04-11T10:21:53+05:30
Fix an assertion check in addToEqualCtList

The old assertion saw that a constraint ct could rewrite itself
(of course it can) and complained (stupid).

Fixes #22645

(cherry picked from commit 3d55d8ab51ece43c51055c43c9e7aba77cce46c0)

- - - - -
c85909e5 by Simon Peyton Jones at 2023-04-11T10:21:53+05:30
Fix shadowing lacuna in OccurAnal

Issue #22623 demonstrated another lacuna in the implementation
of wrinkle (BS3) in Note [The binder-swap substitution] in
the occurrence analyser.

I was failing to add TyVar lambda binders using
addInScope/addOneInScope and that led to a totally bogus binder-swap
transformation.

Very easy to fix.

(cherry picked from commit e193e53790dd5886feea3cf4c9c17625d188291b)

- - - - -
fdb6437f by Simon Peyton Jones at 2023-04-11T10:52:18+05:30
Fix unifier bug: failing to decompose over-saturated type family

This simple patch fixes #22647

(cherry picked from commit 317f45c154f6fe25d50ef2f3febcc5883ff1b1ca)

- - - - -
8cedbeb4 by Matthew Pickering at 2023-04-11T10:52:18+05:30
T10955: Set DYLD_LIBRARY_PATH for darwin

The correct path to direct the dynamic linker on darwin is
DYLD_LIBRARY_PATH rather than LD_LIBRARY_PATH. On recent versions of OSX
using LD_LIBRARY_PATH seems to have stopped working.

For more reading see:

https://stackoverflow.com/questions/3146274/is-it-ok-to-use-dyld-library-path-on-mac-os-x-and-whats-the-dynamic-library-s
(cherry picked from commit a960ca817d6ad0109ea6edda50da3902cc538e86)

- - - - -
f0a2bbfb by Matthew Pickering at 2023-04-11T10:52:18+05:30
Skip T18623 on darwin (to add to the long list of OSs)

On recent versions of OSX, running `ulimit -v` results in

```
ulimit: setrlimit failed: invalid argument
```

Time is too short to work out what random stuff Apple has been doing
with ulimit, so just skip the test like we do for other platforms.

(cherry picked from commit 734847108420cf826a807c30ad54651659cf3a08)

- - - - -
58250d83 by Matthew Pickering at 2023-04-11T10:52:18+05:30
Pass -Wl,-no_fixup_chains to ld64 when appropiate

Recent versions of MacOS use a version of ld where `-fixup_chains` is on by default.
This is incompatible with our usage of `-undefined dynamic_lookup`. Therefore we
explicitly disable `fixup-chains` by passing `-no_fixup_chains` to the linker on
darwin. This results in a warning of the form:

ld: warning: -undefined dynamic_lookup may not work with chained fixups

The manual explains the incompatible nature of these two flags:

     -undefined treatment
             Specifies how undefined symbols are to be treated. Options are: error, warning,
             suppress, or dynamic_lookup.  The default is error. Note: dynamic_lookup that
             depends on lazy binding will not work with chained fixups.

A relevant ticket is #22429

Here are also a few other links which are relevant to the issue:

Official comment: https://developer.apple.com/forums/thread/719961

More relevant links:

https://openradar.appspot.com/radar?id=5536824084660224

https://github.com/python/cpython/issues/97524

Note in release notes: https://developer.apple.com/documentation/xcode-release-notes/xcode-13-releas    e-notes

(cherry picked from commit 8c0ea25fb4a27d4729aabf73f4c00b912bb0c58d)

- - - - -
7d4d5b55 by Sebastian Graf at 2023-04-11T10:52:18+05:30
Handle shadowing in DmdAnal (#22718)

Previously, when we had a shadowing situation like
```hs
f x = ... -- demand signature <1L><1L>

main = ... \f -> f 1 ...
```
we'd happily use the shadowed demand signature at the call site inside the
lambda. Of course, that's wrong and solution is simply to remove the demand
signature from the `AnalEnv` when we enter the lambda.
This patch does so for all binding constructs Core.

In #22718 the issue was caused by LetUp not shadowing away the existing demand
signature for the let binder in the let body. The resulting absent error is
fickle to reproduce; hence no reproduction test case. #17478 would help.

Fixes #22718.

It appears that TcPlugin_Rewrite regresses by ~40% on Darwin. It is likely that
DmdAnal was exploiting ill-scoped analysis results.

Metric increase ['bytes allocated'] (test_env=x86_64-darwin-validate):
    TcPlugin_Rewrite

(cherry picked from commit e3fff7512bbf989386faaa1dccafdad1deabde84)

- - - - -
76c31152 by Oleg Grenrus at 2023-04-11T10:52:18+05:30
Fix #22728: Not all diagnostics in safe check are fatal

Also add tests for the issue and -Winferred-safe-imports in general

(cherry picked from commit 1b812b6973a25cb1962e2fc543d2c4ed3cf31f3c)

- - - - -
a8eb6148 by Viktor Dukhovni at 2023-04-11T10:52:18+05:30
Avoid unnecessary printf warnings in EventLog.c

Fixes #22778

(cherry picked from commit fc02f3bbb5f47f880465e22999ba9794f658d8f6)

- - - - -
52661e3d by Ryan Scott at 2023-04-11T10:52:18+05:30
Add missing parenthesizeHsType in cvtSigTypeKind

We need to ensure that the output of `cvtSigTypeKind` is parenthesized (at
precedence `sigPrec`) so that any type signatures with an outermost, explicit
kind signature can parse correctly.

Fixes #22784.

(cherry picked from commit 4efee43db5090aac4dde1293357bdb548ae71c24)

- - - - -
dc916697 by Cheng Shao at 2023-04-11T10:52:18+05:30
Fix typo in recent darwin tests fix

Corrects a typo in !9647. Otherwise T18623 will still fail on darwin
and stall other people's work.

(cherry picked from commit c45a5fffef2c76efbf5d3a009c3f6d0244a63f0d)

- - - - -
1f8747ca by Ben Gamari at 2023-04-11T10:52:18+05:30
nativeGen/AArch64: Fix debugging output

Previously various panics would rely on a half-written Show
instance, leading to very unhelpful errors. Fix this.

See #22798.

(cherry picked from commit be417a47c7695998dea0adc05489a7b8838a78b6)

- - - - -
b72cb3ac by Ben Gamari at 2023-04-11T10:52:18+05:30
nativeGen: Teach graph-colouring allocator that x18 is unusable

Previously trivColourable for AArch64 claimed that at 18 registers were
trivially-colourable. This is incorrect as x18 is reserved by the platform on
AArch64/Darwin.

See #22798.

(cherry picked from commit 30989d137b8f3a8fddbfd116e04b48f23c24f86c)

- - - - -
a15b863c by Ben Gamari at 2023-04-11T10:52:18+05:30
nativeGen/AArch64: Fix graph-colouring allocator

Previously various `Instr` queries used by the graph-colouring allocator
failed to handle a few pseudo-instructions. This manifested in compiler
panicks while compiling `SHA`, which uses `-fregs-graph`.

Fixes #22798.

(cherry picked from commit 7566fd9de38c67360c090f828923d41587af519c)

- - - - -
71e7be37 by Ben Gamari at 2023-04-11T10:52:18+05:30
testsuite: Add regression test for #22798

(cherry picked from commit 2cb500a5ee1a31dfe1a2cdd71f175442026eb082)

- - - - -
de3491f7 by Zubin Duggal at 2023-04-11T10:52:19+05:30
ncg/aarch64: Handle MULTILINE_COMMENT identically as COMMENTs

Commit 7566fd9de38c67360c090f828923d41587af519c with the fix for #22798 was
incomplete as it failed to handle MULTILINE_COMMENT pseudo-instructions, and
didn't completly fix the compiler panics when compiling with `-fregs-graph`.

Fixes #23002

(cherry picked from commit 68dd64ffa6f164dce4ac010b9f5e1adfefeae7c7)

- - - - -
770a9a00 by Ben Gamari at 2023-04-11T10:52:19+05:30
nativeGen: Disable asm-shortcutting on Darwin

Asm-shortcutting may produce relative references to symbols defined in
other compilation units. This is not something that MachO relocations
support (see #21972). For this reason we disable the optimisation on
Darwin. We do so without a warning since this flag is enabled by `-O2`.

Another way to address this issue would be to rather implement a
PLT-relocatable jump-table strategy. However, this would only benefit
Darwin and does not seem worth the effort.

Closes #21972.

(cherry picked from commit 8bed166bb79445f90015757fd5baac69a7b835df)

- - - - -
d6a51cd1 by Zubin Duggal at 2023-04-11T10:52:19+05:30
bindist configure: Fail if find not found (#22691)

(cherry picked from commit c9967d137cff83c7688e26f87a8b5e196a75ec93)

- - - - -
4419309d by Ben Gamari at 2023-04-11T10:52:19+05:30
nativeGen/X86: MFENCE is unnecessary for release semantics

In #22764 a user noticed that a program implementing a simple atomic
counter via an STRef regressed significantly due to the introduction of
necessary atomic operations in the MutVar# primops (#22468). This
regression was caused by a bug in the NCG, which emitted an unnecessary
MFENCE instruction for a release-ordered atomic write. MFENCE is rather
only needed to achieve sequentially consistent ordering.

Fixes #22764.

(cherry picked from commit 35a118001149eb8f5bab989be997757baa70bfec)

- - - - -
ea9ecc40 by sheaf at 2023-04-11T10:52:19+05:30
Fix tyvar scoping within class SPECIALISE pragmas

Type variables from class/instance headers scope over class/instance
method type signatures, but DO NOT scope over the type signatures in
SPECIALISE and SPECIALISE instance pragmas.

The logic in GHC.Rename.Bind.rnMethodBinds correctly accounted for
SPECIALISE inline pragmas, but forgot to apply the same treatment
to method SPECIALISE pragmas, which lead to a Core Lint failure with
an out-of-scope type variable. This patch makes sure we apply the same
logic for both cases.

Fixes #22913

(cherry picked from commit 9ee761bf02cdd11c955454a222c85971d95dce11)

- - - - -
12b45b4a by Andreas Klebinger at 2023-04-11T10:52:19+05:30
base: Correct @since annotation for FP<->Integral bit cast operations.

Fixes #22708

(cherry picked from commit 9296660b131d42f1b1f9c421040c5746d5c56989)

- - - - -
4e5fd92b by Matthew Pickering at 2023-04-11T10:52:19+05:30
constant folding: Correct type of decodeDouble_Int64 rule

The first argument is Int64# unconditionally, so we better produce
something of that type. This fixes a core lint error found in the ad
package.

Fixes #23019

(cherry picked from commit a86aae8b562c12bb3cee8dcae5156b647f1a74ad)

- - - - -
8f819453 by Sylvain Henry at 2023-04-11T10:52:19+05:30
linker: fix linking with aligned sections (#23066)

Take section alignment into account instead of assuming 16 bytes (which
is wrong when the section requires 32 bytes, cf #23066).

(cherry picked from commit 4158722a6cff5d19e228356c525946b6c4b83396)

- - - - -
82637685 by Ben Gamari at 2023-04-11T10:52:19+05:30
nativeGen/AArch64: Fix bitmask immediate predicate

Previously the predicate for determining whether a logical instruction
operand could be encoded as a bitmask immediate was far too
conservative. This meant that, e.g., pointer untagged required five
instructions whereas it should only require one.

Fixes #23030.

(cherry picked from commit b8d783d24b9a617ad1e3038abeb75d322703ef65)

- - - - -
5a278522 by Matthew Pickering at 2023-04-11T16:44:41+05:30
hadrian bindist: Install manpages to share/man/man1/ghc.1

When the installation makefile was copied over the manpages were no
longer installed in the correct place. Now we install it into share/man/man1/ghc.1
as the make build system did.

Fixes #22371

(cherry picked from commit 32b32d7fbc5544ad6c435a1ea26e6353ec567a9b)

- - - - -
b43896ea by Matthew Pickering at 2023-04-11T16:44:41+05:30
Fix recompilation checking for multiple home units

The key part of this change is to store a UnitId in the
`UsageHomeModule` and `UsageHomeModuleInterface`.

* Fine-grained dependency tracking is used if the dependency comes from
  any home unit.
* We actually look up the right module when checking whether we need to
  recompile in the `UsageHomeModuleInterface` case.

These scenarios are both checked by the new tests (
multipleHomeUnits_recomp and multipleHomeUnits_recomp_th )

Fixes #22675

(cherry picked from commit 1d1dd3fbfafdb9705076d4c587d5cf47e33b7640)

- - - - -
59214122 by Matthew Pickering at 2023-04-11T16:44:41+05:30
Augment target filepath by working directory when checking if module satisfies target

This fixes a spurious warning in -Wmissing-home-modules.

This is a simple oversight where when looking for the target in the
first place we augment the search by the -working-directory flag but
then fail to do so when checking this warning.

Fixes #22676

(cherry picked from commit 7bfb30f92f5e21a8aca58068dc970040130433c6)

- - - - -
e6ec408e by Matthew Pickering at 2023-04-11T16:44:41+05:30
Use NodeKey rather than ModuleName in pruneCache

The `pruneCache` function assumes that the list of `CachedInfo` all have unique `ModuleName`, this is not true:

* In normal compilation, the same module name can appear for a file and it's boot file.
* In multiple home unit compilation the same ModuleName can appear in different units

The fix is to use a `NodeKey` as the actual key for the interfaces which includes `ModuleName`, `IsBoot` and `UnitId`.

Fixes #22677

(cherry picked from commit 69500dd4a6dc81fa6fee6f24f0fe08a07b6112fc)

- - - - -
52be078b by Matthew Pickering at 2023-04-11T16:44:41+05:30
Recompilation checking: Don't try to find artefacts for Interactive & hs-boot combo

In interactive mode we don't produce any linkables for hs-boot files. So
we also need to not going looking for them when we check to see if we
have all the right objects needed for recompilation.

Ticket #22669

(cherry picked from commit 336b2b1c8628b1317de46078e049b529205f2129)

- - - - -
54010624 by Matthew Pickering at 2023-04-11T16:44:41+05:30
Don't write o-boot files in Interactive mode

We should not be producing object files when in interactive mode but we
still produced the dummy o-boot files. These never made it into a
`Linkable` but then confused the recompilation checker.

Fixes #22669

(cherry picked from commit 6469fea7c78408db679898168a8e9c50c8c7c5ce)

- - - - -
64a60b3d by Matthew Pickering at 2023-04-11T16:44:41+05:30
Improve driver diagnostic messages by including UnitId in message

Currently the driver diagnostics don't give any indication about which unit they correspond to.

For example `-Wmissing-home-modules` can fire multiple times for each different home unit and gives no indication about which unit it's actually reporting about.

Perhaps a longer term fix is to generalise the providence information away from a SrcSpan so that these kind of whole project errors can be reported with an accurate provenance. For now we can just include the `UnitId` in the error message.

Fixes #22678

(cherry picked from commit 06cc0a9529f2fe0dfa40d9966a52a982653bfcb9)

- - - - -
429c8d2d by Matthew Pickering at 2023-04-11T16:44:41+05:30
Key ModSummary cache by UnitId as well as FilePath

Multiple units can refer to the same files without any problem. Just
another assumption which needs to be updated when we may have multiple
home units.

However, there is the invariant that within each unit each file only
maps to one module, so as long as we also key the cache by UnitId then
we are all good.

This led to some confusing behaviour in GHCi when reloading,
multipleHomeUnits_shared distils the essence of what can go wrong.

Fixes #22679

(cherry picked from commit 4fe9eaff11ccf1fe185de2918aef4f96fd200c72)

- - - - -
babd33d9 by Matthew Pickering at 2023-04-11T16:44:41+05:30
Finder: Look in current unit before looking in any home package dependencies

In order to preserve existing behaviour it's important to look within the current component before consideirng a module might come from an external component.

This already happened by accident in `downsweep`, (because roots are used to repopulated the cache) but in the `Finder` the logic was the wrong way around.

Fixes #22680

-------------------------
Metric Decrease:
    MultiComponentModules
    MultiComponentModulesRecomp
-------------------------p

(cherry picked from commit ada29f5ca5a567b69713f08feac9ee4f247de117)

- - - - -
3b0d9f8c by Matthew Pickering at 2023-04-11T16:44:41+05:30
Debug: Print full NodeKey when pretty printing ModuleGraphNode

This is helpful when debugging multiple component issues.

(cherry picked from commit be701cc64f0ff78aa50bcd7293d8692dc1ba6c85)

- - - - -
375fae2f by Simon Peyton Jones at 2023-04-11T16:44:41+05:30
Add a missing checkEscapingKind

Ticket #22743 pointed out that there is a missing check,
for type-inferred bindings, that the inferred type doesn't
have an escaping kind.

The fix is easy.

(cherry picked from commit 496607fdb77baf12e2fe263104ba5d0d700eee3b)

- - - - -
f2f46364 by Matthew Pickering at 2023-04-11T16:44:41+05:30
Only store Name in FunRhs rather than Id with knot-tied fields

All the issues here have been caused by #18758.
The goal of the ticket is to be able to talk about things like
`LTyClDecl GhcTc`. In the case of HsMatchContext,
the correct "context" is whatever we want, and in fact storing just a
`Name` is sufficient and correct context, even if the rest of the AST is
storing typechecker Ids.

So this reverts (#20415, !5579) which intended to get closed to #18758 but
didn't really and introduced a few subtle bugs.

Printing of an error message in #22695 would just hang, because we would
attempt to print the `Id` in debug mode to assertain whether it was
empty or not. Printing the Name is fine for the error message.

Another consequence is that when `-dppr-debug` was enabled the compiler would
hang because the debug printing of the Id would try and print fields
which were not populated yet.

This also led to 32070e6c2e1b4b7c32530a9566fe14543791f9a6 having to add
a workaround for the `checkArgs` function which was probably a very
similar bug to #22695.

Fixes #22695

(cherry picked from commit ac39e8e97fbb69e4a786c1c29d6e477e7944f998)

- - - - -
b22e4bda by Matthew Pickering at 2023-04-11T16:44:41+05:30
Store dehydrated data structures in CgModBreaks

This fixes a tricky leak in GHCi where we were retaining old copies of
HscEnvs when reloading. If not all modules were recompiled then these
hydrated fields in break points would retain a reference to the old
HscEnv which could double memory usage.

Fixes #22530

(cherry picked from commit 1262d3f8c03799a04d3c5fcf33d4d4db715ca9a1)

- - - - -
d3768c41 by Matthew Pickering at 2023-04-11T16:44:41+05:30
Force more in NFData Name instance

Doesn't force the lazy `OccName` field (#19619) which is already known
as a really bad source of leaks.

When we slam the hammer storing Names on disk (in interface files or the
like), all this should be forced as otherwise a `Name` can easily retain
an `Id` and hence the entire world.

Fixes #22833

(cherry picked from commit e27eb80cc7e0c82e07fbd8d9ae8112d9070c4355)

- - - - -
b7ebc474 by Matthew Pickering at 2023-04-11T16:44:42+05:30
Force OccName in tidyTopName

This occname has just been derived from an `Id`, so need to force it
promptly so we can release the Id back to the world.

Another symptom of the bug caused by #19619

(cherry picked from commit 3d004d5a961fbbbe11da1050b725468a970bee4b)

- - - - -
744464c3 by Matthew Pickering at 2023-04-11T16:44:42+05:30
Strict fields in ModNodeKey (otherwise retains HomeModInfo)

Towards #22530

(cherry picked from commit f2a0fea09a88693d876fb891ea7c8c97373c4aa6)

- - - - -
53c4d24f by Krzysztof Gogolewski at 2023-04-11T16:44:42+05:30
Fix unification with oversaturated type families

unify_ty was incorrectly saying that F x y ~ T x are surely apart,
where F x y is an oversaturated type family and T x is a tyconapp.
As a result, the simplifier dropped a live case alternative (#23134).

(cherry picked from commit 7c16f3be6e1ac92f87d752f12ad6c6e7b7fd6207)

- - - - -
bbfe16dc by Simon Peyton Jones at 2023-04-11T16:44:42+05:30
Be more careful in GHC.Tc.Solver.Interact.solveOneFromTheOther

We were failing to account for the cc_pend_sc flag in this
important function, with the result that we expanded superclasses
forever.

Fixes #22516.

(cherry picked from commit a3a8e9e968ff9b10c6785d53a5f1c8fcef6db72b)

- - - - -
dd847c14 by sheaf at 2023-04-11T16:44:42+05:30
Hadrian: merge archives even in stage 0

We now always merge .a archives when ar supports -L.
This change is necessary in order to bootstrap GHC using GHC 9.4
on Windows, as nested archives aren't supported.
Not doing so triggered bug #21990 when trying to use the Win32
package, with errors such as:

  Not a x86_64 PE+ file.
  Unknown COFF 4 type in getHeaderInfo.

  ld.lld: error: undefined symbol: Win32zm2zi12zi0zi0_SystemziWin32ziConsoleziCtrlHandler_withConsoleCtrlHandler1_info

We have to be careful about which ar is meant: in stage 0, the check
should be done on the system ar (system-ar in system.config).

(cherry picked from commit 545ff490144ed3ddd596d2a0c01b0a16b5528f63)

- - - - -
3247e44a by Sylvain Henry at 2023-04-11T16:44:42+05:30
Hadrian: correctly detect AR at-file support

Stage0's ar may not support at-files. Take it into account.

Found while cross-compiling from Darwin to Windows.

(cherry picked from commit e987e345c807035e4637ca3eae227ae501e16c42)

- - - - -
35b059d8 by Sylvain Henry at 2023-04-11T16:44:42+05:30
Hadrian: fix Windows cross-compilation

Decision to build either unix or Win32 package must be stage specific
for cross-compilation to be supported.

(cherry picked from commit 48131ee2d8ba7074a4c2763a32c12df105305a75)

- - - - -
9e07003f by Sylvain Henry at 2023-04-11T16:44:42+05:30
Fix RTS build on Windows

This change fixes a cross-compilation issue from ArchLinux to Windows
because these symbols weren't found.

(cherry picked from commit 288fa0179a2f54e4594afe184eac71cc85c46643)

- - - - -
69ab7f35 by Sylvain Henry at 2023-04-11T16:44:42+05:30
configure: support "windows" as an OS

(cherry picked from commit 2fdf22aebda2307d86872c792633d1856d666c9b)

- - - - -
5e102834 by Ben Gamari at 2023-04-11T16:44:42+05:30
rts: Drop racy assertion

0e274c39bf836d5bb846f5fa08649c75f85326ac added an assertion in
`dirty_MUT_VAR` checking that the MUT_VAR being dirtied was clean.
However, this isn't necessarily the case since another thread may have
raced us to dirty the object.

(cherry picked from commit b3eacd64fb36724ed6c5d2d24a81211a161abef1)

- - - - -
ddf602f0 by Ben Gamari at 2023-04-11T16:44:42+05:30
configure: Fix escaping of `$tooldir`

In !9547 I introduced `$tooldir` directories into GHC's default link and
compilation flags to ensure that our C toolchain finds its own headers
and libraries before others on the system. However, the patch was subtly
wrong in the escaping of `$tooldir`. Fix this.

Fixes #22561.

(cherry picked from commit 9ffd5d57a7cc19bcd6ea0139b00c77639566ba82)

- - - - -
60372935 by Ben Gamari at 2023-04-11T16:44:42+05:30
Bump ghc-tarballs to fix #22497

It turns out that gmp 6.2.1 uses the platform-reserved `x18` register on
AArch64/Darwin. This was fixed in upstream changeset 18164:5f32dbc41afc,
which was merged in 2020. Here I backport this patch although I do hope
that a new release is forthcoming soon.

Bumps gmp-tarballs submodule.

Fixes #22497.

(cherry picked from commit f891a442046d8a5ebf4d4777847880ce06752b18)

- - - - -
5d036a5a by Ben Gamari at 2023-04-11T16:44:42+05:30
Bump gmp-tarballs submodule

This backports the upstream fix for CVE-2021-43618, fixing #22789.

(cherry picked from commit b13c6ea5d4b64841164f8cc58d6c6f3de390f2ed)

- - - - -
98b09661 by Li-yao Xia at 2023-04-11T16:44:42+05:30
base: Move changelog entry to its place

(cherry picked from commit 11de324aae17794c8753a8f7cb50c4140785fe27)

- - - - -
850c5ad3 by Matthew Pickering at 2023-04-11T16:44:42+05:30
Add test for T23184

There was an outright bug, which Simon fixed in July 2021, as a little side-fix on a complicated patch:

```
commit 6656f0165a30fc2a22208532ba384fc8e2f11b46
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date:   Fri Jul 23 23:57:01 2021 +0100

    A bunch of changes related to eta reduction

    This is a large collection of changes all relating to eta
    reduction, originally triggered by #18993, but there followed
    a long saga.

    Specifics:

...lots of lines omitted...

    Other incidental changes

    * Fix a fairly long-standing outright bug in the ApplyToVal case of
      GHC.Core.Opt.Simplify.mkDupableContWithDmds. I was failing to take the
      tail of 'dmds' in the recursive call, which meant the demands were All
      Wrong.  I have no idea why this has not caused problems before now.
```

Note this "Fix a fairly longstanding outright bug".   This is the specific fix
```
@@ -3552,8 +3556,8 @@ mkDupableContWithDmds env dmds
         --              let a = ...arg...
         --              in [...hole...] a
         -- NB: sc_dup /= OkToDup; that is caught earlier by contIsDupable
-    do  { let (dmd:_) = dmds   -- Never fails
-        ; (floats1, cont') <- mkDupableContWithDmds env dmds cont
+    do  { let (dmd:cont_dmds) = dmds   -- Never fails
+        ; (floats1, cont') <- mkDupableContWithDmds env cont_dmds cont
         ; let env' = env `setInScopeFromF` floats1
         ; (_, se', arg') <- simplArg env' dup se arg
         ; (let_floats2, arg'') <- makeTrivial env NotTopLevel dmd (fsLit "karg") arg'
```
Ticket #23184 is a report of the bug that this diff fixes.

(cherry picked from commit d97354a82b6f79c4d9a4d389fafdd94375454f59)

- - - - -
b9d38595 by Matthew Pickering at 2023-04-11T16:44:42+05:30
Backport fix to #23184 to 9.4

This backports the fix suggested in #23184 to GHC-9.4

It is from the larger patch (!7861):

 ```
commit 6656f0165a30fc2a22208532ba384fc8e2f11b46
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date:   Fri Jul 23 23:57:01 2021 +0100

    A bunch of changes related to eta reduction

    This is a large collection of changes all relating to eta
    reduction, originally triggered by #18993, but there followed
    a long saga.

    Specifics:

...lots of lines omitted...

    Other incidental changes

    * Fix a fairly long-standing outright bug in the ApplyToVal case of
      GHC.Core.Opt.Simplify.mkDupableContWithDmds. I was failing to take the
      tail of 'dmds' in the recursive call, which meant the demands were All
      Wrong.  I have no idea why this has not caused problems before now.
```

(cherry picked from commit d2dee3f82dcfdfc49cfb708222bb78aea0713cd6)

- - - - -
7d9de292 by Ben Gamari at 2023-04-11T16:44:42+05:30
rts: Don't rely on EXTERN_INLINE for slop-zeroing logic

Previously we relied on calling EXTERN_INLINE functions defined in
ClosureMacros.h from Cmm to zero slop. However, as far as I can tell,
this is no longer safe to do in C99 as EXTERN_INLINE definitions may be emitted
in each compilation unit.

Fix this by explicitly declaring a new set of non-inline functions in
ZeroSlop.c which can be called from Cmm and marking the ClosureMacros.h
definitions as INLINE_HEADER.

In the future we should try to eliminate EXTERN_INLINE.

(cherry picked from commit c6ec4cd1a94a1b76b7b094d5c92ee605031ecf60)

- - - - -
b64260bc by Ben Gamari at 2023-04-11T16:44:42+05:30
rts: Fix capability-count check in zeroSlop

Previously `zeroSlop` examined `RtsFlags` to determine whether the
program was single-threaded. This is wrong; a program may be started
with `+RTS -N1` yet the process may later increase the capability count
with `setNumCapabilities`. This lead to quite subtle and rare crashes.

Fixes #23088.

(cherry picked from commit c32abd4b936b3dfc61974ed5915c330fe7ed10d5)

- - - - -
55392bee by Ben Gamari at 2023-04-11T16:44:42+05:30
nonmoving: Disable slop-zeroing

As noted in #23170, the nonmoving GC can race with a mutator zeroing the
slop of an updated thunk (in much the same way that two mutators would
race). Consequently, we must disable slop-zeroing when the nonmoving GC
is in use.

Closes #23170

(cherry picked from commit d1bb16ed3e18a4f41fcfe31f0bf57dbaf589d6c5)

- - - - -
98f45e6f by Simon Peyton Jones at 2023-04-11T16:44:42+05:30
Take more care with unlifted bindings in the specialiser

As #22998 showed, we were floating an unlifted binding to top
level, which breaks a Core invariant.

The fix is easy, albeit a little bit conservative.  See
Note [Care with unlifted bindings] in GHC.Core.Opt.Specialise

(cherry picked from commit 7192ef91c855e1fae6997f75cfde76aafd0b4bcf)

- - - - -
29236f70 by Simon Peyton Jones at 2023-04-11T16:44:42+05:30
Make FloatIn robust to shadowing

This MR fixes #22622. See the new
  Note [Shadowing and name capture]

I did a bit of refactoring in sepBindsByDropPoint too.

The bug doesn't manifest in HEAD, but it did show up in 9.4,
so we should backport this patch to 9.4

(cherry picked from commit 6206cb9287f3f6e70c669660a646a65274870d2b)

- - - - -
602bc279 by Simon Peyton Jones at 2023-04-11T16:44:43+05:30
Fix void-arg-adding mechanism for worker/wrapper

As #22725 shows, in worker/wrapper we must add the void argument
/last/, not first.  See GHC.Core.Opt.WorkWrap.Utils
Note [Worker/wrapper needs to add void arg last].

That led me to to study GHC.Core.Opt.SpecConstr
Note [SpecConstr needs to add void args first] which suggests the
opposite!  And indeed I think it's the other way round for SpecConstr
-- or more precisely the void arg must precede the "extra_bndrs".

That led me to some refactoring of GHC.Core.Opt.SpecConstr.calcSpecInfo.

(cherry picked from commit 964284fcab6e27fe2fa5c279ea008551cbc15dbb)

- - - - -
9de197b8 by Ben Gamari at 2023-04-11T16:44:43+05:30
rts: Statically assert alignment of Capability

In #22965 we noticed that changes in the size of `Capability` can result
in unsound behavior due to the `align` pragma claiming an alignment
which we don't in practice observe. Avoid this by statically asserting
that the size is a multiple of the alignment.

(cherry picked from commit db83f8bbf2e0ac68df675dea6b716fb7c19c649a)

- - - - -
36611c83 by Ben Gamari at 2023-04-11T16:44:43+05:30
rts: Introduce getNumCapabilities

And ensure accesses to n_capabilities are atomic (although with relaxed
ordering). This is necessary as RTS API callers may concurrently call
into the RTS without holding a capability.

(cherry picked from commit 70999283156f527c5aea6dee57a3d14989a9903a)

- - - - -
874d956b by Ben Gamari at 2023-04-11T16:44:43+05:30
rts: Introduce stgMallocAlignedBytes

(cherry picked from commit 5f7a4a6d8311d2faa9c90b2b0c4431dd4427839d)

- - - - -
00797e00 by Ben Gamari at 2023-04-11T16:44:43+05:30
rts: Correctly align Capability allocations

Previously we failed to tell the C allocator that `Capability`s needed
to be aligned, resulting in #22965.

Fixes #22965.
Fixes #22975.

(cherry picked from commit 8a6f745d963fc9b79c7b1e4b477f4fc724233655)

- - - - -
69644eb3 by Ben Gamari at 2023-04-11T16:44:43+05:30
rts: Drop no-alignment special case for Windows

For reasons that aren't clear, we were previously not giving Capability
the same favorable alignment on Windows that we provided on other
platforms. Fix this.

(cherry picked from commit 5464c73f192f76e75160e8992fe9720d943ae611)

- - - - -
ece2324c by Andreas Klebinger at 2023-04-11T16:44:43+05:30
Only gc sparks locally when we can ensure marking is done.

When performing GC without work stealing there was no guarantee that
spark pruning was happening after marking of the sparks. This could
cause us to GC live sparks under certain circumstances.

Fixes #22528.

(cherry picked from commit a1491c8791c57a64d94bc08d639d585815c8d4e2)

- - - - -
c6b63a85 by Ryan Scott at 2023-04-11T16:44:43+05:30
Windows: Remove mingwex dependency

The clang based toolchain uses ucrt as its math library
and so mingwex is no longer needed.  In fact using mingwex
will cause incompatibilities as the default routines in both
have differing ULPs and string formatting modifiers.

```
$ LIBRARY_PATH=/mingw64/lib ghc/_build/stage1/bin/ghc Bug.hs -fforce-recomp && ./Bug.exe
[1 of 2] Compiling Main             ( Bug.hs, Bug.o )
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `__imp___p__environ'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `__hscore_get_errno'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_ForeignziCziError_errnoToIOError_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziWindows_failIf2_closure'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziEncodingziCodePageziAPI_mkCodePageEncoding_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziEncodingziCodePage_currentCodePage_closure'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziEncoding_getForeignEncoding_closure'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_ForeignziCziString_withCStringLen1_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziHandleziInternals_zdwflushCharReadBuffer_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziHandleziText_hGetBuf1_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziFingerprint_fingerprintString_closure'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_DataziTypeableziInternal_mkTrCon_closure'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziException_errorCallWithCallStackException_closure'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziErr_error_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\template-haskell-2.19.0.0\libHStemplate-haskell-2.19.0.0.a: unknown symbol `base_DataziMaybe_fromJust1_info'
ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\template-haskell-2.19.0.0\libHStemplate-haskell-2.19.0.0.a: unknown symbol `templatezmhaskell_LanguageziHaskellziTHziSyntax_IntPrimL_con_info'
ghc.exe: ^^ Could not load 'templatezmhaskell_LanguageziHaskellziTHziLibziInternal_stringL_closure', dependency unresolved. See top entry above.

<no location info>: error:

GHC.ByteCode.Linker.lookupCE
During interactive linking, GHCi couldn't find the following symbol:
  templatezmhaskell_LanguageziHaskellziTHziLibziInternal_stringL_closure
This may be due to you not asking GHCi to load extra object files,
archives or DLLs needed by your current session.  Restart GHCi, specifying
the missing library using the -L/path/to/object/dir and -lmissinglibname
flags, or simply by naming the relevant files on the GHCi command line.
Alternatively, this link failure might indicate a bug in GHCi.
If you suspect the latter, please report this as a GHC bug:
  https://www.haskell.org/ghc/reportabug
```

(cherry picked from commit de1d15127ac3f41ac3044215b0ea3398a36edc89)

- - - - -
a86389fa by Zubin Duggal at 2023-04-12T11:03:47+05:30
base: Remove HAVE_* CPP guards

- - - - -
19ed0ca7 by Tamar Christina at 2023-04-12T11:03:47+05:30
linker: Fix BFD import libraries

This commit fixes the BFD style import library support in the runtime
linker.  This was accidentally broken during the refactoring to clang
and went unnoticed because clang itself is unable to generate the BFD
style import libraries.

With this change we can not link against both GCC or Clang produced
libraries again and intermix code produced by both compilers.

(cherry picked from commit 48e391952c17ff7eab10b0b1456e3f2a2af28a9b)

- - - - -
686c30f6 by Ben Gamari at 2023-04-12T11:03:48+05:30
Bump Windows toolchain

Updates to LLVM 14, hopefully fixing #21964.

- - - - -
c243cbdd by Zubin Duggal at 2023-04-12T11:03:48+05:30
lint-notes: accept output

- - - - -
013436a2 by Ben Gamari at 2023-04-12T11:03:48+05:30
hadrian: Extend xattr Darwin hack to cover /lib

As noted in #21506, it is now necessary to remove extended attributes
from `/lib` as well as `/bin` to avoid SIP issues on Darwin.

Fixes #21506.

(cherry picked from commit 78d04cfadfd728bb088b08b1e88905b43cc0360c)

- - - - -
0bc34bd0 by Zubin Duggal at 2023-04-14T13:07:37+05:30
Bump submodules: text, parsec, bytestring, containers

- - - - -
40bf9669 by Zubin Duggal at 2023-04-14T13:07:37+05:30
Bump base to 4.17.1.0 and add release notes

- - - - -
8244cdcf by Zubin Duggal at 2023-04-14T13:07:37+05:30
Allow LLVM 14

- - - - -
083017b9 by Ben Gamari at 2023-04-14T13:07:37+05:30
rts: Always use atomics for context_switch and interrupt

Since these are modified by the timer handler.

(cherry picked from commit 605d954722a314c0da59ea07efc26d8a7cb59296)

- - - - -
c192ecd0 by Ben Gamari at 2023-04-14T13:07:37+05:30
rts/Timer: Always use atomic operations

As noted in #22447, the existence of the pthread-based ITimer
implementation means that we cannot assume that the program is
single-threaded.

(cherry picked from commit 86f20258ab7dbfb56e323ee811e9eaef80b077d3)

- - - - -
509c30d2 by Ben Gamari at 2023-04-14T13:07:37+05:30
rts: Encapsulate recent_activity access

This makes it easier to ensure that it is accessed using the necessary
atomic operations.

(cherry picked from commit f8e901dcc090ef81723fb9f3d8ea0a1baac4cbc3)

- - - - -
1717f212 by Ben Gamari at 2023-04-14T13:07:37+05:30
rts: Encapsulate access to capabilities array

(cherry picked from commit e0affaa9fc3e6dc0e65808afa383426b7fe9420a)

- - - - -
2d6d6fdd by Ben Gamari at 2023-04-14T13:07:38+05:30
rts: Encapsulate sched_state

(cherry picked from commit 7ca683e44f9f7a9a7984bbed4f49712838638fc8)

- - - - -
76508973 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Fix race in marking of blackholes

We must use an acquire-fence when marking to ensure that the indirectee
is visible.

(cherry picked from commit 2d71481ad481e6887e2ee342910b1495d53e6e4a)

- - - - -
de27e933 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Fix segment list races

(cherry picked from commit d92b5bf5ca90fb126321224f28096224bce87539)

- - - - -
1405f97a by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Use atomic when looking at bd->gen

Since it may have been mutated by a moving GC.

(cherry picked from commit 0b0d924edcf7631ed1afc88d614849558fa8fa7f)

- - - - -
d01a6ea7 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Eliminate race in bump_static_flag

To ensure that we don't race with a mutator entering a new CAF we take
the SM mutex before touching static_flag. The other option here would be
to instead modify newCAF to use a CAS but the present approach is a bit
safer.

(cherry picked from commit 9a9874d2d96acdcd9daddb7aceaa7951153f6ac0)

- - - - -
ec088ed3 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Ensure that mutable fields have acquire barrier

(cherry picked from commit d6990e6789efeb091c51c50580b68ea1bd997d00)

- - - - -
fe5c048b by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Fix races in collector status tracking

Mark a number of accesses to do with tracking of the status of the
concurrent collection thread as atomic. No interesting races here,
merely necessary to satisfy TSAN.

(cherry picked from commit 83c2876d3783ac2f4ea969c9e01d15198aea03a3)

- - - - -
6326b966 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Make segment state updates atomic

(cherry picked from commit 377697ea4d44023e0c690d722e1e27f03629227f)

- - - - -
d3404b5a by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Refactor update remembered set initialization

This avoids a lock inversion between the storage manager mutex and
the stable pointer table mutex by not dropping the SM_MUTEX in
nonmovingCollect. This requires quite a bit of rejiggering but it
does seem like a better strategy.

(cherry picked from commit c96fc9d52e138b89a85f8df8f722140f874bcede)

- - - - -
9c77c4b9 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Ensure that we aren't holding locks when closing them

TSAN complains about this sort of thing.

(cherry picked from commit 71aea6d3160e1389c38bb94c281bd7c30a030147)

- - - - -
b96e007c by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Make bitmap accesses atomic

This is a benign race on any sensible hard since these are byte
accesses. Nevertheless, atomic accesses are necessary to satisfy
TSAN.

(cherry picked from commit 2d10d8dfdff1212286490c2c19b8f725ce501b10)

- - - - -
d29d4837 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Fix benign race in update remembered set check

Relaxed load is fine here since we will take the lock before looking at
the list.

(cherry picked from commit 7570ae43218fbdee30f783af5a3f49fa3d8301e3)

- - - - -
6d1d5e84 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Fix race in shortcutting

We must use an acquire load to read the info table pointer since if we
find an indirection we must be certain that we see the indirectee.

(cherry picked from commit b6a3ab00712ca40acd1d91ba910e18c972a345a8)

- - - - -
e07c917c by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Make free list counter accesses atomic

Since these may race with the allocator(s).

(cherry picked from commit 5a40353566516d7ba8b1db6877f8c3aba06e64aa)

- - - - -
d8c99faa by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Fix style

(cherry picked from commit 1ca730ce410007781489821188ea8c1ca85f78f9)

- - - - -
f521c304 by Ben Gamari at 2023-04-14T13:07:38+05:30
nonmoving: Deduplicate assertion

(cherry picked from commit 1cc4bd7a169c6d813330d3613836889568515000)

- - - - -
f59ee743 by Ben Gamari at 2023-04-14T13:07:38+05:30
rts: Fix type issues in Sparks.h

Adds explicit casts to satisfy a C++ compiler.

(cherry picked from commit 8623ab4bd7fb1326cebb3191fdee841af74bb345)

- - - - -
66c32a26 by Ben Gamari at 2023-04-14T13:07:38+05:30
rts/BlockAlloc: Allow disabling of internal assertions

These can be quite expensive and it is sometimes useful to compile a
DEBUG RTS without them.

(cherry picked from commit 3072bef55dc6e123e7eb84bb9154a13db4d043da)

- - - - -
a7be6c65 by Ben Gamari at 2023-04-14T13:07:38+05:30
rts/Sanity: Mark pinned_object_blocks

(cherry picked from commit 3223048a1ee73384010aa20be548bad95ef1744a)

- - - - -
70a8ca3f by Ben Gamari at 2023-04-14T13:07:38+05:30
rts/Sanity: Look at nonmoving saved_filled lists

(cherry picked from commit ce4cf9d59552b52ae3d4c1c1e71a83296f022c27)

- - - - -
19db4bf7 by Ben Gamari at 2023-04-14T13:07:38+05:30
Evac: Squash data race in eval_selector_chain

(cherry picked from commit 9ce9fba46bf3fe1af4ce39dba4276bb241f3ea29)

- - - - -
1a6716be by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Clarify implementation

This makes the intent of this implementation a bit clearer.

(cherry picked from commit ba3c7b67bd74906de63b3988b18a14b01861d3c9)

- - - - -
fb9caa54 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Clarify comment

(cherry picked from commit 883d00f9cfffe3bd451f7302116eb29ce836c600)

- - - - -
ecf80b17 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Add missing no-op in busy-wait loop

(cherry picked from commit ed5443ec9195f27522abf4b2882dbc6b6a9f17f5)

- - - - -
64f05017 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Don't push empty arrays to update remembered set

Previously the write barrier of resizeSmallArray# incorrectly handled
resizing of zero-sized arrays, pushing an invalid pointer to the update
remembered set.

Fixes #22931.

(cherry picked from commit 244640a067c0158db5f14f133212caa1a830030e)

- - - - -
dbf32a81 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Fix handling of weak pointers

This fixes an interaction between aging and weak pointer handling which
prevented the finalization of some weak pointers. In particular, weak
pointers could have their keys incorrectly marked by the preparatory
collector, preventing their finalization by the subsequent concurrent
collection.

While in the area, we also significantly improve the assertions
regarding weak pointers.

Fixes #22327.

(cherry picked from commit 683e0c7aef2bbfedbee02c8fa32789e32c89a4db)

- - - - -
77ddce65 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Sanity check nonmoving large objects and compacts

(cherry picked from commit 90e240045c1ac5047f4038bbeed6d2b71b20bc77)

- - - - -
162c3509 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Sanity check mutable list

Assert that entries in the nonmoving generation's generational
remembered set (a.k.a. mutable list) live in nonmoving generation.

(cherry picked from commit 2f08265751c13f7bd0df1c46928fc09a064a8add)

- - - - -
a5fb1176 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Don't show occupancy if we didn't collect live words

(cherry picked from commit 3288e96d4ffe8c5f70929c4fedbfef918148def1)

- - - - -
986028e8 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Fix tracking of FILLED_SWEEPING segments

Previously we only updated the state of the segment at the head of each
allocator's filled list.

(cherry picked from commit 4392965d14920117db2cf4ce460dec6f094f6dfe)

- - - - -
2c0ed71d by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Assert state of swept segments

(cherry picked from commit d478ac18395962d33e14fc378ad9a424bdcd1496)

- - - - -
a6e08eff by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Handle new closures in nonmovingIsNowAlive

We must conservatively assume that new closures are reachable since we
are not guaranteed to mark such blocks.

(cherry picked from commit 3e47be7887b2df48d2ad50791a98131634d7e8ec)

- - - - -
ec8ae75e by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Don't clobber update rem sets of old capabilities

Previously `storageAddCapabilities` (called by `setNumCapabilities`) would
clobber the update remembered sets of existing capabilities when
increasing the capability count. Fix this by only initializing the
update remembered sets of the newly-created capabilities.

Fixes #22927.

(cherry picked from commit 7dc1679b133672029dd7afae834a7fc67265035c)

- - - - -
bdf67900 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Add missing write barriers in selector optimisation

This fixes the selector optimisation, adding a few write barriers which
are necessary for soundness. See the inline comments for details.

Fixes #22930.

(cherry picked from commit bd80fcd18f7be5b9d445d80c828b1a734c0e5a3b)

- - - - -
61e6b54d by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Post-sweep sanity checking

(cherry picked from commit e941801a267a3b9d898b48d90737924a7b7e4da2)

- - - - -
1f9376bc by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Avoid n_caps race

(cherry picked from commit 68fa47f3f5d1c207bd9edd7206bcceb150377647)

- - - - -
146530f0 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Don't push if nonmoving collector isn't enabled

(cherry picked from commit b15c813717ab9797df7733575904a7131bc4044c)

- - - - -
ee3a6e37 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Be more paranoid in segment tracking

Previously we left various segment link pointers dangling. None of this
wrong per se, but it did make it harder than necessary to debug.

(cherry picked from commit ca3bc40255ffadfd0df31ec3a6ec5df7ca7f663e)

- - - - -
c2b57cc8 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Sync-phase mark budgeting

Here we significantly improve the bound on sync phase pause times by
imposing a limit on the amount of work that we can perform during the
sync. If we find that we have exceeded our marking budget then we allow
the mutators to resume, return to concurrent marking, and try
synchronizing again later.

Fixes #22929.

(cherry picked from commit 023998885b16bea51c0c1cdceb3f0ef96dccd5e4)

- - - - -
4f86e5d6 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Allow pinned gen0 objects to be WEAK keys

(cherry picked from commit 0c6f15762d14ade2666d5ad7f665718b4a10f89e)

- - - - -
f0e75bc3 by Ben Gamari at 2023-04-14T13:07:39+05:30
rts: Reenable assertion

(cherry picked from commit 5b60acba8d76ecc4d733043460972633b13eedb0)

- - - - -
4fd491c1 by Ben Gamari at 2023-04-14T13:07:39+05:30
nonmoving: Move current segment array into Capability

The current segments are conceptually owned by the mutator, not the
collector. Consequently, it was quite tricky to prove that the mutator
would not race with the collect due to this shared state. It turns out
that such races are possible: when resizing the current segment array
we may concurrently try to take a heap census. This will attempt to walk
the current segment array, causing a data race.

Fix this by moving the current segment array into `Capability`, where it
belongs.

Fixes #22926.

(cherry picked from commit f849374508432ce07c25db8848fbea0d71040038)

- - - - -
890d0df6 by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Fix Note references

Some references to Note [Deadlock detection under the non-moving
collector] were missing an article.

(cherry picked from commit 43fda6487f729f8c627dbb2abbfc027444d54e52)

- - - - -
d616fef8 by Ben Gamari at 2023-04-14T13:07:40+05:30
rts/Sanity: Fix block count assertion with non-moving collector

The nonmoving collector does not use `oldest_gen->blocks` to track its
block list. However, it nevertheless updates `oldest_gen->n_blocks` to
ensure that its size is accounted for by the storage manager.
Consequently, we must not attempt to assert consistency between the two.

(cherry picked from commit a9062eaa577b3f1edf07908e57832524b5525d7d)

- - - - -
ca9068c0 by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Don't call prepareUnloadCheck

When the nonmoving GC is in use we do not call `checkUnload` (since we
don't unload code) and therefore should not call `prepareUnloadCheck`,
lest we run into assertions.

(cherry picked from commit b284e1c1d1e8e2513a286e3bbc5f46d635b33dd8)

- - - - -
4b6acb26 by Ben Gamari at 2023-04-14T13:07:40+05:30
rts: Encapsulate block allocator spinlock

This makes it a bit easier to add instrumentation on this spinlock
while debugging.

(cherry picked from commit 9c9899d5c99f09312a093b5cf99e5a0a9579bf3a)

- - - - -
f9b47bde by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Fix unregisterised build

(cherry picked from commit f2ef2f5e7a01cf5ec97b751f344233a6a8b781ca)

- - - - -
a79e52cf by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Ensure that sanity checker accounts for saved_filled segments

(cherry picked from commit 7cc7461c74bf78aca0987c8e8e0ec48297c28f2c)

- - - - -
8a031eb8 by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Move allocator into new source file

(cherry picked from commit e6f7b809885609de9e647e7f96cc95929fde7a4a)

- - - - -
1b294f15 by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Split out nonmovingAllocateGC

(cherry picked from commit cfc68b5c9ee9000010ccb2b7f1d346542df3b79f)

- - - - -
4c855ce5 by Ben Gamari at 2023-04-14T13:07:40+05:30
testsuite: Mark ffi023 as broken due to #23089

(cherry picked from commit 600fdd58332e52ac1620178f4b4a296e131465a1)

- - - - -
6a18fc31 by Ben Gamari at 2023-04-14T13:07:40+05:30
rts: Capture GC configuration in a struct

The number of distinct arguments passed to GarbageCollect was getting a
bit out of hand.

(cherry picked from commit ac0240af44026b9fcc08b62beef696ce7ea50e53)

- - - - -
fa9c8e61 by Ben Gamari at 2023-04-14T13:07:40+05:30
nonmoving: Non-concurrent collection

(cherry picked from commit be9b4ca4da78b10bc065957472ecf2c8ce7599a4)

- - - - -
b7a380d9 by Ben Gamari at 2023-04-14T13:07:40+05:30
hadrian: Add +boot_nonmoving_gc flavour transformer

For using GHC bootstrapping to validate the non-moving GC.

(cherry picked from commit ec382ccc087015db3d8782d3079c757ef8f10e9b)

- - - - -
70d9353f by Ben Gamari at 2023-04-14T13:07:40+05:30
contextswitch

- - - - -
b82c9613 by Ben Gamari at 2023-04-14T13:07:40+05:30
rts: Fix incorrect format specifier warnings

- - - - -
11ac9861 by Zubin Duggal at 2023-04-14T13:07:40+05:30
compiler: Fix performance regression in backport of "Make FloatIn robust to shadowing" (6206cb9287f3f6e70c669660a646a65274870d2b)

In 9.4, we have

noFloatIntoArg :: CoreExprWithFVs' -> Type -> Bool
noFloatIntoArg expr expr_ty = ...

But in master when 6206cb92 landed, after "Drop the app invariant" (dcf30da8) we had

noFloatIntoArg :: CoreExprWithFVs' -> Bool
noFloatIntoArg expr = ...

When deciding whether to float things into the argument of a function, in 9.4 we
must know the type of the argument. This was previously done by extracting the
type of the argument from the function type, computed as we walked through all
the arguments.

However, this backport regressed compile time performance due to allocations by
`exprType` particularly in T16577 and T5642, where it turns out that computing
the type of the arguments to a function is quite expensive.

Instead, we can compute the type of the argument by looking at the argument
term directly, which turns out to be much faster and eliminates the performance
regression.

- - - - -
0a6f2a0d by Teo Camarasu at 2023-04-14T13:08:15+05:30
Add regression test for #17574

This test currently fails in the nonmoving way

(cherry picked from commit a56141a69842a78d56ec11be85a775eb703219bf)

- - - - -
9a85b847 by Teo Camarasu at 2023-04-14T13:08:15+05:30
fix: account for large and compact object stats with nonmoving gc

Make sure that we keep track of the size of large and compact objects that have been moved onto the nonmoving heap.
We keep track of their size and add it to the amount of live bytes in nonmoving segments to get the total size of the live nonmoving heap.

Resolves #17574

(cherry picked from commit 20c6669fc46c567e00d3cdf22aa84479b6d8dc17)

- - - - -
2058c8ef by Teo Camarasu at 2023-04-14T13:08:15+05:30
Allow running memInventory when the concurrent nonmoving gc is enabled

If the nonmoving gc is enabled and we are using a threaded RTS,
we now try to grab the collector mutex to avoid memInventory and
the collection racing.

Before memInventory was disabled.

(cherry picked from commit 62c3f7ee4199305cde009ededeae6ece1bcde7f0)
(cherry picked from commit fabc5a1c9aa468e97429ca5f8e501ec4fbd1084f)

- - - - -
8b5d4df0 by Matthew Pickering at 2023-04-15T17:12:01+05:30
darwin ci: Explicitly pass desired build triple to configure

On the zw3rk machines for some reason the build machine was inferred to
be arm64. Setting the build triple appropiately resolve this confusion
and we produce x86 binaries.

- - - - -
8608657c by Matthew Pickering at 2023-04-15T17:12:01+05:30
Store bootstrap_llvm_target and use it to set LlvmTarget in bindists

This mirrors some existing logic for the bootstrap_target which
influences how TargetPlatform is set.

As described on #21970 not storing this led to `LlvmTarget` being set incorrectly
and hence the wrong `--target` flag being passed to the C compiler.

Towards #21970

(cherry picked from commit 64286132cc0db4e227637887f98f5a3ecf7d326a)
(cherry picked from commit 48a9e688331fbc2ac91392c654bb7457c5f8a876)

- - - - -
768caef1 by Matthew Pickering at 2023-04-15T17:12:02+05:30
Check for FP_LD_NO_FIXUP_CHAINS in installation configure script

Otherwise, when installing from a bindist the C flag isn't passed to the
C compiler.

This completes the fix for #22429

(cherry picked from commit 926cd4ee097106cf9c6d1ae1fc32375e7fc45ff2)

- - - - -
403470cf by Zubin Duggal at 2023-04-15T17:12:02+05:30
Prepare release 9.4.5

Metric Decrease:
  T13035
  T15164
  T1969
  T9961
  WWRec
  T12707
  T13379

Metric Increase:
  T17123

- - - - -
a213d367 by Zubin Duggal at 2023-04-16T15:11:30+05:30
ci: lint-ci-config: regenerate cabal.config

- - - - -


30 changed files:

- .gitlab-ci.yml
- .gitlab/darwin/toolchain.nix
- .gitlab/generate_jobs
- compiler/GHC.hs
- compiler/GHC/ByteCode/Types.hs
- compiler/GHC/CmmToAsm.hs
- compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
- compiler/GHC/CmmToAsm/AArch64/Instr.hs
- compiler/GHC/CmmToAsm/Reg/Graph/TrivColorable.hs
- compiler/GHC/CmmToAsm/X86/CodeGen.hs
- compiler/GHC/Core.hs
- compiler/GHC/Core/Opt/ConstantFold.hs
- compiler/GHC/Core/Opt/DmdAnal.hs
- compiler/GHC/Core/Opt/FloatIn.hs
- compiler/GHC/Core/Opt/OccurAnal.hs
- compiler/GHC/Core/Opt/Simplify.hs
- compiler/GHC/Core/Opt/SpecConstr.hs
- compiler/GHC/Core/Opt/Specialise.hs
- compiler/GHC/Core/Opt/WorkWrap/Utils.hs
- compiler/GHC/Core/Type.hs
- compiler/GHC/Core/Unify.hs
- compiler/GHC/Core/Utils.hs
- compiler/GHC/CoreToIface.hs
- compiler/GHC/Driver/Errors/Ppr.hs
- compiler/GHC/Driver/Errors/Types.hs
- compiler/GHC/Driver/Main.hs
- compiler/GHC/Driver/Make.hs
- compiler/GHC/Driver/Pipeline/Execute.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Usage.hs


The diff was not included because it is too large.


View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bc7b1b26d3267644e6ec9d17879d2e803397c704...a213d3676550a0e4d542172de539c0cfa2662431

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bc7b1b26d3267644e6ec9d17879d2e803397c704...a213d3676550a0e4d542172de539c0cfa2662431
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230416/b6449b67/attachment-0001.html>


More information about the ghc-commits mailing list