GCC (GNU Compiler Collection) is a set of programming language compilers developed by GNU. It is a set of free software distributed under the GPL and LGPL licenses. It is also a key part of the GNU project and is a standard compiler for Unix-like and Mac OS X operating systems. GCC (especially the C compiler) is also often considered the de facto standard for cross-platform compilers.
GCC was formerly known as GNU C compiler because it can only deal with the original C language. Later, the ability to handle C++ was added and later became available for languages such as Fortran, Pascal, Objective-C, Java, and Ada.
GCC 10.1 was released.
- 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 C++ notes below for more details.
- The deprecated Profile Mode and
array_allocatorextensions have been removed from libstdc++.
- The non-standard
std::__is_nullptr_ttype trait is deprecated and will be removed from libstdc++ in a future release. The standard trait
std::is_null_pointershould be instead.
- The minimum version of the 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.
--param allow-store-data-racesinternal 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-raceswill 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.
- New built-in functions:
__has_builtinbuilt-in preprocessor operator can be used to query support for built-in functions provided by GCC and other compilers that support it.
__builtin_roundevenfor the corresponding function from ISO/IEC TS 18661.
- New command-line options:
-fallocation-dceremoves unneeded pairs of
-fprofile-partial-trainingcan now be used to inform the compiler that code paths not covered by the training run should not be optimized for size.
-fprofile-reproduciblecontrols level of reproducibility of profile gathered by
-fprofile-generate. This makes it possible to rebuild program with same outcome which is useful, for example, for distribution packages.
-fprofile-prefix-pathcan be used in combination with
-fprofile-use=profile_dirto inform GCC where the base directory of build source tree is in case it differs between instrumentation and optimized builds.
- -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.
-finline-functionsis now enabled at
-O2and was retuned for better code size versus runtime performance trade-offs. Inliner heuristics was also significantly sped up to avoid negative impact to
-flto -O2compile 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
lto-dumphas been added. The program can dump various information about a LTO bytecode object file.
- Parallel phase of the LTO can automatically detect a running make’s jobserver or can fall back to number of available cores.
- The LTO bytecode can be compressed with
zstdalgorithm. Configure script can automatically detect the
--paramvalues 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.
-fprofile-values, an instrumented binary can track multiple values (up to 4) for e.g. indirect calls and provide more precise profile information.