After a year of development, GCC 16.1 has been released, marking the first significant release in the new GCC 16.x branch. Following the release numbering scheme, version 16.0 was utilized during development, with GCC 17.0 branching off shortly before the release of GCC 16.1, laying the foundation for the upcoming GCC 17.1 release.
Main changes in GCC 16.1 include:
- The default mode for the C++ language has been updated to utilize the C++20 standard (GNU dialect C++20, -std=gnu++20) instead of C++17. The C++20 implementation in the standard library is now considered stable.
- An experimental frontend ga68 has been added for compiling programs in the Algol 68 programming language.
- Diagnostic information can now be displayed in HTML format. Additionally, extended program execution details are included when displaying diagnostics in the JSON-based SARIF format (support for “-fdiagnostics-format=json” has been removed).
- Optimizations at the linking stage (LTO, Link-Time Optimization) have been expanded. A new option “-flto-toplevel-asm-heuristics” has been introduced to enhance code optimization with assembly language inserts. The speculative devirtualization technique (-fdevirtualize-speculatively) is no longer restricted to converting virtual methods and can now be used for any indirect function calls.
- Support for vectorization of loops with unknown iteration counts at compilation has been incorporated. Efficiencies in handling early loop exits (e.g., via break) have been improved.
- Experimental support for various features of the newly approved C++26 standard has been added. Notably, the implementation of Reflection (-freflection) has been included, allowing tracking and modification of program elements during compilation. New operators “
/Reports, release notes, official announcements.