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.
Note: GCC 10 has not been released yet, so this document is
The deprecated Profile Mode and
have been removed from libstdc++.
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 following built-in functions have been introduced.
__builtin_roundeven for the corresponding function from
ISO/IEC TS 18661.
New Languages and Language specific improvements
- Several C++20 features have been implemented:
- P1668R1, Permitting Unevaluated inline-assembly in constexpr Functions
- P1161R3, Deprecate
- P0848R3, Conditionally Trivial Special Member Functions
- P1091R3, Extending structured bindings
- P1143R2, Adding the
- P1152R4, Deprecating
- P0388R4, Permit conversions to arrays of unknown bound
- Concepts, including P0734R0, P0857R0, P1084R2, P1141R2, P0848R3, P1616R1, P1452R2
- 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
- DR 2094, volatile scalars are trivially copyable,
- DR 2096, constraints on literal unions
- DR 2413,
- 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
G++ can now detect modifying constant objects in constexpr evaluation
(which is undefined behavior).
G++ no longer emits bogus
-Wsign-conversion warnings with explicit
Narrowing is now detected in more contexts (e.g.,
Memory consumption of the compiler has been reduced in constexpr evaluation.
noexcept-specifier is now properly treated as a
complete-class context as per
deprecated can now be used on
Runtime Library (libstdc++)
- Improved C++2a support, including:
std::span (thanks to JeanHeyd Meneide).
Constexpr support in
(thanks to Edward Smith-Rowland).
Reduced header dependencies, leading to faster compilation for some code.
use_device_addr of version 5.0 of the
is now supported. Note that otherwise OpenMP 4.5 is partially supported
in the Fortran compiler; the largest missing item is structure element
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
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
-fallow-argument-mismatch to turn these
errors into warnings; this option is implied
has been removed.
New Targets and Target Specific Improvements
- 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 to expand
__builtin_roundeven into the appropriate
SSE 4.1 instruction has been added.
- GCC now supports the Intel CPU named Cooperlake through -march=cooperlake.
The switch enables the AVX512BF16 ISA extensions.
- GCC now supports the Intel CPU named Tigerlake through -march=tigerlake.
The switch enables the MOVDIRI MOVDIR64B AVX512VP2INTERSECT ISA extensions.
A new back end targeting TI PRU I/O processors has been contributed to GCC.
Other significant improvements
To allow inline expansion of both
memmove, the existing
patterns used for non-overlapping memory copies have been renamed to
movmem name is now used
for overlapping memory moves, consistent with the