# GNAT patches > Independent GCC and GNAT patch bundles, each with an executable regression, validated against pinned GCC source releases and published as patchsets. A bundle is one compiler problem: a patch with version variants, an executable regression run at -O0 and -O2 before and after the patch, and an explanation. A patchset selects the bundles that apply to one pinned GCC source release per supported major. A bundle a patchset holds back is staged, and no patched run makes a claim about it. A release that does not have a defect is not patched for it; the bundle's regression runs there as a control instead. ## Catalog - [Home](https://gnat-patches.flyology.org/): The latest patchset and what each compiler receives. - [Patchsets](https://gnat-patches.flyology.org/patchsets/): Every patchset and the GCC releases it covers. - [Bundles](https://gnat-patches.flyology.org/bundles/): Every bundle, accepted and staged. - [Unreleased](https://gnat-patches.flyology.org/unreleased/): Bundles held out of the published patchset. - [Panels](https://gnat-patches.flyology.org/panels/): State and evidence for every mapping feature the repository exercises. - [Catalog JSON](https://gnat-patches.flyology.org/patches.json): Complete machine-readable catalog. ## Patchsets - [Patchset 1.2.0](https://gnat-patches.flyology.org/patchsets/1.2.0/): GCC 13 pinned to 13.2.0, GCC 14 pinned to 14.2.0, GCC 15 pinned to 15.3.0, GCC 16 pinned to 16.2.0. - [Patchset 1.1.0](https://gnat-patches.flyology.org/patchsets/1.1.0/): GCC 13 pinned to 13.2.0, GCC 14 pinned to 14.2.0, GCC 15 pinned to 15.3.0, GCC 16 pinned to 16.2.0. - [Patchset 1.0.1](https://gnat-patches.flyology.org/patchsets/1.0.1/): GCC 13 pinned to 13.2.0, GCC 14 pinned to 14.2.0, GCC 15 pinned to 15.3.0, GCC 16 pinned to 16.1.0. - [Patchset 1.0.0](https://gnat-patches.flyology.org/patchsets/1.0.0/): GCC 13 pinned to 13.2.0, GCC 14 pinned to 14.2.0, GCC 15 pinned to 15.3.0, GCC 16 pinned to 16.1.0. ## Bundles - [C++ Ada anonymous enums](https://gnat-patches.flyology.org/bundles/cxx-ada-anonymous-enums/): Top-level C++ anonymous enumerations lose their constants and appear as incomplete internal types in generated Ada specifications. Status: accepted. - [C++ Ada casefold identity](https://gnat-patches.flyology.org/bundles/cxx-ada-casefold-identity/): The C++ Ada spec dumper emits case-distinct C++ identifiers as duplicate Ada identifiers. Status: accepted. - [C++ Ada char8_t mapping](https://gnat-patches.flyology.org/bundles/cxx-ada-char8-type/): The C++ Ada spec dumper emits char8_t references even though GNAT's Interfaces.C has no such Ada type. Status: accepted. - [C++ Ada concrete multiple inheritance](https://gnat-patches.flyology.org/bundles/cxx-ada-concrete-multiple-inheritance/): The C++ Ada mapper emits multiple concrete tagged bases as illegal Ada progenitors and omits their secondary subobject storage. Status: staged. - [C++ Ada derived virtual slots](https://gnat-patches.flyology.org/bundles/cxx-ada-derived-virtual-slots/): Class-specific Ada destructor names consume new dispatch slots in derived classes and displace virtual methods introduced after them from their C++ vtable indices. Status: staged. - [C++ Ada empty-class storage](https://gnat-patches.flyology.org/bundles/cxx-ada-empty-class-storage/): The C++ Ada mapper gives complete empty-class objects zero storage and maps overlapping no_unique_address members as ordinary Ada storage. Status: staged. - [C++ Ada enclosing-type method names](https://gnat-patches.flyology.org/bundles/cxx-ada-enclosing-type-method-names/): The C++ Ada mapper emits a method whose name differs from its enclosing type only by case as an illegal duplicate Ada identifier. Status: accepted. - [C++ Ada explicit alignment](https://gnat-patches.flyology.org/bundles/cxx-ada-explicit-alignment/): The C++ Ada spec dumper omits user-specified record alignment unless the layout is also packed or contains bit fields. Status: accepted. - [C++ Ada generated-name identity](https://gnat-patches.flyology.org/bundles/cxx-ada-generated-name-identity/): Readable Ada names synthesized for C++ entities can collide with user-written identifiers and with each other. Status: staged. - [C++ Ada inherited tail padding](https://gnat-patches.flyology.org/bundles/cxx-ada-inherited-tail-padding/): The C++ Ada mapper loses reusable base-class tail padding, including non-polymorphic and multiple-base layouts, so an Ada view can have a larger size and different field offsets than C++. Status: staged. - [C++ Ada unsigned __int128 types](https://gnat-patches.flyology.org/bundles/cxx-ada-int128-types/): GCC 13 and 14 emit the internal C++ name for unsigned __int128 as an undefined Ada identifier. Status: accepted. - [C++ Ada pointers to members](https://gnat-patches.flyology.org/bundles/cxx-ada-member-pointers/): C++ data-member and member-function pointer representations contain blank underlying Ada types and make the generated specification invalid. Status: accepted. - [C++ Ada namespace identity](https://gnat-patches.flyology.org/bundles/cxx-ada-namespace-identity/): The C++ Ada spec dumper flattens named namespaces, causing unrelated declarations with the same unqualified name to collide in Ada. Status: accepted. - [C++ Ada profile formal/type names](https://gnat-patches.flyology.org/bundles/cxx-ada-profile-formal-type-names/): A C++ formal parameter can hide a type used later in the generated Ada subprogram profile, causing GNAT to reject the binding. Status: accepted. - [C++ Ada qualified method names](https://gnat-patches.flyology.org/bundles/cxx-ada-qualified-method-names/): The C++ Ada spec dumper emits colliding names for cv/ref-qualified methods and for copy/move assignment operators. Status: accepted. - [C++ Ada template nested types](https://gnat-patches.flyology.org/bundles/cxx-ada-template-nested-types/): Concrete C++ class-template packages reference anonymous array field types without declaring them in the generated Ada specification. Status: accepted. - [C++ Ada template-instance qualification](https://gnat-patches.flyology.org/bundles/cxx-ada-template-qualification/): The C++ Ada spec dumper drops the generated package qualifier from references to concrete template instances, making specs with multiple instantiations ambiguous. Status: accepted. - [C++ Ada template record termination](https://gnat-patches.flyology.org/bundles/cxx-ada-template-record-termination/): The C++ Ada spec dumper omits the terminating semicolon from trivial record declarations emitted for concrete class-template instances. Status: accepted. - [C++ Ada machine vector types](https://gnat-patches.flyology.org/bundles/cxx-ada-vector-types/): Fixed-size C++ vector typedefs and signatures are emitted as invalid placeholders, with no usable Ada machine type or calling convention. Status: accepted. - [C++ Ada virtual-diamond base storage](https://gnat-patches.flyology.org/bundles/cxx-ada-virtual-diamond-layout/): The C++ Ada mapper uses complete virtual-base class types for shortened direct base subobjects in a virtual diamond. Status: staged. - [C++ Ada virtual-inheritance layout](https://gnat-patches.flyology.org/bundles/cxx-ada-virtual-inheritance-layout/): The C++ Ada mapper drops the size, alignment, and component positions of classes with virtual bases. Status: staged. - [C++ Ada visible type/method names](https://gnat-patches.flyology.org/bundles/cxx-ada-visible-type-method-names/): A C++ method can collide with a type made use-visible from another generated class package, making later Ada profiles ambiguous. Status: accepted. - [Boxed aggregate in a predicated conditional expression](https://gnat-patches.flyology.org/bundles/predicate-conditional-aggregate-box/): Relocating a delayed conditional expression into a reference for a predicate check leaves its boxed aggregates unexpanded. Status: accepted. - [Protected Duration validity checks](https://gnat-patches.flyology.org/bundles/protected-duration-validity/): Automatically selected lock-free protected bodies retain invalid Duration validity checks. Status: accepted. - [Storage-model component actuals](https://gnat-patches.flyology.org/bundles/storage-model-actuals/): Selected and indexed actuals rooted at Designated_Storage_Model dereferences bypass Copy_From and Copy_To. Status: accepted. ## Panels - [C++ to Ada specification feature panel](https://gnat-patches.flyology.org/panels/cxx-ada-spec/): This panel turns exploratory g++ -fdump-ada-spec observations into repeatable evidence. It separates three outcomes that need different treatment: ## JSON Every resource is generated from the repository's TOML manifests and is served with Access-Control-Allow-Origin: *. `https://gnat-patches.flyology.org/patchsets/.json` is one patchset, `https://gnat-patches.flyology.org/bundles/.json` is one bundle, and `https://gnat-patches.flyology.org/panels/.json` is one coverage panel. A patchset target carries `bundles`, `control_tests`, and `staged_bundles`. A bundle in `bundles` is patched on that compiler. A bundle in `control_tests` is not patched there: that release does not have the defect, and the bundle's regression runs against the unpatched compiler as a control. A bundle in `staged_bundles` is held back, and no patched run makes a claim about it. A bundle's `roles` field is that relationship inverted: `roles[patchset][major]` gives the role and, when the role is patched, the patch variant that applies. `release` is null when no toolchain release carries that patchset for that compiler; otherwise `alire_crate` and `alire_version` give the exact Alire selection and `state` is `published` or `prerelease`. `publication_checked` reports whether release facts were read at build time; when it is false the site makes no claim about what is installable. ## Optional - [Source repository](https://github.com/flyology-ada/gnat-patches): Manifests, patches, tests, and the site generator.