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.
cr16-elf, tilegx*-linux, tilepro*-linux,
hppa[12]*-*-hpux10*, hppa[12]*-*-hpux11*
and m32c-rtems configurations has been removed.*-*-solaris2.11.3) has been
declared obsolete. The next release of GCC will have corresponding
code permanently removed. Details can be found in
the
announcement.
-gstabs and -gxcoff options) has been removed.
(This means the dbx debugger is no longer
supported, either.)-gz=zlib-gnu was removed
and the option is ignored right now.-Warray-bounds=2
will no longer issue warnings for out of
bounds accesses to trailing struct members of one-element array type
anymore. Instead it diagnoses accesses to trailing arrays according to
-fstrict-flex-arrays. -fanalyzer
is still only suitable for analyzing C code.
In particular, using it on C++ is unlikely to give meaningful output.-mcpu=iwmmxt, has been deprecated and will be removed in a
future release. This includes support for the
iWMMXt built-in functions.
requires handling has been improved and
all clauses are now accepted. If a requirement cannot be fulfilled for
an accessible device, this device is excluded from the list of
available devices. This may imply that the only device left is the host
(the initial device).
In particular, unified_address and
unified_shared_memory are unsupported by all non-host
devices.
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. The assume and
assumes directives, the begin/end declare target
syntax in C/C++ and device-specific ICV settings with environment variables
are now supported.firstprivate and allocate clauses on the
scope construct; the OpenMP 5.2 syntax of the
linear clause; 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. Also added have been the
omp_in_explicit_task routine and the doacross
clause as alias for depend with
source/sink modifier.
_ALL suffix to the device-scope environment variables
added in Technical Report (TR11) is already handled.
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.
-gz=zstd has been added.--jobserver-style=fifo)
by default.-Ofast, -ffast-math and -funsafe-math-optimizations
will no longer add startup code to alter the floating-point environment
when producing a shared object with -shared.
-fanalyzer),
but it can also be used to capture other GCC warnings and errors in a
machine-readable format.
Specifically, the -fdiagnostics-format=
option has been extended to support these new values:
-fdiagnostics-format=sarif-stderr-fdiagnostics-format=sarif-file-fdiagnostics-format=json-stderr, a synonym for the
existing -fdiagnostics-format=json-fdiagnostics-format=json-filejson-prefixed variants refer to GCC's own JSON diagnostic format.
GNAT.Binary_Search.SPARK_Mode=>Auto is now accepted. Contract analysis has been further improved.-Wxor-used-as-pow
warns about uses of ^, the exclusive or operator,
where it appears the user meant exponentiation
(PR90885)int arguments that are file descriptors:
These are used by
-fanalyzer
to detect misuses of file descriptors.
__attribute__((assume(EXPR)));
-fstrict-flex-arrays
to control which array members are treated as flexible arrays.
auto)constexpr specifier for object definitionstypeof (previously supported as an extension)
and typeof_unqualalignas, alignof, bool,
false, static_assert, thread_local,
truenoreturn attribute__STDC_VERSION_*_H__ header version macrosATOMIC_VAR_INITunreachable macro
in <stddef.h>printf and scanf format checking
with -Wformat for %wN
and %wfN format length modifiers-std=c2x -Wpedantic.-Wenum-int-mismatch
warns about mismatches between an enumerated type and an integer type
(PR105131)-std=c++17, where it
defaults to -fexcess-precision=standard, while in GNU
standard modes like -std=gnu++20 it defaults to
-fexcess-precision=fast. The option mainly affects
IA-32/x86-64 using x87 math and in some cases on Motorola 68000,
where float and double expressions
are evaluated in long double precision and S/390, System z,
IBM z Systems where float expressions are evaluated in
double precision. Also, on several architectures where
std::float16_t or std::bfloat16_t types
are supported those are evaluated in float precision.
-fexcess-precision=fast restores previous behavior.
#warning
(PR106646)
char8_t
Compatibility and Portability Fix
(PR106656)
operator()
(PR106651)
-Wself-move
warns when a value is moved to itself with std::move
(PR81159)-Wdangling-reference
warns when a reference is bound to a temporary whose lifetime
has ended
(PR106393)-Wpessimizing-move
and -Wredundant-move
warnings have been extended to warn in more contexts.-nostdlib++
option has been added, to enable linking with g++
without implicitly linking in the C++ standard library.<format> header and std::format.std::chrono::utc_clock and other clocks, time zones,
and std::format support in the <chrono>
header.
<ranges> header:
views::zip, views::zip_transform,
views::adjacent, views::adjacent_transform
views::pairwise, views::slide,
views::chunk, views::chunk_by,
views::repeat, views::chunk_by,
views::cartesian_product, views::as_rvalue,
views::enumerate, views::as_const.
<algorithm> header:
ranges::contains, ranges::contains_subrange,
ranges::iota, ranges::find_last,
ranges::find_last_if, ranges::find_last_if_not,
ranges::fold_left, ranges::fold_left_first,
ranges::fold_right, ranges::fold_right_last,
ranges::fold_left_with_iter,
ranges::fold_left_first_with_iter.
std::expected.std::bitset, std::to_chars
and std::from_chars.
<experimental/scope> header
from v3 of the Library Fundamentals Technical Specification.
<experimental/synchronized_value>
header from v2 of the Concurrency Technical Specification.
<* noreturn *> attribute is supported
with the -Wreturn-type
option.libbid library.-mcpu and
-mtune options (GCC identifiers in parentheses).
ampere1a).cortex-a715).cortex-x1c).cortex-x3).neoverse-v2).armv9.1-a, armv9.2-a and
armv9.3-a arguments to the -march= option.FEAT_LRCPC feature is now supported by generating the
LDAPR instructions for C and C++ atomic loads with an
acquire memory model. This is enabled when compiling with the
+rcpc extension to -march or a CPU target that
supports this feature.FEAT_CSSC feature from the 2022 Arm Architecture
extensions is supported through the +cssc extension option.
When enabled, scalar operations like integer minimum, maximum, absolute
value, count trailing zeroes (__builtin_ctz), population
count (__builtin_popcount) can be implemented in a
single instruction.FEAT_LSE2 feature is now supported through
libatomic and provides lockless 16-byte atomics on systems
that implement it.gfx90a) has been added.-mcpu and
-mtune options (GCC identifiers in parentheses).
star-mc1).cortex-x1c).cortex-m85).-mbranch-protection= option.
__bf16 type is supported on
x86 systems with SSE2 and above enabled.
__bf16 type for AVX512BF16 intrinsics. Previously
we use __bfloat16 which is typedef of short. Now we introduced real
__bf16 type to x86 psABI. Users need to adjust their
AVX512BF16-related source code when upgrading GCC12 to GCC13.
-mavxifma
compiler switch.
-mavxvnniint8
compiler switch.
-mavxneconvert compiler switch.
-mcmpccxadd
compiler switch.
-mamx-fp16
compiler switch.
-mprefetchi
compiler switch.
-mraoint
compiler switch.
-mamx-complex
compiler switch.
-march=raptorlake.
Raptor Lake is based on Alder Lake.
-march=meteorlake.
Meteor Lake is based on Alder Lake.
-march=sierraforest.
The switch enables the AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT and
CMPccXADD ISA extensions.
-march=grandridge.
The switch enables the AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD
and RAO-INT ISA extensions.
-march=emeraldrapids.
Emerald Rapids is based on Sapphire Rapids.
-march=graniterapids.
The switch enables the AMX-FP16, PREFETCHI and AMX-COMPLEX ISA extensions.
znver4 core
via -march=znver4. The switch makes GCC consider
using 512 bit vectors when auto-vectorizing.
-mexplicit-relocs decides whether
to use the assembler relocation operator when dealing with symbolic addresses.
It is enabled by default if a compatible assembler (binutils 2.40 or later)
is present at GCC build time.
-mdirect-extern-access can be used
to prevent accessing external symbols through GOT.
model
has been added.
rint and copysign mathematical builtins
(and their float variants) are now implemented as inline LoongArch intrinsics.
lrint, logb, scalbln,
scalbn and ldexp mathematical builtins (and their
float variants) are now implemented as inline LoongArch intrinsics when using
-fno-math-errno.
lceil and lfloor mathematical builtins
(and their float variants) are now implemented as inline LoongArch intrinsics
when using -ffp-int-builtin-inexact.
libvtv now supports LoongArch.libitm now supports LoongArch.
-march option can be now changed when building GCC using the
--with-arch= configure option. GCC's target libraries
are then build both with sm_30 and the specified target
architecture. If not specified, GCC defaults to sm_30.
-mcpu
option (GCC identifiers in parentheses).
thead-c906).-Wanalyzer-allocation-size-Wanalyzer-deref-before-check-Wanalyzer-exposure-through-uninit-copy-Wanalyzer-fd-access-mode-mismatch-Wanalyzer-fd-double-close-Wanalyzer-fd-leak-Wanalyzer-fd-phase-mismatch
(e.g. calling accept on a socket before calling
listen on it)-Wanalyzer-fd-type-mismatch
(e.g. using a stream socket operation on a datagram socket)-Wanalyzer-fd-use-after-close-Wanalyzer-fd-use-without-checkalong with special-casing handling of the behavior of
open, close, creat,
dup, dup2, dup3,
pipe, pipe2, read,
and write.
-Wanalyzer-imprecise-fp-arithmetic-Wanalyzer-infinite-recursion-Wanalyzer-jump-through-null-Wanalyzer-out-of-bounds-Wanalyzer-putenv-of-auto-var-Wanalyzer-tainted-assertion<stdarg.h>:
-Wanalyzer-va-list-leak for complaining about missing va_end after a va_start or va_copy-Wanalyzer-va-list-use-after-va-end for complaining about va_arg or va_copy used on a va_list that's had va_end called on it-Wanalyzer-va-arg-type-mismatch for type-checking of va_arg usage in interprocedural execution paths against the types of the parameters that were actually passed to the variadic call-Wanalyzer-va-list-exhausted for complaining in interprocedural execution paths if va_arg is used too many times on a va_listThis is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 13.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
Copyright (C) Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
These pages are maintained by the GCC team. Last modified 2023-04-26.