-b <machine> and -V <version> have been removed because they were unreliable. Instead, users should directly run <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to run a different version of gcc. gcc was called to link object files rather than compile source code, it would previously accept and ignore all options starting with --, including linker options such as --as-needed and --export-dynamic, although such options would result in errors if any source code was compiled. Such options, if unknown to the compiler, are now rejected in all cases; if the intent was to pass them to the linker, options such as -Wl,--as-needed should be used.cproj function. GCC optimizes its builtin cproj according to the behavior specified and allowed by the ISO C99 standard. If you want to avoid discrepancies between the C library and GCC's builtin transformations when using cproj in your code, use GLIBC 2.12 or later. If you are using an older GLIBC and actually rely on the incorrect behavior of cproj, then you can disable GCC's transformations using -fno-builtin-cproj. -combine) has been removed in favor of the new generic link-time optimization framework (LTO) introduced in GCC 4.5.0.libquadmath library, which provides quad-precision mathematical functions for targets with a __float128 datatype. __float128 is available for targets on 32-bit x86, x86-64 and Itanium architectures. The libquadmath library is automatically built on such targets when building the Fortran compiler.-Wunused-but-set-variable and -Wunused-but-set-parameter warnings were added for C, C++, Objective-C and Objective-C++. These warnings diagnose variables respective parameters which are only set in the code and never otherwise used. Usually such variables are useless and often even the value assigned to them is computed needlessly, sometimes expensively. The -Wunused-but-set-variable warning is enabled by default by -Wall flag and -Wunused-but-set-parameter by -Wall -Wextra flags.progmem attribute to locate data in flash memory must be qualified as const.Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.6. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed.
All GCC ports for the following processor architectures have been declared obsolete:
arc-*)crx-*)m68hc11-*-*, m6811-*-*, m68hc12-*-*, m6812-*-*)score-*)The following ports for individual systems on particular architectures have been obsoleted:
i[34567]86-*-interix3*)i[3456x]86-*-netware*)arm-*-pe* other than arm*-wince-pe*)mcore-*-pe*)sh*-*-symbianelf*)alpha*-*-gnu*, powerpc*-*-gnu*)m68k-*-uclinuxoldabi*)arm*-*-netbsd*, i[34567]86-*-netbsd*, vax-*-netbsd*, but not *-*-netbsdelf*)The i[34567]86-*-pe alias for Cygwin targets has also been obsoleted; users should configure for i[34567]86-*-cygwin* instead.
Certain configure options to control the set of libraries built with GCC on some targets have been obsoleted. On ARM targets, the options --disable-fpu, --disable-26bit, --disable-underscore, --disable-interwork, --disable-biendian and --disable-nofmult have been obsoleted. On MIPS targets, the options --disable-single-float, --disable-biendian and --disable-softfloat have been obsoleted.
-Ofast, has been introduced. It combines the existing optimization level -O3 with options that can affect standards compliance but result in better optimized code. For example, -Ofast enables -ffast-math.-flto=n (where n specifies the number of compilations to execute in parallel). GCC can also cooperate with a GNU make job server by specifying the -flto=jobserver option and adding + to the beginning of the Makefile rule executing the linker.-flto-partition=none. This may result in small code quality improvements.-fuse-linker-plugin command-line option.hidden visibility attribute. Consequently the use of -fwhole-program is not necessary in addition to LTO.externally_visible when the linker plugin is not used.iostream header.const and pure functions. Newly, noreturn functions are auto-detected. The -Wsuggest-attribute=[const|pure|noreturn] flag is available that informs users when adding attributes to headers might improve code generation.
-O2 and greater. The feature can be controlled via -fpartial-inlining. Partial inlining splits functions with short hot path to return. This allows more aggressive inlining of the hot path leading to better performance and often to code size reductions (because cold parts of functions are not duplicated).
-Os) was improved to better handle C++ programs with larger abstraction penalty, leading to smaller and faster code.main), functions used only at exit and functions detected to be cold are placed into separate text segment subsections. This extends the -freorder-functions feature and is controlled by the same switch. The goal is to improve the startup time of large C++ programs. Proper function placement requires linker support. GNU ld 2.21.51 on ELF targets was updated to place those functions together within the text section leading to better code locality and faster startup times of large C++ programs. The feature is also supported in the Apple linker. Support in the gold linker is planned.
-fstack-usage has been added. It makes the compiler output stack usage information for the program, on a per-function basis, in an auxiliary file.-fcombine-stack-adjustments has been added. It can be used to enable or disable the compiler's stack-slot combining pass which before was enabled automatically at -O1 and above, but could not be controlled on its own.-fstrict-volatile-bitfields has been added. Using it indicates that accesses to volatile bitfields should use a single access of the width of the field's type. This option can be useful for precisely defining and accessing memory-mapped peripheral registers from C or C++.-Wdouble-promotion, has been added that warns about cases where a value of type float is implicitly promoted to double. This is especially helpful for CPUs that handle the former in hardware, but emulate the latter in software.leaf was introduced. This attribute allows better inter-procedural optimization across calls to functions that return to the current unit only via returning or exception handling. This is the case for most library functions that have no callbacks.__int128 for targets having wide enough machine-mode support.callee_pop_aggregate allows to specify if the caller or callee is responsible for popping the aggregate return pointer value from the stack.#pragma GCC diagnostic has been added. For instance: #pragma GCC diagnostic error "-Wuninitialized" foo(a); /* error is given for this one */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wuninitialized" foo(b); /* no diagnostic for this one */ #pragma GCC diagnostic pop foo(c); /* error is given for this one */ #pragma GCC diagnostic pop foo(d); /* depends on command-line options */
-fmax-errors=N option is now supported. Using this option causes the compiler to exit after N errors have been issued.-std=c1x, or -std=gnu1x for C1X with GNU extensions. Note that this support is experimental and may change incompatibly in future releases for consistency with changes to the C1X standard draft. The following features are newly supported as described in the N1539 draft of C1X (with changes agreed at the March 2011 WG14 meeting); some other features were already supported with no compiler changes being needed, or have some support but not in full accord with N1539 (as amended). _Static_assert keyword)<float.h>-fplan9-extensions option directs the compiler to support some extensions for anonymous struct fields which are implemented by the Plan 9 compiler. A pointer to a struct may be automatically converted to a pointer to an anonymous field when calling a function, in order to make the types match. An anonymous struct field whose type is a typedef name may be referred to using the typedef name.constexpr (thanks to Gabriel Dos Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide), noexcept, unrestricted unions, range-based for loops (thanks to Rodrigo Rivas Costa), opaque enum declarations (thanks also to Rodrigo), implicitly deleted functions and implicit move constructors.-Wno-int-to-pointer-cast, which is now also available in C++.-fstrict-enums.-fnothrow-opt flag changes the semantics of a throw() exception specification to match the proposed semantics of the noexcept specification: just call terminate if an exception tries to propagate out of a function with such an exception specification. This dramatically reduces or eliminates the code size overhead from adding the exception specification.-Wnoexcept flag will suggest adding a noexcept qualifier to a function that the compiler can tell doesn't throw if it would change the value of a noexcept expression.-Wshadow option now warns if a local variable or type declaration shadows another type in C++. Note that the compiler will not warn if a local variable shadows a struct/class/enum, but will warn if it shadows an explicit typedef. class, struct, and union definitions.mutable on reference members (c++/33558). Use -fpermissive to allow the old, non-conforming behaviour. -fabi-version=5 or -fabi-version=0. -Wabi will now warn about code that uses the old mangling. struct A { A(); }; struct B : A { int i; }; const B b = B(); Use -fpermissive to allow the old, non-conforming behaviour. constexpr and nullptr. cstddef header as an implementation detail. Code that relied on that header being included as side-effect of including other standard headers will need to include cstddef explicitly.libquadmath library, GNU Fortran now also supports a quad-precision, kind=16 floating-point data type (REAL(16), COMPLEX(16)). As the data type is not fully supported in hardware, calculations might be one to two orders of magnitude slower than with the 4, 8 or 10 bytes floating-point data types. This change does not affect systems which support REAL(16) in hardware nor those which do not support libquadmath.-fwhole-file.-fwhole-file flag is now enabled by default. This improves code generation and diagnostics. It can be disabled using the deprecated -fno-whole-file flag.-M... flags of GCC; you may need to specify the -cpp option in addition. The dependencies take modules, Fortran's include, and CPP's #include into account. Note: Using -M for the module path is no longer supported, use -J instead.-Wconversion has been modified to only issue warnings where a conversion leads to information loss. This drastically reduces the number of warnings; -Wconversion is thus now enabled with -Wall. The flag -Wconversion-extra has been added and also warns about other conversions; -Wconversion-extra typically issues a huge number of warnings, most of which can be ignored.-Wunused-dummy-argument warns about unused dummy arguments and is included in -Wall. Before, -Wunused-variable also warned about unused dummy arguments.ASSOCIATE construct.a(:) = ... instead of a = ... for arrays and character strings – or disable the feature using -std=f95 or -fno-realloc-lhs.num_images() == 1); use the -fcoarray=single flag to enable it.STOP and the new ERROR STOP statements now support all constant expressions.CONTIGUOUS attribute.ALLOCATE with MOLD.STORAGE_SIZE intrinsic inquiry function.NORM2 and PARITY intrinsic functions.POPCNT and POPPAR for counting the number of 1 bits and returning the parity; BGE, BGT, BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR for combined left and right shifts, MASKL and MASKR for simple left and right justified masks, MERGE_BITS for a bitwise merge using a mask, SHIFTA, SHIFTL and SHIFTR for shift operations, and the transformational bit intrinsics IALL, IANY and IPARITY.EXECUTE_COMMAND_LINE intrinsic subroutine.IMPURE attribute for procedures, which allows for ELEMENTAL procedures without the restrictions of PURE.NULL()) and not allocated variables can be used as actual argument to optional non-pointer, non-allocatable dummy arguments, denoting an absent argument.TARGET attribute can be used as actual argument to POINTER dummies with INTENT(IN)NULL.EXIT statement (with construct-name) can now be used to leave not only the DO but also the ASSOCIATE, BLOCK, IF, SELECT CASE and SELECT TYPE constructs.INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS and CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV have been added; these arrays contain the supported kind values for the respective types.C_SIZEOF of the intrinsic module ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of ISO_FORTRAN_ENV have been implemented.ENTRY was added for -std=f2008; a line may start with a semicolon; for internal and module procedures END can be used instead of END SUBROUTINE and END FUNCTION; SELECTED_REAL_KIND now also takes a RADIX argument; intrinsic types are supported for TYPE(intrinsic-type-spec); multiple type-bound procedures can be declared in a single PROCEDURE statement; implied-shape arrays are supported for named constants (PARAMETER). The transformational, three argument versions of BESSEL_JN and BESSEL_YN were added – the elemental, two-argument version had been added in GCC 4.4; note that the transformational functions use a recurrence algorithm.Support for the Go programming language has been added to GCC. It is not enabled by default when you build GCC; use the --enable-languages configure option to build it. The driver program for compiling Go code is gccgo.
Go is currently known to work on GNU/Linux and RTEMS. Solaris support is in progress. It may or may not work on other platforms.
-fobjc-exceptions flag is now required to enable Objective-C exception and synchronization syntax (introduced by the keywords @try, @catch, @finally and @synchronized).-fobjc-std=objc1 command-line option.object.count is automatically converted into [object count] or [object setCount: ...] depending on context; for example if (object.count > 0) is automatically compiled into the equivalent of if ([object count] > 0) while object.count = 0; is automatically compiled into the equivalent ot [object setCount: 0];. The dot-syntax can be used with instance and class objects and with any setters or getters, no matter if they are part of a declared property or not.@property keyword, and are most commonly used in conjunction with the new Objective-C 2.0 dot-syntax. The nonatomic, readonly, readwrite, assign, retain, copy, setter and getter attributes are all supported. Marking declared properties with __attribute__ ((deprecated)) is supported too.@synthesize and @dynamic keywords are supported. @synthesize causes the compiler to automatically synthesize a declared property, while @dynamic is used to disable all warnings for a declared property for which no implementation is provided at compile time. Synthesizing declared properties requires runtime support in most useful cases; to be able to use it with the GNU runtime, appropriate helper functions have been added to the GNU Objective-C runtime ABI, and are implemented by the GNU Objective-C runtime library shipped with GCC.@optional keyword is supported. It allows you to mark methods or properties in a protocol as optional as opposed to required.@package keyword is supported. It has currently the same effect as the @public keyword.deprecated, sentinel, noreturn and format.unused, to mark an argument as unused in the implementation.deprecated.__GNU_LIBOBJC__ (with a value that is increased at every release where there is any change to the API) in objc/objc.h, making it easy to determine if the GNU Objective-C runtime library is being used, and if so, which version. Previous versions of the GNU Objective-C runtime library (and other Objective-C runtime libraries such as the Apple one) do not define this macro.objc/objc-api.h header file automatically selects the old API, while including the new objc/runtime.h header file automatically selects the new API. Support for the old API is being phased out and upgrading the software to use the new API is strongly recommended. To check for the availability of the new API, the __GNU_LIBOBJC__ macro can be used as older versions of the GNU Objective-C runtime library, which do not support the new API, do not define such a macro.@synchronized has been added.-mcpu=cortex-m4.__sync_fetch_and_add and friends are now inlined for supported architectures rather than calling into a kernel helper function.-O3.-mcpu= option.-mcpu=cortex-a15.-fstrict-volatile-bitfields by default.-fsplit-stack option permits programs to use a discontiguous stack. This is useful for threaded programs, in that it is no longer necessary to specify the maximum stack size when creating a thread. This feature is currently only implemented for 32-bit and 64-bit x86 GNU/Linux targets. -mfentry.-march=core2 and -mtune=core2 options.-march=corei7 and -mtune=corei7 options.-march=corei7-avx and -mtune=corei7-avx options.-march=btver1 and -mtune=btver1 options.-march=bdver1 and -mtune=bdver1 options.-fomit-frame-pointer. The default can be reverted to -fno-omit-frame-pointer by configuring GCC with the --enable-frame-pointer configure option.__float128 on 32-bit and 64-bit x86 targets.--with-fpmath=avx option.-O3 when optimizing for CPUs where prefetching is beneficial (AMD CPUs newer than K6).-mtbm.-mbmi.-march= and -mtune= name is loongson3a. "A" has been renamed "c". This constraint is used to select a floating-point register that can be used as the destination of a multiply-accumulate instruction. "A" and "D" have been added. These constraint letters resolve to all general registers when compiling for AM33, and resolve to address registers only or data registers only when compiling for MN10300. MDR register is represented in the compiler. One can access the register via the "z" constraint in inline assembly. It can be marked as clobbered or used as a local register variable via the "mdr" name. The compiler uses the RETF instruction if the function does not modify the MDR register, so it is important that inline assembly properly annotate any usage of the register. -mcpu=titan.-mrecip option has been added, which indicates whether the reciprocal and reciprocal square root instructions should be used.-mveclibabi=mass option can be used to enable the compiler to autovectorize mathematical functions using the Mathematical Acceleration Subsystem library.-msingle-pic-base option has been added, which instructs the compiler to avoid loading the PIC base register in function prologues. The PIC base register must be initialized by the runtime system.-mblock-move-inline-limit option has been added, which enables the user to control the maximum size of inlined memcpy calls and similar.-mcmodel=MODEL, controls this feature; valid values for MODEL are small, medium, or large.vec_ld and vec_st have been modified to generate the Altivec memory instructions LVX and STVX, even if the -mvsx option is used. In the initial GCC 4.5 release, these builtin functions were changed to generate VSX memory reference instructions instead of Altivec memory instructions, but there are differences between the two instructions. If the VSX instruction set is available, you can now use the new builtin functions vec_vsx_ld and vec_vsx_st which always generates the VSX memory instructions.-march=z196 option, the compiler will generate code making use of the following instruction facilities: -mtune=z196 option avoids the compare and branch instructions as well as the load address instruction with an index register as much as possible and performs instruction scheduling appropriate for the new out-of-order pipeline architecture.-m31 -mzarch options the generated code still conforms to the 32-bit ABI but uses the general purpose registers as 64-bit registers internally. This requires a Linux kernel saving the whole 64-bit registers when doing a context switch. Kernels providing that feature indicate that by the 'highgprs' string in /proc/cpuinfo.-O3.--with-tune=leon configure option and -mtune=leon compilation option, or the compiler can be built for the sparc-leon-{elf,linux} and sparc-leon3-{elf,linux} targets directly.-mfix-at697f has been added to enable the documented workaround for the single erratum of the Atmel AT697F processor.-mandroid and -mbionic options for details on building native code. At the moment, Android support is enabled only for ARM.CFString types has been added.CFString "toll-free bridged" as per the Mac OS X system tools. CFString is also recognized in the context of format attributes and arguments (see the documentation for format attributes for limitations). At present, 8-bit character types are supported..zerofill sections. For non-debug code, this can reduce object file size significantly.-fobjc-abi-version=1 where applicable - i.e. on Darwin 9/10 (OS X 10.5/10.6).-mdynamic-no-pic option has been enabled.-mdynamic-no-pic optimization has been added and is applicable to -m32 builds. The compiler bootstrap uses the option where appropriate.-mtune= has been changed.-mtune=core2.__float128) support on Darwin.-m64 enabled.-fsection-anchors option is now available although, presently, not heavily tested.-march=pentium4 (Solaris 10+) resp. -march=pentiumpro (Solaris 8/9).__float128) support on Solaris 2/x86.__m64 in MMX registers on Solaris 10+/x86 to match the Sun Studio 12.1+ compilers. This is an incompatible change. If you use such types, you must either recompile all your code with the new compiler or use the new -mvect8-ret-in-mem option to remain compatible with previous versions of GCC and Sun Studio.__thiscall calling-convention.ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.#pragma push_macro("macro-name") the current definition of macro-name is saved and can be restored with #pragma pop_macro("macro-name") to its saved definition.__float128) support on MinGW and Cygwin.install-strip make target is provided that installs stripped executables, and may install libraries with unneeded or debugging sections stripped. vec_ld and vec_st builtin functions generate Altivec memory instructions instead of VSX memory instructions, then you should be able to build the compiler with VSX instruction generation. Note: these changes concern developers that develop GCC itself or software that integrates with GCC, such as plugins, and not the general GCC users.
gengtype utility, which previously was internal to the GCC build process, has been enchanced to provide GC root information for plugins as necessary. ggc_alloc and friends was replaced with a type-safe alternative. This is the list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.1 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.6.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.6.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.6.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 2025-01-31.