Dear OCaml users,

The release of OCaml version 4.14.2 is imminent.

OCaml 4.14.2 is a new update to the stable 4.14 branch of OCaml. This new release backports many safe bug fixes from the OCaml 5 branch and fixes a handful of compatibility issues of OCaml 4.14.1 with newer operating system versions.

A full list of bug fixes is available below.

In order to ensure that the future release works as expected, we are planning to test a release candidate during the upcoming week
(the packages might take some hours to propagate on the opam repository).

If you find any bugs, please report them here on https://github.com/ocaml/ocaml/issues.


Happy hacking,
Florian Angeletti for the OCaml team.

Installation Instructions
------------------------------

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

    opam update
    opam switch create 4.14.2~rc1

The source code for the release candidate is available on
- GitHub: https://github.com/ocaml/ocaml/archive/4.14.2-rc1.tar.gz
- Inria archives : https://caml.inria.fr/pub/distrib/ocaml-4.14/ocaml-4.14.2~rc1.tar.gz

Fine-Tuned Compiler Configuration
-----------------------------------------------

If you want to tweak the configuration of the compiler, you can switch to the option variant with:

    opam update
    opam switch create <switch_name> ocaml-variants.4.14.2~rc1+options <option_list>

where <option_list> is a space-separated list of ocaml-option-* packages. For instance, for a flambda and no-flat-float-array switch:

    opam switch create 4.14.2~rc1+flambda+nffa ocaml-variants.4.14.2~rc1+options ocaml-option-flambda ocaml-option-no-flat-float-array

All available options can be listed with opam search ocaml-option.

Changes Since OCaml 4.14.1
-----------------------------------------

### Runtime System:

  - #11764(https://github.com/ocaml/ocaml/issues/11764), #12577(https://github.com/ocaml/ocaml/issues/12577): Add prototypes to old-style C function definitions
     and declarations.
    (Antonin Décimo, review by Xavier Leroy and Nick Barnes)
 
  - #11763(https://github.com/ocaml/ocaml/issues/11763), #11759(https://github.com/ocaml/ocaml/issues/11759), #11861(https://github.com/ocaml/ocaml/issues/11861), #12509(https://github.com/ocaml/ocaml/issues/12509), #12577(https://github.com/ocaml/ocaml/issues/12577): Use strict prototypes on primitives.
    (Antonin Décimo, review by Xavier Leroy, David Allsopp, Sébastien
     Hinderer and Nick Barnes)
 
  * (*breaking change*) #10723(https://github.com/ocaml/ocaml/issues/10723): Do not use `-flat-namespace` linking for macOS.
    (Carlo Cabrera, review by Damien Doligez)
 
  - #11332(https://github.com/ocaml/ocaml/issues/11332), [#12702](https://github.com/ocaml/ocaml/issues/12702): Make sure `Bool_val(v)` has type `bool` in C++
    (Xavier Leroy, report by ygrek, review by Gabriel Scherer)
 
  ### Build System:
 
  - #11590(https://github.com/ocaml/ocaml/issues/11590): Allow installing to a destination path containing spaces
    (Élie Brami, review by Sébastien Hinderer and David Allsopp)
 
  - #12372(https://github.com/ocaml/ocaml/issues/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(https://github.com/ocaml/ocaml/issues/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(https://github.com/ocaml/ocaml/issues/12061), #12063(https://github.com/ocaml/ocaml/issues/12063): Don't add inconsistent equalities when computing
    high-level error messages for functor applications and inclusions.
    (Florian Angeletti, review by Gabriel Scherer)
 
  - #12878(https://github.com/ocaml/ocaml/issues/12878): Fix incorrect treatment of injectivity for private recursive types.
    (Jeremy Yallop, review by Gabriel Scherer and Jacques Garrigue)
 
  - #12971(https://github.com/ocaml/ocaml/issues/12971), [#12974](https://github.com/ocaml/ocaml/issues/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(https://github.com/ocaml/ocaml/issues/12264), #12289(https://github.com/ocaml/ocaml/issues/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(https://github.com/ocaml/ocaml/issues/12513), #12518(https://github.com/ocaml/ocaml/issues/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(https://github.com/ocaml/ocaml/issues/11633), [#11636](https://github.com/ocaml/ocaml/issues/11636): Bug fix in `caml_unregister_frametable`
    (Frédéric Recoules, review by Gabriel Scherer)
 
  - #12636(https://github.com/ocaml/ocaml/issues/12636), #12646(https://github.com/ocaml/ocaml/issues/12646): More prudent reinitialisation of I/O mutexes after a fork()
    (Xavier Leroy, report by Zach Baylin, review by Enguerrand Decorne)
 
  * (*breaking change*) #10845(https://github.com/ocaml/ocaml/issues/10845) Emit frametable size on AMD64 BSD (OpenBSD, FreeBSD, NetBSD) systems
    (emitted for Linux in [#8805](https://github.com/ocaml/ocaml/issues/8805))
    (Hannes Mehnert, review by Nicolás Ojeda Bär)
 
  - #12958(https://github.com/ocaml/ocaml/issues/12958): Fix `tail-modulo-cons` compilation of `try-with`, `&&`, and `||`
    expressions.
    (Gabriel Scherer and Nicolás Ojeda Bär, report by Sylvain Boilard, review by
    Gabriel Scherer)