This file contains information about GCC releases which has been generated
automatically from the online release notes.  It covers releases of GCC
(and the former EGCS project) since EGCS 1.0, on the line of development
that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
see ONEWS.

======================================================================
http://gcc.gnu.org/gcc-11/index.html

                             GCC 11 Release Series

   April 21, 2022

   The GCC developers are pleased to announce the release of GCC 11.3.

   This release is a bug-fix release, containing fixes for regressions in
   GCC 11.2 relative to previous releases of GCC.

Release History

   GCC 11.3
          April 21, 2022 ([1]changes, [2]documentation)

   GCC 11.2
          July 28, 2021 ([3]changes, [4]documentation)

   GCC 11.1
          April 27, 2021 ([5]changes, [6]documentation)

References and Acknowledgements

   GCC used to stand for the GNU C Compiler, but since the compiler
   supports several other languages aside from C, it now stands for the
   GNU Compiler Collection.

   A list of [7]successful builds is updated as new information becomes
   available.

   The GCC developers would like to thank the numerous people that have
   contributed new features, improvements, bug fixes, and other changes as
   well as test results to GCC. This [8]amazing group of volunteers is
   what makes GCC successful.

   For additional information about GCC please refer to the [9]GCC project
   web site or contact the [10]GCC development mailing list.

   To obtain GCC please use [11]our mirror sites or [12]our version
   control system.


    For questions related to the use of GCC, please consult these web
    pages and the [13]GCC manuals. If that fails, the
    [14]gcc-help@gcc.gnu.org mailing list might help. Comments on these
    web pages and the development of GCC are welcome on our developer
    list at [15]gcc@gcc.gnu.org. All of [16]our lists have public
    archives.

   Copyright (C) [17]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 [18]maintained by the GCC team. Last modified
   2022-04-21[19].

References

   1. http://gcc.gnu.org/gcc-11/changes.html
   2. http://gcc.gnu.org/onlinedocs/11.3.0/
   3. http://gcc.gnu.org/gcc-11/changes.html
   4. http://gcc.gnu.org/onlinedocs/11.2.0/
   5. http://gcc.gnu.org/gcc-11/changes.html
   6. http://gcc.gnu.org/onlinedocs/11.1.0/
   7. http://gcc.gnu.org/gcc-11/buildstat.html
   8. http://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
   9. http://gcc.gnu.org/index.html
  10. mailto:gcc@gcc.gnu.org
  11. http://gcc.gnu.org/mirrors.html
  12. http://gcc.gnu.org/git.html
  13. https://gcc.gnu.org/onlinedocs/
  14. mailto:gcc-help@gcc.gnu.org
  15. mailto:gcc@gcc.gnu.org
  16. https://gcc.gnu.org/lists.html
  17. https://www.fsf.org/
  18. https://gcc.gnu.org/about.html
  19. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-11/changes.html

                             GCC 11 Release Series
                        Changes, New Features, and Fixes

   This page is a "brief" summary of some of the huge number of
   improvements in GCC 11. You may also want to check out our [1]Porting
   to GCC 11 page and the [2]full GCC documentation.

Caveats

     * The default mode for C++ is now -std=gnu++17 instead of
       -std=gnu++14. Note that [3]C++17 changes to template template
       parameter matching can be disabled independently of other features
       with -fno-new-ttp-matching.
     * When building GCC itself, the host compiler must now support C++11,
       rather than C++98. In particular bootstrapping GCC 11 using an
       older version of GCC requires a binary of GCC 4.8 or later, rather
       than of GCC 3.4 or later as was the case for bootstrapping GCC 10.
     * Naming and location of auxiliary and dump output files changed. If
       you compile multiple input files in a single command, if you enable
       Link Time Optimization, or if you use -dumpbase, -dumpdir,
       -save-temps=*, and you expect any file other than the primary
       output file(s) to be created as a side effect, watch out for
       improvements and a few surprises. See [4]the patch, particularly
       its textual description, for more details about the changes.
     * -gsplit-dwarf no longer enables debug info generation on its own
       but requires a separate -g for this.
     * The libstdc++ configure option --enable-cheaders=c_std is
       deprecated and will be removed in a future release. It should be
       possible to use --enable-cheaders=c_global (the default) with no
       change in behaviour.
     * The front end for compiling BRIG format of Heterogeneous System
       Architecture Intermediate Language (HSAIL) has been deprecated and
       will likely be removed in a future release.
     * Some short options of the gcov tool have been renamed: -i to -j and
       -j to -H.

General Improvements

     * [5]ThreadSanitizer improvements to support alternative runtimes and
       environments. The [6]Linux Kernel Concurrency Sanitizer (KCSAN) is
       now supported.
          + Add --param tsan-distinguish-volatile to optionally emit
            instrumentation distinguishing volatile accesses.
          + Add --param tsan-instrument-func-entry-exit to optionally
            control if function entries and exits should be instrumented.
     * In previous releases of GCC, the "column numbers" emitted in
       diagnostics were actually a count of bytes from the start of the
       source line. This could be problematic, both because of:
          + multibyte characters (requiring more than one byte to encode),
            and
          + multicolumn characters (requiring more than one column to
            display in a monospace font)
       For example, the character p ("GREEK SMALL LETTER PI (U+03C0)")
       occupies one column, and its UTF-8 encoding requires two bytes; the
       character &#x1F642; ("SLIGHTLY SMILING FACE (U+1F642)") occupies
       two columns, and its UTF-8 encoding requires four bytes.
       In GCC 11 the column numbers default to being column numbers,
       respecting multi-column characters. The old behavior can be
       restored using a new option [7]-fdiagnostics-column-unit=byte.
       There is also a new option [8]-fdiagnostics-column-origin=,
       allowing the pre-existing default of the left-hand column being
       column 1 to be overridden if desired (e.g. for 0-based columns).
       The output of [9]-fdiagnostics-format=json has been extended to
       supply both byte counts and column numbers for all source
       locations.
       Additionally, in previous releases of GCC, tab characters in the
       source would be emitted verbatim when quoting source code, but be
       prefixed with whitespace or line number information, leading to
       misalignments in the resulting output when compared with the actual
       source. Tab characters are now printed as an appropriate number of
       spaces, using the [10]-ftabstop option (which defaults to 8 spaces
       per tab stop).
     * Introduce [11]Hardware-assisted AddressSanitizer support. This
       sanitizer currently only works for the AArch64 target. It helps
       debug address problems similarly to [12]AddressSanitizer but is
       based on partial hardware assistance and provides probabilistic
       protection to use less RAM at run time. [13]Hardware-assisted
       AddressSanitizer is not production-ready for user space, and is
       provided mainly for use compiling the Linux Kernel.
       To use this sanitizer the command line arguments are:
          + -fsanitize=hwaddress to instrument userspace code.
          + -fsanitize=kernel-hwaddress to instrument kernel code.
     * For targets that produce DWARF debugging information GCC now
       defaults to [14]DWARF version 5 (with the exception of VxWorks and
       Darwin/Mac OS X which default to version 2 and AIX which defaults
       to version 4). This can produce up to 25% more compact debug
       information compared to earlier versions.
       To take full advantage of DWARF version 5 GCC needs to be built
       against binutils version 2.35.2 or higher. When GCC is built
       against earlier versions of binutils GCC will still emit DWARF
       version 5 for most debuginfo data, but will generate version 4
       debug line tables (even when explicitly given -gdwarf-5).
       The following debug information consumers can process DWARF version
       5:
          + GDB 8.0, or higher
          + valgrind 3.17.0
          + elfutils 0.172, or higher (for use with systemtap,
            dwarves/pahole, perf and libabigail)
          + dwz 0.14
       Programs embedding libbacktrace are urged to upgrade to the version
       shipping with GCC 11.
       To make GCC 11 generate an older DWARF version use -g together with
       -gdwarf-2, -gdwarf-3 or -gdwarf-4.
     * Vectorizer improvements:
          + The straight-line code vectorizer now considers the whole
            function when vectorizing and can handle opportunities
            crossing CFG merges and backedges.
     * A series of conditional expressions that compare the same variable
       can be transformed into a switch statement if each of them contains
       a comparison expression. Example:
        int IsHTMLWhitespace(int aChar) {
          return aChar == 0x0009 || aChar == 0x000A ||
                 aChar == 0x000C || aChar == 0x000D ||
                 aChar == 0x0020;
        }

       This statement can be transformed into a switch statement and then
       expanded into a bit-test.
     * New command-line options:
          + [15]-fbit-tests, enabled by default, can be used to enable or
            disable switch expansion using bit-tests.
     * Inter-procedural optimization improvements:
          + A new IPA-modref pass was added to track side effects of
            function calls and improve precision of points-to-analysis.
            The pass can be controlled by the [16]-fipa-modref option.
          + The identical code folding pass (controlled by [17]-fipa-icf)
            was significantly improved to increase the number of unified
            functions and to reduce compile-time memory use.
          + IPA-CP (Interprocedural constant propagation) heuristics
            improved its estimation of potential usefulness of known loop
            bounds and strides by taking the estimated frequency of these
            loops into account.
     * Link-time optimization improvements:
          + The LTO bytecode format was optimized for smaller object files
            and faster streaming.
          + Memory allocation of the linking stage was improved to reduce
            peak memory use.
     * Profile driven optimization improvements:
          + Using [18]-fprofile-values, was improved by tracking more
            target values for e.g. indirect calls.
          + GCOV data file format outputs smaller files by representing
            zero counters in a more compact way.

New Languages and Language specific improvements

     * GCC 11 adds support for non-rectangular loop nests in OpenMP
       constructs and the allocator routines of [19]OpenMP 5.0, including
       initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
       environment variable and the active-levels routines are now
       supported. For C/C++, the declare variant and map support has been
       extended. For Fortran, OpenMP 4.5 is now fully supported and OpenMP
       5.0 support has been extended, including the following features
       which were before only available in C and C++: order(concurrent),
       device_type, memorder-clauses for flush, lastprivate with
       conditional modifier, atomic construct and reduction clause
       extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
       target data without map clause, and limited support for the
       requires construct.
     * Version 2.6 of the [20]OpenACC specification continues to be
       maintained and improved in the C, C++ and Fortran compilers. See
       the [21]implementation status section on the OpenACC wiki page and
       the [22]run-time library documentation for further information.

  C family

     * New attributes:
          + The [23]no_stack_protector attribute has been added to mark
            functions which should not be instrumented with stack
            protection (-fstack-protector).
          + The existing [24]malloc attribute has been extended so that it
            can be used to identify allocator/deallocator API pairs. A
            pair of new [25]-Wmismatched-dealloc and
            [26]-Wmismatched-new-delete warnings will complain about
            mismatched calls, and [27]-Wfree-nonheap-object about
            deallocation calls with pointers not obtained from allocation
            functions. Additionally, the static analyzer will use these
            attributes when checking for leaks, double-frees,
            use-after-frees, and similar issues.
     * New warnings:
          + [28]-Wmismatched-dealloc, enabled by default, warns about
            calls to deallocation functions with pointers returned from
            mismatched allocation functions.
          + [29]-Wsizeof-array-div, enabled by -Wall, warns about
            divisions of two sizeof operators when the first one is
            applied to an array and the divisor does not equal the size of
            the array element.
          + [30]-Wstringop-overread, enabled by default, warns about calls
            to string functions reading past the end of the arrays passed
            to them as arguments. In prior GCC releases most instances of
            his warning are diagnosed by -Wstringop-overflow.
          + [31]-Wtsan, enabled by default, warns about unsupported
            features in ThreadSanitizer (currently
            std::atomic_thread_fence).
     * Enhancements to existing warnings:
          + [32]-Wfree-nonheap-object detects many more instances of calls
            to deallocation functions with pointers not returned from a
            dynamic memory allocation function.
          + [33]-Wmaybe-uninitialized diagnoses passing pointers or
            references to uninitialized memory to functions taking
            const-qualified arguments.
          + [34]-Wuninitialized detects reads from uninitialized
            dynamically allocated memory.
     * For ELF targets that support the GNU or FreeBSD OSABIs, the used
       attribute will now save the symbol declaration it is applied to
       from linker garbage collection.
       To support this behavior, used symbols that have not been placed in
       specific sections (e.g. with the section attribute, or the
       -f{function,data}-sections options) will be placed in new, unique
       sections.
       This functionality requires Binutils version 2.36 or later.

  C

     * Several new features from the upcoming C2X revision of the ISO C
       standard are supported with -std=c2x and -std=gnu2x. Some of these
       features are also supported as extensions when compiling for older
       language versions. In addition to the features listed, some
       features previously supported as extensions and now added to the C
       standard are enabled by default in C2X mode and not diagnosed with
       -std=c2x -Wpedantic.
          + The BOOL_MAX and BOOL_WIDTH macros are provided in <limits.h>.
          + As in C++, function definitions no longer need to give names
            for unused function parameters.
          + The expansions of the true and false macros in <stdbool.h>
            have changed so that they have type bool.
          + The [[nodiscard]] standard attribute is now supported.
          + The __has_c_attribute preprocessor operator is now supported.
          + Macros INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SNAN,
            DEC_INFINITY, DEC_NAN, and corresponding signaling NaN macros
            for _FloatN, _FloatNx and _DecimalN types, are provided in
            <float.h>. There are also corresponding built-in functions
            __builtin_nansdN for decimal signaling NaNs.
          + Macros FLT_IS_IEC_60559, DBL_IS_IEC_60559 and
            LDBL_IS_IEC_60559 are provided in <float.h>.
          + The feature test macro __STDC_WANT_IEC_60559_EXT__ is
            supported by <float.h>.
          + Labels may appear before declarations and at the end of a
            compound statement.
     * New warnings:
          + [35]-Warray-parameter, enabled by -Wall, warns about
            redeclarations of functions with ordinary array arguments
            declared using inconsistent forms. The warning also enables
            the detection of the likely out of bounds accesses in calls to
            such functions with smaller arrays.
          + [36]-Wvla-parameter, enabled by -Wall, warns redeclarations of
            functions with variable length array arguments declared using
            inconsistent forms or with mismatched bounds. The warning also
            enables the detection of the likely out of bounds accesses in
            calls to such functions with smaller arrays.

  C++

     * The default mode has been changed to -std=gnu++17.
     * Several C++20 features have been implemented:
          + the compiler now supports consteval virtual functions
          + P2082R1, Fixing CTAD for aggregates
          + P0593R6, Pseudo-destructors end object lifetimes
          + P1907R1, Inconsistencies with non-type template parameters
            (complete implementation)
          + P1975R0, Fixing the wording of parenthesized
            aggregate-initialization
          + P1009R2, Array size deduction in new-expressions
          + P1099R5, using enum
          + Modules, Requires -fmodules-ts and some aspects are
            incomplete. Refer to [37]C++ 20 Status
     * The C++ front end has experimental support for some of the upcoming
       C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
       or -std=gnu++2b flags, including
          + P0330R8, Literal Suffix for (signed) size_t.
       For a full list of new features, see [38]the C++ status page.
     * Several C++ Defect Reports have been resolved, e.g.:
          + DR 625, Use of auto as a template-argument
          + DR 1512, Pointer comparison vs qualification conversions
          + DR 1722, Should lambda to function pointer conversion function
            be noexcept?
          + DR 1914, Duplicate standard attributes
          + DR 2032, Default template-arguments of variable templates
          + DR 2289, Uniqueness of decomposition declaration names
          + DR 2237, Can a template-id name a constructor?
          + DR 2303, Partial ordering and recursive variadic inheritance
          + DR 2369, Ordering between constraints and substitution
          + DR 2450, braced-init-list as a template-argument
     * G++ now performs better access checking in templates ([39]PR41437).
     * reinterpret_casts in constexpr evaluation are now checked more
       completely ([40]PR95307).
     * The diagnostic for static_assert has been improved: the compiler
       now shows the expression including its template arguments (if there
       were any), and can point to the failing clause if the condition
       comprised of any logical AND operators ([41]PR97518).
     * New warnings:
          + [42]-Wctad-maybe-unsupported, disabled by default, warns about
            performing class template argument deduction on a type with no
            deduction guides.
          + [43]-Wrange-loop-construct, enabled by -Wall, warns when a
            range-based for-loop is creating unnecessary and expensive
            copies.
          + [44]-Wdeprecated-enum-enum-conversion, enabled by default in
            C++20, warns about deprecated arithmetic conversions on
            operands of enumeration types, as outlined in
            [depr.arith.conv.enum].
          + [45]-Wdeprecated-enum-float-conversion, enabled by default in
            C++20, warns about deprecated arithmetic conversions on
            operands where one is of enumeration type and the other is of
            a floating-point type, as outlined in [depr.arith.conv.enum].
          + [46]-Wmismatched-new-delete, enabled by -Wall, warns about
            calls to C++ operator delete with pointers returned from
            mismatched forms of operator new or from other mismatched
            allocation functions.
          + [47]-Wvexing-parse, enabled by default, warns about the most
            vexing parse rule: the cases when a declaration looks like a
            variable definition, but the C++ language requires it to be
            interpreted as a function declaration.
     * Enhancements to existing warnings:
          + [48]-Wnonnull considers the implicit this argument of every
            C++ nonstatic member function to have been implicitly declared
            with attribute nonnull and triggers warnings for calls where
            the pointer is null.

    Runtime Library (libstdc++)

     * Improved C++17 support, including:
          + std::from_chars and std::to_chars for floating-point types.
     * Improved experimental C++20 support, including:
          + Calendar additions to <chrono>. Thanks to Cassio Neri for
            optimizations.
          + std::bit_cast
          + std::source_location
          + Atomic wait and notify operations.
          + <barrier>, <latch>, and <semaphore>
          + <syncstream>
          + Efficient access to basic_stringbuf's buffer.
          + Heterogeneous lookup in unordered containers.
     * Experimental C++23 support, including:
          + contains member functions for strings, thanks to Paul Fee.
          + std::to_underlying, std::is_scoped_enum
     * Experimental support for Data-Parallel Types (simd) from the
       Parallelism 2 TS, thanks to Matthias Kretz.
     * Faster std::uniform_int_distribution, thanks to Daniel Lemire.

  D

     * New features:
          + A new bottom type typeof(*null) has been added to represent
            run-time errors and non-terminating functions. This also
            introduces a new standard alias for the type named noreturn,
            and is implicitly imported into every module.
          + Printf-like and scanf-like functions are now detected by
            prefixing them with pragma(printf) for printf-like functions
            or pragma(scanf) for scanf-like functions.
          + The __traits() expression now supports the extensions
            isDeprecated, isDisabled, isFuture, isModule, isPackage,
            child, isReturnOnStack, isZeroInit, getTargetInfo,
            getLocation, hasPostblit, isCopyable, getVisibility, and
            totype.
          + An expression-based contract syntax has been added to the
            language.
          + Function literals can now return a value by reference with the
            ref keyword.
          + A new syntax is available to declare aliases to function types
            using the alias syntax based on the assignment operator.
          + New types __c_complex_float, __c_complex_double,
            __c_complex_real, and __c_wchar_t have been added for
            interfacing with C and C++ code, and are available from the
            core.stdc.config module.
          + User-defined attributes can now be used to annotate enum
            members, alias declarations, and function parameters.
          + Templates alias parameters can now be instantiated with basic
            types such as int or void function().
          + The mixin construct can now be used as types in the form
            mixin(string) var.
          + The mixin construct can now take an argument list, same as
            pragma(msg).
     * New intrinsics:
          + Bitwise rotate intrinsics core.bitop.rol and core.bitop.ror
            have been added.
          + Byte swap intrinsic core.bitop.byteswap for swapping bytes in
            a 2-byte ushort has been added.
          + Math intrinsics available from core.math now have overloads
            for float and double types.
          + Volatile intrinsics core.volatile.volatileLoad and
            core.volatile.volatileStore have been moved from the
            core.bitop module.
     * New attributes:
          + The following GCC attributes are now recognized and available
            from the gcc.attributes module with short-hand aliases for
            convenience:
               o @attribute("alloc_size", arguments) or
                 @alloc_size(arguments).
               o @attribute("always_inline") or @always_inline.
               o @attribute("used") or @used.
               o @attribute("optimize", arguments) or
                 @optimize(arguments).
               o @attribute("cold") or @cold.
               o @attribute("noplt") or @noplt.
               o @attribute("target_clones", arguments) or
                 @target_clones(arguments).
               o @attribute("no_icf") or @no_icf.
               o @attribute("noipa") or @noipa.
               o @attribute("symver", arguments) or @symver(arguments).
          + New aliases have been added to gcc.attributes for
            compatibility with ldc.attributes.
               o The @allocSize(arguments) attribute is the same as
                 @alloc_size(arguments), but uses a 0-based index for
                 function arguments.
               o The @assumeUsed attribute is an alias for
                 @attribute("used").
               o The @fastmath attribute is an alias for
                 @optimize("Ofast").
               o The @naked attribute is an alias for @attribute("naked").
                 This attribute may not be available on all targets.
               o The @restrict attribute has been added to specify that a
                 function parameter is to be restrict-qualified in the C99
                 sense of the term.
               o The @optStrategy(strategy) attribute is an alias for
                 @optimize("O0") when the strategy is "none", otherwise
                 @optimize("Os") for the "optsize" and "minsize"
                 strategies.
               o The @polly attribute is an alias for
                 @optimize("loop-parallelize-all").
               o The @section(name) attribute is an alias for
                 @attribute("section", name).
               o The @target(arguments) attribute is an alias for
                 attribute("target", arguments).
               o The @weak attribute is an alias for @attribute("weak").
     * New language options:
          + -fweak-templates, added to control whether declarations that
            can be defined in multiple objects should be emitted as weak
            symbols. The default is to emit all symbols with extern
            linkage as weak, unless the target lacks support for weak
            symbols.
          + -Wdeprecated, this option is now enabled by default.
          + -Wextra, this option now turns on all warnings that are not
            part of the core D language front-end - -Waddress,
            -Wcast-result, -Wunknown-pragmas.
          + -Wvarargs, added to turn on warnings about questionable usage
            of the va_start intrinsic.
     * Deprecated and removed features:
          + Compiler-recognized attributes are now made available from the
            gcc.attributes module, the former module gcc.attribute has
            been deprecated and will be removed in a future release.
          + The @attribute("alias") attribute has been removed, as it had
            been superseded by pragma(mangle).
          + The @attribute("forceinline") attribute has been removed and
            renamed to @always_inline.
          + __vector types that are not supported in hardware are now
            rejected at compile-time. Previously all vector types were
            accepted by the compiler and emulated when target support was
            absent.
          + The extern(Pascal) linkage attribute has been removed.
          + The deprecation phase for -ftransition=import and
            -ftransition=checkimports is finished. These switches no
            longer have an effect and are now removed. Symbols that are
            not visible in a particular scope will no longer be found by
            the compiler.
          + It is now an error to use private variables selectively
            imported from other modules. Due to a bug, some imported
            private members were visible from other modules, violating the
            specification.
          + The -fweak compiler switch has been removed, as it existed
            only for testing.

  Fortran

     * Added DEPRECATED to !GCC$'s attributes directive.

  Go

     * GCC 11 provides a complete implementation of the Go 1.16.3 user
       packages.

libgccjit

     * libgccjit was marked as merely "Alpha" quality when [49]originally
       added in GCC 5. Given that we have maintained [50]API and ABI
       compatibility since then and it is in use by various projects, we
       have removed that caveat.
     * libgccjit can now be built for MinGW
     * The libgccjit API gained 10 new entry points:
          + [51]gcc_jit_global_set_initializer
          + 9 entrypoints for [52]directly embedding asm statements into a
            compile, analogous to inline asm in the C front end

New Targets and Target Specific Improvements

  AArch64 & arm

     * A number of new CPUs are supported through arguments to the -mcpu
       and -mtune options in both the arm and aarch64 backends (GCC
       identifiers in parentheses):
          + Arm Cortex-A78 (cortex-a78).
          + Arm Cortex-A78AE (cortex-a78ae).
          + Arm Cortex-A78C (cortex-a78c).
          + Arm Cortex-X1 (cortex-x1).
          + Arm Neoverse V1 (neoverse-v1).
          + Arm Neoverse N2 (neoverse-n2).
     * GCC can now auto-vectorize operations performing addition,
       subtraction, multiplication and the accumulate/subtract variants on
       complex numbers, taking advantage of the Advanced SIMD instructions
       in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
       and MVE (AArch32 M-profile) instruction sets.

  AArch64

     * In addition to the above, the following AArch64-only CPUs are now
       supported:
          + Fujitsu A64FX (a64fx).
          + Arm Cortex-R82 (cortex-r82).
     * The AArch64 Armv8-R architecture is now supported through the
       -march=armv8-r option.
     * Mitigation against the [53]Straight-line Speculation vulnerability
       is supported with the -mharden-sls= option. Please refer to the
       documentation for usage instructions.
     * The availability of Advanced SIMD intrinsics available through the
       arm_neon.h header is improved and GCC 11 supports the full set of
       intrinsics defined by ACLE Q3 2020.

  AMD Radeon (GCN)

     * Initial support for gfx908 GPUs has been added.

  arm

     * Initial auto-vectorization is now available when targeting the MVE
       instruction set.
     * GCC can now make use of the Low Overhead Branch instruction in
       Armv8.1-M to optimize loop counters and checks.
     * The -mcpu=cortex-m55 option now supports the extensions +nomve and
       +nomve.fp to control generation of MVE and MVE floating-point
       instructions.

  IA-32/x86-64

     * New ISA extension support for Intel TSXLDTRK was added to GCC.
       TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
       switch.
     * New ISA extension support for Intel SERIALIZE was added to GCC.
       SERIALIZE intrinsics are available via the -mserialize compiler
       switch.
     * New ISA extension support for Intel HRESET was added to GCC. HRESET
       intrinsics are available via the -mhreset compiler switch.
     * New ISA extension support for Intel UINTR was added to GCC. UINTR
       intrinsics are available via the -muintr compiler switch.
     * New ISA extension support for Intel KEYLOCKER was added to GCC.
       KEYLOCKER intrinsics are available via the -mkeylocker compiler
       switch.
     * New ISA extension support for Intel AMX-TILE, AMX-INT8, AMX-BF16
       was added to GCC. AMX-TILE, AMX-INT8, AMX-BF16 intrinsics are
       available via the -mamx-tile, -mamx-int8, -mamx-bf16 compiler
       switches.
     * New ISA extension support for Intel AVX-VNNI was added to GCC.
       AVX-VNNI intrinsics are available via the -mavxvnni compiler
       switch.
     * GCC now supports the Intel CPU named Sapphire Rapids through
       -march=sapphirerapids. The switch enables the MOVDIRI, MOVDIR64B,
       AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG,
       TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16, and AVX-VNNI ISA
       extensions.
     * GCC now supports the Intel CPU named Alderlake through
       -march=alderlake. The switch enables the CLDEMOTE, PTWRITE,
       WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI, and HRESET ISA extensions.
     * GCC now supports the Intel CPU named Rocketlake through
       -march=rocketlake. Rocket Lake is based on Icelake client and minus
       SGX.
     * GCC now supports AMD CPUs based on the znver3 core via
       -march=znver3.
     * GCC now supports micro-architecture levels defined in the x86-64
       psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.

  Nios II

     * The options -mcustom-insn=N no longer produce compiler warnings if
       the custom instruction is not generated due to missing optimization
       options such as -fno-math-errno, -ffinite-math-only, or
       -funsafe-math-optimizations. These warnings were not consistently
       emitted for all custom instructions.
     * The -mcustom-fpu-cfg=fph2 option has been added to enable the
       custom instructions supported by the Nios II Floating Point
       Hardware 2 Component.

  NVPTX

     * The -misa default has changed from sm_30 to sm_35.
     * The -m32 compiler switch has been removed.
     * The -msoft-stack-reserve-local format has been fixed. Previously,
       it accepted -msoft-stack-reserve-local<n>. It now accepts
       -msoft-stack-reserve-local=<n>.

  S/390, System z, IBM Z Systems

     * The behavior when compiling with -fexcess-precision=standard (e.g.,
       implied by -std=c99) on s390(x) targets can now be controlled at
       configure time with the flag --enable-s390-excess-float-precision.
       When enabled, GCC will maintain previous behavior and evaluate
       float expressions in double precision, which aligns with the
       definition of float_t as double. With the flag disabled, GCC will
       always evaluate float expressions in single precision. In native
       builds and cross compiles that have target libc headers, GCC will
       by default match the definition of float_t in the installed glibc.

  RISC-V

     * Support address sanitizer for RISC-V.
     * Support big-endian for RISC-V, thanks to Marcus Comstedt.
     * Implement new style of architecture extension test macros: each
       architecture extension has a corresponding feature test macro,
       which can be used to test its existence and version information.
     * Legacy architecture extension test macros like __riscv_atomic are
       deprecated, but will still be supported for at least 2 release
       cycles.
     * Support IFUNC for riscv*-*-linux*.
     * Add new option -misa-spec=* to control ISA spec version. This
       controls the default version of each extensions. It defaults to
       2.2.
     * Introduce the --with-multilib-generator configure time option. This
       allows for flexible config multi-lib settings. Its syntax is the
       same as RISC-V's multilib-generator.
     * Extend the sytax for multilib-generator, support expansion operator
       * to reduce the complexity of complicated multi-lib re-use rules.
     * Support -mcpu=* option aligned with RISC-V clang/LLVM. It sets the
       pipeline model and architecture extensions, like -mtune=* plus
       -march=*.
     * Support for TLS stack protector canary access, thanks to Cooper Qu.
     * Support __builtin_thread_pointer for RISC-V.
     * Introduce shorten_memrefs optimization, which reduces the code size
       for memory access, thanks to Craig Blackmore.

Operating Systems

  AIX

     * GCC for AIX can be built as a 64 bit application and the runtime is
       built as FAT libraries containing both 32 bit and 64 bit objects.
     * Support AIX Vector Extended ABI with -mabi=vec-extabi.
     * Thread-Local uninitiated data placed in local common section.
     * Use thread-safe access in ctype.
     * Link with libc128.a when long-double-128 enabled.

Improvements to Static Analyzer

     * The implementation of how program state is tracked within
       [54]-fanalyzer has been completely rewritten for GCC 11, fixing
       numerous bugs, and allowing for the analyzer to scale to larger C
       source files.
     * The analysis of allocations and deallocations has been generalized
       beyond malloc and free.
          + As preliminary work towards eventually supporting C++, the
            malloc/free checking will also check new/delete and
            new[]/delete[]. However, C++ is not yet properly supported by
            [55]-fanalyzer (for example, exception-handling is
            unimplemented).
          + As noted above, the existing [56]malloc attribute has been
            extended so that it can be used to identify
            allocator/deallocator API pairs. The analyzer will use these
            attributes when checking for leaks, double-frees,
            use-after-frees, and similar issues.
          + A new [57]-Wanalyzer-mismatching-deallocation warning has been
            added, covering such mismatches as using scalar delete rather
            vector delete[].
     * The analyzer has gained warnings
       [58]-Wanalyzer-shift-count-negative,
       [59]-Wanalyzer-shift-count-overflow, [60]-Wanalyzer-write-to-const,
       and [61]-Wanalyzer-write-to-string-literal, all enabled by default
       when [62]-fanalyzer is enabled.
     * The analyzer can now be extended by GCC plugins, allowing for
       domain-specific path-sensitive warnings. An example of using a
       [63]GCC plugin to check for misuses of CPython's global interpreter
       lock can be seen in the test suite
     * The analyzer has gained new debugging options
       [64]-fdump-analyzer-json and [65]-fno-analyzer-feasibility.

Other significant improvements

     * GCC has gained a new environment variable
       [66]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
       request machine-readable fix-it hints without needing to adjust
       build flags.

GCC 11.1

   This is the [67]list of problem reports (PRs) from GCC's bug tracking
   system that are known to be fixed in the 11.1 release. This list might
   not be complete (that is, it is possible that some PRs that have been
   fixed are not listed here).

GCC 11.2

   This is the [68]list of problem reports (PRs) from GCC's bug tracking
   system that are known to be fixed in the 11.2 release. This list might
   not be complete (that is, it is possible that some PRs that have been
   fixed are not listed here).

GCC 11.3

   This is the [69]list of problem reports (PRs) from GCC's bug tracking
   system that are known to be fixed in the 11.3 release. This list might
   not be complete (that is, it is possible that some PRs that have been
   fixed are not listed here).

  Target Specific Changes

    x86-64

     * The x86-64 ABI of passing and returning structure with a 64-bit
       single precision vector changed in GCC 11.1 when 3DNOW is disabled.
       Disabling 3DNOW no longer changes how they are passed nor returned.
       This ABI change is now diagnosed with -Wpsabi.
     * Mitigation against straight line speculation (SLS) for function
       return and indirect jump is supported via
       -mharden-sls=[none|all|return|indirect-jmp].
     * Add CS prefix to call and jmp to indirect thunk with branch target
       in r8-r15 registers via -mindirect-branch-cs-prefix.


    For questions related to the use of GCC, please consult these web
    pages and the [70]GCC manuals. If that fails, the
    [71]gcc-help@gcc.gnu.org mailing list might help. Comments on these
    web pages and the development of GCC are welcome on our developer
    list at [72]gcc@gcc.gnu.org. All of [73]our lists have public
    archives.

   Copyright (C) [74]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 [75]maintained by the GCC team. Last modified
   2022-04-21[76].

References

   1. http://gcc.gnu.org/gcc-11/porting_to.html
   2. http://gcc.gnu.org/onlinedocs/index.html#current
   3. https://wg21.link/p0522r0
   4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
   5. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
   6. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
   7. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
   8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
   9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
  10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
  11. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
  12. https://github.com/google/sanitizers/wiki/AddressSanitizer
  13. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
  14. https://dwarfstd.org/doc/DWARF5.pdf
  15. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
  16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
  17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
  18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
  19. https://www.openmp.org/specifications/
  20. https://www.openacc.org/
  21. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-11
  22. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
  23. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
  24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
  25. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
  26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
  27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
  28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
  29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
  30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
  31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
  32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
  33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
  34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
  35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
  36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
  37. http://gcc.gnu.org/projects/cxx-status.html#cxx20
  38. http://gcc.gnu.org/projects/cxx-status.html#cxx23
  39. https://gcc.gnu.org/PR41437
  40. https://gcc.gnu.org/PR95307
  41. https://gcc.gnu.org/PR97518
  42. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
  43. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
  44. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
  45. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
  46. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
  47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
  48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
  49. http://gcc.gnu.org/gcc-5/changes.html#jit
  50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
  51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
  52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
  53. https://developer.arm.com/support/arm-security-updates/speculative-processor-vulnerability/downloads/straight-line-speculation
  54. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
  55. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
  56. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
  57. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
  58. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
  59. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
  60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
  61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
  62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
  63. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
  64. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
  65. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
  66. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
  67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
  68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
  69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
  70. https://gcc.gnu.org/onlinedocs/
  71. mailto:gcc-help@gcc.gnu.org
  72. mailto:gcc@gcc.gnu.org
  73. https://gcc.gnu.org/lists.html
  74. https://www.fsf.org/
  75. https://gcc.gnu.org/about.html
  76. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-10/index.html

                             GCC 10 Release Series

   April 8, 2021

   The [1]GNU project and the GCC developers are pleased to announce the
   release of GCC 10.3.

   This release is a bug-fix release, containing fixes for regressions in
   GCC 10.2 relative to previous releases of GCC.

Release History

   GCC 10.3
          April 8, 2021 ([2]changes, [3]documentation)

   GCC 10.2
          July 23, 2020 ([4]changes, [5]documentation)

   GCC 10.1
          May 7, 2020 ([6]changes, [7]documentation)

References and Acknowledgements

   GCC used to stand for the GNU C Compiler, but since the compiler
   supports several other languages aside from C, it now stands for the
   GNU Compiler Collection.

   A list of [8]successful builds is updated as new information becomes
   available.

   The GCC developers would like to thank the numerous people that have
   contributed new features, improvements, bug fixes, and other changes as
   well as test results to GCC. This [9]amazing group of volunteers is
   what makes GCC successful.

   For additional information about GCC please refer to the [10]GCC
   project web site or contact the [11]GCC development mailing list.

   To obtain GCC please use [12]our mirror sites or [13]our version
   control system.


    For questions related to the use of GCC, please consult these web
    pages and the [14]GCC manuals. If that fails, the
    [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these
    web pages and the development of GCC are welcome on our developer
    list at [16]gcc@gcc.gnu.org. All of [17]our lists have public
    archives.

   Copyright (C) [18]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 [19]maintained by the GCC team. Last modified
   2021-07-28[20].

References

   1. http://www.gnu.org/
   2. http://gcc.gnu.org/gcc-10/changes.html
   3. http://gcc.gnu.org/onlinedocs/10.3.0/
   4. http://gcc.gnu.org/gcc-10/changes.html
   5. http://gcc.gnu.org/onlinedocs/10.2.0/
   6. http://gcc.gnu.org/gcc-10/changes.html
   7. http://gcc.gnu.org/onlinedocs/10.1.0/
   8. http://gcc.gnu.org/gcc-10/buildstat.html
   9. http://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
  10. http://gcc.gnu.org/index.html
  11. mailto:gcc@gcc.gnu.org
  12. http://gcc.gnu.org/mirrors.html
  13. http://gcc.gnu.org/git.html
  14. https://gcc.gnu.org/onlinedocs/
  15. mailto:gcc-help@gcc.gnu.org
  16. mailto:gcc@gcc.gnu.org
  17. https://gcc.gnu.org/lists.html
  18. https://www.fsf.org/
  19. https://gcc.gnu.org/about.html
  20. http://validator.w3.org/check/referer
======================================================================
http://gcc.gnu.org/gcc-10/changes.html

                             GCC 10 Release Series
                        Changes, New Features, and Fixes

   This page is a "brief" summary of some of the huge number of
   improvements in GCC 10. You may also want to check out our [1]Porting
   to GCC 10 page and the [2]full GCC documentation.

Caveats

     * An ABI incompatibility between C++14 and C++17 has been fixed. On
       some targets a class with a zero-sized subobject would be passed
       incorrectly when compiled as C++17 or C++20. See the [3]C++ notes
       below for more details.
     * The deprecated Profile Mode and array_allocator extensions have
       been removed from libstdc++.
     * The non-standard std::__is_nullptr_t type trait is deprecated and
       will be removed from libstdc++ in a future release. The standard
       trait std::is_null_pointer should be instead.
     * The minimum version of the [4]MPFR library required for building
       GCC has been increased to version 3.1.0 (released 2011-10-03).
     * The automatic template instantiation at link time (-frepo) has been
       removed.
     * The --param allow-store-data-races internal parameter has been
       removed in favor of a new official option -fallow-store-data-races.
       While default behavior is unchanged and the new option allows to
       correctly maintain a per compilation unit setting across link-time
       optimization, alteration of the default via --param
       allow-store-data-races will now be diagnosed and build systems have
       to be adjusted accordingly.
     * Offloading to Heterogeneous System Architecture Intermediate
       Language (HSAIL) has been deprecated and will likely be removed in
       a future release.
     * The type of the std::iterator base class of
       std::istreambuf_iterator was changed in C++98 mode to be consistent
       with C++11 and later standards. See the [5]libstdc++ notes below
       for more details.

General Improvements

     * New built-in functions:
          + The [6]__has_builtin built-in preprocessor operator can be
            used to query support for built-in functions provided by GCC
            and other compilers that support it.
          + __builtin_roundeven for the corresponding function from
            ISO/IEC TS 18661.
     * New command-line options:
          + [7]-fallocation-dce removes unneeded pairs of new and delete
            operators.
          + [8]-fprofile-partial-training can now be used to inform the
            compiler that code paths not covered by the training run
            should not be optimized for size.
          + [9]-fprofile-reproducible controls level of reproducibility of
            profile gathered by [10]-fprofile-generate. This makes it
            possible to rebuild program with same outcome which is useful,
            for example, for distribution packages.
          + [11]-fprofile-prefix-path can be used in combination with
            -fprofile-generate=profile_dir and -fprofile-use=profile_dir
            to inform GCC where the base directory of build source tree is
            in case it differs between instrumentation and optimized
            builds.
          + [12]-fanalyzer enables a new static analysis pass and
            associated warnings. This pass performs a time-consuming
            exploration of paths through the code in the hope of detecting
            various common errors, such as double-free bugs. This option
            should be regarded as experimental in this release. In
            particular, analysis of non-C code is unlikely to work.
     * Inter-procedural optimization improvements:
          + The inter-procedural scalar replacement of aggregates
            (IPA-SRA) pass was re-implemented to work at link-time and can
            now also remove computing and returning unused return values.
          + [13]-finline-functions is now enabled at -O2 and was retuned
            for better code size versus runtime performance trade-offs.
            Inliner heuristics was also significantly sped up to avoid
            negative impact to -flto -O2 compile times.
          + Inliner heuristics and function cloning can now use
            value-range information to predict effectivity of individual
            transformations.
          + During link-time optimization the C++ One Definition Rule is
            used to increase precision of type based alias analysis.
     * Link-time optimization improvements:
          + A new binary [14]lto-dump has been added. It dumps various
            information about LTO bytecode object files.
          + The parallel phase of the LTO can automatically detect a
            running make's jobserver or fall back to number of available
            cores.
          + The LTO bytecode can be compressed with the [15]zstd
            algorithm. The configure script automatically detects zstd
            support.
          + Most --param values can now be specified at translation unit
            granularity. This includes all parameters controlling the
            inliner and other inter-procedural optimizations. Unlike
            earlier releases, GCC 10 will ignore parameters controlling
            optimizations specified at link-time and apply parameters
            specified at compile-time in the same manner as done for
            optimization flags.
     * Profile driven optimization improvements:
          + Profile maintenance during compilation and hot/cold code
            partitioning have been improved.
          + Using [16]-fprofile-values, an instrumented binary can track
            multiple values (up to 4) for e.g. indirect calls and provide
            more precise profile information.

New Languages and Language-Specific Improvements

     * Version 2.6 of the [17]OpenACC specification is now supported in
       the C, C++ and Fortran compilers. See the [18]implementation status
       section on the OpenACC wiki page and the [19]run-time library
       documentation for further information.
     * GCC 10 adds a number of newly implemented [20]OpenMP 5.0 features
       on top of the GCC 9 release such as conditional lastprivate clause,
       scan and loop directives, order(concurrent) and use_device_addr
       clauses support, if clause on simd construct or partial support for
       the declare variant directive, getting closer to full support of
       the OpenMP 5.0 standard.
     * OpenMP and OpenACC now support [21]offloading to AMD Radeon (GCN)
       GPUs; supported are the third-generation Fiji (fiji) and the
       fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).

  C family

     * New attributes:
          + The access function and type attribute has been added to
            describe how a function accesses objects passed to it by
            pointer or reference, and to associate such arguments with
            integer arguments denoting the objects' sizes. The attribute
            is used to enable the detection of invalid accesses by
            user-defined functions, such as those diagnosed by
            -Wstringop-overflow.
          + The symver attribute can be used to bind symbols to specific
            version nodes on ELF platforms. This is preferred to using
            inline assembly with GNU as symver directive because the
            latter is not compatible with link-time optimizations.
     * New warnings:
          + [22]-Wstring-compare, enabled by -Wextra, warns about equality
            and inequality expressions between zero and the result of a
            call to either strcmp and strncmp that evaluate to a constant
            as a result of the length of one argument being greater than
            the size of the array pointed to by the other.
          + [23]-Wzero-length-bounds, enabled by -Warray-bounds, warns
            about accesses to elements of zero-length arrays that might
            overlap other members of the same object.
     * Enhancements to existing warnings:
          + [24]-Warray-bounds detects more out-of-bounds accesses to
            member arrays as well as accesses to elements of zero-length
            arrays.
          + [25]-Wformat-overflow makes full use of string length
            information computed by the strlen optimization pass.
          + [26]-Wrestrict detects overlapping accesses to dynamically
            allocated objects.
          + [27]-Wreturn-local-addr diagnoses more instances of return
            statements returning addresses of automatic variables.
          + [28]-Wstringop-overflow detects more out-of-bounds stores to
            member arrays including zero-length arrays, dynamically
            allocated objects and variable length arrays, as well as more
            instances of reads of unterminated character arrays by string
            built-in functions. The warning also detects out-of-bounds
            accesses by calls to user-defined functions declared with the
            new attribute access.
          + [29]-Warith-conversion re-enables warnings from -Wconversion,
            -Wfloat-conversion, and -Wsign-conversion that are now off by
            default for an expression where the result of an arithmetic
            operation will not fit in the target type due to promotion,
            but the operands of the expression do fit in the target type.
     * Extended characters in identifiers may now be specified directly in
       the input encoding (UTF-8, by default), in addition to the UCN
       syntax (\uNNNN or \UNNNNNNNN) that is already supported:

static const int p = 3;
int get_naïve_pi() {
  return p;
}

  C

     * Several new features from the upcoming C2X revision of the ISO C
       standard are supported with -std=c2x and -std=gnu2x. Some of these
       features are also supported as extensions when compiling for older
       language versions. In addition to the features listed, some
       features previously supported as extensions and now added to the C
       standard are enabled by default in C2X mode and not diagnosed with
       -std=c2x -Wpedantic.
          + The [[]] attribute syntax is supported, as in C++. Existing
            attributes can be used with this syntax in forms such as
            [[gnu::const]]. The standard attributes [[deprecated]],
            [[fallthrough]] and [[maybe_unused]] are supported.
          + UTF-8 character constants using the u8'' syntax are supported.
          + <float.h> defines macros FLT_NORM_MAX, DBL_NORM_MAX and
            LDBL_NORM_MAX.
          + When decimal floating-point arithmetic is supported, <float.h>
            defines macros DEC32_TRUE_MIN, DEC64_TRUE_MIN and
            DEC128_TRUE_MIN, in addition to the macros that were
            previously only defined if __STDC_WANT_DEC_FP__ was defined
            before including <float.h>.
          + In C2X mode, empty parentheses in a function definition give
            that function a type with a prototype for subsequent calls;
            other old-style function definitions are diagnosed by default
            in C2X mode.
          + The strftime format checking supports the %OB and %Ob formats.
          + In C2X mode, -fno-fp-int-builtin-inexact is enabled by
            default.
     * GCC now defaults to -fno-common. As a result, global variable
       accesses are more efficient on various targets. In C, global
       variables with multiple tentative definitions now result in linker
       errors. With -fcommon such definitions are silently merged during
       linking.

  C++

     * Several C++20 features have been implemented:
          + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
            P0848R3, P1616R1, P1452R2
          + P1668R1, Permitting Unevaluated inline-assembly in constexpr
            Functions
          + P1161R3, Deprecate a[b,c]
          + P0848R3, Conditionally Trivial Special Member Functions
          + P1091R3, Extending structured bindings
          + P1143R2, Adding the constinit keyword
          + P1152R4, Deprecating volatile
          + P0388R4, Permit conversions to arrays of unknown bound
          + P0784R7, constexpr new
          + P1301R4, [[nodiscard("with reason")]]
          + P1814R0, class template argument deduction for alias templates
          + P1816R0, class template argument deduction for aggregates
          + P0960R3, Parenthesized initialization of aggregates
          + P1331R2, Allow trivial default initialization in constexpr
            contexts
          + P1327R1, Allowing dynamic_cast and polymorphic typeid in
            constexpr contexts
          + P0912R5, Coroutines (requires -fcoroutines)
     * Several C++ Defect Reports have been resolved, e.g.:
          + DR 1560, lvalue-to-rvalue conversion in ?:
          + DR 1813, __is_standard_layout for a class with repeated bases
          + DR 2094, volatile scalars are trivially copyable,
          + DR 2096, constraints on literal unions
          + DR 2413, typename in conversion-function-ids
          + DR 2352, Similar types and reference binding
          + DR 1601, Promotion of enumeration with fixed underlying type
          + DR 330, Qualification conversions and pointers to arrays of
            pointers
          + DR 1307, Overload resolution based on size of array
            initializer-list
          + DR 1710, Missing template keyword in class-or-decltype
     * New warnings:
          + [30]-Wmismatched-tags, disabled by default, warns about
            declarations of structs, classes, and class templates and
            their specializations with a class-key that does not match
            either the definition or the first declaration if no
            definition is provided. The option is provided to ease
            portability to Windows-based compilers.
          + [31]-Wredundant-tags, disabled by default, warns about
            redundant class-key and enum-key in contexts where the key can
            be eliminated without causing an syntactic ambiguity.
     * G++ can now detect modifying constant objects in constexpr
       evaluation (which is undefined behavior).
     * G++ no longer emits bogus -Wsign-conversion warnings with explicit
       casts.
     * Narrowing is now detected in more contexts (e.g., case values).
     * Memory consumption of the compiler has been reduced in constexpr
       evaluation.
     * The noexcept-specifier is now properly treated as a complete-class
       context as per [class.mem].
     * The attribute deprecated can now be used on namespaces too.
     * The ABI of passing and returning certain C++ classes by value
       changed on several targets in GCC 10, including [32]AArch64,
       [33]ARM, [34]PowerPC ELFv2, [35]S/390 and [36]Itanium. These
       changes affect classes with a zero-sized subobject (an empty base
       class, or data member with the [[no_unique_address]] attribute)
       where all other non-static data members have the same type (this is
       called a "homogeneous aggregate" in some ABI specifications, or if
       there is only one such member, a "single element"). In -std=c++17
       and -std=c++20 modes, classes with an empty base class were not
       considered to have a single element or to be a homogeneous
       aggregate, and so could be passed differently (in the wrong
       registers or at the wrong stack address). This could make code
       compiled with -std=c++17 and -std=c++14 ABI incompatible. This has
       been corrected and the empty bases are ignored in those ABI
       decisions, so functions compiled with -std=c++14 and -std=c++17 are
       now ABI compatible again. Example: struct empty {}; struct S :
       empty { float f; }; void f(S);. Similarly, in classes containing
       non-static data members with empty class types using the C++20
       [[no_unique_address]] attribute, those members weren't ignored in
       the ABI argument passing decisions as they should be. Both of these
       ABI changes are now diagnosed with -Wpsabi.

    Runtime Library (libstdc++)

     * Improved experimental C++2a support, including:
          + Library concepts in <concepts> and <iterator>.
          + Constrained algorithms in <ranges>, <algorithm>, and <memory>
            (thanks to Patrick Palka).
          + New algorithms shift_left and shift_right (thanks to Patrick
            Palka).
          + std::span (thanks to JeanHeyd Meneide).
          + Three-way comparisons in <compare> and throughout the library.
          + Constexpr support in <algorithm> and elsewhere (thanks to
            Edward Smith-Rowland).
          + <stop_token> and std::jthread (thanks to Thomas Rodgers).
          + std::atomic_ref and std::atomic<floating point>.
          + Integer comparison functions (cmp_equal, cmp_less etc.).
          + std::ssize, std::to_array.
          + std::construct_at, std::destroy, constexpr std::allocator.
          + Mathematical constants in <numbers>.
     * Support for RDSEED in std::random_device.
     * Reduced header dependencies, leading to faster compilation for some
       code.
     * The std::iterator base class of std::istreambuf_iterator was
       changed in C++98 mode to be consistent with C++11 and later
       standards. This is expected to have no noticeable effect except in
       the unlikely case of a class which has potentially overlapping
       subobjects of type std::istreambuf_iterator<C> and another iterator
       type with a std::iterator<input_iterator_tag, C, ...> base class.
       The layout of such a type might change when compiled as C++98.
       [37]Bug 92285 has more details and concrete examples.

  D

     * Support for static foreach has been implemented.
     * Aliases can now be created directly from any __traits that return
       symbols or tuples. Previously, an AliasSeq was necessary in order
       to alias their return.
     * It is now possible to detect the language ABI specified for a
       struct, class, or interface using __traits(getLinkage, ...).
     * Support for core.math.toPrec intrinsics has been added. These
       intrinsics guarantee the rounding to specific floating-point
       precisions at specified points in the code.
     * Support for pragma(inline) has been implemented. Previously the
       pragma was recognized, but had no effect on the compilation.
     * Optional parentheses in asm operands are deprecated and will be
       removed in a future release.
     * All content imported files are now included in the make dependency
       list when compiling with -M.
     * Compiler recognized attributes provided by the gcc.attribute module
       will now take effect when applied to function prototypes as well as
       when applied to full function declarations.
     * Added a --enable-libphobos-checking configure option to control
       whether run-time checks are compiled into the D runtime library.
     * Added a --with-libphobos-druntime-only configure option to indicate
       whether to build only the core D runtime library, or both the core
       and standard libraries into libphobos.

  Fortran

     * use_device_addr of version 5.0 of the [38]OpenMP specification is
       now supported. Note that otherwise OpenMP 4.5 is partially
       supported in the Fortran compiler; the largest missing item is
       structure element mapping.
     * The default buffer size for I/O using unformatted files has been
       increased to 1048576. The buffer size for can now be set at runtime
       via the environment variables GFORTRAN_FORMATTED_BUFFER_SIZE and
       GFORTRAN_UNFORMATTED_BUFFER_SIZE for formatted and unformatted
       files, respectively.
     * Mismatches between actual and dummy argument lists in a single file
       are now rejected with an error. Use the new option
       -fallow-argument-mismatch to turn these errors into warnings; this
       option is implied with -std=legacy. -Wargument-mismatch has been
       removed.
     * The handling of a BOZ literal constant has been reworked to provide
       better conformance to the Fortran 2008 and 2018 standards. In these
       Fortran standards, a BOZ literal constant is a typeless and
       kindless entity. As a part of the rework, documented and
       undocumented extensions to the Fortran standard now emit errors
       during compilation. Some of these extensions are permitted with the
       -fallow-invalid-boz option, which degrades the error to a warning
       and the code is compiled as with older gfortran.
     * At any optimization level except-Os, gfortran now uses inline
       packing for arguments instead of calling a library routine. If the
       source contains a large number of arguments that need to be
       repacked, code size or time for compilation can become excessive.
       If that is the case, -fno-inline-arg-packing can be used to disable
       inline argument packing.
     * Legacy extensions:
          + For formatted input/output, if the explicit widths after the
            data-edit descriptors I, F and G have been omitted, default
            widths are used.
          + A blank format item at the end of a format specification, i.e.
            nothing following the final comma, is allowed. Use the option
            -fdec-blank-format-item; this option is implied with -fdec.
          + The existing support for AUTOMATIC and STATIC attributes has
            been extended to allow variables with the AUTOMATIC attribute
            to be used in EQUIVALENCE statements. Use -fdec-static; this
            option is implied by -fdec.
          + Allow character literals in assignments and DATA statements
            for numeric (INTEGER, REAL, or COMPLEX) or LOGICAL variables.
            Use the option -fdec-char-conversions; this option is implied
            with -fdec.
          + DEC comparisons, i.e. allow Hollerith constants to be used in
            comparisons with INTEGER, REAL, COMPLEX and CHARACTER
            expressions. Use the option -fdec.
     * Character type names in errors and warnings now include len in
       addition to kind; * is used for assumed length. The kind is omitted
       if it is the default kind. Examples: CHARACTER(12), CHARACTER(6,4).
     * CO_BROADCAST now supports derived type variables including objects
       with allocatable components. In this case, the optional arguments
       STAT= and ERRMSG= are currently ignored.
     * The handling of module and submodule names has been reworked to
       allow the full 63-character length mandated by the standard.
       Previously symbol names were truncated if the combined length of
       module, submodule, and function name exceeded 126 characters. This
       change therefore breaks the ABI, but only for cases where this 126
       character limit was exceeded.

  Go

     * GCC 10 provides a complete implementation of the Go 1.14.6 user
       packages.

libgccjit

     * The libgccjit API gained four new entry points:
          + [39]gcc_jit_version_major, [40]gcc_jit_version_minor, and
            [41]gcc_jit_version_patchlevel for programmatically checking
            the libgccjit version from client code, and
          + [42]gcc_jit_context_new_bitfield

New Targets and Target Specific Improvements

  AArch64 & arm

     * The AArch64 and arm ports now support condition flag output
       constraints in inline assembly, as indicated by the
       __GCC_ASM_FLAG_OUTPUTS__. On arm this feature is only available for
       A32 and T32 targets. Please refer to the documentation for more
       details.

  AArch64

     * There have been several improvements related to the Scalable Vector
       Extension (SVE):
          + The SVE ACLE types and intrinsics are now supported. They can
            be accessed using the header file arm_sve.h.
          + It is now possible to create fixed-length SVE types using the
            arm_sve_vector_bits attribute. For example:
#if __ARM_FEATURE_SVE_BITS==512
typedef svint32_t vec512 __attribute__((arm_sve_vector_bits(512)));
typedef svbool_t pred512 __attribute__((arm_sve_vector_bits(512)));
#endif
          + -mlow-precision-div, -mlow-precision-sqrt and
            -mlow-precision-recip-sqrt now work for SVE.
          + -msve-vector-bits=128 now generates vector-length-specific
            code for little-endian targets. It continues to generate
            vector-length-agnostic code for big-endian targets, just as
            previous releases did for all targets.
          + The vectorizer is now able to use extending loads and
            truncating stores, including gather loads and scatter stores.
          + The vectorizer now compares the cost of vectorizing with SVE
            and vectorizing with Advanced SIMD and tries to pick the best
            one. Previously it would always use SVE if possible.
          + If a vector loop uses Advanced SIMD rather than SVE, the
            vectorizer now considers using SVE to vectorize the left-over
            elements (the "scalar tail" or "epilog").
          + Besides these specific points, there have been many general
            improvements to the way that the vectorizer uses SVE.
     * The -mbranch-protection=pac-ret option now accepts the optional
       argument +b-key extension to perform return address signing with
       the B-key instead of the A-key.
     * The option -moutline-atomics has been added to aid deployment of
       the Large System Extensions (LSE) on GNU/Linux systems built with a
       baseline architecture targeting Armv8-A. When the option is
       specified code is emitted to detect the presence of LSE
       instructions at runtime and use them for standard atomic
       operations. For more information please refer to the documentation.
     * The Transactional Memory Extension is now supported through ACLE
       intrinsics. It can be enabled through the +tme option extension
       (for example, -march=armv8.5-a+tme).
     * A number of features from Armv8.5-A are now supported through ACLE
       intrinsics. These include:
          + The random number instructions that can be enabled through the
            (already present in GCC 9.1) +rng option extension.
          + Floating-point intrinsics to round to integer instructions
            from Armv8.5-A when targeting -march=armv8.5-a or later.
          + Memory Tagging Extension intrinsics enabled through the
            +memtag option extension.
     * Similarly, the following Armv8.6-A features are now supported
       through ACLE intrinsics:
          + The bfloat16 extension. This extension is enabled
            automatically when Armv8.6-A is selected (such as by
            -march=armv8.6-a). It can also be enabled for Armv8.2-A and
            later using the +bf16 option extension.
          + The Matrix Multiply extension. This extension is split into
            three parts, one for each supported data type:
               o Support for 8-bit integer matrix multiply instructions.
                 This extension is enabled automatically when Armv8.6-A is
                 selected. It can also be enabled for Armv8.2-A and later
                 using the +i8mm option extension.
               o Support for 32-bit floating-point matrix multiply
                 instructions. This extension can be enabled using the
                 +f32mm option extension, which also has the effect of
                 enabling SVE.
               o Support for 64-bit floating-point matrix multiply
                 instructions. This extension can be enabled using the
                 +f64mm option extension, which likewise has the effect of
                 enabling SVE.
     * SVE2 is now supported through ACLE intrinsics and (to a limited
       extent) through autovectorization. It can be enabled through the
       +sve2 option extension (for example, -march=armv8.5-a+sve2).
       Additional extensions can be enabled through +sve2-sm4, +sve2-aes,
       +sve2-sha3 and +sve2-bitperm.
     * Support has been added for the following processors (GCC
       identifiers in parentheses):
          + Arm Cortex-A77 (cortex-a77).
          + Arm Cortex-A76AE (cortex-a76ae).
          + Arm Cortex-A65 (cortex-a65).
          + Arm Cortex-A65AE (cortex-a65ae).
          + Arm Cortex-A34 (cortex-a34).
          + Marvell ThunderX3 (thunderx3t110).
       The GCC identifiers can be used as arguments to the -mcpu or -mtune
       options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
       arguments to the equivalent target attributes and pragmas.

  arm

     * Support for the FDPIC ABI has been added. It uses 64-bit function
       descriptors to represent pointers to functions, and enables code
       sharing on MMU-less systems. The corresponding target triple is
       arm-uclinuxfdpiceabi, and the C library is uclibc-ng.
     * Support has been added for the Arm EABI on NetBSD through the
       arm*-*-netbsdelf-*eabi* triplet.
     * The handling of 64-bit integer operations has been significantly
       reworked and improved leading to improved performance and reduced
       stack usage when using 64-bit integral data types. The option
       -mneon-for-64bits is now deprecated and will be removed in a future
       release.
     * Support has been added for the following processors (GCC
