Noteworthy changes in GCC for EGCS 1.1.
---------------------------------------

The compiler now implements global common subexpression elimination (gcse) as
well as global constant/copy propagation.  (link to gcse page).

More major improvements have been made to the alias analysis code.  A new
option to allow front-ends to provide alias information to the optimizers
has also been added (-fstrict-aliasing).  -fstrict-aliasing is off by default
now, but will be enabled by default in the future. (link to alias page)

Major changes continue in the exception handling support.  This release
includes some changes to reduce static overhead for exception handling.  It
also includes some major changes to the setjmp/longjmp based EH mechanism to
make it less pessimistic.  And finally, major infrastructure improvements
to the dwarf2 EH mechanism have been made to make our EH support extensible.

We have fixed the infamous security problems with temporary files. 

The "regmove" optimization pass has been nearly completely rewritten.  It now
uses much more information about the target to determine profitability of
transformations.

The compiler now recomputes register usage information immediately before
register allocation.  Previously such information was only not kept up to
date after instruction combination which led to poor register allocation
choices by our priority based register allocator.

The register reloading phase of the compiler has been improved to better
optimize spill code.  This primarily helps targets which generate lots of
spills (like the x86 ports and many register poor embedded ports).

A few changes in the heuristics used by the register allocator and scheduler
have been made which can significantly improve performance for certain
applications.

The compiler's branch shortening algorithms have been significantly improved
to work better on targets which align jump targets.

The compiler now supports the "ADDRESSOF" optimization which can significantly
reduce the overhead for certain inline calls (and inline calls in general).

The compiler now supports a code size optimization switch (-Os).  When enabled
the compiler will prefer optimizations which improve code size over those
which improve code speed.

The compiler has been improved to completely eliminate library calls which
compute constant values.  This is particularly useful on machines which
do not have integer mul/div or floating point support on-chip.

GCC now supports a "--help" option to print detailed help information.

cpplib has been greatly improved.  It is probably useable for some sites now
(major missing feature is trigraphs).

Memory footprint for the compiler has been significantly reduced for certain
pathalogical cases.

Build time improvements for targets which support lots of sched parameters
(alpha and mips primarily).

Compile time for certain programs using large constant initializers has been
improved (effects glibc significantly).

Plus an incredible number of infrastructure changes, warning fixes, bugfixes
and local optimizations.

Various improvements have been made to better support cross compilations.  They
are still not easy, but they are improving.

Target specific NEWS

    Sparc: Now includes V8 plus and V9 support, lots of tuning for Ultrasparcs
           and uses the Haifa scheduler by default.

    Alpha: EV6 tuned, optimized expansion of memcpy/bzero.

    x86: Data in the static store is aligned per Intel recommendations.  Jump
         targets are aligned per Intel recommendations.  Improved epilogue
         sequences for Pentium chips.  Backend improvements which should help
         register allocation on all x86 variants.  Support for PPro conditional
         move instructions has been fixed and enabled.  Random changes
	 throughout the port to make generated code more Pentium friendly.
         Improved support for 64bit integer operations.

    RS6000/PowerPC: Includes AIX4.3 support as well as PowerPC64 support.  
                    Haifa instruction scheduling is enabled by default now.

    MIPS: Multiply/Multiply-Add support has been largely rewritten to generate
          more efficient code.  Includes mips16 support.

    M68K: Various micro-optimizations and Coldfire fixes.

    M32r: Major improvements to this port.

    Arm: Includes Thumb and super interworking support.

EGCS includes all gcc2 changes up to and including the June 9, 1998 snapshot.


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 m-no-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, m-no-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).

