The mudflap run time checker has been removed. The mudflap options remain, but do nothing.
Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.9. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed.
The following ports for individual systems on particular architectures have been obsoleted:
On AArch64, the singleton vector types int64x1_t
,
uint64x1_t
and float64x1_t
exported by
arm_neon.h
are defined to be the same as their base types.
This results in incorrect application of parameter passing rules to
arguments of types int64x1_t
and uint64x1_t
,
with respect to the AAPCS64 ABI specification. In addition, names of
C++ functions with parameters of these types (including
float64x1_t
) are not mangled correctly. The current
typedef
declarations also unintentionally allow implicit
casting between singleton vector types and their base types. These
issues will be resolved in a near future release. See
PR60825 for more information.
More information on porting to GCC 4.9 from previous versions of GCC can be found in the porting guide for this release.
-fsanitize=undefined
.
Various computations will be instrumented to detect undefined behavior
at runtime. UndefinedBehaviorSanitizer is currently available for the C
and C++ languages.
-flto
option now generates slim object files (.o
) which only
contain intermediate language representation for LTO. Use
-ffat-lto-objects
to create files which contain
additionally the object code. To generate static libraries suitable
for LTO processing, use gcc-ar
and
gcc-ranlib
; to list symbols from a slim object file use
gcc-nm
. (This requires that ar
,
ranlib
and nm
have been compiled with
plugin support.)final
keyword.-fdevirtualize-speculatively
.-freorder-functions
) significantly reduces
startup time of large applications. Until binutils support is
completed, it is effective only with link-time optimization.-fopenmp-simd
option can be used to enable OpenMP's
SIMD directives while ignoring other OpenMP directives. The new -fsimd-cost-model=
option permits to tune the
vectorization cost model for loops annotated with OpenMP and Cilk
Plus simd
directives. -Wopenmp-simd
warns when
the current cost model overrides simd directives set by the user.-Wdate-time
option has been added for the C, C++ and
Fortran compilers, which warns when the __DATE__
,
__TIME__
or __TIMESTAMP__
macros are used.
Those macros might prevent bit-wise-identical reproducible
compilations.-fdiagnostics-color=auto
will enable it when
outputting to terminals, -fdiagnostics-color=always
unconditionally. The GCC_COLORS
environment variable
can be used to customize the colors or disable coloring.
If GCC_COLORS
variable is present in the environment,
the default is -fdiagnostics-color=auto
, otherwise
-fdiagnostics-color=never
.$ g++ -fdiagnostics-color=always -S -Wall test.C test.C: In function ‘int foo()’: test.C:1:14: warning: no return statement in function returning non-void [-Wreturn-type] int foo () { } ^ test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) instantiating ‘struct X<100>’ template <int N> struct X { static const int value = X<N-1>::value; }; template struct X<1000>; ^ test.C:2:46: recursively required from ‘const int X<999>::value’ test.C:2:46: required from ‘const int X<1000>::value’ test.C:2:88: required from here test.C:2:46: error: incomplete type ‘X<100>’ used in nested name specifier
#pragma GCC ivdep
, the user can assert that there are no
loop-carried dependencies which would prevent concurrent execution of
consecutive iterations using SIMD (single instruction multiple data)
instructions.-fcilkplus
option. Cilk Plus
is an extension to the C and C++ languages to support data and task
parallelism. The present implementation follows ABI version 1.2; all
features but _Cilk_for
have been implemented._Atomic
type specifier and
qualifier and the <stdatomic.h>
header) are now
supported._Generic
keyword) are
now supported._Thread_local
,
similar to GNU C __thread
) is now supported.-fextended-identifiers
is used), floating-point
issues (mainly but not entirely relating to optional C99 features
from Annexes F and G) and the optional Annexes K (Bounds-checking
interfaces) and L (Analyzability).__auto_type
provides a subset of
the functionality of C++11 auto
in GNU C.decltype(auto)
for getting decltype
semantics
rather than the template argument deduction semantics of plain
auto
:
int& f(); auto i1 = f(); // int decltype(auto) i2 = f(); // int&
Actually, they have been accepted since GCC 4.5, but now the compiler doesn't warn about them with[x = 42]{ ... };
-std=c++1y
, and supports parenthesized
and brace-enclosed initializers as well.
sizeof
to a VLA variable. Note that it now appears
that VLAs will not be part of C++14, but will be part of a separate
document and then perhaps C++17.
void f(int n) { int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3 [&a]{ for (int i : a) { cout << i << endl; } }(); &a; // error, taking address of VLA }
class A; int bar(int n); #if __cplusplus > 201103 class [[deprecated("A is deprecated in C++14; Use B instead")]] A; [[deprecated("bar is unsafe; use foo() instead")]] int bar(int n); int foo(int n); class B; #endif A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use foo() instead
int i = 1048576; int j = 1'048'576; int k = 0x10'0000; int m = 0'004'000'000; int n = 0b0001'0000'0000'0000'0000'0000; double x = 1.602'176'565e-19; double y = 1.602'176'565e-1'9;
// a functional object that will increment any type auto incr = [](auto x) { return x++; };
auto
syntax.
// a functional object that will add two like-type objects auto add = [] <typename T> (T a, T b) { return a + b; };
auto
may be used as a type-specifier in a parameter
declaration of any function declarator in order to introduce an
implicit function template parameter, akin to generic lambdas.
// the following two function declarations are equivalent auto incr(auto x) { return x++; } template <typename T> auto incr(T x) { return x++; }
<regex>
;<map>
and
<set>
and the unordered associative containers
in <unordered_map>
and <unordered_set>
meet the allocator-aware container requirements; constexpr
member functions without const
; std::exchange()
utility function; std::make_unique
; std::shared_lock
; std::result_of
SFINAE-friendly; operator()
to std::integral_constant
; std::basic_string
, std::chrono::duration
,
and std::complex
; std::equal
and std::mismatch
; constexpr
members to <utility>
,
<complex>
, <chrono>
, and some containers; std::integer_sequence
; <functional>
s operator functors easier to use
and more generic; std::experimental::optional
.std::experimental::string_view
.std::copy_exception
has been deprecated
and will be removed in a future version. std::make_exception_ptr
should be used instead.
.mod
)
has been incremented; additionally, module files are now compressed.
Fortran MODULE
s compiled by earlier GCC versions have
to be recompiled, when they are USE
d by files compiled
with GCC 4.9. GCC 4.9 is not able to read .mod
files of earlier GCC versions; attempting to do so gives an error
message. Note: The ABI of the produced assembler data itself has not
changed: object files and libraries are fully compatible with older
versions (except as stated below).INTEGER
, REAL
,
COMPLEX
and LOGICAL
, which have
both the VALUE
and the OPTIONAL
attributes.CLASS
should be recompiled, including all files which
define derived types involved in the type definition used by
polymorphic variables. (Note: Due to the incremented module version,
trying to mix old code with new code will usually give an error
message.)SAVE
attribute.fcntl()
, e.g. via
ISO_C_BINDING
, before executing the child process.-fno-whole-file
has been removed. (-fwhole-file
is the default since
GCC 4.6.) -fwhole-file
/-fno-whole-file
continue to be accepted but do not influence the code generation.DO
loops with zero iterations. This warning is now
controlled by the -Wzerotrip
option, which is implied by
-Wall
.NO_ARG_CHECK
attribute of the !GCC$
directive can be used to disable the
type-kind-rank (TKR) argument check for a dummy argument. The feature
is similar to ISO/IEC TS 29133:2012's TYPE(*)
, except that
it additionally also disables the rank check. Variables with
NO_ARG_CHECK
have to be dummy arguments and may only be
used as argument to ISO_C_BINDING
's C_LOC
and as actual argument to another NO_ARG_CHECK
dummy
argument; also the other constraints of TYPE(*)
apply.
The dummy arguments should be declared as scalar or assumed-size
variable of type type(*)
(recommended) – or of
type integer
, real
, complex
or logical
. With NO_ARG_CHECK
, a pointer
to the data without further type or shape information is passed,
similar to C's void*
. Note that also TS 29113's
type(*),dimension(..)
accepts arguments of any type and
rank; contrary to NO_ARG_CHECK
assumed-rank arguments
pass an array descriptor which contains the array shape and stride
of the argument.STOP
or ERROR STOP
are used to terminate
the execution and any exception (but inexact) is signaling, a warning is
printed to ERROR_UNIT
, indicating which exceptions are
signaling. The -ffpe-summary=
command-line option can be used to fine-tune
for which exceptions the warning should be shown.READ
) is now handled on systems where
strtod
honours the rounding mode. (For output, rounding is
supported since GCC 4.5.) Note that for input, the
compatible
rounding mode is handled as nearest
(i.e., rounding to an even least significant [cf. IEC 60559:1989]
for a tie, while compatible
rounds away from zero in
that case).-march=armv8-a+crc
and -march=armv8-a+crypto
options.
-mabi=ilp32
. Support for ILP32 is
considered experimental as the ABI specification is still beta.
-mcpu=cortex-a57.cortex-a53
option.
-mfix-cortex-a53-835769
option.
Alternatively it can be enabled by default by configuring GCC with the
--enable-fix-cortex-a53-835769
option.
-mneon-for-64bits
option.
-mrestrict-it
option can be used with
-march=armv7-a
or the -march=armv7ve
options
to make code generation fully compatible with the deprecated instructions
in ARMv8-A.
-march=armv7ve
option.
-march=armv8-a+crc
and mfpu=crypto-neon-fp-armv8
options.
-mno-lra
option. This option is a purely
transitionary command-line option and will be removed in a future
release. We are interested in any bug reports regarding functional and
performance regressions with LRA.
-mslow-flash-data
to improve performance
of programs fetching data on slow flash memory has now been
introduced for the ARMv7-M profile cores.
-mpic-data-is-text-relative
for targets
that allows data segments to be relative to text segments has
been added. This is on by default for all targets except VxWorks RTP.
-mcpu=cortex-a12
and -mcpu=cortex-r7
options.
-mcpu=cortex-a57
and -mcpu=cortex-a53
options.
-mcpu=cortex-a57.cortex-a53
option. Similar support was added for the combination of
Cortex-A15 and Cortex-A7 through the -mcpu=cortex-a15.cortex-a7
option.
-mfract-convert-truncate
has been
added. It allows compiler to use truncation instead of rounding towards
zero for fractional fixed-point types.
-mfpmath=sse
is now implied by -ffast-math
on all targets where SSE2 is supported.-mavx512f
, AVX-512 prefetch instructions: -mavx512pf
,
AVX-512 exponential and reciprocal instructions: -mavx512er
,
AVX-512 conflict detection instructions: -mavx512cd
.
-mxxx
option.
This improves the usability of x86 intrinsics and is particularly useful
when doing Function Multiversioning.
-march=silvermont
.
-march=broadwell
.
-march=nehalem
, westmere
,
sandybridge
, ivybridge
,
haswell
, bonnell
.
-march=generic
has been retuned for better support of
Intel core and AMD Bulldozer architectures. Performance of AMD K7, K8,
Intel Pentium-M, and Pentium4 based CPUs is no longer considered important
for generic.
-mtune=intel
can now be used to generate code running
well on the most current Intel processors, which are Haswell
and Silvermont for GCC 4.9.
-m16
command-line option.
memcpy
and memset
that is aware of value ranges and produces shorter alignment prologues.
-mno-accumulate-outgoing-args
is now honored when unwind
information is output. Argument accumulation is also now turned off
for portions of programs optimized for size.-march=bdver4
and
-mtune=bdver4
options.-mcpu=
has been added to
the MSP430 back end.
This option is used to specify the ISA to be used. Accepted values are
msp430
(the default), msp430x
and msp430xv2
. The ISA is no longer deduced
from the -mmcu=
option as there are far too many different MCU names. The
-mmcu=
option is still supported, and this is still used to select linker
scripts and generate a C preprocessor symbol that will be recognised by the
msp430.h
header file.-mcpu=power8
and -mtune=power8
options.-march=zEC12
option but can explicitly be
disabled with -mno-htm
.
Using the GCC builtins also libitm supports hardware
transactions on S/390.-mhotpatch
or per function using
the hotpatch
attribute.-march=z10
or higher.-mcpu=rx100
,
-mcpu=rx200
and -mcpu=rx600
.
clips
and clipu
instructions. The compiler will now try to utilize them for min/max
expressions such as max (-128, min (127, x))
.cmp/str
instruction through built-in
functions such as __builtin_strlen
. When not optimizing for
size, the compiler will now expand calls to e.g. strlen
as an
inlined sequences which utilize the cmp/str
instruction.-mcbranchdi
has been deprecated. Specifying it
will result in a warning and will not influence code generation.-mcmpeqdi
has been deprecated. Specifying it
will result in a warning and will not influence code generation.This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
Version 4.0 of the OpenMP specification is supported even in Fortran, not just C and C++.
This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.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 4.9.3 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 4.9.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here).
Copyright (C) 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 maintained by the GCC team. Last modified 2023-09-02.