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-filejson-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_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.
  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-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).
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.