I’d like to share Flyology GNAT Patchsets, a project that curates reproducible GCC/GNAT fixes while they are being reviewed or backported upstream.
Patchset 1.1.0 already includes fixes for:
-
Storage-model component actuals: GNAT 14–16 could bypass
Copy_FromandCopy_Tofor selected, indexed, or sliced values reached through an access type with a customDesignated_Storage_Model. -
Lock-free protected
Durationvalues: with validity checking enabled, GNAT 13–16 could reject a valid negativeDurationor even abort during compilation on Linux x86-64, depending on the optimization level.
Each patch includes an executable regression test and is validated against pinned GCC sources. Prebuilt toolchains are available for Linux x86-64, Linux AArch64, and macOS AArch64.
These patches have not yet received extensive upstream review, so they should be considered provisional. However, reproducible source builds and executable regression tests indicate that they address the reported issues without reproducing the original failures.
To try one, first add the Flyology index to Alire:
alr index --add \
git+https://github.com/flyology-ada/alire-index.git \
--name flyology --before community
Then select a patched compiler locally in an Alire workspace:
alr -n toolchain --select --local \
gnat_flyology_native=16.1.0-patchset.1.1.0
Versions based on GNAT 13.2, 14.2, 15.3, and 16.1 are available. The selection is workspace-local, so it does not replace your default Alire toolchain.
Feedback and reports from real-world projects are very welcome.