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.
std::cout
, std::cin
, etc. is now done
inside the standard library, instead of in every source file that
includes the <iostream>
header. This change
improves the start-up performance of C++ programs, but it means that
code compiled with GCC 13.1 will crash if the correct version of
libstdc++.so
is not used at run time. See the
documentation
about using the right libstdc++.so
at run time.
Future GCC releases will mitigate the problem so that the program
cannot be run at all with an older libstdc++.so
.
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-file
json
-prefixed variants refer to GCC's own JSON diagnostic format.
-fharden-compares
and -fharden-conditional-branches
to verify compares
and conditional branches, to detect some power-deprivation
hardware attacks, using reversed conditions.
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_unqual
alignas
, alignof
, bool
,
false
, static_assert
, thread_local
,
true
noreturn
attribute__STDC_VERSION_*_H__
header version macrosATOMIC_VAR_INIT
unreachable
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.
std::tuple
is
now available for freestanding compilation. The freestanding subset
contains all the components made freestanding by
P1642,
but libstdc++ adds more components to the freestanding subset,
such as std::array
and std::string_view
.
Additionally, libstdc++ now respects the -ffreestanding
compiler option and so it is not necessary to build a separate
freestanding installation of libstdc++. Compiling with
-ffreestanding
will restrict the available features to
the freestanding subset, even if libstdc++ was built as a full, hosted
implementation.
<* 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 instead
of __bfloat16
which is typedef for short.
__bf16
is now part of the x86 psABI. Users need to adjust their
AVX512BF16-related source code when upgrading to GCC 13.
-mamx-complex
compiler switch.
-mamx-fp16
compiler switch.
-mavxifma
compiler switch.
-mavxneconvert
compiler switch.
-mavxvnniint8
compiler switch.
-mcmpccxadd
compiler switch.
-mprefetchi
compiler switch.
-mraoint
compiler switch.
-march=raptorlake
.
Raptor Lake is based on Alder Lake.
-march=meteorlake
.
Meteor Lake is based on Alder Lake.
-march=sierraforest
.
Based on ISA extensions enabled on Alder Lake, the switch further enables
the AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT8, CMPccXADD, ENQCMD and UINTR
ISA extensions.
-march=grandridge
.
Grand Ridge is based on Sierra Forest.
-march=emeraldrapids
.
Emerald Rapids is based on Sapphire Rapids.
-march=graniterapids
.
Based on Sapphire Rapids, the switch further enables the AMX-FP16 and
PREFETCHI ISA extensions.
-march=graniterapids-d
.
Based on Granite Rapids, the switch further enables the 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
).win32
thread model has
been reimplemented using direct Win32 API calls, except for the Objective-C
specific subset. It requires Windows XP/Server 2003 or later. The new
implementation also adds the support needed for the C++11 threads, using
again direct Win32 API calls; this additional layer requires Windows
Vista/Server 2008 or later. It is recommended to use a recent version of
MinGW-W64 in conjunction with the win32
thread model.
-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-check
along 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_list
This 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).
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 13.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 13.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
libstdc++exp.a
library now includes all the Filesystem TS
symbols from the libstdc++fs.a
library,
and the experimental symbols for the C++23 std::stacktrace
class from the libstdc++_libbacktrace.a
library.
This means that -lstdc++exp
is the only library needed for
all experimental libstdc++ features.
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 2024-05-25.