gcc.gnu.org/gcc-3.4/changes.html#cplusplus
Before reporting a bug, please make sure it's really GCC, and not your code, that is broken. It was neither documented nor intended that environment variable paths be ignored, so this has been corrected. It is unlikely that they worked correctly in any 3x release.
As a result, the code generated will not be binary compatible with earlier releases in certain cases. As a result the parameters of -finline-insns, --param max-inline-insns-single and --param max-inline-insns-auto need to be reconsidered. Code relying on some particular ordering needs to be updated. The majority of such top-level asm statements can be replaced by section attributes. This may result in undefined references when an asm statement refers to the variable/function directly. In that case either the variable/function shall be listed in asm statement operand or in the case of top-level asm statements the attribute used shall be used to force function/variable to be always output and considered as a possibly used by unknown code. For variables the attribute is accepted only by GCC 34 and newer, while for earlier versions it is sufficient to use unused to silence warnings about the variables not being referenced. To keep code portable across different GCC versions, you can use appropriate preprocessor conditionals. Again the attribute used shall be used to prevent this behavior. As a temporary workaround, -fno-unit-at-a-time can be used, but this scheme may not be supported by future releases of GCC. C++ code which relies on that macro to detect whether multi-threaded code is being compiled might change in meaning, possibly resulting in linker errors for single-threaded programs.
At the moment a conversion of expensive divisions into cheaper operations has been implemented. In this scheme a whole file is parsed first and optimized later. The following basic inter-procedural optimizations are implemented: + Removal of unreachable functions and variables + Discovery of local functions (functions with static linkage whose address is never taken) + On i386, these local functions use register parameter passing conventions. Overall, the unit-at-a-time scheme produces a 13% improvement for the SPECint2000 benchmark on the i386 architecture (AMD Athlon CPU). The growth of large functions can now be limited via --param large-function-insns and --param large-function-growth. The old loop unroller still can be enabled by -fold-unroll-loops and may produce better code in some cases, especially when the webizer optimization pass is not run. The pass almost always improves code quality but does make debugging difficult and thus is not enabled by default by -O2 The pass is especially effective as cleanup after code duplication passes, such as the loop unroller or the tracer. New Languages and Language specific improvements Ada * The Ada front end has been updated to include numerous bug fixes and enhancements. Exception_Action) + New pragmas + New -gnatS switch replacing gnatpsta + Implementation of new Ada features (in particular limited with, limited aggregates) C/Objective-C/C++ * Precompiled headers are now supported. Precompiled headers can dramatically speed up compilation of some projects. There are some known defects in the current precompiled header implementation that will result in compiler crashes in relatively rare situations. Therefore, precompiled headers should be considered a "technology preview" in this release. Read the manual for details about how to use precompiled headers. GCC no longer gets confused by symlinks and hardlinks, and now has a correct implementation of #import and #pragma once. will not be accepted for C and Objective-C in a future version. A possible non-intrusive workaround is the following: (*(a, &b)) = 2;
built-in functions such as __builtin_popcount for counting bits, finding the highest and lowest bit in a word, and parity have been added. The default input character set is taken from the current locale, and may be overridden with the -finput-charset command line option. In the future we will add support for inline encoding markers. C++ * G++ is now much closer to full conformance to the ISO/ANSI C++ standard. This means, among other things, that a lot of invalid constructs which used to be accepted in previous versions will now be rejected. It is very likely that existing C++ code will need to be fixed. The new parser contains much improved infrastructure needed for better parsing of C++ source codes, handling of extensions, and clean separation (where possible) between proper semantics analysis and parsing. The new parser fixes many bugs that were found in the old parser. This is needed because the name is dependent (in // this case, on template parameter T1).
Here is the corrected definition of C<T>::h, template <typename T> void C<T>::h () { this->m = 0; template <int> struct A { static void bar(void){ foo('a'); So GCC used to accept the class name as argument of type template, and template template parameter. Now the name is not treated as a valid template template argument unless you qualify the name by its scope. For example, template <typename T> class C { friend void f<> (C&); You must first declare f as a template, template <typename T> void f; Previous versions of G++ used to be less strict about this and allowed friend declarations for private class members, for example.
To avoid the error, you must move the declaration of g before the declaration of f The default arguments for g must be visible at the point where it is called. These changes are incorporated into the libstdc++ runtime library.
This is better explained with an example: class A { public: void pub_func(); x, FreeBSD 5x, Solaris 27 and above, AIX 5x, Irix 65 * The allocator class is now standard-conformant, and two additional extension allocators have been added, mt_alloc and bitmap_allocator. Objective-C * The Objective-C front end has been updated to include the numerous bug fixes and enhancements previously available only in Apple's version of GCC.
Options Controlling Objective-C Dialect for more information. The C99 _Bool and C++ bool type may now be encoded as 'B'. In addition, the back-end/codegen dependencies have been removed.
Direct and indirect buffers work, as do fundamental file and socket operations. awt has been improved, though it is still not ready for general use. exec() handling and support for accented characters in filenames.
This change is incompatible with previous GCC versions, but does fix compatibility with the Tru64 compiler and several corner cases where GCC was incompatible with itself. ARM * Nicolas Pitre has contributed his hand-coded floating-point support code for ARM. It is both significantly smaller and faster than the existing C-based implementation, even when building applications for Thumb. The arm-elf configuration has been converted to use the new code. Enabled at run time with the -mcpu=iwmmxt command line switch. This is similar to the arm-pe target, but it defaults to using the APCS32 ABI.
Enabled at run time with the -mcpu=ep9312 command line switch. Note however that the multilibs to support this chip are currently disabled in gcc/config/arm/t-arm-elf, so if you want to enable their production you will have to uncomment the entries in that file. IA-32/AMD64 (x86-64) * Tuning for K8 (AMD Opteron/Athlon64) core is available via -march=k8 and -mcpu=k8. As a result it is not possible to call functions accepting vector arguments compiled by older GCC version. IA-64 * Tuning code for the Itanium 2 processor has been added. The generation of code tuned for Itanium 2 (option -mtune=itanium2) is enabled by default now. To generate code tuned for Itanium 1 the option -mtune=itanium1 should be used.
DFA processor pipeline descriptions for the IA-64 processors have been added. This resulted in about 3% improvement on the SPECInt2000 benchmark for Itanium 2 * Instruction bundling for the IA-64 processors has been rewritten using the DFA pipeline hazard recognizer. It resulted in about 60% compiler speedup on the SPECInt2000 C programs. M32R * Support for the M32R/2 processor has been added by Renesas. Code generation for the ColdFire pr...
|