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.