10.1, a major release of the platform, was published on May 7, 2020, with highlights including C++ 20 capabilities and C2X language support. C2X is the next major revision of the C language, due in 2022.
for GCC 10 show that a multitude of features have been implemented including permitting inline-assembly in constexpr Functions and extending structured bindings. Also for C++ 20, GCC 10 permits conversions to arrays of unknown bound, allows trivial default initialization in constexpr contexts, adds the
constinit keyword, and deprecates the
For C2X, the upcoming revision of the ISO C standard, several features are supported with the syntax
-std+gnu2x. Among these are
strftime format checking supporting the
%Ob formats and UTF-8 character constants using the u8′ ‘ syntax.
GCC, which has been around for more than 33 years, includes front ends and libraries for C, C++, Fortran, Ada, Go, and D. A bulletin has been posted on . Other new capabilities in GCC 10.1 include
- Built-in functions have been added, including a
has_builtinpreprocessor operator that can be used to query support for built-in functions provided by GCC and other compilers that support it.
- Command-options have been added. These include
-fallocation-dce, to remove unneeded pairs of
-fanalyzer, to enable a new static analysis pass and associated warnings. The latter option should be regarded as being in the experimental phase.
- Interprocedural optimization improvements were made. These include re-implementing the inter-procedural scalar replacements of aggregates (IPA-SRA) pass that was re-implemented to work at link-time. IPA-SRA now can also remove computing and returning unused return values.
- Link-time optimization improvements include a new binary
ito-dump. The program can dump various information about an LTO
- Profile-driven optimization improvements have been made, including improving profile maintenance during compilation and hot/cold partitioning.
- For the C family, the
typeattribute have 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 object size. The attribute is used to enable the detection of invalid accesses by user-defined functions. There also are new warnings and enhancements to existing warnings. One warning,
-Wzero-length-bounds, warns about access to elements of zero-length arrays that might overlap other members of the same object.
- An ABI incompatibility between C++ 14 and C++ 17 was fixed. On some targets, a class with a zero-sized subobject would be passed incorrectly when compiled as C++ 17 or C++ 20.
Copyright © 2020 IDG Communications, Inc.