2.2. Version 9.0.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 versions 9 through 12.

2.2.1. Highlights

  • First-class support for Apple M1 hardware using GHC’s LLVM ARM backend.

  • Fixes for a number of critical compiler and runtime system correctness bugs.

  • Improved compiler performance and memory usage.

2.2.2. General bug fixes

  • Fix incorrect rewrite rules for fromInteger resulting in incorrect code when compiling with optimisations (#19345, #20066).

  • Unify primary and secondary GHCi prompts (#20042).

  • Warn if Unicode Bidirectional Formatting characters are found in the source, possibly misleading code reviewers (#20263).

  • Fix a memory leak in the simplifier, leading to the consumption of more memory on each iteration (#20134).

  • Reduce memory usage in --make mode (#13586).

  • Fix a long standing bug in constraint solving which lead to incorrect build failures (#19315).

  • Fix a a bug affecting the demand analyser which lead to runtime crashes when compiling with optimisation (#18638).

  • Fix a bug where code may be unloaded prematurely when using the parallel garbage collector (see #19417).

  • Fix a long standing GHC API bug affecting clients like Haskell Language Server where async exceptions used to cancel threads during typechecking would be caught by the Template Haskell evaluator and reported as compile errors (#19410).

  • Fix an inconsistency in the way GHC calls typechecker plugins where slightly different typechecker environment would be made available as an argument as compared to the monadic environment (see #19191).

  • Greatly improve performance and memory usage while compiling modules with many partial type signatures and -Wno-partial-type-signatures

  • Fix a bug where the linker may during shutdown unload code before libraries’ atexit handlers have a chance to run (#19297).

  • Improvements to code generation (#19581).

  • Fix a bug where levity monomorphic programs would be incorrectly rejected (#19522).

  • Fix a typechecker bug which lead to an assertion failure while compiling certain programs with -XLinearTypes (#19400).

  • Fix some RTS statistic calculations when using more than one thread with the parallel GC (#19147).

  • Fix a bug where an imported main function would not be recognised (#19397).

  • Fix a bug where unboxed objects would be entered, leading to runtime crashes (#19645).

  • Fix a regression causing compiler panics during the STG conversion (#19700).

  • Disallow -XDerivingVia when -XSafe is on (#19786).

  • Fix a bug where using magicDict in GHCi would lead to a crash (#19667).

  • Fix a bug with the constructed product result (CPR) analysis involving usages of runRW# (#19822).

  • Fix a compiler performance issue causing exponential blowup during zonking/typechecking (#19668).

  • Improve sharing of join points (#19996).

  • Fix a compiler panic involving used existential type variables (#19849).

  • Avoid including the path source file in the interface fingerprint, allowing interface files to be more portable (#16956).

  • Fix some timer races in the RTS possibly manifesting in #18033 and #20132.

  • Fix a crash on the non-moving GC due to incorrect logic for calculating the header size for array write barries (#19715).

  • Fix a bug with the decoding of strings involving the null byte in the optimiser (#19976).

  • Fix a bug with the parser leading to the incorrect rejection of programs mixing infix operators and -XLexicalNegation (#19838).

  • Export more functions from GHC.Tc.Errors.Hole for use by plugin authors (#19864).

  • Fix a bug in base leading to a high likelihood of space leaks when using lazy bytestrings. (#20107).

  • Fix some memory ordering issues manifesting on aarch64-darwin due to an RTS bug (#20093).

  • Fix a bug leading to typechecker errors being discarded inside splices (#20179, #19470).

  • Fix some spurious warnings arising from the interaction between -Wunused-packages and reexported modules (#19518, #19777, #20242).

  • Fix an RTS bug causing allocateExec to fail with certain versions of libffi (#20051).

  • Fix an RTS bug resulting a crash m32_allocator_init: Failed to map (#19421).

  • Stop leaking defunct llc processes (#20305).

  • Fix an bug with the non moving GC leading to crashes due to missing write barriers (#20399, #20414).

  • Improve code generator performance by elminating a few thunks (#19471).

  • Fix a memory leak when using GHCi with -fno-code (#20509).

  • Fix a bug in the RTS linker where mmapForLinkerMarkExecutable could be called with a zero-length argument, leading to undefined behaviouar (#20648).

  • Fix a bug with the GC resulting in object code being prematurely collected leading to runtime crashes (#20649).

  • GHC.Event.Manager: Don’t use one-shot kqueue on macOS. This reverts a commit that removed the workaround for a bug (#7651) in the OSX implementation of kqueue. It turns out the bug still affects modern macOS versions, so we keep the workaround for now. (#20662).

  • Check the buffer size before calling the continuation in withEncodedCString (#20107).

  • Pass -DLIBICONV_PLUG when building base library on FreeBSD (#19958).

  • Make unsafeDupablePerformIO have a lazy demand (#19181).

  • Fix accidental unsoundness in Data.Typeable.Internal.mkTypeLitFromString (#19288).

2.2.3. Packaging fixes

  • Fix packaging of Windows extra tarballs (#19316).

  • Fix Windows build with autoconf >= 2.7.0 (#19189).

  • Fix make build system reading the ghc user package environment (#18988).

  • Fix leakage of GHC in PATH into build artifacts (#19485).

  • Include hyperlinked sources in released haddock documentation (#19455).

  • Don’t include configure scripts in Windows bindist. (#19868).

  • Ship both both versioned and unversioned executables with the hadrian bindist. (#20074).

  • Give ghc-pkg the same version as ghc (#20087).

  • Bump process submodule to 1.6.13.2 , fixing a number of correctness bugs on AArch64 Darwin backends (#19994).

  • Fix the location of haddock files in the installed pkgconfs (#20427).

  • Bump process to 1.6.13.2

  • Bump terminfo to 0.4.1.5

  • Bump base to 4.15.1.0

  • Bump Win32 to 2.12.0.1

  • Bump haskeline to 0.8.2

  • Bump ghc-bignum to 1.1

  • Bump haddock to 2.25.1

  • Bump text to 1.2.5.0

  • Bump Cabal to 3.4.1.0

  • Bump directory to 1.3.6.2

2.2.4. Portability fixes

  • Fix an issue making GHC unable to build on FreeBSD due to an undefined reference to libiconv. (#19958).

  • Match the C calling convention on platforms like s390x by sign/zero extending parameters for foreign calls. (#19023).

  • Fix an issue resulting in build failures on certains platforms due to conflicting types for environ (#20512).

  • Fix xxHash duplicate symbol errors on FreeBSD. (#19948).

  • Properly honour -fno-use-rpaths on darwin. (#20004).

  • Fix an issue causing libraries like network to fail building due to incorrect linker paths. (#19968).

  • Fix a linking portability issue on macOS that resulted in undefined symbol errors for ___darwin_check_fd_set_overflow (#19950).

  • PowerPC: fix unsigned compare with 16-bit constants (#19852, #19609)

  • Fix “undefined reference to libiconv” errors when compiling on FreeBSD (#19958)

  • Allow the RTS to be compiled with a C++ compiler (#20394)

  • Don’t rely on realpath in the binary distribution makefile (#19963)

  • Fix “conflicting types for ‘environ’” error with certian glibc versions (#20512, #20577)

2.2.5. 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.0.2

The compiler itself

Cabal

3.4.1.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.15.1.0

Core library

binary

0.8.8.0

Dependency of ghc library

bytestring

0.10.12.1

Dependency of ghc library

containers

0.6.4.1

Dependency of ghc library

deepseq

1.4.5.0

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.1

Dependency of ghc library

ghc-boot-th

9.0.2

Internal compiler library

ghc-boot

9.0.2

Internal compiler library

ghc-compact

0.1.0.0

Core library

ghc-heap

9.0.2

GHC heap-walking library

ghc-prim

0.7.0

Core library

ghci

9.0.2

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.0.2

Internal compiler library

mtl

2.2.2

Dependency of Cabal library

parsec

3.1.14.0

Dependency of Cabal library

pretty

1.1.3.6

Dependency of ghc library

process

1.6.13.2

Dependency of ghc library

stm

2.5.0.0

Dependency of haskeline library

template-haskell

2.17.0.0

Core library

terminfo

0.4.1.5

Dependency of haskeline library

text

1.2.5.0

Dependency of Cabal library

time

1.9.3

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