| This file contains information about GCC releases up to GCC 2.8.1, and |
| a tiny bit of information on EGCS. |
| |
| For details of changes in EGCS releases and GCC 2.95 and later releases, |
| see the release notes on the GCC web site or the file NEWS which contains |
| the most relevant parts of those release notes in text form. |
| |
| Changes in GCC for EGCS (that are not listed in the web release notes) |
| --------------------------------------------------------------------- |
| |
| The compiler now supports the "ADDRESSOF" optimization which can significantly |
| reduce the overhead for certain inline calls (and inline calls in general). |
| |
| Compile time for certain programs using large constant initializers has been |
| improved (affects glibc significantly). |
| |
| Various improvements have been made to better support cross compilations. They |
| are still not easy, but they are improving. |
| |
| Target-specific changes: |
| |
| M32r: Major improvements to this port. |
| |
| Arm: Includes Thumb and super interworking support. |
| |
| Noteworthy changes in GCC version 2.8.1 |
| --------------------------------------- |
| |
| Numerous bugs have been fixed and some minor performance |
| improvements (compilation speed) have been made. |
| |
| Noteworthy changes in GCC version 2.8.0 |
| --------------------------------------- |
| |
| A major change in this release is the addition of a framework for |
| exception handling, currently used by C++. Many internal changes and |
| optimization improvements have been made. These increase the |
| maintainability and portability of GCC. GCC now uses autoconf to |
| compute many host parameters. |
| |
| The following lists changes that add new features or targets. |
| |
| See cp/NEWS for new features of C++ in this release. |
| |
| New tools and features: |
| |
| The Dwarf 2 debugging information format is supported on ELF systems, and |
| is the default for -ggdb where available. It can also be used for C++. |
| The Dwarf version 1 debugging format is also permitted for C++, but |
| does not work well. |
| |
| gcov.c is provided for test coverage analysis and branch profiling |
| analysis is also supported; see -fprofile-arcs, -ftest-coverage, |
| and -fbranch-probabilities. |
| |
| Support for the Checker memory checking tool. |
| |
| New switch, -fstack-check, to check for stack overflow on systems that |
| don't have such built into their ABI. |
| |
| New switches, -Wundef and -Wno-undef to warn if an undefined identifier |
| is evaluated in an #if directive. |
| |
| Options -Wall and -Wimplicit now cause GCC to warn about implicit int |
| in declarations (e.g. `register i;'), since the C Standard committee |
| has decided to disallow this in the next revision of the standard; |
| -Wimplicit-function-declarations and -Wimplicit-int are subsets of |
| this. |
| |
| Option -Wsign-compare causes GCC to warn about comparison of signed and |
| unsigned values. |
| |
| Add -dI option of cccp for cxref. |
| |
| New features in configuration, installation and specs file handling: |
| |
| New option --enable-c-cpplib to configure script. |
| |
| You can use --with-cpu on the configure command to specify the default |
| CPU that GCC should generate code for. |
| |
| The -specs=file switch allows you to override default specs used in |
| invoking programs like cc1, as, etc. |
| |
| Allow including one specs file from another and renaming a specs |
| variable. |
| |
| You can now relocate all GCC files with a single environment variable |
| or a registry entry under Windows 95 and Windows NT. |
| |
| Changes in Objective-C: |
| |
| The Objective-C Runtime Library has been made thread-safe. |
| |
| The Objective-C Runtime Library contains an interface for creating |
| mutexes, condition mutexes, and threads; it requires a back-end |
| implementation for the specific platform and/or thread package. |
| Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads, |
| Solaris, and Windows32. The --enable-threads parameter can be used |
| when configuring GCC to enable and select a thread back-end. |
| |
| Objective-C is now configured as separate front-end language to GCC, |
| making it more convenient to conditionally build it. |
| |
| The internal structures of the Objective-C Runtime Library have |
| changed sufficiently to warrant a new version number; now version 8. |
| Programs compiled with an older version must be recompiled. |
| |
| The Objective-C Runtime Library can be built as a DLL on Windows 95 |
| and Windows NT systems. |
| |
| The Objective-C Runtime Library implements +load. |
| |
| The following new targets are supported (see also list under each |
| individual CPU below): |
| |
| Embedded target m32r-elf. |
| Embedded Hitachi Super-H using ELF. |
| RTEMS real-time system on various CPU targets. |
| ARC processor. |
| NEC V850 processor. |
| Matsushita MN10200 processor. |
| Matsushita MN10300 processor. |
| Sparc and PowerPC running on VxWorks. |
| Support both glibc versions 1 and 2 on Linux-based GNU systems. |
| |
| New features for DEC Alpha systems: |
| |
| Allow detailed specification of IEEE fp support: |
| -mieee, -mieee-with-inexact, and -mieee-conformant |
| -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx |
| -mcpu=xxx for CPU selection |
| Support scheduling parameters for EV5. |
| Add support for BWX, CIX, and MAX instruction set extensions. |
| Support Linux-based GNU systems. |
| Support VMS. |
| |
| Additional supported processors and systems for MIPS targets: |
| |
| MIPS4 instruction set. |
| R4100, R4300 and R5000 processors. |
| N32 and N64 ABI. |
| IRIX 6.2. |
| SNI SINIX. |
| |
| New features for Intel x86 family: |
| |
| Add scheduling parameters for Pentium and Pentium Pro. |
| Support stabs on Solaris-x86. |
| Intel x86 processors running the SCO OpenServer 5 family. |
| Intel x86 processors running DG/UX. |
| Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT. |
| |
| New features for Motorola 68k family: |
| |
| Support for 68060 processor. |
| More consistent switches to specify processor. |
| Motorola 68k family running AUX. |
| 68040 running pSOS, ELF object files, DBX debugging. |
| Coldfire variant of Motorola m68k family. |
| |
| New features for the HP PA RISC: |
| |
| -mspace and -mno-space |
| -mlong-load-store and -mno-long-load-store |
| -mbig-switch -mno-big-switch |
| |
| GCC on the PA requires either gas-2.7 or the HP assembler; for best |
| results using GAS is highly recommended. GAS is required for -g and |
| exception handling support. |
| |
| New features for SPARC-based systems: |
| |
| The ultrasparc cpu. |
| The sparclet cpu, supporting only a.out file format. |
| Sparc running SunOS 4 with the GNU assembler. |
| Sparc running the Linux-based GNU system. |
| Embedded Sparc processors running the ELF object file format. |
| -mcpu=xxx |
| -mtune=xxx |
| -malign-loops=xxx |
| -malign-jumps=xxx |
| -malign-functions=xxx |
| -mimpure-text and -mno-impure-text |
| |
| Options -mno-v8 and -mno-sparclite are no longer supported on SPARC |
| targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930, |
| and -mf934 are deprecated and will be deleted in GCC 2.9. Use |
| -mcpu=xxx instead. |
| |
| New features for rs6000 and PowerPC systems: |
| |
| Solaris 2.51 running on PowerPC's. |
| The Linux-based GNU system running on PowerPC's. |
| -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2 |
| -mtune=xxx |
| -mrelocatable-lib, -mno-relocatable-lib |
| -msim, -mmve, -memb |
| -mupdate, -mno-update |
| -mfused-madd, -mno-fused-madd |
| |
| -mregnames |
| -meabi |
| -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi |
| -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi |
| -memb, -msim, -mmvme |
| -myellowknife, -mads |
| wchar_t is now of type long as per the ABI, not unsigned short. |
| -p/-pg support |
| -mcpu=403 now implies -mstrict-align. |
| Implement System V profiling. |
| |
| Aix 4.1 GCC targets now default to -mcpu=common so that programs |
| compiled can be moved between rs6000 and powerpc based systems. A |
| consequence of this is that -static won't work, and that some programs |
| may be slightly slower. |
| |
| You can select the default value to use for -mcpu=xxx on rs6000 and |
| powerpc targets by using the --with-cpu=xxx option when configuring the |
| compiler. In addition, a new options, -mtune=xxx was added that |
| selects the machine to schedule for but does not select the |
| architecture level. |
| |
| Directory names used for storing the multilib libraries on System V |
| and embedded PowerPC systems have been shortened to work with commands |
| like tar that have fixed limits on pathname size. |
| |
| New features for the Hitachi H8/300(H): |
| |
| -malign-300 |
| -ms (for the Hitachi H8/S processor) |
| -mint32 |
| |
| New features for the ARM: |
| |
| -march=xxx, -mtune=xxx, -mcpu=xxx |
| Support interworking with Thumb code. |
| ARM processor with a.out object format, COFF, or AOF assembler. |
| ARM on "semi-hosted" platform. |
| ARM running NetBSD. |
| ARM running the Linux-based GNU system. |
| |
| New feature for Solaris systems: |
| |
| GCC installation no longer makes a copy of system include files, |
| thus insulating GCC better from updates to the operating system. |
| |
| |
| Noteworthy changes in GCC version 2.7.2 |
| --------------------------------------- |
| |
| A few bugs have been fixed (most notably the generation of an |
| invalid assembler opcode on some RS/6000 systems). |
| |
| Noteworthy changes in GCC version 2.7.1 |
| --------------------------------------- |
| |
| This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but |
| also contains a few new features, mostly related to specific targets. |
| |
| Major changes have been made in code to support Windows NT. |
| |
| The following new targets are supported: |
| |
| 2.9 BSD on PDP-11 |
| Linux on m68k |
| HP/UX version 10 on HP PA RISC (treated like version 9) |
| DEC Alpha running Windows NT |
| |
| When parsing C, GCC now recognizes C++ style `//' comments unless you |
| specify `-ansi' or `-traditional'. |
| |
| The PowerPC System V targets (powerpc-*-sysv, powerpc-*-eabi) now use the |
| calling sequence specified in the System V Application Binary Interface |
| Processor Supplement (PowerPC Processor ABI Supplement) rather than the calling |
| sequence used in GCC version 2.7.0. That calling sequence was based on the AIX |
| calling sequence without function descriptors. To compile code for that older |
| calling sequence, either configure the compiler for powerpc-*-eabiaix or use |
| the -mcall-aix switch when compiling and linking. |
| |
| Noteworthy changes in GCC version 2.7.0 |
| --------------------------------------- |
| |
| GCC now works better on systems that use ".obj" and ".exe" instead of |
| ".o" and no extension. This involved changes to the driver program, |
| gcc.c, to convert ".o" names to ".obj" and to GCC's Makefile to use |
| ".obj" and ".exe" in filenames that are not targets. In order to |
| build GCC on such systems, you may need versions of GNU make and/or |
| compatible shells. At this point, this support is preliminary. |
| |
| Object file extensions of ".obj" and executable file extensions of |
| ".exe" are allowed when using appropriate version of GNU Make. |
| |
| Numerous enhancements were made to the __attribute__ facility including |
| more attributes and more places that support it. We now support the |
| "packed", "nocommon", "noreturn", "volatile", "const", "unused", |
| "transparent_union", "constructor", "destructor", "mode", "section", |
| "align", "format", "weak", and "alias" attributes. Each of these |
| names may also be specified with added underscores, e.g., "__packed__". |
| __attribute__ may now be applied to parameter definitions, function |
| definitions, and structure, enum, and union definitions. |
| |
| GCC now supports returning more structures in registers, as specified by |
| many calling sequences (ABIs), such as on the HP PA RISC. |
| |
| A new option '-fpack-struct' was added to automatically pack all structure |
| members together without holes. |
| |
| There is a new library (cpplib) and program (cppmain) that at some |
| point will replace cpp (aka cccp). To use cppmain as cpp now, pass |
| the option CCCP=cppmain to make. The library is already used by the |
| fix-header program, which should speed up the fixproto script. |
| |
| New options for supported targets: |
| |
| GNU on many targets. |
| NetBSD on MIPS, m68k, VAX, and x86. |
| LynxOS on x86, m68k, Sparc, and RS/6000. |
| VxWorks on many targets. |
| |
| Windows/NT on x86 architecture. Initial support for Windows/NT on Alpha |
| (not fully working). |
| |
| Many embedded targets, specifically UDI on a29k, aout, coff, elf, |
| and vsta "operating systems" on m68k, m88k, mips, sparc, and x86. |
| |
| Additional support for x86 (i386, i486, and Pentium): |
| |
| Work with old and new linkers for Linux-based GNU systems, |
| supporting both a.out and ELF. |
| FreeBSD on x86. |
| Stdcall convention. |
| -malign-double, -mregparm=, -malign-loops= and -malign-jumps= switches. |
| On ISC systems, support -Xp like -posix. |
| |
| Additions for RS/6000: |
| |
| Instruction scheduling information for PowerPC 403. |
| AIX 4.1 on PowerPC. |
| -mstring and -mno-string. |
| -msoft-float and floating-point emulation included. |
| Preliminary support for PowerPC System V.4 with or without the GNU as. |
| Preliminary support for EABI. |
| Preliminary support for 64-bit systems. |
| Both big and little endian systems. |
| |
| New features for MIPS-based systems: |
| |
| r4650. |
| mips4 and R8000. |
| Irix 6.0. |
| 64-bit ABI. |
| Allow dollar signs in labels on SGI/Irix 5.x. |
| |
| New support for HP PA RISC: |
| |
| Generation of PIC (requires binutils-2.5.2.u6 or later). |
| HP-UX version 9 on HP PA RISC (dynamically links even with -g). |
| Processor variants for HP PA RISC: 700, 7100, and 7100LC. |
| Automatic generation of long calls when needed. |
| -mfast-indirect-calls for kernels and static binaries. |
| |
| The called routine now copies arguments passed by invisible reference, |
| as required by the calling standard. |
| |
| Other new miscellaneous target-specific support: |
| |
| -mno-multm on a29k. |
| -mold-align for i960. |
| Configuration for "semi-hosted" ARM. |
| -momit-leaf-frame-pointer for M88k. |
| SH3 variant of Hitachi Super-H and support both big and little endian. |
| |
| Changes to Objective-C: |
| |
| Bare-bones implementation of NXConstantString has been added, |
| which is invoked by the @"string" directive. |
| |
| Class * has been changed to Class to conform to the NextSTEP and |
| OpenStep runtime. |
| |
| Enhancements to make dynamic loading easier. |
| |
| The module version number has been updated to Version 7, thus existing |
| code will need to be recompiled to use the current run-time library. |
| |
| GCC now supports the ISO Normative Addendum 1 to the C Standard. |
| As a result: |
| |
| The header <iso646.h> defines macros for C programs written |
| in national variants of ISO 646. |
| |
| The following digraph tokens are supported: |
| <: :> <% %> %: %:%: |
| These behave like the following, respectively: |
| [ ] { } # ## |
| |
| Digraph tokens are supported unless you specify the `-traditional' |
| option; you do not need to specify `-ansi' or `-trigraphs'. Except |
| for contrived and unlikely examples involving preprocessor |
| stringizing, digraph interpretation doesn't change the meaning of |
| programs; this is unlike trigraph interpretation, which changes the |
| meanings of relatively common strings. |
| |
| The macro __STDC_VERSION__ has the value 199409L. |
| |
| As usual, for full conformance to the standard, you also need a |
| C library that conforms. |
| |
| The following lists changes that have been made to g++. If some |
| features mentioned below sound unfamiliar, you will probably want to |
| look at the recently-released public review copy of the C++ Working |
| Paper. For PostScript and PDF (Adobe Acrobat) versions, see the |
| archive at ftp://research.att.com/dist/stdc++/WP. For HTML and ASCII |
| versions, see ftp://ftp.cygnus.com/pub/g++. On the web, see |
| http://www.cygnus.com/~mrs/wp-draft. |
| |
| The scope of variables declared in the for-init-statement has been changed |
| to conform to http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for; as a |
| result, packages such as groff 1.09 will not compile unless you specify the |
| -fno-for-scope flag. PLEASE DO NOT REPORT THIS AS A BUG; this is a change |
| mandated by the C++ standardization committee. |
| |
| Binary incompatibilities: |
| |
| The builtin 'bool' type is now the size of a machine word on RISC targets, |
| for code efficiency; it remains one byte long on CISC targets. |
| |
| Code that does not use #pragma interface/implementation will most |
| likely shrink dramatically, as g++ now only emits the vtable for a |
| class in the translation unit where its first non-inline, non-abstract |
| virtual function is defined. |
| |
| Classes that do not define the copy constructor will sometimes be |
| passed and returned in registers. This may illuminate latent bugs in |
| your code. |
| |
| Support for automatic template instantiation has *NOT* been added, due |
| to a disagreement over design philosophies. |
| |
| Support for exception handling has been improved; more targets are now |
| supported, and throws will use the RTTI mechanism to match against the |
| catch parameter type. Optimization is NOT SUPPORTED with |
| -fhandle-exceptions; no need to report this as a bug. |
| |
| Support for Run-Time Type Identification has been added with -frtti. |
| This support is still in alpha; one major restriction is that any file |
| compiled with -frtti must include <typeinfo.h>. |
| |
| Preliminary support for namespaces has been added. This support is far |
| from complete, and probably not useful. |
| |
| Synthesis of compiler-generated constructors, destructors and |
| assignment operators is now deferred until the functions are used. |
| |
| The parsing of expressions such as `a ? b : c = 1' has changed from |
| `(a ? b : c) = 1' to `a : b ? (c = 1)'. |
| |
| The code generated for testing conditions, especially those using || |
| and &&, is now more efficient. |
| |
| The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq, |
| or, or_eq, xor and xor_eq are now supported. Use -ansi or |
| -foperator-names to enable them. |
| |
| The 'explicit' keyword is now supported. 'explicit' is used to mark |
| constructors and type conversion operators that should not be used |
| implicitly. |
| |
| g++ now accepts the typename keyword, though it currently has no |
| semantics; it can be a no-op in the current template implementation. |
| You may want to start using it in your code, however, since the |
| pending rewrite of the template implementation to compile STL properly |
| (perhaps for 2.8.0, perhaps not) will require you to use it as |
| indicated by the current draft. |
| |
| Handling of user-defined type conversion has been overhauled so that |
| type conversion operators are now found and used properly in |
| expressions and function calls. |
| |
| -fno-strict-prototype now only applies to function declarations with |
| "C" linkage. |
| |
| g++ now warns about 'if (x=0)' with -Wparentheses or -Wall. |
| |
| #pragma weak and #pragma pack are supported on System V R4 targets, as |
| are various other target-specific #pragmas supported by gcc. |
| |
| new and delete of const types is now allowed (with no additional |
| semantics). |
| |
| Explicit instantiation of template methods is now supported. Also, |
| 'inline template class foo<int>;' can be used to emit only the vtable |
| for a template class. |
| |
| With -fcheck-new, g++ will check the return value of all calls to |
| operator new, and not attempt to modify a returned null pointer. |
| |
| The template instantiation code now handles more conversions when |
| passing to a parameter that does not depend on template arguments. |
| This means that code like 'string s; cout << s;' now works. |
| |
| Invalid jumps in a switch statement past declarations that require |
| initializations are now caught. |
| |
| Functions declared 'extern inline' now have the same linkage semantics |
| as inline member functions. On supported targets, where previously |
| these functions (and vtables, and template instantiations) would have |
| been defined statically, they will now be defined as weak symbols so |
| that only one out-of-line definition is used. |
| |
| collect2 now demangles linker output, and c++filt has become part of |
| the gcc distribution. |
| |
| Noteworthy changes in GCC version 2.6.3: |
| |
| A few more bugs have been fixed. |
| |
| Noteworthy changes in GCC version 2.6.2: |
| |
| A few bugs have been fixed. |
| |
| Names of attributes can now be preceded and followed by double underscores. |
| |
| Noteworthy changes in GCC version 2.6.1: |
| |
| Numerous (mostly minor) bugs have been fixed. |
| |
| The following new configurations are supported: |
| |
| GNU on x86 (instead of treating it like MACH) |
| NetBSD on Sparc and Motorola 68k |
| AIX 4.1 on RS/6000 and PowerPC systems |
| Sequent DYNIX/ptx 1.x and 2.x. |
| Both COFF and ELF configurations on AViiON without using /bin/gcc |
| Windows/NT on x86 architecture; preliminary |
| AT&T DSP1610 digital signal processor chips |
| i960 systems on bare boards using COFF |
| PDP11; target only and not extensively tested |
| |
| The -pg option is now supported for Alpha under OSF/1 V3.0 or later. |
| |
| Files with an extension of ".c++" are treated as C++ code. |
| |
| The -Xlinker and -Wl arguments are now passed to the linker in the |
| position they were specified on the command line. This makes it |
| possible, for example, to pass flags to the linker about specific |
| object files. |
| |
| The use of positional arguments to the configure script is no longer |
| recommended. Use --target= to specify the target; see the GCC manual. |
| |
| The 386 now supports two new switches: -mreg-alloc=<string> changes |
| the default register allocation order used by the compiler, and |
| -mno-wide-multiply disables the use of the mul/imul instructions that |
| produce 64 bit results in EAX:EDX from 32 bit operands to do long long |
| multiplies and 32-bit division by constants. |
| |
| Noteworthy changes in GCC version 2.6.0: |
| |
| Numerous bugs have been fixed, in the C and C++ front-ends, as |
| well as in the common compiler code. |
| |
| This release includes the C, Objective-C, and C++ compilers. However, |
| we have moved the files for the C++ compiler (G++) files to a |
| subdirectory, cp. Subsequent releases of GCC will split these files |
| to a separate TAR file. |
| |
| The G++ team has been tracking the development of the ANSI standard for C++. |
| Here are some new features added from the latest working paper: |
| |
| * built-in boolean type 'bool', with constants 'true' and 'false'. |
| * array new and delete (operator new [] and delete []). |
| * WP-conforming lifetime of temporaries. |
| * explicit instantiation of templates (template class A<int>;), |
| along with an option (-fno-implicit-templates) to disable emission |
| of implicitly instantiated templates, obsoletes -fexternal-templates. |
| * static member constants (static const int foo = 4; within the |
| class declaration). |
| |
| Many error messages have been improved to tell the user more about the |
| problem. Conformance checking with -pedantic-errors has been |
| improved. G++ now compiles Fresco. |
| |
| There is now an experimental implementation of virtual functions using |
| thunks instead of Cfront-style vtables, enabled with -fvtable-thunks. |
| This option also enables a heuristic which causes the compiler to only |
| emit the vtable in the translation unit where its first non-inline |
| virtual function is defined; using this option and |
| -fno-implicit-templates, users should be able to avoid #pragma |
| interface/implementation altogether. |
| |
| Signatures have been added as a GNU C++ extension. Using the option |
| -fhandle-signatures, users are able to turn on recognition of |
| signatures. A short introduction on signatures is in the section |
| `Extension to the C++ Language' in the manual. |
| |
| The `g++' program is now a C program, rather than a shell script. |
| |
| Lots and lots and lots of bugs fixes, in nested types, access control, |
| pointers to member functions, the parser, templates, overload |
| resolution, etc, etc. |
| |
| There have been two major enhancements to the Objective-C compiler: |
| |
| 1) Added portability. It now runs on Alpha, and some problems with |
| message forwarding have been addressed on other platforms. |
| |
| 2) Selectors have been redefined to be pointers to structs like: |
| { void *sel_id, char *sel_types }, where the sel_id is the unique |
| identifier, the selector itself is no longer unique. |
| |
| Programmers should use the new function sel_eq to test selector |
| equivalence. |
| |
| The following major changes have been made to the base compiler and |
| machine-specific files. |
| |
| - The MIL-STD-1750A is a new port, but still preliminary. |
| |
| - The h8/300h is now supported; both the h8/300 and h8/300h ports come |
| with 32 bit IEEE 754 software floating point support. |
| |
| - The 64-bit Sparc (v9) and 64-bit MIPS chips are supported. |
| |
| - NetBSD is supported on m68k, Intel x86, and pc523 systems and FreeBSD |
| on x86. |
| |
| - COFF is supported on x86, m68k, and Sparc systems running LynxOS. |
| |
| - 68K systems from Bull and Concurrent are supported and System V |
| Release 4 is supported on the Atari. |
| |
| - GCC supports GAS on the Motorola 3300 (sysV68) and debugging |
| (assuming GAS) on the Plexus 68K system. (However, GAS does not yet |
| work on those systems). |
| |
| - System V Release 4 is supported on MIPS (Tandem). |
| |
| - For DG/UX, an ELF configuration is now supported, and both the ELF |
| and BCS configurations support ELF and COFF object file formats. |
| |
| - OSF/1 V2.0 is supported on Alpha. |
| |
| - Function profiling is also supported on Alpha. |
| |
| - GAS and GDB is supported for Irix 5 (MIPS). |
| |
| - "common mode" (code that will run on both POWER and PowerPC |
| architectures) is now supported for the RS/6000 family; the |
| compiler knows about more PPC chips. |
| |
| - Both NeXTStep 2.1 and 3 are supported on 68k-based architectures. |
| |
| - On the AMD 29k, the -msoft-float is now supported, as well as |
| -mno-sum-in-toc for RS/6000, -mapp-regs and -mflat for Sparc, and |
| -membedded-pic for MIPS. |
| |
| - GCC can now convert division by integer constants into the equivalent |
| multiplication and shift operations when that is faster than the |
| division. |
| |
| - Two new warning options, -Wbad-function-cast and |
| -Wmissing-declarations have been added. |
| |
| - Configurations may now add machine-specific __attribute__ options on |
| type; many machines support the `section' attribute. |
| |
| - The -ffast-math flag permits some optimization that violate strict |
| IEEE rules, such as converting X * 0.0 to 0.0. |
| |
| Noteworthy changes in GCC version 2.5.8: |
| |
| This release only fixes a few serious bugs. These include fixes for a |
| bug that prevented most programs from working on the RS/6000, a bug |
| that caused invalid assembler code for programs with a `switch' |
| statement on the NS32K, a G++ problem that caused undefined names in |
| some configurations, and several less serious problems, some of which |
| can affect most configuration. |
| |
| Noteworthy change in GCC version 2.5.7: |
| |
| This release only fixes a few bugs, one of which was causing bootstrap |
| compare errors on some systems. |
| |
| Noteworthy change in GCC version 2.5.6: |
| |
| A few backend bugs have been fixed, some of which only occur on one |
| machine. |
| |
| The C++ compiler in 2.5.6 includes: |
| |
| * fixes for some common crashes |
| * correct handling of nested types that are referenced as `foo::bar' |
| * spurious warnings about friends being declared static and never |
| defined should no longer appear |
| * enums that are local to a method in a class, or a class that's |
| local to a function, are now handled correctly. For example: |
| class foo { void bar () { enum { x, y } E; x; } }; |
| void bar () { class foo { enum { x, y } E; E baz; }; } |
| |
| Noteworthy change in GCC version 2.5.5: |
| |
| A large number of C++ bugs have been fixed. |
| |
| The fixproto script adds prototypes conditionally on __cplusplus. |
| |
| Noteworthy change in GCC version 2.5.4: |
| |
| A bug fix in passing of structure arguments for the HP-PA architecture |
| makes code compiled with GCC 2.5.4 incompatible with code compiled |
| with earlier versions (if it passes struct arguments of 33 to 64 bits, |
| interspersed with other types of arguments). |
| |
| Noteworthy change in gcc version 2.5.3: |
| |
| The method of "mangling" C++ function names has been changed. So you |
| must recompile all C++ programs completely when you start using GCC |
| 2.5. Also, GCC 2.5 requires libg++ version 2.5. Earlier libg++ |
| versions won't work with GCC 2.5. (This is generally true--GCC |
| version M.N requires libg++ version M.N.) |
| |
| Noteworthy GCC changes in version 2.5: |
| |
| * There is now support for the IBM 370 architecture as a target. |
| Currently the only operating system supported is MVS; GCC does not run |
| on MVS, so you must produce .s files using GCC as a cross compiler, |
| then transfer them to MVS to assemble them. This port is not reliable |
| yet. |
| |
| * The Power PC is now supported. |
| |
| * The i860-based Paragon machine is now supported. |
| |
| * The Hitachi 3050 (an HP-PA machine) is now supported. |
| |
| * The variable __GNUC_MINOR__ holds the minor version number of GCC, as |
| an integer. For version 2.5.X, the value is 5. |
| |
| * In C, initializers for static and global variables are now processed |
| an element at a time, so that they don't need a lot of storage. |
| |
| * The C syntax for specifying which structure field comes next in an |
| initializer is now `.FIELDNAME='. The corresponding syntax for |
| array initializers is now `[INDEX]='. For example, |
| |
| char whitespace[256] |
| = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 }; |
| |
| This was changed to accord with the syntax proposed by the Numerical |
| C Extensions Group (NCEG). |
| |
| * Complex numbers are now supported in C. Use the keyword __complex__ |
| to declare complex data types. See the manual for details. |
| |
| * GCC now supports `long double' meaningfully on the Sparc (128-bit |
| floating point) and on the 386 (96-bit floating point). The Sparc |
| support is enabled on Solaris 2.x because earlier system versions |
| (SunOS 4) have bugs in the emulation. |
| |
| * All targets now have assertions for cpu, machine and system. So you |
| can now use assertions to distinguish among all supported targets. |
| |
| * Nested functions in C may now be inline. Just declare them inline |
| in the usual way. |
| |
| * Packed structure members are now supported fully; it should be possible |
| to access them on any supported target, no matter how little alignment |
| they have. |
| |
| * To declare that a function does not return, you must now write |
| something like this (works only in 2.5): |
| |
| void fatal () __attribute__ ((noreturn)); |
| |
| or like this (works in older versions too): |
| |
| typedef void voidfn (); |
| |
| volatile voidfn fatal; |
| |
| It used to be possible to do so by writing this: |
| |
| volatile void fatal (); |
| |
| but it turns out that ANSI C requires that to mean something |
| else (which is useless). |
| |
| Likewise, to declare that a function is side-effect-free |
| so that calls may be deleted or combined, write |
| something like this (works only in 2.5): |
| |
| int computation () __attribute__ ((const)); |
| |
| or like this (works in older versions too): |
| |
| typedef int intfn (); |
| |
| const intfn computation; |
| |
| * The new option -iwithprefixbefore specifies a directory to add to |
| the search path for include files in the same position where -I would |
| put it, but uses the specified prefix just like -iwithprefix. |
| |
| * Basic block profiling has been enhanced to record the function the |
| basic block comes from, and if the module was compiled for debugging, |
| the line number and filename. A default version of the basic block |
| support module has been added to libgcc2 that appends the basic block |
| information to a text file 'bb.out'. Machine descriptions can now |
| override the basic block support module in the target macro file. |
| |
| New features in g++: |
| |
| * The new flag `-fansi-overloading' for C++. Use a newly implemented |
| scheme of argument matching for C++. It makes g++ more accurately |
| obey the rules set down in Chapter 13 of the Annotated C++ Reference |
| Manual (the ARM). This option will be turned on by default in a |
| future release. |
| |
| * The -finline-debug flag is now gone (it was never really used by the |
| compiler). |
| |
| * Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been |
| dramatically improved. You should not get any syntax errors or incorrect |
| runtime results while using pointers to members correctly; if you do, it's |
| a definite bug. |
| |
| * Forward declaration of an enum is now flagged as an error. |
| |
| * Class-local typedefs are now working properly. |
| |
| * Nested class support has been significantly improved. The compiler |
| will now (in theory) support up to 240 nested classes before hitting |
| other system limits (like memory size). |
| |
| * There is a new C version of the `g++' driver, to replace the old |
| shell script. This should significantly improve the performance of |
| executing g++ on a system where a user's PATH environment variable |
| references many NFS-mounted filesystems. This driver also works |
| under MS-DOS and OS/2. |
| |
| * The ANSI committee working on the C++ standard has adopted a new |
| keyword `mutable'. This will allow you to make a specific member be |
| modifiable in an otherwise const class. |
| |
| Noteworthy GCC changes in version 2.4.4: |
| |
| A crash building g++ on various hosts (including m68k) has been |
| fixed. Also the g++ compiler no longer reports incorrect |
| ambiguities in some situations where they do not exist, and |
| const template member functions are now being found properly. |
| |
| Noteworthy GCC changes in version 2.4: |
| |
| * On each target, the default is now to return short structures |
| compatibly with the "usual" compiler on that target. |
| |
| For most targets, this means the default is to return all structures |
| in memory, like long structures, in whatever way is used on that |
| target. Use -freg-struct-return to enable returning short structures |
| (and unions) in registers. |
| |
| This change means that newly compiled binaries are incompatible with |
| binaries compiled with previous versions of GCC. |
| |
| On some targets, GCC is itself the usual compiler. On these targets, |
| the default way to return short structures is still in registers. |
| Use -fpcc-struct-return to tell GCC to return them in memory. |
| |
| * There is now a floating point emulator which can imitate the way all |
| supported target machines do floating point arithmetic. |
| |
| This makes it possible to have cross compilation to and from the VAX, |
| and between machines of different endianness. However, this works |
| only when the target machine description is updated to use the new |
| facilities, and not all have been updated. |
| |
| This also makes possible support for longer floating point types. |
| GCC 2.4 supports extended format on the 68K if you use `long double', |
| for targets that have a 68881. (When we have run time library |
| routines for extended floating point, then `long double' will use |
| extended format on all 68K targets.) |
| |
| We expect to support extended floating point on the i386 and Sparc in |
| future versions. |
| |
| * Building GCC now automatically fixes the system's header files. |
| This should require no attention. |
| |
| * GCC now installs an unsigned data type as size_t when it fixes the |
| header files (on all but a handful of old target machines). |
| Therefore, the bug that size_t failed to be unsigned is fixed. |
| |
| * Building and installation are now completely separate. |
| All new files are constructed during the build process; |
| installation just copies them. |
| |
| * New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc |
| Lite. |
| |
| * A totally new and much better Objective C run time system is included. |
| |
| * Objective C supports many new features. Alas, I can't describe them |
| since I don't use that language; however, they are the same ones |
| supported in recent versions of the NeXT operating system. |
| |
| * The builtin functions __builtin_apply_args, __builtin_apply and |
| __builtin_return let you record the arguments and returned |
| value of a function without knowing their number or type. |
| |
| * The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__ |
| give the name of the function in the source, and a pretty-printed |
| version of the name. The two are the same in C, but differ in C++. |
| |
| * Casts to union types do not yield lvalues. |
| |
| * ## before an empty rest argument discards the preceding sequence |
| of non-whitespace characters from the macro definition. |
| (This feature is subject to change.) |
| |
| |
| New features specific to C++: |
| |
| * The manual contains a new section ``Common Misunderstandings with |
| GNU C++'' that C++ users should read. |
| |
| * #pragma interface and #pragma implementation let you use the same |
| C++ source file for both interface and implementation. |
| However, this mechanism is still in transition. |
| |
| * Named returned values let you avoid an extra constructor call |
| when a function result has a class type. |
| |
| * The C++ operators <? and >? yield min and max, respectively. |
| |
| * C++ gotos can exit a block safely even if the block has |
| aggregates that require destructors. |
| |
| * gcc defines the macro __GNUG__ when compiling C++ programs. |
| |
| * GNU C++ now correctly distinguishes between the prefix and postfix |
| forms of overloaded operator ++ and --. To avoid breaking old |
| code, if a class defines only the prefix form, the compiler |
| accepts either ++obj or obj++, unless -pedantic is used. |
| |
| * If you are using version 2.3 of libg++, you need to rebuild it with |
| `make CC=gcc' to avoid mismatches in the definition of `size_t'. |
| |
| Newly documented compiler options: |
| |
| -fnostartfiles |
| Omit the standard system startup files when linking. |
| |
| -fvolatile-global |
| Consider memory references to extern and global data items to |
| be volatile. |
| |
| -idirafter DIR |
| Add DIR to the second include path. |
| |
| -iprefix PREFIX |
| Specify PREFIX for later -iwithprefix options. |
| |
| -iwithprefix DIR |
| Add PREFIX/DIR to the second include path. |
| |
| -mv8 |
| Emit Sparc v8 code (with integer multiply and divide). |
| -msparclite |
| Emit Sparclite code (roughly v7.5). |
| |
| -print-libgcc-file-name |
| Search for the libgcc.a file, print its absolute file name, and exit. |
| |
| -Woverloaded-virtual |
| Warn when a derived class function declaration may be an error |
| in defining a C++ virtual function. |
| |
| -Wtemplate-debugging |
| When using templates in a C++ program, warn if debugging is |
| not yet fully available. |
| |
| +eN |
| Control how C++ virtual function definitions are used |
| (like cfront 1.x). |
| |
| |
| Copyright (C) 2000-2003 Free Software Foundation, Inc. |
| |
| Copying and distribution of this file, with or without modification, |
| are permitted in any medium without royalty provided the copyright |
| notice and this notice are preserved. |