2.2. Version 9.2.2 — Glasgow Haskell Compiler 9.2.6 User's Guide

# 2.2. Version 9.2.2

The significant changes to the various parts of the compiler are listed in the following sections.

The `LLVM backend` of this release is to be used with LLVM 9, 10, 11, or 12.

## 2.2.1. Compiler

- Numerous improvements in compiler performance.
- A fix for GHC’s handling of the XDG Base Directory Specification (#6077, #20684, #20669, #20660):
  - For the package database previously in ~/.ghc/<arch-ver>, we will continue to use the old path if it exists. For example, if the ~/.ghc/x86_64-linux-9.4.1 directory exists, GHC will use that for its user package database. If this directory does not exist, we will use $XDG_DATA_HOME/ghc/x86_64-linux-9.4.1. This is in order to give tooling like cabal time to migrate
  - For GHCi configuration files previously located in ~/.ghc/ like ghci.conf and ghci_history, we will first check if they exist in ~/.ghc and use those if they do. However, we will create new files like ghci_history only in $XDG_DATA_HOME/ghc. So if you don’t have a previous GHC installation which created ~/.ghc/ghci_history, the history file will be written to $XDG_DATA_HOME/ghc. If you already have an older GHC installation which wrote ~/.ghc/ghci_history, then GHC will continue to write the history to that file.
- Fix bug in CPR analysis’s treatment of join points which may result in runtime crashes (#18824).
- Link against `libatomic` for atomic operations on platforms where this is necessary (#19119).
- Fix bootstrapping of compiler with GHC 9.2 and later (#19631)
- Silence non-actionable warnings regarding missed specialisations of class methods (#19592).
- Fix a race condition in the registration of ticky-ticky profiling counters, potentially resulting in hangs when ticky-ticky is used in a threaded application (#20451).
- Introduce a flag, `-Wunicode-bidirectional-format-characters`, to warn if Unicode bidirectional formatting are found in Haskell source files.
- Improve the pattern match checker’s handling of unlifted data types, eliminating spurious warnings from impossible branches (#20631).
- Fix a compiler crash due to incorrect in-scope set (#20639)
- Don’t use implicit lifting when deriving a `Lift` instances, fixing #20688.
- Unbox unlifted datatypes fields (#20663).
- Introduce a flag, `-fcheck-prim-bounds`, which adds dynamic bounds checks in the code generated for array primops (#20769).
- Ensure that the `indexWord8ArrayAs<Type>#` family of array primops are lowered correctly on platforms which do not support unaligned memory access (#21015, #20987).
- Fix a potential bug where common-block elimination may common-up incompatible load operations (#21016)
- Eliminate the `ghc` library’s dependence on `parsec` (#21033).
- Introduced `-fcompact-unwind` , enabling the generation of compact unwinding information on Apple Darwin targets (#11829).
- Fix a bug where some exception closures could be inappropriately garbage collected, resulting in crashes (#21141)
- Fix a variety of bugs in the AArch64 code generator’s handling of sub-word-size values (#19993, #20637, #20638).

## 2.2.2. GHCi

- Fix bug in handling of GHC environment files which lead to unintentional resetting of GHCi’s package state (#19650)

## 2.2.3. Core libraries

- Fix a few bugs in WinIO which might result in heap corruption (#21048).
- Fix an interaction between WinIO and deadlock detection, resulting in programs potentially hanging in IO (#18382)
- Add `CTYPE` pragmas to all foreign type wrappers (e.g. `Foreign.C.Types`), ensuring that correct signatures are generated for `capi` foreign imports (#15531).
- Fix incorrect implementation of `Data.Type.Ord.<:` (TODO)
- Bump `stm` to release 2.5.0.2 (#20575)
- Avoid using Apple Darwin’s broken one-shot kqueue implementation (#20662)

## 2.2.4. Build system and packaging

- Fix generation of binary distribution for cross-compilers with Hadrian (#20267)
- Don’t rely on non-POSIX `realpath` utility in Hadrian’s binary distribution installation `Makefile` (#19963)

## 2.2.5. Runtime system

- #20577
- Teach runtime linker to resolve special `iconv_` symbols on FreeBSD (#20354)
- Fix garbage collector statistics produced when run `-qn 1` (#19685).
- Fix the reporting of elapsed GC time when using the `non-moving garbage collector`. (#20751)
- Fix a bug where the memory-mapping base address was not updated after creating a mapping, resulting in linking failures (#20734)
- Eliminate a case in the linker which would result in memory mappings that were simultaneously writable and executable (#20814).
- Seed `environ` in the runtime system’s symbol table, ensuring that environment is correctly propagated to loaded objects (#20861 and related tickets)
- Introduce a new flag, `--null-eventlog-writer`, allowing the eventlog to be enabled while suppressing the usual `.eventlog` file output. This can be useful when running programs with a custom eventlog writer.

## 2.2.6. Included libraries

The package database provided with this distribution also contains a number of packages other than GHC itself. See the changelogs provided with these packages for further change information.

Package | Version | Reason for inclusion
--- | --- | ---
ghc | 9.2.6 | The compiler itself
Cabal | 3.6.3.0 | Dependency of `ghc-pkg` utility
Win32 | 2.12.0.1 | Dependency of `ghc` library
array | 0.5.4.0 | Dependency of `ghc` library
base | 4.16.4.0 | Core library
binary | 0.8.9.0 | Dependency of `ghc` library
bytestring | 0.11.4.0 | Dependency of `ghc` library
containers | 0.6.5.1 | Dependency of `ghc` library
deepseq | 1.4.6.1 | Dependency of `ghc` library
directory | 1.3.6.2 | Dependency of `ghc` library
exceptions | 0.10.4 | Dependency of `ghc` and `haskeline` library
filepath | 1.4.2.2 | Dependency of `ghc` library
ghc-boot-th | 9.2.6 | Internal compiler library
ghc-boot | 9.2.6 | Internal compiler library
ghc-compact | 0.1.0.0 | Core library
ghc-heap | 9.2.6 | GHC heap-walking library
ghc-prim | 0.8.0 | Core library
ghci | 9.2.6 | The REPL interface
haskeline | 0.8.2 | Dependency of `ghci` executable
hpc | 0.6.1.0 | Dependency of `hpc` executable
integer-gmp | 1.1 | Core library
libiserv | 9.2.6 | Internal compiler library
mtl | 2.2.2 | Dependency of `Cabal` library
parsec | 3.1.15.0 | Dependency of `Cabal` library
pretty | 1.1.3.6 | Dependency of `ghc` library
process | 1.6.16.0 | Dependency of `ghc` library
stm | 2.5.0.2 | Dependency of `haskeline` library
template-haskell | 2.18.0.0 | Core library
terminfo | 0.4.1.5 | Dependency of `haskeline` library
text | 1.2.5.0 | Dependency of `Cabal` library
time | 1.11.1.1 | Dependency of `ghc` library
transformers | 0.5.6.2 | Dependency of `ghc` library
unix | 2.7.2.2 | Dependency of `ghc` library
xhtml | 3000.2.2.1 | Dependency of `haddock` executable