This file contains information about GCC releases which has been generated automatically from the online release notes. It covers releases of GCC (and the former EGCS project) since EGCS 1.0, on the line of development that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2, see ONEWS. ====================================================================== http://gcc.gnu.org/gcc-4.5/index.html GCC 4.5 Release Series Apr 28, 2011 The [1]GNU project and the GCC developers are pleased to announce the release of GCC 4.5.3. This release is a bug-fix release, containing fixes for regressions in GCC 4.5.2 relative to previous releases of GCC. Release History GCC 4.5.3 Apr 28, 2011 ([2]changes) GCC 4.5.2 Dec 16, 2010 ([3]changes) GCC 4.5.1 Jul 31, 2010 ([4]changes) GCC 4.5.0 April 14, 2010 ([5]changes) References and Acknowledgements GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection. A list of [6]successful builds is updated as new information becomes available. The GCC developers would like to thank the numerous people that have contributed new features, improvements, bug fixes, and other changes as well as test results to GCC. This [7]amazing group of volunteers is what makes GCC successful. For additional information about GCC please refer to the [8]GCC project web site or contact the [9]GCC development mailing list. To obtain GCC please use [10]our mirror sites or [11]our SVN server. For questions related to the use of GCC, please consult these web pages and the [12]GCC manuals. If that fails, the [13]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [14]gcc@gcc.gnu.org. All of [15]our lists have public archives. Copyright (C) [16]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 [17]maintained by the GCC team. Last modified 2011-04-28[18]. References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-4.5/changes.html 3. http://gcc.gnu.org/gcc-4.5/changes.html 4. http://gcc.gnu.org/gcc-4.5/changes.html 5. http://gcc.gnu.org/gcc-4.5/changes.html 6. http://gcc.gnu.org/gcc-4.5/buildstat.html 7. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html 8. http://gcc.gnu.org/index.html 9. mailto:gcc@gcc.gnu.org 10. http://gcc.gnu.org/mirrors.html 11. http://gcc.gnu.org/svn.html 12. http://gcc.gnu.org/onlinedocs/ 13. mailto:gcc-help@gcc.gnu.org 14. mailto:gcc@gcc.gnu.org 15. http://gcc.gnu.org/lists.html 16. http://www.fsf.org/ 17. http://gcc.gnu.org/about.html 18. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.5/changes.html GCC 4.5 Release Series Changes, New Features, and Fixes Caveats * GCC now requires the [1]MPC library in order to build. See the [2]prerequisites page for version requirements. * Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.5. 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: + IRIX releases before 6.5 (mips-sgi-irix5*, mips-sgi-irix6.[0-4]) + Solaris 7 (*-*-solaris2.7) + Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*, alpha-dec-osf5.0*) + Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions can be found in the [3]announcement. Support for the classic POWER architecture implemented in the original RIOS and RIOS2 processors of the old IBM RS/6000 product line has been obsoleted in the rs6000 port. This does not affect the new generation Power and PowerPC architectures. * Support has been removed for all the [4]configurations obsoleted in GCC 4.4. * Support has been removed for the protoize and unprotoize utilities, obsoleted in GCC 4.4. * Support has been removed for tuning for Itanium1 (Merced) variants. Note that code tuned for Itanium2 should also run correctly on Itanium1. * GCC now generates unwind info also for epilogues. DWARF debuginfo generated by GCC now uses more features of DWARF3 than before, and also some DWARF4 features. GDB older than 7.0 is not able to handle either of these, so to debug GCC 4.5 generated binaries or libraries GDB 7.0 or later is needed. You can disable use of DWARF4 features with the -gdwarf-3 -gstrict-dwarf options, or use -gdwarf-2 -gstrict-dwarf to restrict GCC to just DWARF2, but epilogue unwind info is emitted unconditionally whenever unwind info is emitted. * On x86 targets, code containing floating-point calculations may run significantly slower when compiled with GCC 4.5 in strict C99 conformance mode than they did with earlier GCC versions. This is due to stricter standard conformance of the compiler and can be avoided by using the option -fexcess-precision=fast; also see [5]below. * The function attribute noinline no longer prevents GCC from cloning the function. A new attribute noclone has been introduced for this purpose. Cloning a function means that it is duplicated and the new copy is specialized for certain contexts (for example when a parameter is a known constant). General Optimizer Improvements * The -save-temps now takes an optional argument. The -save-temps and -save-temps=cwd switches write the temporary files in the current working directory based on the original source file. The -save-temps=obj switch will write files into the directory specified with the -o option, and the intermediate filenames are based on the output file. This will allow the user to get the compiler intermediate files when doing parallel builds without two builds of the same filename located in different directories from interfering with each other. * Debugging dumps are now created in the same directory as the object file rather than in the current working directory. This allows the user to get debugging dumps when doing parallel builds without two builds of the same filename interfering with each other. * GCC has been integrated with the [6]MPC library. This allows GCC to evaluate complex arithmetic at compile time [7]more accurately. It also allows GCC to evaluate calls to complex built-in math functions having constant arguments and replace them at compile time with their mathematically equivalent results. In doing so, GCC can generate correct results regardless of the math library implementation or floating point precision of the host platform. This also allows GCC to generate identical results regardless of whether one compiles in native or cross-compile configurations to a particular target. The following built-in functions take advantage of this new capability: cacos, cacosh, casin, casinh, catan, catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan, and ctanh. The float and long double variants of these functions (e.g. csinf and csinl) are also handled. * A new link-time optimizer has been added ([8]-flto). When this option is used, GCC generates a bytecode representation of each input file and writes it to special ELF sections in each object file. When the object files are linked together, all the function bodies are read from these ELF sections and instantiated as if they had been part of the same translation unit. This enables interprocedural optimizations to work across different files (and even different languages), potentially improving the performance of the generated code. To use the link-timer optimizer, -flto needs to be specified at compile time and during the final link. If the program does not require any symbols to be exported, it is possible to combine -flto and the experimental [9]-fwhopr with [10]-fwhole-program to allow the interprocedural optimizers to use more aggressive assumptions. * The automatic parallelization pass was enhanced to support parallelization of outer loops. * Automatic parallelization can be enabled as part of Graphite. In addition to -ftree-parallelize-loops=, specify -floop-parallelize-all to enable the Graphite-based optimization. * The infrastructure for optimizing based on [11]restrict qualified pointers has been rewritten and should result in code generation improvements. Optimizations based on restrict qualified pointers are now also available when using -fno-strict-aliasing. * There is a new optimization pass that attempts to change prototype of functions to avoid unused parameters, pass only relevant parts of structures and turn arguments passed by reference to arguments passed by value when possible. It is enabled by -O2 and above as well as -Os and can be manually invoked using the new command-line switch -fipa-sra. * GCC now optimize exception handling code. In particular cleanup regions that are proved to not have any effect are optimized out. New Languages and Language specific improvements All languages * The -fshow-column option is now on by default. This means error messages now have a column associated with them. Ada * Compilation of programs heavily using discriminated record types with variant parts has been sped up and generates more compact code. * Stack checking now works reasonably well on most plaforms. In some specific cases, stack overflows may still fail to be detected, but a compile-time warning will be issued for these cases. C family * If a header named in a #include directive is not found, the compiler exits immediately. This avoids a cascade of errors arising from declarations expected to be found in that header being missing. * A new built-in function __builtin_unreachable() has been added that tells the compiler that control will never reach that point. It may be used after asm statements that terminate by transferring control elsewhere, and in other places that are known to be unreachable. * The -Wlogical-op option now warns for logical expressions such as (c == 1 && c == 2) and (c != 1 || c != 2), which are likely to be mistakes. This option is disabled by default. * An asm goto feature has been added to allow asm statements that jump to C labels. * C++0x raw strings are supported for C++ and for C with -std=gnu99. * The deprecated attribute now takes an optional string argument, for example, __attribute__((deprecated("text string"))), that will be printed together with the deprecation warning. C * The -Wenum-compare option, which warns when comparing values of different enum types, now works for C. It formerly only worked for C++. This warning is enabled by -Wall. It may be avoided by using a type cast. * The -Wcast-qual option now warns about casts which are unsafe in that they permit const-correctness to be violated without further warnings. Specifically, it warns about cases where a qualifier is added when all the lower types are not const. For example, it warns about a cast from char ** to const char **. * The -Wc++-compat option is significantly improved. It issues new warnings for: + Using C++ reserved operator names as identifiers. + Conversions to enum types without explicit casts. + Using va_arg with an enum type. + Using different enum types in the two branches of ?:. + Using ++ or -- on a variable of enum type. + Using the same name as both a struct, union or enum tag and a typedef, unless the typedef refers to the tagged type itself. + Using a struct, union, or enum which is defined within another struct or union. + A struct field defined using a typedef if there is a field in the struct, or an enclosing struct, whose name is the typedef name. + Duplicate definitions at file scope. + Uninitialized const variables. + A global variable with an anonymous struct, union, or enum type. + Using a string constant to initialize a char array whose size is the length of the string. * The new -Wjump-misses-init option warns about cases where a goto or switch skips the initialization of a variable. This sort of branch is an error in C++ but not in C. This warning is enabled by -Wc++-compat. * GCC now ensures that a C99-conforming is present on most targets, and uses information about the types in this header to implement the Fortran bindings to those types. GCC does not ensure the presence of such a header, and does not implement the Fortran bindings, on the following targets: NetBSD, VxWorks, VMS, SymbianOS, WinCE, LynxOS, Netware, QNX, Interix, TPF. * GCC now implements C90- and C99-conforming rules for constant expressions. This may cause warnings or errors for some code using expressions that can be folded to a constant but are not constant expressions as defined by ISO C. * All known target-independent C90 and C90 Amendment 1 conformance bugs, and all known target-independent C99 conformance bugs not related to floating point or extended identifiers, have been fixed. * The C decimal floating point support now includes support for the FLOAT_CONST_DECIMAL64 pragma. * The named address space feature from ISO/IEC TR 18037 is now supported. This is currently only implemented for the SPU processor. C++ * Improved [12]experimental support for the upcoming C++0x ISO C++ standard, including support for raw strings, lambda expressions and explicit type conversion operators. * When printing the name of a class template specialization, G++ will now omit any template arguments which come from default template arguments. This behavior (and the pretty-printing of function template specializations as template signature and arguments) can be disabled with the -fno-pretty-templates option. * Access control is now applied to typedef names used in a template, which may cause G++ to reject some ill-formed code that was accepted by earlier releases. The -fno-access-control option can be used as a temporary workaround until the code is corrected. * Compilation time for code that uses templates should now scale linearly with the number of instantiations rather than quadratically, as template instantiations are now looked up using hash tables. * Declarations of functions that look like builtin declarations of library functions are only considered to be redeclarations if they are declared with extern "C". This may cause problems with code that omits extern "C" on hand-written declarations of C library functions such as abort or memcpy. Such code is ill-formed, but was accepted by earlier releases. * Diagnostics that used to complain about passing non-POD types to ... or jumping past the declaration of a non-POD variable now check for triviality rather than PODness, as per C++0x. * In C++0x mode local and anonymous classes are now allowed as template arguments, and in declarations of variables and functions with linkage, so long as any such declaration that is used is also defined ([13]DR 757). * Labels may now have attributes, as has been permitted for a while in C. This is only permitted when the label definition and the attribute specifier is followed by a semicolon--i.e., the label applies to an empty statement. The only useful attribute for a label is unused. * G++ now implements [14]DR 176. Previously G++ did not support using the injected-class-name of a template base class as a type name, and lookup of the name found the declaration of the template in the enclosing scope. Now lookup of the name finds the injected-class-name, which can be used either as a type or as a template, depending on whether or not the name is followed by a template argument list. As a result of this change, some code that was previously accepted may be ill-formed because 1. The injected-class-name is not accessible because it's from a private base, or 2. The injected-class-name cannot be used as an argument for a template template parameter. In either of these cases, the code can be fixed by adding a nested-name-specifier to explicitly name the template. The first can be worked around with -fno-access-control; the second is only rejected with -pedantic. * A new standard mangling for SIMD vector types has been added, to avoid name clashes on systems with vectors of varying length. By default the compiler still uses the old mangling, but emits aliases with the new mangling on targets that support strong aliases. Users can switch over entirely to the new mangling with -fabi-version=4 or -fabi-version=0. -Wabi will now warn about code that uses the old mangling. * The command-line option -ftemplate-depth-N is now written as -ftemplate-depth=N and the old form is deprecated. * Conversions between NULL and non-pointer types are now warned by default. The new option -Wno-conversion-null disables these warnings. Previously these warnings were only available when using -Wconversion explicitly. Runtime Library (libstdc++) * [15]Improved experimental support for the upcoming ISO C++ standard, C++0x, including: + Support for , , and . + Existing facilities now exploit explicit operators and the newly implemented core C++0x features. * An experimental [16]profile mode has been added. This is an implementation of many C++ standard library constructs with an additional analysis layer that gives performance improvement advice based on recognition of suboptimal usage patterns. For example, #include int main() { std::vector v; for (int k = 0; k < 1024; ++k) v.insert(v.begin(), k); } When instrumented via the profile mode, can return suggestions about the initial size and choice of the container used as follows: vector-to-list: improvement = 5: call stack = 0x804842c ... : advice = change std::vector to std::list vector-size: improvement = 3: call stack = 0x804842c ... : advice = change initial container size from 0 to 1024 These constructs can be substituted for the normal libstdc++ constructs on a piecemeal basis, or all existing components can be transformed via the -D_GLIBCXX_PROFILE macro. * [17]Support for decimal floating-point arithmetic (aka ISO C++ TR 24733) has been added. This support is in header file , uses namespace std::decimal, and includes classes decimal32, decimal64, and decimal128. * Sources have been audited for application of function attributes nothrow, const, pure, and noreturn. * Python pretty-printers have been added for many standard library components that simplify the internal representation and present a more intuitive view of components when used with appropriately-advanced versions of GDB. For more information, please consult the more [18]detailed description. * The default behavior for comparing typeinfo names has changed, so in , __GXX_MERGED_TYPEINFO_NAMES now defaults to zero. * The new -static-libstdc++ option directs g++ to link the C++ library statically, even if the default would normally be to link it dynamically. Fortran * The COMMON default padding has been changed - instead of adding the padding before a variable it is now added afterwards, which increases the compatibility with other vendors and helps to obtain the correct output in some cases. Cf. also the -falign-commons option ([19]added in 4.4). * The -finit-real= option now also supports the value snan for signalling not-a-number; to be effective, one additionally needs to enable trapping (e.g. via -ffpe-trap=). Note: Compile-time optimizations can turn a signalling NaN into a quiet one. * The new option -fcheck= has been added with the options bounds, array-temps, do, pointer, and recursive. The bounds and array-temps options are equivalent to -fbounds-check and -fcheck-array-temporaries. The do option checks for invalid modification of loop iteration variables, and the recursive option tests for recursive calls to subroutines/functions which are not marked as recursive. With pointer pointer association checks in calls are performed; however, neither undefined pointers nor pointers in expressions are handled. Using -fcheck=all enables all these run-time checks. * The run-time checking -fcheck=bounds now warns about invalid string lengths of character dummy arguments. Additionally, more compile-time checks have been added. * The new option [20]-fno-protect-parens has been added; if set, the compiler may reorder REAL and COMPLEX expressions without regard to parentheses. * GNU Fortran no longer links against libgfortranbegin. As before, MAIN__ (assembler symbol name) is the actual Fortran main program, which is invoked by the main function. However, main is now generated and put in the same object file as MAIN__. For the time being, libgfortranbegin still exists for backward compatibility. For details see the new [21]Mixed-Language Programming chapter in the manual. * The I/O library was restructured for performance and cleaner code. * Array assignments and WHERE are now run in parallel when OpenMP's WORKSHARE is used. * The experimental option -fwhole-file was added. The option allows whole-file checking of procedure arguments and allows for better optimizations. It can also be used with -fwhole-program, which is now also supported in gfortran. * More Fortran 2003 and Fortran 2008 mathematical functions can now be used as initialization expressions. * Some extended attributes such as STDCALL are now supported via the [22]GCC$ compiler directive. * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN intrinsic behaves now as if zero were always positive. * For legacy compatibiliy: On Cygwin and MinGW, the special files CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now supported. * Fortran 2003 support has been extended: + Procedure-pointer function results and procedure-pointer components (including PASS), + allocatable scalars (experimental), + DEFERRED type-bound procedures, + the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements have been implemented. + The ALLOCATE statement supports type-specs and the SOURCE= argument. + OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC type-bound procedure (i.e. as type-bound operators). + Rounding (ROUND=, RZ, ...) for output is now supported. + The INT_FAST{8,16,32,64,128}_T kind type parameters of the intrinsic module ISO_C_BINDING are now supported, except for the targets listed above as ones where GCC does not have type information. + Extensible derived types with type-bound procedure or procedure pointer with PASS attribute now have to use CLASS in line with the Fortran 2003 standard; the workaround to use TYPE is no longer supported. + [23]Experimental, incomplete support for polymorphism, including CLASS, SELECT TYPE and dynamic dispatch of type-bound procedure calls. Some features do not work yet such as unlimited polymorphism (CLASS(*)). * Fortran 2008 support has been extended: + The OPEN statement now supports the NEWUNIT= option, which returns a unique file unit, thus preventing inadvertent use of the same unit in different parts of the program. + Support for unlimited format items has been added. + The INT{8,16,32} and REAL{32,64,128} kind type parameters of the intrinsic module ISO_FORTRAN_ENV are now supported. + Using complex arguments with TAN, SINH, COSH, TANH, ASIN, ACOS, and ATAN is now possible; the functions ASINH, ACOSH, and ATANH have been added (for real and complex arguments) and ATAN(Y,X) is now an alias for ATAN2(Y,X). + The BLOCK construct has been implemented. Java (GCJ) New Targets and Target Specific Improvements AIX * Full cross-toolchain support now available with GNU Binutils ARM * GCC now supports the Cortex-M0 and Cortex-A5 processors. * GCC now supports the ARM v7E-M architecture. * GCC now supports VFPv4-based FPUs and FPUs with single-precision-only VFP. * GCC has many improvements to optimization for other ARM processors, including scheduling support for the integer pipeline on Cortex-A9. * GCC now supports the IEEE 754-2008 half-precision floating-point type, and a variant ARM-specific half-precision type. This type is specified using __fp16, with the layout determined by -mfp16-format. With appropriate -mfpu options, the Cortex-A9 and VFPv4 half-precision instructions will be used. * GCC now supports the variant of AAPCS that uses VFP registers for parameter passing and return values. AVR * The -mno-tablejump option has been removed because it has the same effect as the -fno-jump-tables option. * Added support for these new AVR devices: + ATmega8U2 + ATmega16U2 + ATmega32U2 IA-32/x86-64 * GCC now will set the default for -march= based on the configure target. * GCC now supports handling floating-point excess precision arising from use of the x87 floating-point unit in a way that conforms to ISO C99. This is enabled with -fexcess-precision=standard and with standards conformance options such as -std=c99, and may be disabled using -fexcess-precision=fast. * Support for the Intel Atom processor is now available through the -march=atom and -mtune=atom options. * A new -mcrc32 option is now available to enable crc32 intrinsics. * A new -mmovbe option is now available to enable GCC to use the movbe instruction to implement __builtin_bswap32 and __builtin_bswap64. * SSE math now can be enabled by default at configure time with the new --with-fpmath=sse option. * There is a new intrinsic header file, . It should be included before using any IA-32/x86-64 intrinsics. * Support for the XOP, FMA4, and LWP instruction sets for the AMD Orochi processors are now available with the -mxop, -mfma4, and -mlwp options. * The -mabm option enables GCC to use the popcnt and lzcnt instructions on AMD processors. * The -mpopcnt option enables GCC to use the popcnt instructions on both AMD and Intel processors. M68K/ColdFire * GCC now supports ColdFire 51xx, 5221x, 5225x, 52274, 52277, 5301x and 5441x devices. * GCC now supports thread-local storage (TLS) on M68K and ColdFire processors. MeP Support has been added for the Toshiba Media embedded Processor (MeP, or mep-elf) embedded target. MIPS * GCC now supports MIPS 1004K processors. * GCC can now be configured with options --with-arch-32, --with-arch-64, --with-tune-32 and --with-tune-64 to control the default optimization separately for 32-bit and 64-bit modes. * MIPS targets now support an alternative _mcount interface, in which register $12 points to the function's save slot for register $31. This interface is selected by the -mcount-ra-address option; see the documentation for more details. * GNU/Linux targets can now generate read-only .eh_frame sections. This optimization requires GNU binutils 2.20 or above, and is only available if GCC is configured with a suitable version of binutils. * GNU/Linux targets can now attach special relocations to indirect calls, so that the linker can turn them into direct jumps or branches. This optimization requires GNU binutils 2.20 or later, and is automatically selected if GCC is configured with an appropriate version of binutils. It can be explicitly enabled or disabled using the -mrelax-pic-calls command-line option. * GCC now generates more heavily-optimized atomic operations on Octeon processors. * MIPS targets now support the -fstack-protector option. * GCC now supports an -msynci option, which specifies that synci is enough to flush the instruction cache, without help from the operating system. GCC uses this information to optimize automatically-generated cache flush operations, such as those used for nested functions in C. There is also a --with-synci configure-time option, which makes -msynci the default. * GCC supports four new function attributes for interrupt handlers: interrupt, use_shadow_register_set, keep_interrupts_masked and use_debug_exception_return. See the documentation for more details about these attributes. picochip RS/6000 (POWER/PowerPC) * GCC now supports the Power ISA 2.06, which includes the VSX instructions that add vector 64-bit floating point support, new population count instructions, and conversions between floating point and unsigned types. * Support for the power7 processor is now available through the -mcpu=power7 and -mtune=power7. * GCC will now vectorize loops that contain simple math functions like copysign when generating code for altivec or VSX targets. * Support for the A2 processor is now available through the -mcpu=a2 and -mtune=a2 options. * Support for the 476 processor is now available through the -mcpu={476,476fp} and -mtune={476,476fp} options. * Support for the e500mc64 processor is now available through the -mcpu=e500mc64 and -mtune=e500mc64 options. * GCC can now be configured with options --with-cpu-32, --with-cpu-64, --with-tune-32 and --with-tune-64 to control the default optimization separately for 32-bit and 64-bit modes. RX Support has been added for the Renesas RX Processor (rx-elf) target. Operating Systems Windows (Cygwin and MinGW) * GCC now installs all the major language runtime libraries as DLLs when configured with the --enable-shared option. * GCC now makes use of the new support for aligned common variables in versions of binutils >= 2.20 to fix bugs in the support for SSE data types. * Improvements to the libffi support library increase the reliability of code generated by GCJ on all Windows platforms. Libgcj is enabled by default for the first time. * Libtool improvements simplify installation by placing the generated DLLs in the correct binaries directory. * Numerous other minor bugfixes and improvements, and substantial enhancements to the Fortran language support library. Documentation improvements Other significant improvements Plugins * It is now possible to extend the compiler without having to modify its source code. A new option -fplugin=file.so tells GCC to load the shared object file.so and execute it as part of the compiler. The internal documentation describes the details on how plugins can interact with the compiler. Installation changes * The move to newer autotools changed default installation directories and switches to control them: The --with-datarootdir, --with-docdir, --with-pdfdir, and --with-htmldir switches are not used any more. Instead, you can now use --datarootdir, --docdir, --htmldir, and --pdfdir. The default installation directories have changed as follows according to the GNU Coding Standards: datarootdir read-only architecture-independent data root [PREFIX/share] localedir locale-specific message catalogs [DATAROOTDIR/locale] docdir documentation root [DATAROOTDIR/doc/PACKAGE] htmldir html documentation [DOCDIR] dvidir dvi documentation [DOCDIR] pdfdir pdf documentation [DOCDIR] psdir ps documentation [DOCDIR] The following variables have new default values: datadir read-only architecture-independent data [DATAROOTDIR] infodir info documentation [DATAROOTDIR/info] mandir man documentation [DATAROOTDIR/man] GCC 4.5.1 This is the [24]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). All languages * GCC's new link-time optimizer ([25]-flto) now also works on a few non-ELF targets: + Cygwin (*-cygwin*) + MinGW (*-mingw*) + Darwin on x86-64 (x86_64-apple-darwin*) LTO is not enabled by default for these targets. To enable LTO, you should configure with the --enable-lto option. GCC 4.5.2 This is the [26]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.5.3 This is the [27]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). On the PowerPC compiler, the altivec builtin functions 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. For questions related to the use of GCC, please consult these web pages and the [28]GCC manuals. If that fails, the [29]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [30]gcc@gcc.gnu.org. All of [31]our lists have public archives. Copyright (C) [32]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 [33]maintained by the GCC team. Last modified 2011-04-25[34]. References 1. http://www.multiprecision.org/ 2. http://gcc.gnu.org/install/prerequisites.html 3. http://gcc.gnu.org/ml/gcc/2010-01/msg00510.html 4. http://gcc.gnu.org/gcc-4.4/changes.html#obsoleted 5. http://gcc.gnu.org/gcc-4.5/changes.html#x86 6. http://www.multiprecision.org/ 7. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30789 8. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801 9. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802 10. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800 11. http://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html 12. http://gcc.gnu.org/gcc-4.5/cxx0x_status.html 13. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757 14. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176 15. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x 16. http://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html 17. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733 18. http://sourceware.org/gdb/wiki/STLSupport 19. http://gcc.gnu.org/gcc-4.4/changes.html 20. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html 21. http://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html 22. http://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html 23. http://gcc.gnu.org/wiki/OOP 24. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1 25. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801 26. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2 27. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2 28. http://gcc.gnu.org/onlinedocs/ 29. mailto:gcc-help@gcc.gnu.org 30. mailto:gcc@gcc.gnu.org 31. http://gcc.gnu.org/lists.html 32. http://www.fsf.org/ 33. http://gcc.gnu.org/about.html 34. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.4/index.html GCC 4.4 Release Series April 16, 2011 The [1]GNU project and the GCC developers are pleased to announce the release of GCC 4.4.6. This release is a bug-fix release, containing fixes for regressions in GCC 4.4.5 relative to previous releases of GCC. Release History GCC 4.4.6 April 16, 2011 ([2]changes) GCC 4.4.5 October 1, 2010 ([3]changes) GCC 4.4.4 April 29, 2010 ([4]changes) GCC 4.4.3 January 21, 2010 ([5]changes) GCC 4.4.2 October 15, 2009 ([6]changes) GCC 4.4.1 July 22, 2009 ([7]changes) GCC 4.4.0 April 21, 2009 ([8]changes) References and Acknowledgements GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection. A list of [9]successful builds is updated as new information becomes available. The GCC developers would like to thank the numerous people that have contributed new features, improvements, bug fixes, and other changes as well as test results to GCC. This [10]amazing group of volunteers is what makes GCC successful. For additional information about GCC please refer to the [11]GCC project web site or contact the [12]GCC development mailing list. To obtain GCC please use [13]our mirror sites or [14]our SVN server. For questions related to the use of GCC, please consult these web pages and the [15]GCC manuals. If that fails, the [16]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [17]gcc@gcc.gnu.org. All of [18]our lists have public archives. Copyright (C) [19]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 [20]maintained by the GCC team. Last modified 2011-04-25[21]. References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-4.4/changes.html 3. http://gcc.gnu.org/gcc-4.4/changes.html 4. http://gcc.gnu.org/gcc-4.4/changes.html 5. http://gcc.gnu.org/gcc-4.4/changes.html 6. http://gcc.gnu.org/gcc-4.4/changes.html 7. http://gcc.gnu.org/gcc-4.4/changes.html 8. http://gcc.gnu.org/gcc-4.4/changes.html 9. http://gcc.gnu.org/gcc-4.4/buildstat.html 10. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html 11. http://gcc.gnu.org/index.html 12. mailto:gcc@gcc.gnu.org 13. http://gcc.gnu.org/mirrors.html 14. http://gcc.gnu.org/svn.html 15. http://gcc.gnu.org/onlinedocs/ 16. mailto:gcc-help@gcc.gnu.org 17. mailto:gcc@gcc.gnu.org 18. http://gcc.gnu.org/lists.html 19. http://www.fsf.org/ 20. http://gcc.gnu.org/about.html 21. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.4/changes.html GCC 4.4 Release Series Changes, New Features, and Fixes The latest release in the 4.4 release series is [1]GCC 4.4.6. Caveats * __builtin_stdarg_start has been completely removed from GCC. Support for had been deprecated since GCC 4.0. Use __builtin_va_start as a replacement. * Some of the errors issued by the C++ front end that could be downgraded to warnings in previous releases by using -fpermissive are now warnings by default. They can be converted into errors by using -pedantic-errors. * Use of the cpp assertion extension will now emit a warning when -Wdeprecated or -pedantic is used. This extension has been deprecated for many years, but never warned about. * Packed bit-fields of type char were not properly bit-packed on many targets prior to GCC 4.4. On these targets, the fix in GCC 4.4 causes an ABI change. For example there is no longer a 4-bit padding between field a and b in this structure: struct foo { char a:4; char b:8; } __attribute__ ((packed)); There is a new warning to help identify fields that are affected: foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4 The warning can be disabled with -Wno-packed-bitfield-compat. * On ARM EABI targets, the C++ mangling of the va_list type has been changed to conform to the current revision of the EABI. This does not affect the libstdc++ library included with GCC. * The SCOUNT and POS bits of the MIPS DSP control register are now treated as global. Previous versions of GCC treated these fields as call-clobbered instead. * The MIPS port no longer recognizes the h asm constraint. It was necessary to remove this constraint in order to avoid generating unpredictable code sequences. One of the main uses of the h constraint was to extract the high part of a multiplication on 64-bit targets. For example: asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y)); You can now achieve the same effect using 128-bit types: typedef unsigned int uint128_t __attribute__((mode(TI))); result = ((uint128_t) x * y) >> 64; The second sequence is better in many ways. For example, if x and y are constants, the compiler can perform the multiplication at compile time. If x and y are not constants, the compiler can schedule the runtime multiplication better than it can schedule an asm statement. * Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.4. 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: + Generic a.out on IA32 and m68k (i[34567]86-*-aout*, m68k-*-aout*) + Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*, armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*, sh-*-*). This does not affect other more specific targets using the COFF object format on those architectures, or the more specific H8300 and SH targets (h8300-*-rtems*, h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*, sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks). + 2BSD on PDP-11 (pdp11-*-bsd) + AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*, powerpc-ibm-aix4.[12]*) + Tuning support for Itanium1 (Merced) variants. Note that code tuned for Itanium2 should also run correctly on Itanium1. * The protoize and unprotoize utilities have been obsoleted and will be removed in GCC 4.5. These utilities have not been installed by default since GCC 3.0. * Support has been removed for all the [2]configurations obsoleted in GCC 4.3. * Unknown -Wno-* options are now silently ignored by GCC if no other diagnostics are issued. If other diagnostics are issued, then GCC warns about the unknown options. * More information on porting to GCC 4.4 from previous versions of GCC can be found in the [3]porting guide for this release. General Optimizer Improvements * A new command-line switch -findirect-inlining has been added. When turned on it allows the inliner to also inline indirect calls that are discovered to have known targets at compile time thanks to previous inlining. * A new command-line switch -ftree-switch-conversion has been added. This new pass turns simple initializations of scalar variables in switch statements into initializations from a static array, given that all the values are known at compile time and the ratio between the new array size and the original switch branches does not exceed the parameter --param switch-conversion-max-branch-ratio (default is eight). * A new command-line switch -ftree-builtin-call-dce has been added. This optimization eliminates unnecessary calls to certain builtin functions when the return value is not used, in cases where the calls can not be eliminated entirely because the function may set errno. This optimization is on by default at -O2 and above. * A new command-line switch -fconserve-stack directs the compiler to minimize stack usage even if it makes the generated code slower. This affects inlining decisions. * When the assembler supports it, the compiler will now emit unwind information using assembler .cfi directives. This makes it possible to use such directives in inline assembler code. The new option -fno-dwarf2-cfi-asm directs the compiler to not use .cfi directives. * The [4]Graphite branch has been merged. This merge has brought in a new framework for loop optimizations based on a polyhedral intermediate representation. These optimizations apply to all the languages supported by GCC. The following new code transformations are available in GCC 4.4: + -floop-interchange performs loop interchange transformations on loops. Interchanging two nested loops switches the inner and outer loops. For example, given a loop like: DO J = 1, M DO I = 1, N A(J, I) = A(J, I) * C ENDDO ENDDO loop interchange will transform the loop as if the user had written: DO I = 1, N DO J = 1, M A(J, I) = A(J, I) * C ENDDO ENDDO which can be beneficial when N is larger than the caches, because in Fortran, the elements of an array are stored in memory contiguously by column, and the original loop iterates over rows, potentially creating at each access a cache miss. + -floop-strip-mine performs loop strip mining transformations on loops. Strip mining splits a loop into two nested loops. The outer loop has strides equal to the strip size and the inner loop has strides of the original loop within a strip. For example, given a loop like: DO I = 1, N A(I) = A(I) + C ENDDO loop strip mining will transform the loop as if the user had written: DO II = 1, N, 4 DO I = II, min (II + 3, N) A(I) = A(I) + C ENDDO ENDDO + -floop-block performs loop blocking transformations on loops. Blocking strip mines each loop in the loop nest such that the memory accesses of the element loops fit inside caches. For example, given a loop like: DO I = 1, N DO J = 1, M A(J, I) = B(I) + C(J) ENDDO ENDDO loop blocking will transform the loop as if the user had written: DO II = 1, N, 64 DO JJ = 1, M, 64 DO I = II, min (II + 63, N) DO J = JJ, min (JJ + 63, M) A(J, I) = B(I) + C(J) ENDDO ENDDO ENDDO ENDDO which can be beneficial when M is larger than the caches, because the innermost loop will iterate over a smaller amount of data that can be kept in the caches. * A new register allocator has replaced the old one. It is called integrated register allocator (IRA) because coalescing, register live range splitting, and hard register preferencing are done on-the-fly during coloring. It also has better integration with the reload pass. IRA is a regional register allocator which uses modern Chaitin-Briggs coloring instead of Chow's priority coloring used in the old register allocator. More info about IRA internals and options can be found in the GCC manuals. * A new instruction scheduler and software pipeliner, based on the selective scheduling approach, has been added. The new pass performs instruction unification, register renaming, substitution through register copies, and speculation during scheduling. The software pipeliner is able to pipeline non-countable loops. The new pass is targeted at scheduling-eager in-order platforms. In GCC 4.4 it is available for the Intel Itanium platform working by default as the second scheduling pass (after register allocation) at the -O3 optimization level. * When using -fprofile-generate with a multi-threaded program, the profile counts may be slightly wrong due to race conditions. The new -fprofile-correction option directs the compiler to apply heuristics to smooth out the inconsistencies. By default the compiler will give an error message when it finds an inconsistent profile. * The new -fprofile-dir=PATH option permits setting the directory where profile data files are stored when using -fprofile-generate and friends, and the directory used when reading profile data files using -fprofile-use and friends. New warning options * The new -Wframe-larger-than=NUMBER option directs GCC to emit a warning if any stack frame is larger than NUMBER bytes. This may be used to help ensure that code fits within a limited amount of stack space. * The command-line option -Wlarger-than-N is now written as -Wlarger-than=N and the old form is deprecated. * The new -Wno-mudflap option disables warnings about constructs which can not be instrumented when using -fmudflap. New Languages and Language specific improvements * Version 3.0 of the [5]OpenMP specification is now supported for the C, C++, and Fortran compilers. * New character data types, per [6]TR 19769: New character types in C, are now supported for the C compiler in -std=gnu99 mode, as __CHAR16_TYPE__ and __CHAR32_TYPE__, and for the C++ compiler in -std=c++0x and -std=gnu++0x modes, as char16_t and char32_t too. C family * A new optimize attribute was added to allow programmers to change the optimization level and particular optimization options for an individual function. You can also change the optimization options via the GCC optimize pragma for functions defined after the pragma. The GCC push_options pragma and the GCC pop_options pragma allow you temporarily save and restore the options used. The GCC reset_options pragma restores the options to what was specified on the command line. * Uninitialized warnings do not require enabling optimization anymore, that is, -Wuninitialized can be used together with -O0. Nonetheless, the warnings given by -Wuninitialized will probably be more accurate if optimization is enabled. * -Wparentheses now warns about expressions such as (!x | y) and (!x & y). Using explicit parentheses, such as in ((!x) | y), silences this warning. * -Wsequence-point now warns within if, while,do while and for conditions, and within for begin/end expressions. * A new option -dU is available to dump definitions of preprocessor macros that are tested or expanded. C++ * [7]Improved experimental support for the upcoming ISO C++ standard, C++0x. Including support for auto, inline namespaces, generalized initializer lists, defaulted and deleted functions, new character types, and scoped enums. * Those errors that may be downgraded to warnings to build legacy code now mention -fpermissive when -fdiagnostics-show-option is enabled. * -Wconversion now warns if the result of a static_cast to enumeral type is unspecified because the value is outside the range of the enumeral type. * -Wuninitialized now warns if a non-static reference or non-static const member appears in a class without constructors. * G++ now properly implements value-initialization, so objects with an initializer of () and an implicitly defined default constructor will be zero-initialized before the default constructor is called. Runtime Library (libstdc++) * [8]Improved experimental support for the upcoming ISO C++ standard, C++0x, including: + Support for , , , , , , , , and . + unique_ptr, additions, exception propagation, and support for the new character types in and . + Existing facilities now exploit initializer lists, defaulted and deleted functions, and the newly implemented core C++0x features. + Some standard containers are more efficient together with stateful allocators, i.e., no allocator is constructed on the fly at element construction time. * Experimental support for non-standard pointer types in containers. * The long standing libstdc++/30928 has been fixed for targets running glibc 2.10 or later. * As usual, many small and larger bug fixes, in particular quite a few corner cases in . Fortran * GNU Fortran now employs libcpp directly instead of using cc1 as an external preprocessor. The [9]-cpp option was added to allow manual invocation of the preprocessor without relying on filename extensions. * The [10]-Warray-temporaries option warns about array temporaries generated by the compiler, as an aid to optimization. * The [11]-fcheck-array-temporaries option has been added, printing a notification at run time, when an array temporary had to be created for an function argument. Contrary to -Warray-temporaries the warning is only printed if the array is noncontiguous. * Improved generation of DWARF debugging symbols * If using an intrinsic not part of the selected standard (via -std= and -fall-intrinsics) gfortran will now treat it as if this procedure were declared EXTERNAL and try to link to a user-supplied procedure. -Wintrinsics-std will warn whenever this happens. The now-useless option -Wnonstd-intrinsic was removed. * The flag -falign-commons has been added to control the alignment of variables in COMMON blocks, which is enabled by default in line with previous GCC version. Using -fno-align-commons one can force commons to be contiguous in memory as required by the Fortran standard, however, this slows down the memory access. The option -Walign-commons, which is enabled by default, warns when padding bytes were added for alignment. The proper solution is to sort the common objects by decreasing storage size, which avoids the alignment problems. * Fortran 2003 support has been extended: + Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is now supported (except internal reads from/writes to wide strings). [12]-fbackslash now supports also \unnnn and \Unnnnnnnn to enter Unicode characters. + Asynchronous I/O (implemented as synchronous I/O) and the decimal=, size=, sign=, pad=, blank=, and delim= specifiers are now supported in I/O statements. + Support for Fortran 2003 structure constructors and for array constructor with typespec has been added. + Procedure Pointers (but not yet as component in derived types and as function results) are now supported. + Abstract types, type extension, and type-bound procedures (both PROCEDURE and GENERIC but not as operators). Note: As CLASS/polymorphyic types are not implemented, type-bound procedures with PASS accept as non-standard extension TYPE arguments. * Fortran 2008 support has been added: + The -std=f2008 option and support for the file extensions .f2008 and .F2008 has been added. + The g0 format descriptor is now supported. + The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH, ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED are now available (some of them existed as GNU extension before). Note: The hyperbolic functions are not yet supporting complex arguments and the three- argument version of BESSEL_*N is not available. + The bit intrinsics LEADZ and TRAILZ have been added. Java (GCJ) Ada * The Ada runtime now supports multilibs on many platforms including x86_64, SPARC and PowerPC. Their build is enabled by default. New Targets and Target Specific Improvements ARM * GCC now supports optimizing for the Cortex-A9, Cortex-R4 and Cortex-R4F processors and has many other improvements to optimization for ARM processors. * GCC now supports the VFPv3 variant with 16 double-precision registers with -mfpu=vfpv3-d16. The option -mfpu=vfp3 has been renamed to -mfpu=vfpv3. * GCC now supports the -mfix-cortex-m3-ldrd option to work around an erratum on Cortex-M3 processors. * GCC now supports the __sync_* atomic operations for ARM EABI GNU/Linux. * The section anchors optimization is now enabled by default when optimizing for ARM. * GCC now uses a new EABI-compatible profiling interface for EABI targets. This requires a function __gnu_mcount_nc, which is provided by GNU libc versions 2.8 and later. AVR * The -mno-tablejump option has been deprecated because it has the same effect as the -fno-jump-tables option. * Added support for these new AVR devices: + ATA6289 + ATtiny13A + ATtiny87 + ATtiny167 + ATtiny327 + ATmega8C1 + ATmega16C1 + ATmega32C1 + ATmega8M1 + ATmega16M1 + ATmega32M1 + ATmega32U4 + ATmega16HVB + ATmega4HVD + ATmega8HVD + ATmega64C1 + ATmega64M1 + ATmega16U4 + ATmega32U6 + ATmega128RFA1 + AT90PWM81 + AT90SCR100 + M3000F + M3000S + M3001B IA-32/x86-64 * Support for Intel AES built-in functions and code generation is available via -maes. * Support for Intel PCLMUL built-in function and code generation is available via -mpclmul. * Support for Intel AVX built-in functions and code generation is available via -mavx. * Automatically align the stack for local variables with alignment requirement. * GCC can now utilize the SVML library for vectorizing calls to a set of C99 functions if -mveclibabi=svml is specified and you link to an SVML ABI compatible library. * On x86-64, the ABI has been changed in the following cases to conform to the x86-64 ABI: + Passing/returning structures with flexible array member: struct foo { int i; int flex[]; }; + Passing/returning structures with complex float member: struct foo { int i; __complex__ float f; }; + Passing/returning unions with long double member: union foo { int x; long double ld; }; Code built with previous versions of GCC that uses any of these is not compatible with code built with GCC 4.4.0 or later. * A new target attribute was added to allow programmers to change the target options like -msse2 or -march=k8 for an individual function. You can also change the target options via the GCC target pragma for functions defined after the pragma. * GCC can now be configured with options --with-arch-32, --with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and --with-tune-64 to control the default optimization separately for 32-bit and 64-bit modes. IA-32/IA64 * Support for __float128 (TFmode) IEEE quad type and corresponding TCmode IEEE complex quad type is available via the soft-fp library on IA-32/IA64 targets. This includes basic arithmetic operations (addition, subtraction, negation, multiplication and division) on __float128 real and TCmode complex values, the full set of IEEE comparisons between __float128 values, conversions to and from float, double and long double floating point types, as well as conversions to and from signed or unsigned integer, signed or unsigned long integer and signed or unsigned quad (TImode, IA64 only) integer types. Additionally, all operations generate the full set of IEEE exceptions and support the full set of IEEE rounding modes. M68K/ColdFire * GCC now supports instruction scheduling for ColdFire V1, V3 and V4 processors. (Scheduling support for ColdFire V2 processors was added in GCC 4.3.) * GCC now supports the -mxgot option to support programs requiring many GOT entries on ColdFire. * The m68k-*-linux-gnu target now builds multilibs by default. MIPS * MIPS Technologies have extended the original MIPS SVR4 ABI to include support for procedure linkage tables (PLTs) and copy relocations. These extensions allow GNU/Linux executables to use a significantly more efficient code model than the one defined by the original ABI. GCC support for this code model is available via a new command-line option, -mplt. There is also a new configure-time option, --with-mips-plt, to make -mplt the default. The new code model requires support from the assembler, the linker, and the runtime C library. This support is available in binutils 2.19 and GLIBC 2.9. * GCC can now generate MIPS16 code for 32-bit GNU/Linux executables and 32-bit GNU/Linux shared libraries. This feature requires GNU binutils 2.19 or above. * Support for RMI's XLR processor is now available through the -march=xlr and -mtune=xlr options. * 64-bit targets can now perform 128-bit multiplications inline, instead of relying on a libgcc function. * Native GNU/Linux toolchains now support -march=native and -mtune=native, which select the host processor. * GCC now supports the R10K, R12K, R14K and R16K processors. The canonical -march= and -mtune= names for these processors are r10000, r12000, r14000 and r16000 respectively. * GCC can now work around the side effects of speculative execution on R10K processors. Please see the documentation of the -mr10k-cache-barrier option for details. * Support for the MIPS64 Release 2 instruction set has been added. The option -march=mips64r2 enables generation of these instructions. * GCC now supports Cavium Networks' Octeon processor. This support is available through the -march=octeon and -mtune=octeon options. * GCC now supports STMicroelectronics' Loongson 2E/2F processors. The canonical -march= and -mtune= names for these processors are loongson2e and loongson2f. picochip Picochip is a 16-bit processor. A typical picoChip contains over 250 small cores, each with small amounts of memory. There are three processor variants (STAN, MEM and CTRL) with different instruction sets and memory configurations and they can be chosen using the -mae option. This port is intended to be a "C" only port. Power Architecture and PowerPC * GCC now supports the e300c2, e300c3 and e500mc processors. * GCC now supports Xilinx processors with a single-precision FPU. * Decimal floating point is now supported for e500 processors. S/390, zSeries and System z9/z10 * Support for the IBM System z10 EC/BC processor has been added. When using the -march=z10 option, the compiler will generate code making use of instructions provided by the General-Instruction-Extension Facility and the Execute-Extension Facility. VxWorks * GCC now supports the thread-local storage mechanism used on VxWorks. Xtensa * GCC now supports thread-local storage (TLS) for Xtensa processor configurations that include the Thread Pointer option. TLS also requires support from the assembler and linker; this support is provided in the GNU binutils beginning with version 2.19. Documentation improvements Other significant improvements GCC 4.4.1 This is the [13]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.4.2 This is the [14]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.4.3 This is the [15]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.4.4 This is the [16]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.4.5 This is the [17]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.4.6 This is the [18]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web pages and the [19]GCC manuals. If that fails, the [20]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [21]gcc@gcc.gnu.org. All of [22]our lists have public archives. Copyright (C) [23]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 [24]maintained by the GCC team. Last modified 2011-04-25[25]. References 1. http://gcc.gnu.org/gcc-4.4/changes.html#4.4.6 2. http://gcc.gnu.org/gcc-4.3/changes.html#obsoleted 3. http://gcc.gnu.org/gcc-4.4/porting_to.html 4. http://gcc.gnu.org/wiki/Graphite 5. http://openmp.org/wp/openmp-specifications/ 6. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf 7. http://gcc.gnu.org/gcc-4.4/cxx0x_status.html 8. http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#id476343 9. http://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html 10. http://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125 11. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221 12. http://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34 13. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1 14. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2 15. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3 16. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4 17. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5 18. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6 19. http://gcc.gnu.org/onlinedocs/ 20. mailto:gcc-help@gcc.gnu.org 21. mailto:gcc@gcc.gnu.org 22. http://gcc.gnu.org/lists.html 23. http://www.fsf.org/ 24. http://gcc.gnu.org/about.html 25. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.3/index.html GCC 4.3 Release Series May 22, 2010 The [1]GNU project and the GCC developers are pleased to announce the release of GCC 4.3.5. This release is a bug-fix release, containing fixes for regressions in GCC 4.3.4 relative to previous releases of GCC. Release History GCC 4.3.5 May 22, 2010 ([2]changes) GCC 4.3.4 August 4, 2009 ([3]changes) GCC 4.3.3 January 24, 2009 ([4]changes) GCC 4.3.2 August 27, 2008 ([5]changes) GCC 4.3.1 June 6, 2008 ([6]changes) GCC 4.3.0 March 5, 2008 ([7]changes) References and Acknowledgements GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection. A list of [8]successful builds is updated as new information becomes available. The GCC developers would like to thank the numerous people that have contributed new features, improvements, bug fixes, and other changes as well as test results to GCC. This [9]amazing group of volunteers is what makes GCC successful. For additional information about GCC please refer to the [10]GCC project web site or contact the [11]GCC development mailing list. To obtain GCC please use [12]our mirror sites or [13]our SVN server. For questions related to the use of GCC, please consult these web pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [16]gcc@gcc.gnu.org. All of [17]our lists have public archives. Copyright (C) [18]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 [19]maintained by the GCC team. Last modified 2011-04-25[20]. References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-4.3/changes.html 3. http://gcc.gnu.org/gcc-4.3/changes.html 4. http://gcc.gnu.org/gcc-4.3/changes.html 5. http://gcc.gnu.org/gcc-4.3/changes.html 6. http://gcc.gnu.org/gcc-4.3/changes.html 7. http://gcc.gnu.org/gcc-4.3/changes.html 8. http://gcc.gnu.org/gcc-4.3/buildstat.html 9. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html 10. http://gcc.gnu.org/index.html 11. mailto:gcc@gcc.gnu.org 12. http://gcc.gnu.org/mirrors.html 13. http://gcc.gnu.org/svn.html 14. http://gcc.gnu.org/onlinedocs/ 15. mailto:gcc-help@gcc.gnu.org 16. mailto:gcc@gcc.gnu.org 17. http://gcc.gnu.org/lists.html 18. http://www.fsf.org/ 19. http://gcc.gnu.org/about.html 20. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.3/changes.html GCC 4.3 Release Series Changes, New Features, and Fixes The latest release in the 4.3 release series is [1]GCC 4.3.5. Caveats * GCC requires the [2]GMP and [3]MPFR libraries for building all the various front-end languages it supports. See the [4]prerequisites page for version requirements. * ColdFire targets now treat long double as having the same format as double. In earlier versions of GCC, they used the 68881 long double format instead. * The m68k-uclinux target now uses the same calling conventions as m68k-linux-gnu. You can select the original calling conventions by configuring for m68k-uclinuxoldabi instead. Note that m68k-uclinuxoldabi also retains the original 80-bit long double on ColdFire targets. * The -fforce-mem option has been removed because it has had no effect in the last few GCC releases. * The i386 -msvr3-shlib option has been removed since it is no longer used. * Fastcall for i386 has been changed not to pass aggregate arguments in registers, following Microsoft compilers. * Support for the AOF assembler has been removed from the ARM back end; this affects only the targets arm-semi-aof and armel-semi-aof, which are no longer recognized. We removed these targets without a deprecation period because we discovered that they have been unusable since GCC 4.0.0. * Support for the TMS320C3x/C4x processor (targets c4x-* and tic4x-*) has been removed. This support had been deprecated since GCC 4.0.0. * Support for a number of older systems and recently unmaintained or untested target ports of GCC has been declared obsolete in GCC 4.3. 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: + Morpho MT (mt-*) The following aliases for processor architectures have been declared obsolete. Users should use the indicated generic target names instead, with compile-time options such as -mcpu or configure-time options such as --with-cpu to control the configuration more precisely. + strongarm*-*-*, ep9312*-*-*, xscale*-*-* (use arm*-*-* instead). + parisc*-*-* (use hppa*-*-* instead). + m680[012]0-*-* (use m68k-*-* instead). All GCC ports for the following operating systems have been declared obsolete: + BeOS (*-*-beos*) + kaOS (*-*-kaos*) + GNU/Linux using the a.out object format (*-*-linux*aout*) + GNU/Linux using version 1 of the GNU C Library (*-*-linux*libc1*) + Solaris versions before Solaris 7 (*-*-solaris2.[0-6], *-*-solaris2.[0-6].*) + Miscellaneous System V (*-*-sysv*) + WindISS (*-*-windiss*) Also, those for some individual systems on particular architectures have been obsoleted: + UNICOS/mk on DEC Alpha (alpha*-*-unicosmk*) + CRIS with a.out object format (cris-*-aout) + BSD 4.3 on PA-RISC (hppa1.1-*-bsd*) + OSF/1 on PA-RISC (hppa1.1-*-osf*) + PRO on PA-RISC (hppa1.1-*-pro*) + Sequent PTX on IA32 (i[34567]86-sequent-ptx4*, i[34567]86-sequent-sysv4*) + SCO Open Server 5 on IA32 (i[34567]86-*-sco3.2v5*) + UWIN on IA32 (i[34567]86-*-uwin*) (support for UWIN as a host was previously [5]removed in 2001, leaving only the support for UWIN as a target now being deprecated) + ChorusOS on PowerPC (powerpc-*-chorusos*) + All VAX configurations apart from NetBSD and OpenBSD (vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*) * The [6]-Wconversion option has been modified. Its purpose now is to warn for implicit conversions that may alter a value. This new behavior is available for both C and C++. Warnings about conversions between signed and unsigned integers can be disabled by using -Wno-sign-conversion. In C++, they are disabled by default unless -Wsign-conversion is explicitly requested. The old behavior of -Wconversion, that is, warn for prototypes causing a type conversion that is different from what would happen to the same argument in the absence of a prototype, has been moved to a new option -Wtraditional-conversion, which is only available for C. * The -m386, -m486, -mpentium and -mpentiumpro tuning options have been removed because they were deprecated for more than 3 GCC major releases. Use -mtune=i386, -mtune=i486, -mtune=pentium or -mtune=pentiumpro as a replacement. * The -funsafe-math-optimizations option now automatically turns on -fno-trapping-math in addition to -fno-signed-zeros, as it enables reassociation and thus may introduce or remove traps. * The -ftree-vectorize option is now on by default under -O3. In order to generate code for a SIMD extension, it has to be enabled as well: use -maltivec for PowerPC platforms and -msse/-msse2 for i?86 and x86_64. * More information on porting to GCC 4.3 from previous versions of GCC can be found in the [7]porting guide for this release. General Optimizer Improvements * The GCC middle-end has been integrated with the [8]MPFR library. This allows GCC to evaluate and replace at compile-time calls to built-in math functions having constant arguments with their mathematically equivalent results. In making use of [9]MPFR, GCC can generate correct results regardless of the math library implementation or floating point precision of the host platform. This also allows GCC to generate identical results regardless of whether one compiles in native or cross-compile configurations to a particular target. The following built-in functions take advantage of this new capability: acos, acosh, asin, asinh, atan2, atan, atanh, cbrt, cos, cosh, drem, erf, erfc, exp10, exp2, exp, expm1, fdim, fma, fmax, fmin, gamma_r, hypot, j0, j1, jn, lgamma_r, log10, log1p, log2, log, pow10, pow, remainder, remquo, sin, sincos, sinh, tan, tanh, tgamma, y0, y1 and yn. The float and long double variants of these functions (e.g. sinf and sinl) are also handled. The sqrt and cabs functions with constant arguments were already optimized in prior GCC releases. Now they also use [10]MPFR. * A new forward propagation pass on RTL was added. The new pass replaces several slower transformations, resulting in compile-time improvements as well as better code generation in some cases. * A new command-line switch -frecord-gcc-switches has been added to GCC, although it is only enabled for some targets. The switch causes the command line that was used to invoke the compiler to be recorded into the object file that is being created. The exact format of this recording is target and binary file format dependent, but it usually takes the form of a note section containing ASCII text. The switch is related to the -fverbose-asm switch, but that one only records the information in the assembler output file as comments, so the information never reaches the object file. * The inliner heuristic is now aware of stack frame consumption. New command-line parameters --param large-stack-frame and --param large-stack-frame-growth can be used to limit stack frame size growth caused by inlining. * During feedback directed optimizations, the expected block size the memcpy, memset and bzero functions operate on is discovered and for cases of commonly used small sizes, specialized inline code is generated. * __builtin_expect no longer requires its argument to be a compile time constant. * Interprocedural optimization was reorganized to work on functions in SSA form. This enables more precise and cheaper dataflow analysis and makes writing interprocedural optimizations easier. The following improvements have been implemented on top of this framework: + Pre-inline optimization: Selected local optimization passes are run before the inliner (and other interprocedural passes) are executed. This significantly improves the accuracy of code growth estimates used by the inliner and reduces the overall memory footprint for large compilation units. + Early inlining (a simple bottom-up inliner pass inlining only functions whose body is smaller than the expected call overhead) is now executed with the early optimization passes, thus inlining already optimized function bodies into an unoptimized function that is subsequently optimized by early optimizers. This enables the compiler to quickly eliminate abstraction penalty in C++ programs. + Interprocedural constant propagation now operate on SSA form increasing accuracy of the analysis. * A new internal representation for GIMPLE statements has been contributed, resulting in compile-time memory savings. * The vectorizer was enhanced to support vectorization of outer loops, intra-iteration parallelism (loop-aware SLP), vectorization of strided accesses and loops with multiple data-types. Run-time dependency testing using loop versioning was added. The cost model, turned on by -fvect-cost-model, was developed. New Languages and Language specific improvements * We have added new command-line options -finstrument-functions-exclude-function-list and -finstrument-functions-exclude-file-list. They provide more control over which functions are annotated by the -finstrument-functions option. C family * Implicit conversions between generic vector types are now only permitted when the two vectors in question have the same number of elements and compatible element types. (Note that the restriction involves compatible element types, not implicitly-convertible element types: thus, a vector type with element type int may not be implicitly converted to a vector type with element type unsigned int.) This restriction, which is in line with specifications for SIMD architectures such as AltiVec, may be relaxed using the flag -flax-vector-conversions. This flag is intended only as a compatibility measure and should not be used for new code. * -Warray-bounds has been added and is now enabled by default for -Wall . It produces warnings for array subscripts that can be determined at compile time to be always out of bounds. -Wno-array-bounds will disable the warning. * The constructor and destructor function attributes now accept optional priority arguments which control the order in which the constructor and destructor functions are run. * New [11]command-line options -Wtype-limits, -Wold-style-declaration, -Wmissing-parameter-type, -Wempty-body, -Wclobbered and -Wignored-qualifiers have been added for finer control of the diverse warnings enabled by -Wextra. * A new function attribute alloc_size has been added to mark up malloc style functions. For constant sized allocations this can be used to find out the size of the returned pointer using the __builtin_object_size() function for buffer overflow checking and similar. This supplements the already built-in malloc and calloc constant size handling. * Integer constants written in binary are now supported as a GCC extension. They consist of a prefix 0b or 0B, followed by a sequence of 0 and 1 digits. * A new predefined macro __COUNTER__ has been added. It expands to sequential integral values starting from 0. In conjunction with the ## operator, this provides a convenient means to generate unique identifiers. * A new command-line option -fdirectives-only has been added. It enables a special preprocessing mode which improves the performance of applications like distcc and ccache. * Fixed-point data types and operators have been added. They are based on Chapter 4 of the Embedded-C specification (n1169.pdf). Currently, only MIPS targets are supported. * Decimal floating-point arithmetic based on draft ISO/IEC TR 24732, N1241, is now supported as a GCC extension to C for targets i[34567]86-*-linux-gnu, powerpc*-*-linux-gnu, s390*-ibm-linux-gnu, and x86_64-*-linux-gnu. The feature introduces new data types _Decimal32, _Decimal64, and _Decimal128 with constant suffixes DF, DD, and DL. C++ * [12]Experimental support for the upcoming ISO C++ standard, C++0x. * -Wc++0x-compat has been added and is now enabled by default for -Wall. It produces warnings for constructs whose meaning differs between ISO C++ 1998 and C++0x. * The -Wparentheses option now works for C++ as it does for C. It warns if parentheses are omitted when operators with confusing precedence are nested. It also warns about ambiguous else statements. Since -Wparentheses is enabled by -Wall, this may cause additional warnings with existing C++ code which uses -Wall. These new warnings may be disabled by using -Wall -Wno-parentheses. * The -Wmissing-declarations now works for C++ as it does for C. * The -fvisibility-ms-compat flag was added, to make it easier to port larger projects using shared libraries from Microsoft's Visual Studio to ELF and Mach-O systems. * C++ attribute handling has been overhauled for template arguments (ie dependent types). In particular, __attribute__((aligned(T))); works for C++ types. Runtime Library (libstdc++) * [13]Experimental support for the upcoming ISO C++ standard, C++0x. * Support for TR1 mathematical special functions and regular expressions. ([14]Implementation status of TR1) * Default what implementations give more elaborate exception strings for bad_cast, bad_typeid, bad_exception, and bad_alloc. * Header dependencies have been streamlined, reducing unnecessary includes and pre-processed bloat. * Variadic template implementations of items in and . * An experimental [15]parallel mode has been added. This is a parallel implementation of many C++ Standard library algorithms, like std::accumulate, std::for_each, std::transform, or std::sort, to give but four examples. These algorithms can be substituted for the normal (sequential) libstdc++ algorithms on a piecemeal basis, or all existing algorithms can be transformed via the -D_GLIBCXX_PARALLEL macro. * Debug mode versions of classes in and . * Formal deprecation of and , which are now and . This code: #include __gnu_cxx::hash_set s; Can be transformed (in order of preference) to: #include std::tr1::unordered_set s; or #include __gnu_cxx::hash_set s; Similar transformations apply to __gnu_cxx::hash_map, __gnu_cxx::hash_multimap, __gnu_cxx::hash_set, __gnu_cxx::hash_multiset. Fortran * Due to the fact that the [16]GMP and [17]MPFR libraries are required for all languages, Fortran is no longer special in this regard and is available by default. * The [18]-fexternal-blas option has been added, which generates calls to BLAS routines for intrinsic matrix operations such as matmul rather than using the built-in algorithms. * Support to give a backtrace (compiler flag -fbacktrace or environment variable GFORTRAN_ERROR_BACKTRACE; on glibc systems only) or a core dump (-fdump-core, GFORTRAN_ERROR_DUMPCORE) when a run-time error occured. * GNU Fortran now defines __GFORTRAN__ when it runs the C preprocessor (CPP). * The [19]-finit-local-zero, -finit-real, -finit-integer, -finit-character, and -finit-logical options have been added, which can be used to initialize local variables. * The intrinsic procedures [20]GAMMA and [21]LGAMMA have been added, which calculate the Gamma function and its logarithm. Use EXTERNAL gamma if you want to use your own gamma function. * GNU Fortran now regards the backslash character as literal (as required by the Fortran 2003 standard); using [22]-fbackslash GNU Fortran interprets backslashes as C-style escape characters. * The [23]interpretation of binary, octal and hexadecimal (BOZ) literal constants has been changed. Before they were always interpreted as integer; now they are bit-wise transferred as argument of INT, REAL, DBLE and CMPLX as required by the Fortran 2003 standard, and for real and complex variables in DATA statements or when directly assigned to real and complex variables. Everywhere else and especially in expressions they are still regarded as integer constants. * Fortran 2003 support has been extended: + Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE + Pointer intent + Intrinsic module ISO_ENV_FORTRAN + Interoperability with C (ISO C Bindings) + ABSTRACT INTERFACES and PROCEDURE statements (without POINTER attribute) + Fortran 2003 BOZ Java (GCJ) * GCJ now uses the Eclipse Java compiler for its Java parsing needs. This enables the use of all 1.5 language features, and fixes most existing front end bugs. * libgcj now supports all 1.5 language features which require runtime support: foreach, enum, annotations, generics, and auto-boxing. * We've made many changes to the tools shipped with gcj. + The old jv-scan tool has been removed. This tool never really worked properly. There is no replacement. + gcjh has been rewritten. Some of its more obscure options no longer work, but are still recognized in an attempt at compatibility. gjavah is a new program with similar functionality but different command-line options. + grmic and grmiregistry have been rewritten. grmid has been added. + gjar replaces the old fastjar. + gjarsigner (used for signing jars), gkeytool (used for key management), gorbd (for CORBA), gserialver (computes serialization UIDs), and gtnameserv (also for CORBA) are now installed. * The ability to dump the contents of the java run time heap to a file for off-line analysis has been added. The heap dumps may be analyzed with the new gc-analyze tool. They may be generated on out-of-memory conditions or on demand and are controlled by the new run time class gnu.gcj.util.GCInfo. * java.util.TimeZone can now read files from /usr/share/zoneinfo to provide correct, updated, timezone information. This means that packagers no longer have to update libgcj when a time zone change is published. New Targets and Target Specific Improvements IA-32/x86-64 * Tuning for Intel Core 2 processors is available via -mtune=core2 and -march=core2. * Tuning for AMD Geode processors is available via -mtune=geode and -march=geode. * Code generation of block move (memcpy) and block set (memset) was rewritten. GCC can now pick the best algorithm (loop, unrolled loop, instruction with rep prefix or a library call) based on the size of the block being copied and the CPU being optimized for. A new option -minline-stringops-dynamically has been added. With this option string operations of unknown size are expanded such that small blocks are copied by in-line code, while for large blocks a library call is used. This results in faster code than -minline-all-stringops when the library implementation is capable of using cache hierarchy hints. The heuristic choosing the particular algorithm can be overwritten via -mstringop-strategy. Newly also memset of values different from 0 is inlined. * GCC no longer places the cld instruction before string operations. Both i386 and x86-64 ABI documents mandate the direction flag to be clear at the entry of a function. It is now invalid to set the flag in asm statement without reseting it afterward. * Support for SSSE3 built-in functions and code generation are available via -mssse3. * Support for SSE4.1 built-in functions and code generation are available via -msse4.1. * Support for SSE4.2 built-in functions and code generation are available via -msse4.2. * Both SSE4.1 and SSE4.2 support can be enabled via -msse4. * A new set of options -mpc32, -mpc64 and -mpc80 have been added to allow explicit control of x87 floating point precision. * Support for __float128 (TFmode) IEEE quad type and corresponding TCmode IEEE complex quad type is available via the soft-fp library on x86_64 targets. This includes basic arithmetic operations (addition, subtraction, negation, multiplication and division) on __float128 real and TCmode complex values, the full set of IEEE comparisons between __float128 values, conversions to and from float, double and long double floating point types, as well as conversions to and from signed or unsigned integer, signed or unsigned long integer and signed or unsigned quad (TImode) integer types. Additionally, all operations generate the full set of IEEE exceptions and support the full set of IEEE rounding modes. * GCC can now utilize the ACML library for vectorizing calls to a set of C99 functions on x86_64 if -mveclibabi=acml is specified and you link to an ACML ABI compatible library. ARM * Compiler and Library support for Thumb-2 and the ARMv7 architecture has been added. CRIS New features * Compiler and Library support for the CRIS v32 architecture, as found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been added. Configuration changes * The cris-*-elf target now includes support for CRIS v32, including libraries, through the -march=v32 option. * A new crisv32-*-elf target defaults to generate code for CRIS v32. * A new crisv32-*-linux* target defaults to generate code for CRIS v32. * The cris-*-aout target has been obsoleted. Improved support for built-in functions * GCC can now use the lz and swapwbr instructions to implement the __builtin_clz, __builtin_ctz and __builtin_ffs family of functions. * __builtin_bswap32 is now implemented using the swapwb instruction, when available. m68k and ColdFire New features * Support for several new ColdFire processors has been added. You can generate code for them using the new -mcpu option. * All targets now support ColdFire processors. * m68k-uclinux targets have improved support for C++ constructors and destructors, and for shared libraries. * It is now possible to set breakpoints on the first or last line of a function, even if there are no statements on that line. Optimizations * Support for sibling calls has been added. * More use is now made of the ColdFire mov3q instruction. * __builtin_clz is now implemented using the ff1 ColdFire instruction, when available. * GCC now honors the -m68010 option. 68010 code now uses clr rather than move to zero volatile memory. * 68020 targets and above can now use symbol(index.size*scale) addresses for indexed array accesses. Earlier compilers would always load the symbol into a base register first. Configuration changes * All m68k and ColdFire targets now allow the default processor to be set at configure time using --with-cpu. * A --with-arch configuration option has been added. This option allows you to restrict a target to ColdFire or non-ColdFire processors. Preprocessor macros * An __mcfv*__ macro is now defined for all ColdFire targets. (Earlier versions of GCC only defined __mcfv4e__.) * __mcf_cpu_*, __mcf_family_* and __mcffpu__ macros have been added. * All targets now define __mc68010 and __mc68010__ when generating 68010 code. Command-line changes * New command-line options -march, -mcpu, -mtune and -mhard-float have been added. These options apply to both m68k and ColdFire targets. * -mno-short, -mno-bitfield and -mno-rtd are now accepted as negative versions of -mshort, etc. * -fforce-addr has been removed. It is now ignored by the compiler. Other improvements * ColdFire targets now try to maintain a 4-byte-aligned stack where possible. * m68k-uclinux targets now try to avoid situations that lead to the load-time error: BINFMT_FLAT: reloc outside program. MIPS Changes to existing configurations * libffi and libjava now support all three GNU/Linux ABIs: o32, n32 and n64. Every GNU/Linux configuration now builds these libraries by default. * GNU/Linux configurations now generate -mno-shared code unless overridden by -fpic, -fPIC, -fpie or -fPIE. * mipsisa32*-linux-gnu configurations now generate hard-float code by default, just like other mipsisa32* and mips*-linux-gnu configurations. You can build a soft-float version of any mips*-linux-gnu configuration by passing --with-float=soft to configure. * mips-wrs-vxworks now supports run-time processes (RTPs). Changes to existing command-line options * The -march and -mtune options no longer accept 24k as a processor name. Please use 24kc, 24kf2_1 or 24kf1_1 instead. * The -march and -mtune options now accept 24kf2_1, 24kef2_1 and 34kf2_1 as synonyms for 24kf, 24kef and 34kf respectively. The options also accept 24kf1_1, 24kef1_1 and 34kf1_1 as synonyms for 24kx, 24kex and 34kx. New configurations GCC now supports the following configurations: * mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by default. Earlier releases also recognized this configuration, but they treated it in the same way as mipsisa32*-linux-gnu*. Note that you can customize any mips*-linux-gnu* configuration to a particular ISA or processor by passing an appropriate --with-arch option to configure. * mipsisa*-sde-elf*, which provides compatibility with MIPS Technologies' SDE toolchains. The configuration uses the SDE libraries by default, but you can use it like other newlib-based ELF configurations by passing --with-newlib to configure. It is the only configuration besides mips64vr*-elf* to build MIPS16 as well as non-MIPS16 libraries. * mipsisa*-elfoabi*, which is similar to the general mipsisa*-elf* configuration, but uses the o32 and o64 ABIs instead of the 32-bit and 64-bit forms of the EABI. New processors and application-specific extensions * Support for the SmartMIPS ASE is available through the new -msmartmips option. * Support for revision 2 of the DSP ASE is available through the new -mdspr2 option. A new preprocessor macro called __mips_dsp_rev indicates the revision of the ASE in use. * Support for the 4KS and 74K families of processors is available through the -march and -mtune options. Improved support for built-in functions * GCC can now use load-linked, store-conditional and sync instructions to implement atomic built-in functions such as __sync_fetch_and_add. The memory reference must be 4 bytes wide for 32-bit targets and either 4 or 8 bytes wide for 64-bit targets. * GCC can now use the clz and dclz instructions to implement the __builtin_ctz and __builtin_ffs families of functions. * There is a new __builtin___clear_cache function for flushing the instruction cache. GCC expands this function inline on MIPS32 revision 2 targets, otherwise it calls the function specified by -mcache-flush-func. MIPS16 improvements * GCC can now compile objects that contain a mixture of MIPS16 and non-MIPS16 code. There are two new attributes, mips16 and nomips16, for specifying which mode a function should use. * A new option called -minterlink-mips16 makes non-MIPS16 code link-compatible with MIPS16 code. * After many bug fixes, the long-standing MIPS16 -mhard-float support should now work fairly reliably. * GCC can now use the MIPS16e save and restore instructions. * -fsection-anchors now works in MIPS16 mode. MIPS16 code compiled with -G0 -fsection-anchors is often smaller than code compiled with -G8. However, please note that you must usually compile all objects in your application with the same -G option; see the documentation of -G for details. * A new option called-mcode-readable specifies which instructions are allowed to load from the code segment. -mcode-readable=yes is the default and says that any instruction may load from the code segment. The other alternatives are -mcode-readable=pcrel, which says that only PC-relative MIPS16 instructions may load from the code segment, and -mcode-readable=no, which says that no instruction may do so. Please see the documentation for more details, including example uses. Small-data improvements There are three new options for controlling small data: * -mno-extern-sdata, which disables small-data accesses for externally-defined variables. Code compiled with -Gn -mno-extern-sdata will be link-compatible with any -G setting between -G0 and -Gn inclusive. * -mno-local-sdata, which disables the use of small-data sections for data that is not externally visible. This option can be a useful way of reducing small-data usage in less performance-critical parts of an application. * -mno-gpopt, which disables the use of the $gp register while still honoring the -G limit when placing externally-visible data. This option implies -mno-extern-sdata and -mno-local-sdata and it can be useful in situations where $gp does not necessarily hold the expected value. Miscellaneous improvements * There is a new option called -mbranch-cost for tweaking the perceived cost of branches. * If GCC is configured to use a version of GAS that supports the .gnu_attribute directive, it will use that directive to record certain properties of the output code. .gnu_attribute is new to GAS 2.18. * There are two new function attributes, near and far, for overriding the command-line setting of -mlong-calls on a function-by-function basis. * -mfp64, which previously required a 64-bit target, now works with MIPS32 revision 2 targets as well. The mipsisa*-elfoabi* and mipsisa*-sde-elf* configurations provide suitable library support. * GCC now recognizes the -mdmx and -mmt options and passes them down to the assembler. It does nothing else with the options at present. SPU (Synergistic Processor Unit) of the Cell Broadband Engine Architecture (BEA) * Support has been added for this new architecture. RS6000 (POWER/PowerPC) * Support for the PowerPC 750CL paired-single instructions has been added with a new powerpc-*-linux*paired* target configuration. It is enabled by an associated -mpaired option and can be accessed using new built-in functions. * Support for auto-detecting architecture and system configuration to auto-select processor optimization tuning. * Support for VMX on AIX 5.3 has been added. * Support for AIX Version 6.1 has been added. S/390, zSeries and System z9 * Support for the IBM System z9 EC/BC processor (z9 GA3) has been added. When using the -march=z9-ec option, the compiler will generate code making use of instructions provided by the decimal floating point facility and the floating point conversion facility (pfpo). Besides the instructions used to implement decimal floating point operations these facilities also contain instructions to move between general purpose and floating point registers and to modify and copy the sign-bit of floating point values. * When the -march=z9-ec option is used the new -mhard-dfp/-mno-hard-dfp options can be used to specify whether the decimal floating point hardware instructions will be used or not. If none of them is given the hardware support is enabled by default. * The -mstack-guard option can now be omitted when using stack checking via -mstack-size in order to let GCC choose a sensible stack guard value according to the frame size of each function. * Various changes to improve performance of generated code have been implemented, including: + The condition code set by an add logical with carry instruction is now available for overflow checks like: a + b + carry < b. + The test data class instruction is now used to implement sign-bit and infinity checks of binary and decimal floating point numbers. Xtensa * Stack unwinding for exception handling now uses by default a specialized version of DWARF unwinding. This is not binary-compatible with the setjmp/longjmp (sjlj) unwinding used for Xtensa with previous versions of GCC. * For Xtensa processors that include the Conditional Store option, the built-in functions for atomic memory access are now implemented using S32C1I instructions. * If the Xtensa NSA option is available, GCC will use it to implement the __builtin_ctz and __builtin_clz functions. Documentation improvements * Existing libstdc++ documentation has been edited and restructured into a single DocBook XML manual. The results can be viewed online [24]here. Other significant improvements * The compiler's --help command-line option has been extended so that it now takes an optional set of arguments. These arguments restrict the information displayed to specific classes of command-line options, and possibly only a subset of those options. It is also now possible to replace the descriptive text associated with each displayed option with an indication of its current value, or for binary options, whether it has been enabled or disabled. Here are some examples. The following will display all the options controlling warning messages: --help=warnings Whereas this will display all the undocumented, target specific options: --help=target,undocumented This sequence of commands will display the binary optimizations that are enabled by -O3: gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts diff /tmp/O2-opts /tmp/O3-opts | grep enabled * The configure options --with-pkgversion and --with-bugurl have been added. These allow distributors of GCC to include a distributor-specific string in manuals and --version output and to specify the URL for reporting bugs in their versions of GCC. GCC 4.3.1 This is the [25]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Target Specific Changes IA-32/x86-64 ABI changes * Starting with GCC 4.3.1, decimal floating point variables are aligned to their natural boundaries when they are passed on the stack for i386. Command-line changes * Starting with GCC 4.3.1, the -mcld option has been added to automatically generate a cld instruction in the prologue of functions that use string instructions. This option is used for backward compatibility on some operating systems and can be enabled by default for 32-bit x86 targets by configuring GCC with the --enable-cld configure option. GCC 4.3.2 This is the [26]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.3.3 This is the [27]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.3.4 This is the [28]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). GCC 4.3.5 This is the [29]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web pages and the [30]GCC manuals. If that fails, the [31]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [32]gcc@gcc.gnu.org. All of [33]our lists have public archives. Copyright (C) [34]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 [35]maintained by the GCC team. Last modified 2011-04-25[36]. References 1. http://gcc.gnu.org/gcc-4.3/changes.html#4.3.5 2. http://gmplib.org/ 3. http://www.mpfr.org/ 4. http://gcc.gnu.org/install/prerequisites.html 5. http://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html 6. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options 7. http://gcc.gnu.org/gcc-4.3/porting_to.html 8. http://www.mpfr.org/ 9. http://www.mpfr.org/ 10. http://www.mpfr.org/ 11. http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html 12. http://gcc.gnu.org/gcc-4.3/cxx0x_status.html 13. http://gcc.gnu.org/gcc-4.3/cxx0x_status.html 14. http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#m anual.intro.status.standard.tr1 15. http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html 16. http://gmplib.org/ 17. http://www.mpfr.org/ 18. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options 19. http://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167 20. http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html 21. http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html 22. http://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html 23. http://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html 24. http://gcc.gnu.org/onlinedocs/libstdc++/ 25. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1 26. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2 27. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3 28. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4 29. http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5 30. http://gcc.gnu.org/onlinedocs/ 31. mailto:gcc-help@gcc.gnu.org 32. mailto:gcc@gcc.gnu.org 33. http://gcc.gnu.org/lists.html 34. http://www.fsf.org/ 35. http://gcc.gnu.org/about.html 36. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.2/index.html GCC 4.2 Release Series May 19, 2008 The [1]GNU project and the GCC developers are pleased to announce the release of GCC 4.2.4. This release is a bug-fix release, containing fixes for regressions in GCC 4.2.3 relative to previous releases of GCC. Release History GCC 4.2.4 May 19, 2008 ([2]changes) GCC 4.2.3 February 1, 2008 ([3]changes) GCC 4.2.2 October 7, 2007 ([4]changes) GCC 4.2.1 July 18, 2007 ([5]changes) GCC 4.2.0 May 13, 2007 ([6]changes) References and Acknowledgements GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection. A list of [7]successful builds is updated as new information becomes available. The GCC developers would like to thank the numerous people that have contributed new features, improvements, bug fixes, and other changes as well as test results to GCC. This [8]amazing group of volunteers is what makes GCC successful. For additional information about GCC please refer to the [9]GCC project web site or contact the [10]GCC development mailing list. To obtain GCC please use [11]our mirror sites or [12]our SVN server. For questions related to the use of GCC, please consult these web pages and the [13]GCC manuals. If that fails, the [14]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer list at [15]gcc@gcc.gnu.org. All of [16]our lists have public archives. Copyright (C) [17]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 [18]maintained by the GCC team. Last modified 2011-04-25[19]. References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-4.2/changes.html 3. http://gcc.gnu.org/gcc-4.2/changes.html 4. http://gcc.gnu.org/gcc-4.2/changes.html 5. http://gcc.gnu.org/gcc-4.2/changes.html 6. http://gcc.gnu.org/gcc-4.2/changes.html 7. http://gcc.gnu.org/gcc-4.2/buildstat.html 8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html 9. http://gcc.gnu.org/index.html 10. mailto:gcc@gcc.gnu.org 11. http://gcc.gnu.org/mirrors.html 12. http://gcc.gnu.org/svn.html 13. http://gcc.gnu.org/onlinedocs/ 14. mailto:gcc-help@gcc.gnu.org 15. mailto:gcc@gcc.gnu.org 16. http://gcc.gnu.org/lists.html 17. http://www.fsf.org/ 18. http://gcc.gnu.org/about.html 19. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-4.2/changes.html GCC 4.2 Release Series Changes, New Features, and Fixes Caveats * GCC no longer accepts the -fshared-data option. This option has had no effect in any GCC 4 release; the targets to which the option used to apply had been removed before GCC 4.0. General Optimizer Improvements * New command-line options specify the possible relationships among parameters and between parameters and global data. For example, -fargument-noalias-anything specifies that arguments do not alias any other storage. Each language will automatically use whatever option is required by the language standard. You should not need to use these options yourself. New Languages and Language specific improvements * [1]OpenMP is now supported for the C, C++ and Fortran compilers. * New command-line options -fstrict-overflow and -Wstrict-overflow have been added. -fstrict-overflow tells the compiler that it may assume that the program follows the strict signed overflow semantics permitted for the language: for C and C++ this means that the compiler may assume that signed overflow does not occur. For example, a loop like for (i = 1; i > 0; i *= 2) is presumably intended to continue looping until i overflows. With -fstrict-overflow, the compiler may assume that signed overflow will not occur, and transform this into an infinite loop. -fstrict-overflow is turned on by default at -O2, and may be disabled via -fno-strict-overflow. The -Wstrict-overflow option may be used to warn about cases where the compiler assumes that signed overflow will not occur. It takes five different levels: -Wstrict-overflow=1 to 5. See the [2]documentation for details. -Wstrict-overflow=1 is enabled by -Wall. * The new command-line option -fno-toplevel-reorder directs GCC to emit top-level functions, variables, and asm statements in the same order that they appear in the input file. This is intended to support existing code which relies on a particular ordering (for example, code which uses top-level asm statements to switch sections). For new code, it is generally better to use function and variable attributes. The -fno-toplevel-reorder option may be used for most cases which currently use -fno-unit-at-a-time. The -fno-unit-at-a-time option will be removed in some future version of GCC. If you know of a case which requires -fno-unit-at-a-time which is not fixed by -fno-toplevel-reorder, please open a bug report. C family * The pragma redefine_extname will now macro expand its tokens for compatibility with SunPRO. * In the next release of GCC, 4.3, -std=c99 or -std=gnu99 will direct GCC to handle inline functions as specified in the C99 standard. In preparation for this, GCC 4.2 will warn about any use of non-static inline functions in gnu99 or c99 mode. This new warning may be disabled with the new gnu_inline function attribute or the new -fgnu89-inline command-line option. Also, GCC 4.2 and later will define one of the preprocessor macros __GNUC_GNU_INLINE__ or __GNUC_STDC_INLINE__ to indicate the semantics of inline functions in the current compilation. * A new command-line option -Waddress has been added to warn about suspicious uses of memory addresses as, for example, using the address of a function in a conditional expression, and comparisons against the memory address of a string literal. This warning is enabled by -Wall. C++ * C++ visibility handling has been overhauled. Restricted visiblity is propagated from classes to members, from functions to local statics, and from templates and template arguments to instantiations, unless the latter has explicitly declared visibility. The visibility attribute for a class must come between the class-key and the name, not after the closing brace. Attributes are now allowed for enums and elaborated-type-specifiers that only declare a type. Members of the anonymous namespace are now local to a particular translation unit, along with any other declarations which use them, though they are still treated as having external linkage for language semantics. * The (undocumented) extension which permitted templates with default arguments to be bound to template template parameters with fewer parameters has been removed. For example: template