GCC 3.2 Release Series — Changes, New Features, and Fixes Caveats and New Features ======================== Caveats ------- - The C++ compiler does not correctly zero-initialize pointers-to-data members. You must explicitly initialize them. For example: int S::*m(0); will work, but depending on default-initialization to zero will not work. This bug cannot be fixed in GCC 3.2 without inducing unacceptable risks. It will be fixed in GCC 3.3. - This GCC release is based on the GCC 3.1 sourcebase, and thus has all the changes in the GCC 3.1 series. In addition, GCC 3.2 has a number of C++ ABI fixes which make its C++ compiler generate binary code which is incompatible with the C++ compilers found in earlier GCC releases, including GCC 3.1 and GCC 3.1.1. Frontend Enhancements --------------------- C/C++/Objective-C - The method of constructing the list of directories to be searched for header files has been revised. If a directory named by a -I option is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system header files are not defeated. - The C and Objective-C compilers no longer accept the "Naming Types" extension (typedef foo = bar); it was already unavailable in C++. Code which uses it will need to be changed to use the "typeof" extension instead: typedef typeof(bar) foo. (We have removed this extension without a period of deprecation because it has caused the compiler to crash since version 3.0 and no one noticed until very recently. Thus we conclude it is not in widespread use.) C++ There are now no known differences between the C++ ABI implemented in GCC and the multi-vendor standard. We believe that the ABI for the C++ standard library is now stable and will not change in future versions of the compiler. However, hard experience has taught us to be cautious; it is possible that more problems will be found. It is our intention to make changes to the ABI only if they are necessary for correct compilation of C++, as opposed to conformance to the ABI documents. For details on how to build an ABI compliant compiler for GNU/Linux systems, check the common C++ ABI page. New Targets and Target Specific Improvements -------------------------------------------- IA-32 - Fixed a number of bugs in SSE and MMX intrinsics. - Fixed common compiler crashes with SSE instruction set enabled (implied by -march=pentium3, pentium4, athlon-xp) - __m128 and __m128i is not 128bit aligned when used in structures. x86-64 - A bug whereby the compiler could generate bad code for bzero has been fixed. - ABI fixes (implying ABI incompatibilities with previous version in some corner cases) - Fixed prefetch code generation GCC 3.2.3 3.2.3 is a bug fix release only; there are no new features that were not present in GCC 3.2.2. Bug Fixes This section lists the problem reports (PRs) from GCC's bug tracking system (GNATS) that are known to be fixed in the 3.2.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). The sorting is slightly different from the GNATS categories, and some of the titles have been changed to make them more clear. Internal Compiler Errors (multi-platform) - 3782: (c++) -quiet -fstats produces a segmentation fault in cc1plus - 6440: (c++) template specializations cause ICE - 7050: (c++) ICE on: (i ? get_string() : throw) - 7741: ICE on conflicting types (make_decl_rtl in varasm.c) - 7982: (c++) ICE due to infinite recursion (using STL set) - 8068: exceedingly high (infinite) memory usage - 8178: ICE with __builtin_ffs - 8396: ICE in copy_to_mode_reg, in explow.c - 8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c - 9768: ICE when optimizing inline code at -O2 - 9798: (c++) Infinite recursion (segfault) in cp/decl.c:push_using_directive with recursive using directives - 9799: mismatching structure initializer with nested flexible array member: ICE - 9928: ICE on duplicate enum declaration - 10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects sparc, alpha) - 10352: ICE in find_reloads_toplev - 10336: ICE with -Wunreachable-code C/optimizer bugs: - 8224: Incorrect joining of signed and unsigned division - 8613: -O2 produces wrong code with builtin strlen and postincrements - 8828: gcc reports some code is unreachable when it is not - 9226: GCSE breaking argument passing - 9853: miscompilation of non-constant structure initializer - 9797: C99-style struct initializers are miscompiled - 9967: Some standard C function calls should not be replaced when optimizing for size - 10116: ce2: invalid merge of join_bb in the context of switch statements - 10171: wrong code for inlined function - 10175: -Wunreachable-code doesn't work for single lines C++ compiler and library: - 8316: Confusing diagnostic for code that misuses conversion operators - 9169: filebuf output fails if codecvt<>::out returns noconv - 9420: incomplete type incorrectly reported - 9459: typeof in return type specification of template not supported - 9507: filebuf::open handles ios_base::ate incorrectly - 9538: Out-of-bounds memory access in streambuf::sputbackc - 9602: Total confusion about template/friend/virtual/abstract - 9993: destructor not called for local object created within and returned from infinite loop - 10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2 system Java compiler and library: - 9652: libgcj build fails on irix6.5.1[78] - 10144: gas on solaris complains about bad .stabs lines for java, native as unaffected x86-specific (Intel/AMD): - 8746: gcc miscompiles Linux kernel ppa driver on x86 - 9888: -mcpu=k6 -Os produces out of range loop instructions - 9638: Cross-build for target i386-elf and i586-pc-linux-gnu failed - 9954: Cross-build for target i586-pc-linux-gnu (--with-newlib) failed Sparc-specific: - 7784: [Sparc] ICE in extract_insn, in recog.c - 7796: sparc extra failure with -m64 on execute/930921-1.c in unroll.c - 8281: ICE when compiling with -O2 -fPIC for Ultrasparc - 8366: [Sparc] C testsuite failure with -m64 -fpic -O in execute/loop-2d.c - 8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc - 9414: Scheduling bug on Ultrasparc - 10067: GCC-3.2.2 outputs invalid asm on sparc64 m68k-specific: - 7248: broken "inclusive or" code - 8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1 PowerPC-specific: - 9732: Wrong code with -O2 -fPIC - 10073: ICE: powerpc cannot split insn Alpha-specific: - 7702: optimization problem on a DEC alpha under OSF1 - 9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system HP-specific: - 8694: breaks on HP-UX 10.20 (DUP: 9275) - 9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10 (missing symbol) - 10271: Floating point args don't get reloaded across function calls with -O2 MIPS specific: - 6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in compile/920501-4.c CRIS specific: - 10377: gcc-3.2.2 creates bad assembler code for cris Miscellaneous and minor bugs: - 6955: collect2 says "core dumped" when there is no core GCC 3.2.2 ========= Beginning with 3.2.2, GCC's Makefile suite supports redirection of make install by means of the DESTDIR variable. Parts of the GCC tree have featured that support long before, but now it is available even from the top level. Other than that, GCC 3.2.2 is a bug fix release only; there are no new features that were not present in GCC 3.2.1. Bug Fixes --------- On the following i386-based systems GCC 3.2.1 broke the C ABI wrt. functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped with FreeBSD 5.0 does not have this problem), Interix, a.out-based Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI change, and thus restores ABI-compatibility with previous releases (except GCC 3.2.1) on these platforms. This section lists the problem reports (PRs) from GCC's bug tracking system (GNATS) that are known to be fixed in the 3.2.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). The sorting is slightly different from the GNATS categories, and some of the titles have been changed to make them more clear. Internal Compiler Errors (multi-platform) - 5919: (c++) ICE when passing variable array to template function - 7129: (c++) ICE with min/max assignment operators (?=) - 7507: ICE with -O2 when address of called function is a complicated expression - 7622: ICE with nested inline functions if function's address is taken - 7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR 9258) - 8031: (c++) ICE in code comparing typeids and casting from virtual base - 8275: ICE in simplify_subreg - 8332: (c++) builtin strlen/template interaction causes ICE - 8372: (c++) ICE on explicit call of destructor - 8439: (c, not c++) empty struct causes ICE - 8442: (c++) ICE with nested template classes - 8518: ICE when compiling mplayer ("extern inline" issue) - 8615: (c++) ICE with out-of-range character constant template argument - 8663: (c++) ICE in cp_expr_size, at cp-lang.c:307 - 8799: (c++) ICE: error reporting routines re-entered - 9328: (c++) ICE with typeof(X) for overloaded X - 9465: (preprocessor) cpp -traditional ICE on null bytes C++ (compiler and library) bugs - 47 : scoping in nested classes is broken - 6745: problems with iostream rdbuf() member function - 8214: conversion from const char* const to char* sometimes accepted illegally - 8493: builtin strlen and overload resolution (same bug as 8332) - 8503: strange behaviour of function types - 8727: compiler confused by inheritance from an anonymous struct - 7445: poor performance of std::locale::classic() in multi-threaded applications - 8230: mishandling of overflow in vector::resize - 8399: sync_with_stdio(false) breaks unformatted input - 8662: illegal access of private member of unnamed class is accepted - 8707: "make distclean" fails in libstdc++-v3 directory - 8708: __USE_MALLOC doesn't work - 8790: Use of non-thread-safe strtok in src/localename.cc - 8887: Bug in date formats with --enable-clocale=generic - 9076: Call Frame Instructions are not handled correctly during unwind operation - 9151: std::setprecision limited to 16 digits when outputting a double to a stream - 9168: codecvt overwrites output buffers - 9269: libstdc++ headers: explicit specialization of function must precede its first use - 9322: return value of basic_streambuf<>::getloc affected by locale::global - 9433: segfault in runtime support for dynamic_cast C and optimizer bugs - 8032: GCC incorrectly initializes static structs that have flexible arrays - 8639: simple arithmetic expression broken - 8794: optimization improperly eliminates certain expressions - 8832: traditional "asm volatile" code is illegally optimized - 8988: loop optimizer bug: with -O2, code is generated that segfaults (found on i386, bug present for all platforms) - 9492: structure copy clobbers subsequent stores to structure Objective-C bugs - 9267: Objective-C parser won't build with newer bison versions (e.g. 1.875) Ada bugs - 8344: Ada build problem due to conflict between gcc/final.o, gcc/ada/final.o Preprocessor bugs - 8524: _Pragma within macros is improperly expanded - 8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with -fshort-wchar ARM-specific - 9090: arm ICE with >= -O2; regression from gcc-2.95 x86-specific (Intel/AMD) - 8588: ICE in extract_insn, at recog.c:NNNN (shift instruction) - 8599: loop unroll bug with -march=k6-3 - 9506: ABI breakage in structure return (affects BSD and Cygwin, but not GNU/Linux) FreeBSD 5.0 specific - 9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0 RTEMS-specific - 9292: hppa1.1-rtems configurery problems - 9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug - 9295: [mips-rtems] config/mips/rtems.h init/fini issue - 9296: gthr-rtems regression - 9316: powerpc-rtems: extending multilibs HP-PA specific - 9493: ICE with -O2 when building a simple function Documentation - 7341: hyperlink to gcov in GCC documentation doesn't work - 8947: Please add a warning about "-malign-double" in docs - 7448, 8882: typo cleanups GCC 3.2.1 ========= 3.2.1 adds a new warning, -Wabi. This option warns when GNU C++ generates code that is known not to be binary-compatible with the vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included in the distribution, for details. This release also removes an old GCC extension, "naming types", and the documentation now directs users to use a different GCC extension, __typeof__, instead. The feature had evidently been broken for a while. Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and the new warning there are no new features that were not present in GCC 3.2. In addition, the previous fix for PR 7445 (poor performance of std::locale::classic() in multi-threaded applications) was reverted ("unfixed"), because the "fix" was not thread-safe. Bug Fixes --------- This section lists the problem reports (PRs) from GCC's bug tracking system (GNATS) that are known to be fixed in the 3.2.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). As you can see, the number of bug fixes is quite large, so it is strongly recommended that users of earlier gcc 3.x releases upgrade to GCC 3.2.1. Internal Compiler Errors (multi-platform) - 2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c - 5661: (c++) ICE instantiating template on array of unknown size (bad code) - 6419: (c++) ICE in make_decl_rtl for "longest" attribute on 64-bit platforms - 6994: (c++) ICE in find_function_data - 7150: preprocessor: GCC -dM -E gives an ICE - 7160: ICE when optimizing branches without a return value - 7228: (c++) ICE when using member template and template function - 7266: (c++) ICE with -pedantic on missing typename - 7353: ICE from use of "Naming Types" extension, see above - 7411: ICE in instantiate_virtual_regs_1, in function.c - 7478: (c++) ICE on static_cast inside template - 7526: preprocessor core dump when _Pragma implies #pragma dependency - 7721: (c++) ICE on simple (but incorrect) template (7803 is a duplicate) - 7754: (c++) ICE on union with template parameter - 7788: (c++) redeclaring a definition as an incomplete class causes ICE - 8031: (c++) ICE in comptypes, in cp/typeck.c - 8055: preprocessor dies with SIG11 when building FreeBSD kernel - 8067: (c++) ICE due to mishandling of __FUNCTION__ and related variables - 8134: (c++) ICE in force_store_init_value on legal code - 8149: (c++) ICE on incomplete type - 8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array initialization C++ (compiler and library) bugs - 5607: No pointer adjustment in covariant return types - 6579: Infinite loop with statement expressions in member initialization - 6803: Default copy constructor bug in GCC 3.1 - 7176: g++ confused by friend and static member with same name - 7188: Segfault with template class and recursive (incorrect) initializer list - 7306: Regression: GCC 3.x fails to compile code with virtual inheritance if a method has a variable number of arguments - 7461: ctype::classic_table() returns offset array on Cygwin - 7524: f(const float arg[3]) fails - 7584: Erroneous ambiguous base error on using declaration - 7676: Member template overloading problem - 7679: infinite loop when a right parenthesis is missing - 7811: default locale not taken from environment - 7961: compare( char *) implemented incorrectly in basic_string<> - 8071: basic_ostream::operator<<(streambuf*) loops forever if streambuf::underflow() leaves gptr() NULL (dups: 8127, 6745) - 8096: deque::at() throws std::range_error instead of std::out_of_range - 8127: cout << cin.rdbuf() infinite loop - 8218: Excessively large memory consumed for classes with large array members - 8287: GCC 3.2: Destructor called for non-constructed local object - 8347: empty vector range used in string construction causes core dump - 8348: fail() flag is set in istringstream when eof() flag is set - 8391: regression: infinite loop in cp/decl2.c(finish_file) C and optimizer bugs - 6627: -fno-align-functions doesn't seem to disable function alignment - 6631: life_analysis misoptimizes code to initialize fields of a structure - 7102: unsigned char division results in floating exception - 7120: Run once loop should *always* be unrolled (pessimization) - 7209: Bug involving array referencing and ?: operator - 7515: invalid inlining of global function with -O3 - 7814: incorrect scheduling for glibc-2.2.92 strcpy test - 8467: bug in sibling call optimization Preprocessor bugs - 4890: incorrect line markers from the traditional preprocessor - 7357: -M option omits system headers files (making it the same as -MM) - 7358: Changes to Sun's make Dependencies - 7602: C++ header files found in CPLUS_INCLUDE_PATH treated as C headers - 7862: Interrupting GCC -MD removes .d file but not .o - 8190: Failed compilation deletes -MD dependency file - 8524: _Pragma within macro is improperly expanded x86 specific (Intel/AMD) - 5351: (i686-only) function pass-by-value structure copy corrupts stack (7591 is a duplicate) - 6845, 7034, 7124, 7174: ICE's with -march=pentium3/pentium2/athlon (these are all the same underlying bug, in MMX register use) - 7134, 7375, 7390: ICE with -march=athlon (maybe same as above?) - 6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken - 6981: wrong code in 64-bit manipulation on x86 - 7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__ macro - 7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE intrinsics are broken - 7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with -march=pentium4 - 7693: Typo in i386 mmintrin.h header - 7723: ICE - Pentium3 sse - GCC 3.2 - 7951: ICE on -march=pentium4 -O2 -mfpmath=sse - 8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3 PowerPC specific - 5967: GCC bug when profiling nested functions on powerpc - 6984: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC - 7114: PowerPC: ICE building strcoll.op from glibc-2.2.5 - 7130: miscompiled code for GCC-3.1 in powerpc linux with -funroll-all-loops - 7133: PowerPC ICE: unrecognizable insn - 7380: ICE in extract_insn, at recog.c:2148 - 8252: ICE on Altivec code with optimization turned on - 8451: Altivec ICE in GCC 3.2 HP/PA specific - 7250: __ashrdi3 returns wrong value on 32 bit hppa SPARC specific - 6668: when using --disable-multilib, libgcc_s.so is installed in the wrong place on sparc-solaris - 7151: ICE when compiling for UltraSPARC - 7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long double and -O1 - 7842: [REGRESSION] SPARC code gen bug ARM specific - 7856: [arm] invalid offset in constant pool reference - 7967: optimization produces wrong code (ARM) Alpha specific - 7374: __builtin_fabsl broken on alpha IBM s390 specific - 7370: ICE in fixup_var_refs_1 on s390x - 7409: loop optimization bug on s390x-linux-gnu - 8232: s390x: ICE when using bcmp with int length argument SCO specific - 7623: SCO OpenServer build fails with machmode.def: undefined symbol: BITS_PER_UNIT m68k/Coldfire specific - 8314: crtbegin, crtend need to be multilib'ed for this platform Documentation - 761: Document some undocumented options - 5610: Fix documentation about invoking SSE instructions (-mfpmath=sse) - 7484: List -Wmissing-declarations as C-only option - 7531: -mcmodel not documented for x86-64 - 8120: Update documentation of bad use of ## GCC 3.2 ======= 3.2 is a small bug fix release, but there is a change to the application binary interface (ABI), hence the change to the second part of the version number. The main purpose of the 3.2 release is to correct a couple of problems in the C++ ABI, with the intention of providing a stable interface going forward.  Accordingly, 3.2 is only a small change to 3.1.1. Bug Fixes --------- C++ - 7320: g++ 3.2 relocation problem - 7470: vtable: virtual function pointers not in declaration order libstdc++ - 6410: Trouble with non-ASCII monetary symbols and wchar_t - 6503, 6642, 7186: Problems with comparing or subtracting various types of const and non-const iterators - 7216: ambiguity with basic_iostream::traits_type - 7220: problem with basic_istream::ignore(0,delimiter) - 7222: locale::operator==() doesn't work on std::locale("") - 7286: placement operator delete issue - 7442: cxxabi.h does not match the C++ ABI - 7445: poor performance of std::locale::classic() in multi-threaded applications x86-64 specific - 7291: off-by-one in generated inline bzero code for x86-64 GCC 3.1 Changes, New Features, and Fixes ======================================== Additional changes in GCC 3.1.1 * A bug related to how structures and unions are returned has been fixed for powerpc-*-netbsd*. * An important bug in the implementation of -fprefetch-loop-arrays has been fixed. Previously the optimization prefetched random blocks of memory for most targets except for i386. * The Java compiler now compiles Java programs much faster and also works with parallel make. * Nested functions have been fixed for mips*-*-netbsd*. * Some missing floating point support routines have beed added for mips*-*-netbsd*. Caveats The -traditional C compiler option has been deprecated and will be removed in GCC 3.2. (It remains possible to preprocess non-C code with the traditional preprocessor.) The default debugging format for most ELF platforms (including GNU/Linux and FreeBSD; notable exception is Solaris) has changed from stabs to DWARF2. This requires GDB 5.1.1 or later. General Optimizer Improvements Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat, and Andreas Jaeger, SuSE Labs, has contributed infrastructure for profile driven optimizations. Options -fprofile-arcs and -fbranch-probabilities can now be used to improve speed of the generated code by profiling the actual program behaviour on typical runs. In the absence of profile info the compiler attempts to guess the profile statically. SPEC2000 and SPEC95 benchmark suites are now used daily to monitor performance of the generated code. According to the SPECInt2000 results on an AMD Athlon CPU, the code generated by GCC 3.1 is 6% faster on the average (8.2% faster with profile feedback) compared to GCC 3.0. The code produced by GCC 3.0 is about 2.1% faster compared to 2.95.3. Tests were done using the -O2 -march=athlon command-line options. Alexandre Oliva, of Red Hat, has generalized the tree inlining infrastructure developed by CodeSourcery, LLC for the C++ front end, so that it is now used in the C front end too. Inlining functions as trees exposes them earlier to the compiler, giving it more opportunities for optimization. Support for data prefetching instructions has been added to the GCC back end and several targets. A new __builtin_prefetch intrinsic is available to explicitly insert prefetch instructions and experimental support for loop array prefetching has been added (see -fprefetch-loop-array documentation). Support for emitting debugging information for macros has been added for DWARF2. It is activated using -g3. New Languages and Language specific improvements C/C++ A few more ISO C99 features. The preprocessor is 10-50% faster than the preprocessor in GCC 3.0. The preprocessor's symbol table has been merged with the symbol table of the C, C++ and Objective-C front ends. The preprocessor consumes less memory than the preprocessor in GCC 3.0, often significantly so. On normal input files, it typically consumes less memory than pre-3.0 cccp-based GCC, too. C++ -fhonor-std and -fno-honor-std have been removed. -fno-honor-std was a workaround to allow std compliant code to work with the non-std compliant libstdc++-v2. libstdc++-v3 is std compliant. The C++ ABI has been fixed so that void (A::*)() const is mangled as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only affects pointer to cv-qualified member function types. The C++ ABI has been changed to correctly handle this code: struct A { void operator delete[] (void *, size_t); }; struct B : public A { }; new B[10]; The amount of storage allocated for the array will be greater than it was in 3.0, in order to store the number of elements in the array, so that the correct size can be passed to operator delete[] when the array is deleted. Previously, the value passed to operator delete[] was unpredictable. This change will only affect code that declares a two-argument operator delete[] with a second parameter of type size_t in a base class, and does not override that definition in a derived class. The C++ ABI has been changed so that: struct A { void operator delete[] (void *, size_t); void operator delete[] (void *); }; does not cause unnecessary storage to be allocated when an array of A objects is allocated. This change will only affect code that declares both of these forms of operator delete[], and declared the two-argument form before the one-argument form. The C++ ABI has been changed so that when a parameter is passed by value, any cleanup for that parameter is performed in the caller, as specified by the ia64 C++ ABI, rather than the called function as before. As a result, classes with a non-trivial destructor but a trivial copy constructor will be passed and returned by invisible reference, rather than by bitwise copy as before. G++ now supports the "named return value optimization": for code like A f () { A a; ... return a; } G++ will allocate a in the return value slot, so that the return becomes a no-op. For this to work, all return statements in the function must return the same variable. Improvements to the C++ library are listed in the libstdc++-v3 FAQ. Objective-C Annoying linker warnings (due to incorrect code being generated) have been fixed. If a class method cannot be found, the compiler no longer issues a warning if a corresponding instance method exists in the root class. Forward @protocol declarations have been fixed. Loading of categories has been fixed in certain situations (GNU run time only). The class lookup in the run-time library has been rewritten so that class method dispatch is more than twice as fast as it used to be (GNU run time only). Java libgcj now includes RMI, java.lang.ref.*, javax.naming, and javax.transaction. Property files and other system resources can be compiled into executables which use libgcj using the new gcj --resource feature. libgcj has been ported to more platforms. In particular there is now a mostly-functional mingw32 (Windows) target port. JNI and CNI invocation interfaces were implemented, so gcj-compiled Java code can now be called from a C/C++ application. gcj can now use builtin functions for certain known methods, for instance Math.cos. gcj can now automatically remove redundant array-store checks in some common cases. The --no-store-checks optimization option was added. This can be used to omit runtime store checks for code which is known not to throw ArrayStoreException The following third party interface standards were added to libgcj: org.w3c.dom and org.xml.sax. java.security has been merged with GNU Classpath. The new package is now JDK 1.2 compliant, and much more complete. A bytecode verifier was added to the libgcj interpreter. java.lang.Character was rewritten to comply with the Unicode 3.0 standard, and improve performance. Partial support for many more locales was added to libgcj. Socket timeouts have been implemented. libgcj has been merged into a single shared library. There are no longer separate shared libraries for the garbage collector and zlib. Several performance improvements were made to gcj and libgcj: Hash synchronization (thin locks) A special allocation path for finalizer-free objects Thread-local allocation Parallel GC, and other GC tweaks Fortran Fortran improvements are listed in the Fortran documentation. Ada Ada Core Technologies, Inc, has contributed its GNAT Ada 95 front end and associated tools. The GNAT compiler fully implements the Ada language as defined by the ISO/IEC 8652 standard. Please note that the integration of the Ada front end is still work in progress. New Targets and Target Specific Improvements Hans-Peter Nilsson has contributed a port to MMIX, the CPU architecture used in new editions of Donald E. Knuth's The Art of Computer Programming. Axis Communications has contributed its port to the CRIS CPU architecture, used in the ETRAX system-on-a-chip series. See Axis' developer site for technical information. Alexandre Oliva, of Red Hat, has contributed a port to the SuperH SH5 64-bit RISC microprocessor architecture, extending the existing SH port. UltraSPARC is fully supported in 64-bit mode. The option -m64 enables it. For compatibility with the Sun compiler #pragma redefine_extname has been implemented on Solaris. The x86 back end has had some noticeable work done to it. SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas Jaeger have contributed a port to the AMD x86-64 architecture. For more information on x86-64 see http://www.x86-64.org. The compiler now supports MMX, 3DNow!, SSE, and SSE2 instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will enable the respective instruction sets. Intel C++ compatible MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics will be added in next major release. Following those improvements, targets for Pentium MMX, K6-2, K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were added. Refer to the documentation on -march= and -mcpu= options for details. For those targets that support it, -mfpmath=sse will cause the compiler to generate SSE/SSE2 instructions for floating point math instead of x87 instructions. Usually, this will lead to quicker code — especially on the Pentium 4. Note that only scalar floating point instructions are used and GCC does not exploit SIMD features yet. Prefetch support has been added to the Pentium III, Pentium 4, K6-2, K6-3, and Athlon series. Code generated for floating point to integer converisons has been improved leading to better performance of many 3D applications. The PowerPC back end has added 64-bit PowerPC GNU/Linux support. C++ support for AIX has been improved. Aldy Hernandez, of Red Hat, Inc has contributed extensions to the PowerPC port supporting the AltiVec programming model (SIMD). The support, though presently useful, is experimental and is expected to stabilize for 3.2. The support is written to conform to Motorola's AltiVec specs. See -maltivec. Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.1. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed. All configurations of the following processor architectures have been declared obsolete: MIL-STD-1750A, 1750a-*-* AMD A29k, a29k-*-* Convex, c*-convex-* Clipper, clipper-*-* Elxsi, elxsi-*-* Intel i860, i860-*-* Sun picoJava, pj-*-* and pjl-*-* Western Electric 32000, we32k-*-* Most configurations of the following processor architectures have been declared obsolete, but we are preserving a few systems which may have active developers. It is unlikely that the remaining systems will survive much longer unless we see definite signs of port activity. Motorola 88000 except Generic a.out, m88k-*-aout* Generic SVR4, m88k-*-sysv4 OpenBSD, m88k-*-openbsd* NS32k except NetBSD, ns32k-*-netbsd* OpenBSD, ns32k-*-openbsd*. ROMP except OpenBSD, romp-*-openbsd*. Finally, only some configurations of these processor architectures are being obsoleted. Alpha: OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka alpha*-*-osf[45], are still supported.) ARM: RISCiX, arm-*-riscix*. i386: 386BSD, i?86-*-bsd* Chorus, i?86-*-chorusos* DG/UX, i?86-*-dgux* FreeBSD 1.x, i?86-*-freebsd1.* IBM AIX, i?86-*-aix* ISC UNIX, i?86-*-isc* Linux with pre-BFD linker, i?86-*-linux*oldld* NEXTstep, i?86-next-* OSF UNIX, i?86-*-osf1* and i?86-*-osfrose* RTEMS/coff, i?86-*-rtemscoff* RTEMS/go32, i?86-go32-rtems* Sequent/BSD, i?86-sequent-bsd* Sequent/ptx before version 3, i?86-sequent-ptx[12]* and i?86-sequent-sysv3* SunOS, i?86-*-sunos* Motorola 68000: Altos, m68[k0]*-altos-* Apollo, m68[k0]*-apollo-* Apple A/UX, m68[k0]*-apple-* Bull, m68[k0]*-bull-* Convergent, m68[k0]*-convergent-* Generic SVR3, m68[k0]*-*-sysv3* ISI, m68[k0]*-isi-* LynxOS, m68[k0]*-*-lynxos* NEXT, m68[k0]*-next-* RTEMS/coff, m68[k0]*-*-rtemscoff* Sony, m68[k0]*-sony-* MIPS: DEC Ultrix, mips-*-ultrix* and mips-dec-* Generic BSD, mips-*-bsd* Generic System V, mips-*-sysv* IRIX before version 5, mips-sgi-irix[1234]* RiscOS, mips-*-riscos* Sony, mips-sony-* Tandem, mips-tandem-* SPARC: RTEMS/a.out, sparc-*-rtemsaout*. Documentation improvements The old manual ("Using and Porting the GNU Compiler Collection") has been replaced by a users manual ("Using the GNU Compiler Collection") and a separate internals reference manual ("GNU Compiler Collection Internals"). More complete and much improved documentation about GCC's internal representation used by the C and C++ front ends. Many cleanups and improvements in general.