OCaml 4.14.2 released

We have the pleasure of celebrating the birthday of Grace Chisholm Young by announcing the release of OCaml version 4.14.2.

This release is a collection of safe bug fixes, cherry-picked from the OCaml 5 branch.
If you are still using OCaml 4.14 and cannot yet upgrade to OCaml 5, this release is for you.

The 4.14 branch is expected to receive updates for at least one year, while the OCaml 5 branch is stabilising.

Thus don’t hesitate to report any bugs on the OCaml issue tracker (at Issues · ocaml/ocaml · GitHub).

See the list of changes below for more details.

Installation Instructions

The base compiler can be installed as an opam switch with the following commands:

opam update
opam switch create 4.14.2

The source code for the release candidate is also directly available on:

Changes since OCaml 4.14.1

Runtime system:

  • #11764, #12577: Add prototypes to old-style C function definitions
    and declarations.
    (Antonin Décimo, review by Xavier Leroy and Nick Barnes)

  • #11763, #11759, #11861, #12509, #12577: Use strict prototypes on primitives.
    (Antonin Décimo, review by Xavier Leroy, David Allsopp, Sébastien
    Hinderer and Nick Barnes)

  • (breaking change) #10723: do not use -flat-namespace linking for macOS.
    (Carlo Cabrera, review by Damien Doligez)
  • #11332, #12702: make sure Bool_val(v) has type bool in C++
    (Xavier Leroy, report by ygrek, review by Gabriel Scherer)

Build system:

  • #11590: Allow installing to a destination path containing spaces.
    (Élie Brami, review by Sébastien Hinderer and David Allsopp)

  • #12372: Pass option -no-execute-only to the linker for OpenBSD >= 7.3
    so that code sections remain readable, as needed for closure marshaling.
    (Xavier Leroy and Anil Madhavapeddy, review by Anil Madhavapeddy and
    Sébastien Hinderer)

  • #12903: Disable control flow integrity on OpenBSD >= 7.4 to avoid
    illegal instruction errors on certain CPUs.
    (Michael Hendricks, review by Miod Vallat)

Bug fixes:

  • #12061, #12063: don’t add inconsistent equalities when computing
    high-level error messages for functor applications and inclusions.
    (Florian Angeletti, review by Gabriel Scherer)

  • #12878: fix incorrect treatment of injectivity for private recursive types.
    (Jeremy Yallop, review by Gabriel Scherer and Jacques Garrigue)

  • #12971, #12974: fix an uncaught Ctype.Escape exception on some
    invalid programs forming recursive types.
    (Gabriel Scherer, review by Florian Angeletti, report by Neven Villani)

  • #12264, #12289: Fix compact_allocate to avoid a pathological case
    that causes very slow compaction.
    (Damien Doligez, report by Arseniy Alekseyev, review by Sadiq Jaffer)

  • #12513, #12518: Automatically enable emulated fma for Visual Studio 2019+
    to allow configuration with either pre-Haswell/pre-Piledriver CPUs or running
    in VirtualBox. Restores parity with the other Windows ports, which don’t
    require explicit --enable-imprecise-c99-float-ops.
    (David Allsopp, report by Jonah Beckford and Kate Deplaix, review by
    Sébastien Hinderer)

  • #11633, #11636: bugfix in caml_unregister_frametable
    (Frédéric Recoules, review by Gabriel Scherer)

  • #12636, #12646: More prudent reinitialization of I/O mutexes after a fork()
    (Xavier Leroy, report by Zach Baylin, review by Enguerrand Decorne)

  • (breaking change) #10845 Emit frametable size on amd64 BSD (OpenBSD, FreeBSD, NetBSD) systems
    (emitted for Linux in #8805)
    (Hannes Mehnert, review by Nicolás Ojeda Bär)
  • #12958: Fix tail-modulo-cons compilation of try-with, && and ||
    (Gabriel Scherer and Nicolás Ojeda Bär, report by Sylvain Boilard, review by
    Gabriel Scherer)

  • #12116, #12993: explicitly build non PIE executables on x86 32bits
    (Florian Angeletti, review by David Allsopp)

  • #13018: Don’t pass duplicate libraries to the linker when compiling ocamlc.opt
    and when using systhreads (new versions of lld emit a warning).
    (David Allsopp, review by Nicolás Ojeda Bär)