GCC 13 Release Series

Changes, New Features, and Fixes#

This page is a “brief” summary of some of the huge number of improvements in GCC 13. You may also want to check out our Porting to GCC 13 page and the full GCC documentation.

Note: GCC 13 has not been released yet, so this document is a work-in-progress.

Caveats#

  • The support for the cr16-elf, tilegx*-linux, tilepro*-linux, hppa[12]*-*-hpux10*, hppa[12]*-*-hpux11* and m32c-rtems configurations has been removed.

  • Support for emitting the STABS debugging format (including the -gstabs and -gxcoff options) has been removed. (This means the dbx debugger is no longer supported, either.)

  • Legacy debug info compression option -gz=zlib-gnu was removed and the option is ignored right now.

  • New debug info compression option value -gz=zstd has been added.

General Improvements#

  • OpenMP

    • Reverse offload is now supported and the all clauses to the requires directive are now accepted; however, the requires_offload, unified_address and unified_shared_memory clauses cause that the only available device is the initial device (the host).

    • The following OpenMP 5.1 features have been added: the omp_all_memory reserved locator, the inoutset modifier to the depend clause, the nowait clause for the taskwait directive and the omp_target_is_accessible, omp_target_memcpy_async, omp_target_memcpy_rect_async and omp_get_mapped_ptr API routines. Fortran now supports non-rectangular loop nests, which were added for C/C++ in GCC 11.

    • Initial support for OpenMP 5.2 features have been added: Support for firstprivate and allocate clauses on the scope construct and the OpenMP 5.2 syntax of the linear clause; the new enum/constants omp_initial_device and omp_invalid_device; and optionally omitting the map-type in target enter/exit data. The enter clause (as alias for to) has been added to the declare target directive.

    • For user defined allocators requesting high bandwidth or large capacity memspaces or interleaved partitioning, the memkind library is used, if available at runtime.

  • AddressSanitizer defaults to detect_stack_use_after_return=1 on GNU/Linux targets. For compatibility, it can be disabled with env ASAN_OPTIONS=detect_stack_use_after_return=0.

  • Link-time optimization improvements:

    • LTO supports the newly added jobserver of GNU make jobserver that uses named pipes (--jobserver-style=fifo) by default.

    • If make’s jobserver is active, parallel LTO WPA streaming communicates with it and thus avoids system overcommitting.

New Languages and Language specific improvements#

C#

  • Several C23 features have been implemented:

    • N3042, Introduce the nullptr constant

    • Support for empty initializer braces

  • New warnings:

    • -Wenum-int-mismatch warns about mismatches between an enumerated type and an integer type (PR105131)

C++#

  • Several C++23 features have been implemented:

  • New warnings:

    • -Wself-move warns when a value is moved to itself with std::move (PR81159)

  • The -Wpessimizing-move and -Wredundant-move warnings have been extended to warn in more contexts.

Runtime Library (libstdc++)#

  • Improved experimental support for C++23, including:

    • Additions to the <ranges> header: views::zip, views::zip_transform, views::adjacent, views::adjacent_transform views::pairwise, views::slide, views::chunk, views::chunk_by.

  • Support for the <experimental/scope> header from v3 of the Library Fundamentals Technical Specification.

New Targets and Target Specific Improvements#

AMD Radeon (GCN)#

arm#

  • The STAR-MC1 CPU is now supported through the star-mc1 argument to the -mcpu and -mtune options.

IA-32/x86-64#

  • For both C and C++ the __bf16 type is supported on x86 systems with SSE2 and above enabled.

NVPTX#

Operating Systems#

Other significant improvements#