Release of the GCC 13 compiler suite

After a year of development, the release of the free GCC 13.1 compiler suite has been released, the first significant release in the new GCC 13.x branch. Under the new release numbering scheme, version 13.0 was used during development, and shortly before the release of GCC 13.1, the GCC 14.0 branch was already forked, from which the next significant release of GCC 14.1 will be formed.

Major changes:

  • The GCC adopted a frontend for building programs in the Modula-2 programming language. It supports building code that conforms to the PIM2, PIM3, and PIM4 dialects, as well as the accepted ISO standard for that language.
  • A frontend with the implementation of the Rust language compiler prepared by the gccrs project (GCC Rust) has been added to the GCC source tree. In the current view, the forntend is marked as experimental and disabled by default. Once the frontend is ready (expected in the next release), the standard GCC toolkit can be used to compile Rust programs without the need to install the rustc compiler built using LLVM developments.
  • Link-in-Step Optimization (LTO) adds support for a job server (jobserver) maintained by the GNU make project to optimize parallel build execution across multiple threads. In GCC, the jobserver is used to parallelize work during LTO optimization in the context of the entire program (WPA, Whole-program Analysis). Named pipes (--jobserver-style=fifo) are used by default to communicate with the jobserver.
  • The static analyzer (-fanalyzer) offers 20 new diagnostic checks, including "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite-recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • The ability to output diagnostics in SARIF format based on JSON has been implemented. The new format can be used to get static analysis results (GCC -fanalyzer), as well as to get information about warnings and errors. Enabling is done with the option "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", where options with "json" result in output in a GCC-specific variant of the JSON format.
  • Implemented some features defined in the C23 C standard, such as the nullptr constant for defining null pointers, making it easier to use lists with a variable number of arguments (variadic), extending the capabilities of enums, the noreturn attribute, allowing the use of constexpr and auto when defining objects, the typeof and typeof_unqual, new keywords alignas, alignof, bool, false, static_assert, thread_local and true, allowing empty parentheses on initialization.
  • Implemented some features defined in the C++23 standard, such as the ability to place marks at the end of compound expressions, compatibility with the char8_t type, the #warning preprocessor directive, delimited by (\u{}, \o{}, \x{}), and named ('\N{LATIN CAPITAL LETTER A}') escape sequences, static operator(), static operator[], equality operator within expressions, exception of some restrictions on the use of constexpr, support for UTF-8 in source texts.
  • libstdc++ has improved experimental support for C++20 and C++23 standards, such as adding header file support and std::format, extended header file capabilities , additional floating point types added, header files implemented And .
  • Added new function attributes to document that a file descriptor is passed in an integer variable: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", and "__attribute__((fd_arg_write(N))) ". The specified attributes can be used in a static analyzer (-fanalyzer) to detect incorrect work with file descriptors.
  • A new attribute "__attribute__((assume(EXPR)))" has been added, with which you can tell the compiler that the expression is true and the compiler can use this fact without evaluating the expression.
  • Added "-fstrict-flex-arrays=[level]" flag to select behavior when processing a flexible array element in structures (Flexible Array Members, an array of indefinite size at the end of the structure, for example, "int b[]").
  • Added "-Wenum-int-mismatch" flag to issue warnings if there is a mismatch between an enumerated type and an integer type.
  • The Fortran front-end has full support for finalization.
  • Support for generic functions and types (generics) has been added to the front end for the Go language, and compatibility with packages for the Go 1.18 language has been ensured.
  • AArch64 backend supports CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3), and Arm Neoverse V2 (neoverse -v2). Support for "armv9.1-a", "armv9.2-a", and "armv9.3-a" arguments has been added to the "-march=" option. Added support for FEAT_LRCPC, FEAT_CSSC and FEAT_LSE2 processor extensions.
  • Support for STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c), and Arm Cortex-M85 (cortex-m85) CPUs has been added to the ARM architecture backend.
  • Support for Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, and AMD Zen 86 (znver4) processors has been added to the x4 backend. The AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT, and AMX-COMPLEX instruction set architecture extensions proposed in Intel processors have been implemented. For C and C++ on systems with SSE2, the __bf16 type is provided.
  • The code generation backend for AMD Radeon GPUs (GCN) implements the ability to use AMD Instinct MI200 accelerators to improve OpenMP/OpenACC performance. Improved vectorization using SIMD instructions.
  • Significantly expanded backend capabilities for the LoongArch platform.
  • Added support for CPU T-Head's XuanTie C906 (thead-c906) in the RISC-V backend. Implemented support for vector handlers defined in the RISC-V Vector Extension Intrinsic 0.11 specification. Added support for 30 RISC-V specification extensions.
  • When generating shared objects with the "-shared" option, startup code is no longer added after adding a floating point environment if the "-Ofast", "-ffast-math", or "-funsafe-math-optimizations" optimizations are enabled.
  • Support for the DWARF debugging format is implemented in almost all configurations.
  • Added "-gz=zstd" option to compress debug information using the Zstandard algorithm. Removed support for the deprecated debug information compression mode "-gz=zlib-gnu".
  • Initial support for OpenMP 5.2 (Open Multi-Processing) has been added and implementation of the OpenMP 5.0 and 5.1 standards has continued, defining APIs and methods for applying parallel programming methods on multi-core and hybrid (CPU + GPU / DSP) systems with shared memory and vectorization units (SIMD).
  • Deprecated support for the legacy STABS debug information storage format (enabled with the -gstabs and -gxcoff options), created in the 1980s and used in the dbx debugger.
  • Deprecated support for Solaris 11.3 (code to support this platform will be removed in a future release).

Source: opennet.ru

Add a comment