GHC 9.12.4 is now available

The GHC developers are very pleased to announce the release of GHC 9.12.4.
Binary distributions, source distributions, and documentation are available at
downloads.haskell.org and via GHCup.

GHC 9.12.4 is a bug-fix release fixing many issues of a variety of
severities and scopes, including:

  • Fixed a critical code generation regression where sub-word division produced
    incorrect results (#26711, #26668), similar to the bug fixed in 9.12.2

  • Numerous fixes for register allocation bugs, preventing data corruption
    when spilling and reloading registers
    (#26411, #26526, #26537, #26542, #26550)

  • Fixes for several compiler crashes, including issues with CSE (#25468),
    and the simplifier(#26681), implicit parameters (#26451), and the type-class
    specialiser (#26682)

  • Fixed cast worker/wrapper incorrectly firing on INLINE functions (#26903)

  • Fixed LLVM backend miscompilation of bit manipulation operations
    (#20645, #26065, #26109)

  • Fixed associated type family and data family instance changes not triggering
    recompilation (#26183, #26705)

  • Fixed negative type literals causing the compiler to hang (#26861)

  • Improvements to determinism of compiler output (#26846, #26858)

  • Fixes for eventlog shutdown deadlocks (#26573)
    and lost wakeups in the RTS (#26324)

  • Fixed split sections support on Windows (#26696, #26494) and the LLVM backend (#26770)

  • Fixes for the bytecode compiler, PPC native code generator, and Wasm backend

  • The runtime linker now supports COMMON symbols (#6107)

  • Improved backtrace support: backtraces for error exceptions are now
    evaluated at throw time

  • NamedDefaults now correctly requires the class to be standard or have an
    in-scope default declaration, and handles poly-kinded classes (#25775, #25778, #25882)

  • … and many more

A full accounting of these fixes can be found in the release notes. As
always, GHC’s release status, including planned future releases, can be found on
the GHC Wiki status.

GHC development is sponsored by:

We would like to thank these sponsors and other anonymous contributors
whose on-going financial and in-kind support has facilitated GHC maintenance
and release management over the years. Finally, this release would not have
been possible without the hundreds of open-source contributors whose work
comprise this release.

As always, do give this release a try and open a ticket if you see
anything amiss.

31 Likes

I have updated Stack’s default setup-info dictionary for these binary distributions, and added GHC 9.12.4’s global hints to global-hints.yaml .

2 Likes

Latest Stackage Nightly snapshot is now on ghc-9.12.4

5 Likes

@mpilgrem GHC musl docker manifests glcr.b-data.ch/ghc/ghc-musl:9.12.4 and glcr.b-data.ch/ghc/ghc-musl:9.12.4-int-native are available now.

These manifests are also published on Quay and Docker Hub and include images for linux/amd64, linux/arm64/v8 and linux/riscv64:

  • quay.io/benz0li/ghc-musl:9.12.4
  • quay.io/benz0li/ghc-musl:9.12.4-int-native
  • docker.io/benz0li/ghc-musl:9.12.4
  • docker.io/benz0li/ghc-musl:9.12.4-int-native

:information_source: Please be aware that these are unofficial and untested binary distributions of GHC on Alpine Linux.

2 Likes

@wz1000 Thanks for the long awaited release!

Would it make sense to delay the announcements of new GHC versions here until they become available with ghcup, at least in the vanilla branch? After all, ghcup is the most popular installation method, if we assign relevance to the survey State of Haskell 2025 results .

Based on recent experience, it seems that it takes in average a week for the new version to get available with ghcup. It would be nice that when I read the announcement, I can directly crank up ghcup to deliver the new version to me.

1 Like

Interestingly, I was not aware that 9.12.4 will be released this Friday.

I’ve spent months trying to be more in the loop. We created a giant policy document, created a matrix channel for release communication, I’ve had calls over calls on this topic… but it seems in the end, it still doesn’t quite work. I get no heads up.

So then I was in the mountains without access to a laptop the entire weekend. I’ll get to it when I have the time. If you don’t coordinate with me, there will be delays.

6 Likes

For those interested, this is the PR that adds GHC 9.12.4 to the vanilla channel Add metadata for 9.12.4 by wz1000 · Pull Request #373 · haskell/ghcup-metadata · GitHub

The release announcement for 9.12.4-rc1 says:

This release candidate will have a two-week testing period. If all goes well
the final release will be available the week of 26 March 2026.

1 Like

There was a discussion on whether to create another RC and @AndreasPK consulted with me on that: Release policy: Blockers/delays for minor releases. (#27090) · Issues · Glasgow Haskell Compiler / GHC · GitLab

While it seemed we’re in soft agreement that no other RC should be done, it wasn’t entirely obvious to me how the release is going to proceed.

And even in the absence of such unclarities, explicit communication is better than assuming everyone marks the exact date in their calendar and assumes GHC releases are always on point (which they are not).

3 Likes

That is fair. It was not helped that I had some things to sort out in my personal live last week which is why I hadn’t yet responded further on that ticket either last week.

Beyond that not sure how to improve on this. Release candidates are of course always intended to be final, but often issues are found which restart the clock. Which means there is a non-trivial risk any promised release date might not hold unless we move away from giving X period of time for every RC completely.

1 Like

To be clear… it’s fine with me if there’s a delay between release and ghcup availability.

It’s just that end users are constantly asking that question: when does it appear in ghcup. The only way to improve that is to ping me directly, ask whether I have time on the day of the release (or close before) and then coordinate.

These days I’m less available on weekends, so if you drop anything on Friday without notice, it won’t be there until ~mid of next week.

3 Likes

When users ask when a new version of ghc will be available in ghcup, are they implying it’s not showing up fast enough? I too usually wonder when a new version is available, so I would be one to ask that, but I personally think that a one week delay is fine, and many others might agree.

1 Like

I’ve documented the state of affairs now: https://www.haskell.org/ghcup/install/#availability-of-new-versions

GHCup is a distribution channel. As such there may be a lag of 1-2 weeks after a release of e.g. GHC has concluded. This involves manual QA, review of the metadata, creation of unofficial bindists, etc.

GHCup is not involved in upstream’s CI infrastructure or release process. It’s a separate project.

Please do not ask when the new version of tool XY will be available.

4 Likes

Both vanilla and the default channel should now have 9.12.4.

9 Likes

And following @hasufell’s work in making it available on GHCup, 9.12.4 is now also available on the playground. :slight_smile:

In contrast to hasufell, I have made zero attempts to get involved in / be informed about the GHC release process. New GHC releases become available on the playground by me monitoring the GHCup yaml metadata file for changes and then (partially manually) adding it to the playground server.

So far I have always been available soon enough after the release comes on GHCup that delays have been relatively short (less than 2 days generally, I think). I don’t see any reason to change the status quo, though it is possible that awkward timing could lengthen this delay sometimes. If people are unhappy with the current situation for the playground, I’m happy to discuss (though probably better in a separate thread).

7 Likes

My request was to the GHC team to wait with the big announcement until GHCup ships it (in prereleases or vanilla, not necessarily the default channel).

Basically, in the release procedure, there would be something like:
n. Publish artifacts at downloads.haskell.org etc.
n+1. Open a PR against ghcup-metadata
n+2. When the PR has been merged, announce the release.

Additionally, it might make sense to announce the release to more specialist mailing lists (like ghc developers) for the audience that need to learn about the release immediately.

6 Likes

How fast do releases make it into nixpkgs?

1 Like

I’m not interested to be involved in a 0-day delay and then have to answer to the GHC release manager why I’m not available for an entire week.

GHC developers are free to host their own metadata, but my hunch is that it’s going to be a disaster:

  • my estimate over the last years was that roughly 20% of the PRs to the metadata could be merged as-is, the rest needed intervention
  • the format is underspecified and the differences between the formats even less so
  • there are intricacies to the whole thing that go beyond the format itself, some of which are documented here: https://www.haskell.org/ghcup/guide/#maintaining-a-3rd-party-channel (confusing GHCup with incorrect tags, download cache collisions, etc.)

The fact that contributing is hard has many reasons and yes, you could say it’s partly my fault too.

Sure, I can invest more time into creating a yaml spec, versioning it, documenting the differences, ensuring I never break format backwards compatibility (which is the case), maybe add support for the more expressive Dhall config language, implement revisions, etc.

But in the end you also have to understand what you’re doing. Distribution and packaging is boring work, where small mistakes can be unrecoverable to the point that you have to reinstall the whole shebang. You can’t always treat it as “fix as you go” as I’ve read on multiple occasions now. It requires a careful attitude.

Given that I’m currently rewriting large parts of GHCup to be able to ship arbitrary bindists/binaries, I’ll have to invest more time into making the format more robust anyway, add bubblewrap support for untrusted Makefiles and document how to maintain a channel properly.

So maybe this is the way to go. Users who can’t wait a single day will have to use upstream metadata.

12 Likes

@hasufell Thanks for your explanation, but I do not understand why you phrase your explanation as reply to my question. You were not even the target of my request, but "The GHC team”.