190075SobrienThis file contains information about GCC releases up to GCC 2.8.1, and
2117395Skana tiny bit of information on EGCS.
372562Sobrien
4117395SkanFor details of changes in EGCS releases and GCC 2.95 and later releases,
5117395Skansee the release notes on the GCC web site or the file NEWS which contains
6117395Skanthe most relevant parts of those release notes in text form.
772562Sobrien
8117395SkanChanges in GCC for EGCS (that are not listed in the web release notes)
9117395Skan---------------------------------------------------------------------
1072562Sobrien
1172562SobrienThe compiler now supports the "ADDRESSOF" optimization which can significantly
1272562Sobrienreduce the overhead for certain inline calls (and inline calls in general).
1372562Sobrien
1472562SobrienCompile time for certain programs using large constant initializers has been
1590075Sobrienimproved (affects glibc significantly).
1672562Sobrien
1772562SobrienVarious improvements have been made to better support cross compilations.  They
1872562Sobrienare still not easy, but they are improving.
1972562Sobrien
20117395SkanTarget-specific changes:
2172562Sobrien
2272562Sobrien    M32r: Major improvements to this port.
2372562Sobrien
2472562Sobrien    Arm: Includes Thumb and super interworking support.
2572562Sobrien
2672562SobrienNoteworthy changes in GCC version 2.8.1
2772562Sobrien---------------------------------------
2872562Sobrien
2972562SobrienNumerous bugs have been fixed and some minor performance
3072562Sobrienimprovements (compilation speed) have been made.
3172562Sobrien
3272562SobrienNoteworthy changes in GCC version 2.8.0
3372562Sobrien---------------------------------------
3472562Sobrien
3572562SobrienA major change in this release is the addition of a framework for
3672562Sobrienexception handling, currently used by C++.  Many internal changes and
3772562Sobrienoptimization improvements have been made.  These increase the
3872562Sobrienmaintainability and portability of GCC.  GCC now uses autoconf to
3972562Sobriencompute many host parameters.
4072562Sobrien
4172562SobrienThe following lists changes that add new features or targets.
4272562Sobrien
4372562SobrienSee cp/NEWS for new features of C++ in this release.
4472562Sobrien
4572562SobrienNew tools and features:
4672562Sobrien
4772562Sobrien    The Dwarf 2 debugging information format is supported on ELF systems, and
4872562Sobrien    is the default for -ggdb where available.  It can also be used for C++.
4972562Sobrien    The Dwarf version 1 debugging format is also permitted for C++, but
5072562Sobrien    does not work well.
5172562Sobrien
5272562Sobrien    gcov.c is provided for test coverage analysis and branch profiling
5372562Sobrien    analysis is also supported; see -fprofile-arcs, -ftest-coverage,
5472562Sobrien    and -fbranch-probabilities.
5572562Sobrien
5672562Sobrien    Support for the Checker memory checking tool.
5772562Sobrien
5872562Sobrien    New switch, -fstack-check, to check for stack overflow on systems that
5972562Sobrien    don't have such built into their ABI.
6072562Sobrien
6172562Sobrien    New switches, -Wundef and -Wno-undef to warn if an undefined identifier
6272562Sobrien    is evaluated in an #if directive.
6372562Sobrien
6472562Sobrien    Options -Wall and -Wimplicit now cause GCC to warn about implicit int
6572562Sobrien    in declarations (e.g. `register i;'), since the C Standard committee
6672562Sobrien    has decided to disallow this in the next revision of the standard;
6772562Sobrien    -Wimplicit-function-declarations and -Wimplicit-int are subsets of
6872562Sobrien    this.
6972562Sobrien
7072562Sobrien    Option -Wsign-compare causes GCC to warn about comparison of signed and
7172562Sobrien    unsigned values.
7272562Sobrien
7372562Sobrien    Add -dI option of cccp for cxref.
7472562Sobrien
7572562SobrienNew features in configuration, installation and specs file handling:
7672562Sobrien
7772562Sobrien    New option --enable-c-cpplib to configure script.
7872562Sobrien
7972562Sobrien    You can use --with-cpu on the configure command to specify the default
8072562Sobrien    CPU that GCC should generate code for.
8172562Sobrien
8272562Sobrien    The -specs=file switch allows you to override default specs used in
8372562Sobrien    invoking programs like cc1, as, etc.
8472562Sobrien
8572562Sobrien    Allow including one specs file from another and renaming a specs
8672562Sobrien    variable.
8772562Sobrien
8872562Sobrien    You can now relocate all GCC files with a single environment variable
8972562Sobrien    or a registry entry under Windows 95 and Windows NT.
9072562Sobrien
9172562SobrienChanges in Objective-C:
9272562Sobrien
9372562Sobrien    The Objective-C Runtime Library has been made thread-safe.
9472562Sobrien
9572562Sobrien    The Objective-C Runtime Library contains an interface for creating
9672562Sobrien    mutexes, condition mutexes, and threads; it requires a back-end
9772562Sobrien    implementation for the specific platform and/or thread package.
9872562Sobrien    Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads,
9972562Sobrien    Solaris, and Windows32.  The --enable-threads parameter can be used
10072562Sobrien    when configuring GCC to enable and select a thread back-end.
10172562Sobrien
10272562Sobrien    Objective-C is now configured as separate front-end language to GCC,
10372562Sobrien    making it more convenient to conditionally build it.
10472562Sobrien
10572562Sobrien    The internal structures of the Objective-C Runtime Library have
10672562Sobrien    changed sufficiently to warrant a new version number; now version 8.
10772562Sobrien    Programs compiled with an older version must be recompiled.
10872562Sobrien
10972562Sobrien    The Objective-C Runtime Library can be built as a DLL on Windows 95
11072562Sobrien    and Windows NT systems.
11172562Sobrien    
11272562Sobrien    The Objective-C Runtime Library implements +load.
11372562Sobrien
11472562SobrienThe following new targets are supported (see also list under each
11572562Sobrienindividual CPU below):
11672562Sobrien
11772562Sobrien    Embedded target m32r-elf.
11872562Sobrien    Embedded Hitachi Super-H using ELF.
11972562Sobrien    RTEMS real-time system on various CPU targets.
12072562Sobrien    ARC processor.
12172562Sobrien    NEC V850 processor.
12272562Sobrien    Matsushita MN10200 processor.
12372562Sobrien    Matsushita MN10300 processor.
12472562Sobrien    Sparc and PowerPC running on VxWorks.
12572562Sobrien    Support both glibc versions 1 and 2 on Linux-based GNU systems.
12672562Sobrien
12772562SobrienNew features for DEC Alpha systems:
12872562Sobrien
12972562Sobrien    Allow detailed specification of IEEE fp support:
13072562Sobrien      -mieee, -mieee-with-inexact, and -mieee-conformant
13172562Sobrien      -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx
13272562Sobrien    -mcpu=xxx for CPU selection
13372562Sobrien    Support scheduling parameters for EV5.
13472562Sobrien    Add support for BWX, CIX, and MAX instruction set extensions.
13572562Sobrien    Support Linux-based GNU systems.
13672562Sobrien    Support VMS.
13772562Sobrien
13872562SobrienAdditional supported processors and systems for MIPS targets:
13972562Sobrien
14072562Sobrien    MIPS4 instruction set.
14172562Sobrien    R4100, R4300 and R5000 processors.
14272562Sobrien    N32 and N64 ABI.
14372562Sobrien    IRIX 6.2.
14472562Sobrien    SNI SINIX.
14572562Sobrien    
14672562SobrienNew features for Intel x86 family:
14772562Sobrien
14872562Sobrien    Add scheduling parameters for Pentium and Pentium Pro.
14972562Sobrien    Support stabs on Solaris-x86.
15072562Sobrien    Intel x86 processors running the SCO OpenServer 5 family.
15172562Sobrien    Intel x86 processors running DG/UX.
15272562Sobrien    Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT.
15372562Sobrien
15472562SobrienNew features for Motorola 68k family:
15572562Sobrien
15672562Sobrien    Support for 68060 processor.
15772562Sobrien    More consistent switches to specify processor.
15872562Sobrien    Motorola 68k family running AUX.
15972562Sobrien    68040 running pSOS, ELF object files, DBX debugging.
16072562Sobrien    Coldfire variant of Motorola m68k family.
16172562Sobrien
16272562SobrienNew features for the HP PA RISC:
16372562Sobrien
16472562Sobrien    -mspace and -mno-space
16572562Sobrien    -mlong-load-store and -mno-long-load-store
16672562Sobrien    -mbig-switch -mno-big-switch
16772562Sobrien
16872562Sobrien    GCC on the PA requires either gas-2.7 or the HP assembler; for best
16972562Sobrien    results using GAS is highly recommended.  GAS is required for -g and
17072562Sobrien    exception handling support.
17172562Sobrien
17272562SobrienNew features for SPARC-based systems:
17372562Sobrien
17472562Sobrien    The ultrasparc cpu.
17572562Sobrien    The sparclet cpu, supporting only a.out file format.
17672562Sobrien    Sparc running SunOS 4 with the GNU assembler.
17772562Sobrien    Sparc running the Linux-based GNU system.
17872562Sobrien    Embedded Sparc processors running the ELF object file format.
17972562Sobrien    -mcpu=xxx
18072562Sobrien    -mtune=xxx
18172562Sobrien    -malign-loops=xxx
18272562Sobrien    -malign-jumps=xxx
18372562Sobrien    -malign-functions=xxx
18472562Sobrien    -mimpure-text and -mno-impure-text
18572562Sobrien
18672562Sobrien    Options -mno-v8 and -mno-sparclite are no longer supported on SPARC
18772562Sobrien    targets.  Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930,
18872562Sobrien    and -mf934 are deprecated and will be deleted in GCC 2.9.  Use
18972562Sobrien    -mcpu=xxx instead.
19072562Sobrien
19172562SobrienNew features for rs6000 and PowerPC systems:
19272562Sobrien
19372562Sobrien    Solaris 2.51 running on PowerPC's.
19472562Sobrien    The Linux-based GNU system running on PowerPC's.
19572562Sobrien    -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2
19672562Sobrien    -mtune=xxx
19772562Sobrien    -mrelocatable-lib, -mno-relocatable-lib
19872562Sobrien    -msim, -mmve, -memb
19972562Sobrien    -mupdate, -mno-update
20072562Sobrien    -mfused-madd, -mno-fused-madd
20172562Sobrien
20272562Sobrien    -mregnames
20372562Sobrien    -meabi
20472562Sobrien    -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi
20572562Sobrien    -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi
20672562Sobrien    -memb, -msim, -mmvme
20772562Sobrien    -myellowknife, -mads
20872562Sobrien    wchar_t is now of type long as per the ABI, not unsigned short.
20972562Sobrien    -p/-pg support
21072562Sobrien    -mcpu=403 now implies -mstrict-align.
21172562Sobrien    Implement System V profiling.
21272562Sobrien
21372562Sobrien    Aix 4.1 GCC targets now default to -mcpu=common so that programs
21472562Sobrien    compiled can be moved between rs6000 and powerpc based systems.  A
21572562Sobrien    consequence of this is that -static won't work, and that some programs
21672562Sobrien    may be slightly slower.
21772562Sobrien
21872562Sobrien    You can select the default value to use for -mcpu=xxx on rs6000 and
21972562Sobrien    powerpc targets by using the --with-cpu=xxx option when configuring the
22072562Sobrien    compiler.  In addition, a new options, -mtune=xxx was added that
22172562Sobrien    selects the machine to schedule for but does not select the
22272562Sobrien    architecture level.
22372562Sobrien
22472562Sobrien    Directory names used for storing the multilib libraries on System V
22572562Sobrien    and embedded PowerPC systems have been shortened to work with commands
22672562Sobrien    like tar that have fixed limits on pathname size.
22772562Sobrien
22872562SobrienNew features for the Hitachi H8/300(H):
22972562Sobrien
23072562Sobrien    -malign-300
23172562Sobrien    -ms (for the Hitachi H8/S processor)
23272562Sobrien    -mint32
23372562Sobrien
23472562SobrienNew features for the ARM:
23572562Sobrien
23672562Sobrien    -march=xxx, -mtune=xxx, -mcpu=xxx
23772562Sobrien    Support interworking with Thumb code.
23872562Sobrien    ARM processor with a.out object format, COFF, or AOF assembler.
23972562Sobrien    ARM on "semi-hosted" platform.
24072562Sobrien    ARM running NetBSD.
24172562Sobrien    ARM running the Linux-based GNU system.
24272562Sobrien
24372562SobrienNew feature for Solaris systems:
24472562Sobrien
24572562Sobrien    GCC installation no longer makes a copy of system include files,
24672562Sobrien    thus insulating GCC better from updates to the operating system.
24772562Sobrien
24872562Sobrien
24972562SobrienNoteworthy changes in GCC version 2.7.2
25072562Sobrien---------------------------------------
25172562Sobrien
25272562SobrienA few bugs have been fixed (most notably the generation of an
25372562Sobrieninvalid assembler opcode on some RS/6000 systems).
25472562Sobrien
25572562SobrienNoteworthy changes in GCC version 2.7.1
25672562Sobrien---------------------------------------
25772562Sobrien
25872562SobrienThis release fixes numerous bugs (mostly minor) in GCC 2.7.0, but
25972562Sobrienalso contains a few new features, mostly related to specific targets.
26072562Sobrien
26172562SobrienMajor changes have been made in code to support Windows NT.
26272562Sobrien
26372562SobrienThe following new targets are supported:
26472562Sobrien
26572562Sobrien	2.9 BSD on PDP-11
26672562Sobrien	Linux on m68k
26772562Sobrien	HP/UX version 10 on HP PA RISC (treated like version 9)
26872562Sobrien	DEC Alpha running Windows NT
26972562Sobrien
27072562SobrienWhen parsing C, GCC now recognizes C++ style `//' comments unless you
27172562Sobrienspecify `-ansi' or `-traditional'.
27272562Sobrien
27372562SobrienThe PowerPC System V targets (powerpc-*-sysv, powerpc-*-eabi) now use the
27472562Sobriencalling sequence specified in the System V Application Binary Interface
27572562SobrienProcessor Supplement (PowerPC Processor ABI Supplement) rather than the calling
27672562Sobriensequence used in GCC version 2.7.0.  That calling sequence was based on the AIX
27772562Sobriencalling sequence without function descriptors.  To compile code for that older
27872562Sobriencalling sequence, either configure the compiler for powerpc-*-eabiaix or use
27972562Sobrienthe -mcall-aix switch when compiling and linking.
28072562Sobrien
28172562SobrienNoteworthy changes in GCC version 2.7.0
28272562Sobrien---------------------------------------
28372562Sobrien
28472562SobrienGCC now works better on systems that use ".obj" and ".exe" instead of
28572562Sobrien".o" and no extension.  This involved changes to the driver program,
28672562Sobriengcc.c, to convert ".o" names to ".obj" and to GCC's Makefile to use
28772562Sobrien".obj" and ".exe" in filenames that are not targets.  In order to
28872562Sobrienbuild GCC on such systems, you may need versions of GNU make and/or
28972562Sobriencompatible shells.  At this point, this support is preliminary.
29072562Sobrien
29172562SobrienObject file extensions of ".obj" and executable file extensions of
29272562Sobrien".exe" are allowed when using appropriate version of GNU Make.
29372562Sobrien
29472562SobrienNumerous enhancements were made to the __attribute__ facility including
29572562Sobrienmore attributes and more places that support it.  We now support the
29672562Sobrien"packed", "nocommon", "noreturn", "volatile", "const", "unused",
29772562Sobrien"transparent_union", "constructor", "destructor", "mode", "section",
29872562Sobrien"align", "format", "weak", and "alias" attributes.  Each of these
29972562Sobriennames may also be specified with added underscores, e.g., "__packed__".
30072562Sobrien__attribute__ may now be applied to parameter definitions, function
30172562Sobriendefinitions, and structure, enum, and union definitions.
30272562Sobrien
30372562SobrienGCC now supports returning more structures in registers, as specified by
30472562Sobrienmany calling sequences (ABIs), such as on the HP PA RISC.
30572562Sobrien
30672562SobrienA new option '-fpack-struct' was added to automatically pack all structure
30772562Sobrienmembers together without holes.
30872562Sobrien
30972562SobrienThere is a new library (cpplib) and program (cppmain) that at some
31072562Sobrienpoint will replace cpp (aka cccp).  To use cppmain as cpp now, pass
31172562Sobrienthe option CCCP=cppmain to make.  The library is already used by the
31272562Sobrienfix-header program, which should speed up the fixproto script.
31372562Sobrien
31472562SobrienNew options for supported targets:
31572562Sobrien
31672562Sobrien    GNU on many targets.
31772562Sobrien    NetBSD on MIPS, m68k, VAX, and x86.
31872562Sobrien    LynxOS on x86, m68k, Sparc, and RS/6000.
31972562Sobrien    VxWorks on many targets.
32072562Sobrien
32172562Sobrien    Windows/NT on x86 architecture.  Initial support for Windows/NT on Alpha
32272562Sobrien    (not fully working).
32372562Sobrien
32472562Sobrien    Many embedded targets, specifically UDI on a29k, aout, coff, elf,
32572562Sobrien    and vsta "operating systems" on m68k, m88k, mips, sparc, and x86.
32672562Sobrien
32772562SobrienAdditional support for x86 (i386, i486, and Pentium):
32872562Sobrien
32972562Sobrien    Work with old and new linkers for Linux-based GNU systems,
33072562Sobrien	supporting both a.out and ELF.
33172562Sobrien    FreeBSD on x86.
33272562Sobrien    Stdcall convention.
33372562Sobrien    -malign-double, -mregparm=, -malign-loops= and -malign-jumps=  switches.
33472562Sobrien    On ISC systems, support -Xp like -posix.
33572562Sobrien
33672562SobrienAdditions for RS/6000:
33772562Sobrien
33872562Sobrien    Instruction scheduling information for PowerPC 403.
33972562Sobrien    AIX 4.1 on PowerPC.
34072562Sobrien    -mstring and -mno-string.
34172562Sobrien    -msoft-float and floating-point emulation included.
34272562Sobrien    Preliminary support for PowerPC System V.4 with or without the GNU as.
34372562Sobrien    Preliminary support for EABI.
34472562Sobrien    Preliminary support for 64-bit systems.
34572562Sobrien    Both big and little endian systems.
34672562Sobrien
34772562SobrienNew features for MIPS-based systems:
34872562Sobrien
34972562Sobrien    r4650.
35072562Sobrien    mips4 and R8000.
35172562Sobrien    Irix 6.0.
35272562Sobrien    64-bit ABI.
35372562Sobrien    Allow dollar signs in labels on SGI/Irix 5.x.
35472562Sobrien
35572562SobrienNew support for HP PA RISC:
35672562Sobrien
35772562Sobrien    Generation of PIC (requires binutils-2.5.2.u6 or later).
35872562Sobrien    HP-UX version 9 on HP PA RISC (dynamically links even with -g).
35972562Sobrien    Processor variants for HP PA RISC: 700, 7100, and 7100LC.
36072562Sobrien    Automatic generation of long calls when needed.
36172562Sobrien    -mfast-indirect-calls for kernels and static binaries.
36272562Sobrien
36372562Sobrien    The called routine now copies arguments passed by invisible reference,
36472562Sobrien    as required by the calling standard.
36572562Sobrien
36672562SobrienOther new miscellaneous target-specific support:
36772562Sobrien
36872562Sobrien    -mno-multm on a29k.
36972562Sobrien    -mold-align for i960.
37072562Sobrien    Configuration for "semi-hosted" ARM.
37172562Sobrien    -momit-leaf-frame-pointer for M88k.
37272562Sobrien    SH3 variant of Hitachi Super-H and support both big and little endian.
37372562Sobrien
37472562SobrienChanges to Objective-C:
37572562Sobrien
37672562Sobrien    Bare-bones implementation of NXConstantString has been added,
37772562Sobrien    which is invoked by the @"string" directive.
37872562Sobrien
37972562Sobrien    Class * has been changed to Class to conform to the NextSTEP and
38072562Sobrien    OpenStep runtime.
38172562Sobrien
38272562Sobrien    Enhancements to make dynamic loading easier.
38372562Sobrien
38472562Sobrien    The module version number has been updated to Version 7, thus existing
38572562Sobrien    code will need to be recompiled to use the current run-time library.
38672562Sobrien
38772562SobrienGCC now supports the ISO Normative Addendum 1 to the C Standard.
38872562SobrienAs a result:
38972562Sobrien
39072562Sobrien    The header <iso646.h> defines macros for C programs written
39172562Sobrien    in national variants of ISO 646.
39272562Sobrien
39372562Sobrien    The following digraph tokens are supported:
39472562Sobrien	<:	:>	<%	%>	%:	%:%:
39572562Sobrien    These behave like the following, respectively:
39672562Sobrien	[	]	{	}	#	##
39772562Sobrien
39872562Sobrien    Digraph tokens are supported unless you specify the `-traditional'
39972562Sobrien    option; you do not need to specify `-ansi' or `-trigraphs'.  Except
40072562Sobrien    for contrived and unlikely examples involving preprocessor
40172562Sobrien    stringizing, digraph interpretation doesn't change the meaning of
40272562Sobrien    programs; this is unlike trigraph interpretation, which changes the
40372562Sobrien    meanings of relatively common strings.
40472562Sobrien
40572562Sobrien    The macro __STDC_VERSION__ has the value 199409L.
40672562Sobrien
40772562Sobrien  As usual, for full conformance to the standard, you also need a
40872562Sobrien  C library that conforms.
40972562Sobrien
41072562SobrienThe following lists changes that have been made to g++.  If some
41172562Sobrienfeatures mentioned below sound unfamiliar, you will probably want to
41272562Sobrienlook at the recently-released public review copy of the C++ Working
41372562SobrienPaper.  For PostScript and PDF (Adobe Acrobat) versions, see the
41472562Sobrienarchive at ftp://research.att.com/dist/stdc++/WP.  For HTML and ASCII
41572562Sobrienversions, see ftp://ftp.cygnus.com/pub/g++.  On the web, see
41672562Sobrienhttp://www.cygnus.com/~mrs/wp-draft.
41772562Sobrien
41872562SobrienThe scope of variables declared in the for-init-statement has been changed
41972562Sobriento conform to http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for; as a
42072562Sobrienresult, packages such as groff 1.09 will not compile unless you specify the
42172562Sobrien-fno-for-scope flag.  PLEASE DO NOT REPORT THIS AS A BUG; this is a change
42272562Sobrienmandated by the C++ standardization committee.
42372562Sobrien
42472562SobrienBinary incompatibilities:
42572562Sobrien
42672562Sobrien    The builtin 'bool' type is now the size of a machine word on RISC targets,
42772562Sobrien    for code efficiency; it remains one byte long on CISC targets.
42872562Sobrien
42972562Sobrien    Code that does not use #pragma interface/implementation will most
43072562Sobrien    likely shrink dramatically, as g++ now only emits the vtable for a
43172562Sobrien    class in the translation unit where its first non-inline, non-abstract
43272562Sobrien    virtual function is defined.
43372562Sobrien
43472562Sobrien    Classes that do not define the copy constructor will sometimes be
43572562Sobrien    passed and returned in registers.  This may illuminate latent bugs in
43672562Sobrien    your code.
43772562Sobrien
43872562SobrienSupport for automatic template instantiation has *NOT* been added, due
43972562Sobriento a disagreement over design philosophies.
44072562Sobrien
44172562SobrienSupport for exception handling has been improved; more targets are now
44272562Sobriensupported, and throws will use the RTTI mechanism to match against the
44372562Sobriencatch parameter type.  Optimization is NOT SUPPORTED with
44472562Sobrien-fhandle-exceptions; no need to report this as a bug.
44572562Sobrien
44672562SobrienSupport for Run-Time Type Identification has been added with -frtti.
44772562SobrienThis support is still in alpha; one major restriction is that any file
44872562Sobriencompiled with -frtti must include <typeinfo.h>.
44972562Sobrien
45072562SobrienPreliminary support for namespaces has been added.  This support is far
45172562Sobrienfrom complete, and probably not useful.
45272562Sobrien
45372562SobrienSynthesis of compiler-generated constructors, destructors and
45472562Sobrienassignment operators is now deferred until the functions are used.
45572562Sobrien
45672562SobrienThe parsing of expressions such as `a ? b : c = 1' has changed from
45772562Sobrien`(a ? b : c) = 1' to `a : b ? (c = 1)'.
45872562Sobrien
45972562SobrienThe code generated for testing conditions, especially those using ||
46072562Sobrienand &&, is now more efficient.
46172562Sobrien
46272562SobrienThe operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
46372562Sobrienor, or_eq, xor and xor_eq are now supported.  Use -ansi or
46472562Sobrien-foperator-names to enable them.
46572562Sobrien
46672562SobrienThe 'explicit' keyword is now supported.  'explicit' is used to mark
46772562Sobrienconstructors and type conversion operators that should not be used
46872562Sobrienimplicitly.
46972562Sobrien
47072562Sobrieng++ now accepts the typename keyword, though it currently has no
47172562Sobriensemantics; it can be a no-op in the current template implementation.
47272562SobrienYou may want to start using it in your code, however, since the
47372562Sobrienpending rewrite of the template implementation to compile STL properly
47472562Sobrien(perhaps for 2.8.0, perhaps not) will require you to use it as
47572562Sobrienindicated by the current draft.
47672562Sobrien
47772562SobrienHandling of user-defined type conversion has been overhauled so that
47872562Sobrientype conversion operators are now found and used properly in
47972562Sobrienexpressions and function calls.
48072562Sobrien
48172562Sobrien-fno-strict-prototype now only applies to function declarations with
48272562Sobrien"C" linkage.
48372562Sobrien
48472562Sobrieng++ now warns about 'if (x=0)' with -Wparentheses or -Wall.
48572562Sobrien
48672562Sobrien#pragma weak and #pragma pack are supported on System V R4 targets, as
48772562Sobrienare various other target-specific #pragmas supported by gcc.
48872562Sobrien
48972562Sobriennew and delete of const types is now allowed (with no additional
49072562Sobriensemantics).
49172562Sobrien
49272562SobrienExplicit instantiation of template methods is now supported.  Also,
49372562Sobrien'inline template class foo<int>;' can be used to emit only the vtable
49472562Sobrienfor a template class.
49572562Sobrien
49672562SobrienWith -fcheck-new, g++ will check the return value of all calls to
49772562Sobrienoperator new, and not attempt to modify a returned null pointer.
49872562Sobrien
49972562SobrienThe template instantiation code now handles more conversions when
50072562Sobrienpassing to a parameter that does not depend on template arguments.
50172562SobrienThis means that code like 'string s; cout << s;' now works.
50272562Sobrien
50372562SobrienInvalid jumps in a switch statement past declarations that require
50472562Sobrieninitializations are now caught.
50572562Sobrien
50672562SobrienFunctions declared 'extern inline' now have the same linkage semantics
50772562Sobrienas inline member functions.  On supported targets, where previously
50872562Sobrienthese functions (and vtables, and template instantiations) would have
50972562Sobrienbeen defined statically, they will now be defined as weak symbols so
51072562Sobrienthat only one out-of-line definition is used.
51172562Sobrien
51272562Sobriencollect2 now demangles linker output, and c++filt has become part of
51372562Sobrienthe gcc distribution.
51472562Sobrien
51572562SobrienNoteworthy changes in GCC version 2.6.3:
51672562Sobrien
51772562SobrienA few more bugs have been fixed.
51872562Sobrien
51972562SobrienNoteworthy changes in GCC version 2.6.2:
52072562Sobrien
52172562SobrienA few bugs have been fixed.
52272562Sobrien
52372562SobrienNames of attributes can now be preceded and followed by double underscores.
52472562Sobrien
52572562SobrienNoteworthy changes in GCC version 2.6.1:
52672562Sobrien
52772562SobrienNumerous (mostly minor) bugs have been fixed.
52872562Sobrien
52972562SobrienThe following new configurations are supported:
53072562Sobrien
53172562Sobrien	GNU on x86 (instead of treating it like MACH)
53272562Sobrien	NetBSD on Sparc and Motorola 68k
53372562Sobrien	AIX 4.1 on RS/6000 and PowerPC systems
53472562Sobrien	Sequent DYNIX/ptx 1.x and 2.x.
53572562Sobrien	Both COFF and ELF configurations on AViiON without using /bin/gcc
53672562Sobrien	Windows/NT on x86 architecture; preliminary
53772562Sobrien	AT&T DSP1610 digital signal processor chips
53872562Sobrien	i960 systems on bare boards using COFF
53972562Sobrien	PDP11; target only and not extensively tested
54072562Sobrien
54172562SobrienThe -pg option is now supported for Alpha under OSF/1 V3.0 or later.
54272562Sobrien
54372562SobrienFiles with an extension of ".c++" are treated as C++ code.
54472562Sobrien
54572562SobrienThe -Xlinker and -Wl arguments are now passed to the linker in the
54672562Sobrienposition they were specified on the command line.  This makes it
54772562Sobrienpossible, for example, to pass flags to the linker about specific
54872562Sobrienobject files.
54972562Sobrien
55072562SobrienThe use of positional arguments to the configure script is no longer
55172562Sobrienrecommended.  Use --target= to specify the target; see the GCC manual.
55272562Sobrien
55372562SobrienThe 386 now supports two new switches: -mreg-alloc=<string> changes
55472562Sobrienthe default register allocation order used by the compiler, and
55572562Sobrien-mno-wide-multiply disables the use of the mul/imul instructions that
55672562Sobrienproduce 64 bit results in EAX:EDX from 32 bit operands to do long long
55772562Sobrienmultiplies and 32-bit division by constants.
55872562Sobrien
55972562SobrienNoteworthy changes in GCC version 2.6.0:
56072562Sobrien
56172562SobrienNumerous bugs have been fixed, in the C and C++ front-ends, as
56272562Sobrienwell as in the common compiler code.
56372562Sobrien
56472562SobrienThis release includes the C, Objective-C, and C++ compilers.  However,
56572562Sobrienwe have moved the files for the C++ compiler (G++) files to a
56672562Sobriensubdirectory, cp.  Subsequent releases of GCC will split these files
56772562Sobriento a separate TAR file.
56872562Sobrien
56972562SobrienThe G++ team has been tracking the development of the ANSI standard for C++.
57072562SobrienHere are some new features added from the latest working paper:
57172562Sobrien
57272562Sobrien	* built-in boolean type 'bool', with constants 'true' and 'false'.
57372562Sobrien	* array new and delete (operator new [] and delete []).
57472562Sobrien	* WP-conforming lifetime of temporaries.
57572562Sobrien	* explicit instantiation of templates (template class A<int>;),
57672562Sobrien          along with an option (-fno-implicit-templates) to disable emission
57772562Sobrien          of implicitly instantiated templates, obsoletes -fexternal-templates.
57872562Sobrien	* static member constants (static const int foo = 4; within the
57972562Sobrien          class declaration).
58072562Sobrien
58172562SobrienMany error messages have been improved to tell the user more about the
58272562Sobrienproblem.  Conformance checking with -pedantic-errors has been
58372562Sobrienimproved.  G++ now compiles Fresco.
58472562Sobrien
58572562SobrienThere is now an experimental implementation of virtual functions using
58672562Sobrienthunks instead of Cfront-style vtables, enabled with -fvtable-thunks.
58772562SobrienThis option also enables a heuristic which causes the compiler to only
58872562Sobrienemit the vtable in the translation unit where its first non-inline
58972562Sobrienvirtual function is defined; using this option and
59072562Sobrien-fno-implicit-templates, users should be able to avoid #pragma
59172562Sobrieninterface/implementation altogether.
59272562Sobrien
59372562SobrienSignatures have been added as a GNU C++ extension.  Using the option
59472562Sobrien-fhandle-signatures, users are able to turn on recognition of
59572562Sobriensignatures.  A short introduction on signatures is in the section
59672562Sobrien`Extension to the C++ Language' in the manual.
59772562Sobrien
59872562SobrienThe `g++' program is now a C program, rather than a shell script.
59972562Sobrien
60072562SobrienLots and lots and lots of bugs fixes, in nested types, access control,
60172562Sobrienpointers to member functions, the parser, templates, overload
60272562Sobrienresolution, etc, etc.
60372562Sobrien
60472562SobrienThere have been two major enhancements to the Objective-C compiler:
60572562Sobrien
60672562Sobrien1) Added portability.  It now runs on Alpha, and some problems with
60772562Sobrien   message forwarding have been addressed on other platforms.
60872562Sobrien
60972562Sobrien2) Selectors have been redefined to be pointers to structs like:
61072562Sobrien   { void *sel_id, char *sel_types }, where the sel_id is the unique
61172562Sobrien   identifier, the selector itself is no longer unique.  
61272562Sobrien
61372562Sobrien   Programmers should use the new function sel_eq to test selector
61472562Sobrien   equivalence.
61572562Sobrien
61672562SobrienThe following major changes have been made to the base compiler and
61772562Sobrienmachine-specific files.
61872562Sobrien
61972562Sobrien- The MIL-STD-1750A is a new port, but still preliminary.
62072562Sobrien
62172562Sobrien- The h8/300h is now supported; both the h8/300 and h8/300h ports come
62272562Sobrien  with 32 bit IEEE 754 software floating point support.
62372562Sobrien
62472562Sobrien- The 64-bit Sparc (v9) and 64-bit MIPS chips are supported.
62572562Sobrien
62672562Sobrien- NetBSD is supported on m68k, Intel x86, and pc523 systems and FreeBSD
62772562Sobrien  on x86.
62872562Sobrien
62972562Sobrien- COFF is supported on x86, m68k, and Sparc systems running LynxOS.
63072562Sobrien
63172562Sobrien- 68K systems from Bull and Concurrent are supported and System V
63272562Sobrien  Release 4 is supported on the Atari.
63372562Sobrien
63472562Sobrien- GCC supports GAS on the Motorola 3300 (sysV68) and debugging
63572562Sobrien  (assuming GAS) on the Plexus 68K system.  (However, GAS does not yet
63672562Sobrien  work on those systems).
63772562Sobrien
63872562Sobrien- System V Release 4 is supported on MIPS (Tandem).
63972562Sobrien
64072562Sobrien- For DG/UX, an ELF configuration is now supported, and both the ELF
64172562Sobrien  and BCS configurations support ELF and COFF object file formats.
64272562Sobrien
64372562Sobrien- OSF/1 V2.0 is supported on Alpha.
64472562Sobrien
64572562Sobrien- Function profiling is also supported on Alpha.
64672562Sobrien
64772562Sobrien- GAS and GDB is supported for Irix 5 (MIPS).
64872562Sobrien
64972562Sobrien- "common mode" (code that will run on both POWER and PowerPC
65072562Sobrien  architectures) is now supported for the RS/6000 family; the
65172562Sobrien  compiler knows about more PPC chips.
65272562Sobrien
65372562Sobrien- Both NeXTStep 2.1 and 3 are supported on 68k-based architectures.
65472562Sobrien
65572562Sobrien- On the AMD 29k, the -msoft-float is now supported, as well as
65672562Sobrien  -mno-sum-in-toc for RS/6000, -mapp-regs and -mflat for Sparc, and
65772562Sobrien  -membedded-pic for MIPS.
65872562Sobrien
65972562Sobrien- GCC can now convert division by integer constants into the equivalent
66072562Sobrien  multiplication and shift operations when that is faster than the
66172562Sobrien  division.
66272562Sobrien	
66372562Sobrien- Two new warning options, -Wbad-function-cast and
66472562Sobrien  -Wmissing-declarations have been added.
66572562Sobrien
66672562Sobrien- Configurations may now add machine-specific __attribute__ options on
66772562Sobrien  type; many machines support the `section' attribute.
66872562Sobrien
66972562Sobrien- The -ffast-math flag permits some optimization that violate strict
67072562Sobrien  IEEE rules, such as converting X * 0.0 to 0.0.
67172562Sobrien
67272562SobrienNoteworthy changes in GCC version 2.5.8:
67372562Sobrien
67472562SobrienThis release only fixes a few serious bugs.  These include fixes for a
67572562Sobrienbug that prevented most programs from working on the RS/6000, a bug
67672562Sobrienthat caused invalid assembler code for programs with a `switch'
67772562Sobrienstatement on the NS32K, a G++ problem that caused undefined names in
67872562Sobriensome configurations, and several less serious problems, some of which
67972562Sobriencan affect most configuration.
68072562Sobrien
68172562SobrienNoteworthy change in GCC version 2.5.7:
68272562Sobrien
68372562SobrienThis release only fixes a few bugs, one of which was causing bootstrap
68472562Sobriencompare errors on some systems.
68572562Sobrien
68672562SobrienNoteworthy change in GCC version 2.5.6:
68772562Sobrien
68872562SobrienA few backend bugs have been fixed, some of which only occur on one
68972562Sobrienmachine.
69072562Sobrien
69172562SobrienThe C++ compiler in 2.5.6 includes:
69272562Sobrien
69372562Sobrien * fixes for some common crashes
69472562Sobrien * correct handling of nested types that are referenced as `foo::bar'
69572562Sobrien * spurious warnings about friends being declared static and never
69672562Sobrien   defined should no longer appear
69772562Sobrien * enums that are local to a method in a class, or a class that's
69872562Sobrien   local to a function, are now handled correctly.  For example:
69972562Sobrien       class foo { void bar () { enum { x, y } E; x; } };
70072562Sobrien       void bar () { class foo { enum { x, y } E; E baz; }; }
70172562Sobrien
70272562SobrienNoteworthy change in GCC version 2.5.5:
70372562Sobrien
70472562SobrienA large number of C++ bugs have been fixed.
70572562Sobrien
70672562SobrienThe fixproto script adds prototypes conditionally on __cplusplus.
70772562Sobrien
70872562SobrienNoteworthy change in GCC version 2.5.4:
70972562Sobrien
71072562SobrienA bug fix in passing of structure arguments for the HP-PA architecture
71172562Sobrienmakes code compiled with GCC 2.5.4 incompatible with code compiled
71272562Sobrienwith earlier versions (if it passes struct arguments of 33 to 64 bits,
71372562Sobrieninterspersed with other types of arguments).
71472562Sobrien
71572562SobrienNoteworthy change in gcc version 2.5.3:
71672562Sobrien
71772562SobrienThe method of "mangling" C++ function names has been changed.  So you
71872562Sobrienmust recompile all C++ programs completely when you start using GCC
71972562Sobrien2.5.  Also, GCC 2.5 requires libg++ version 2.5.  Earlier libg++
72072562Sobrienversions won't work with GCC 2.5.  (This is generally true--GCC
72172562Sobrienversion M.N requires libg++ version M.N.)
72272562Sobrien
72372562SobrienNoteworthy GCC changes in version 2.5:
72472562Sobrien
72572562Sobrien* There is now support for the IBM 370 architecture as a target.
72672562SobrienCurrently the only operating system supported is MVS; GCC does not run
72772562Sobrienon MVS, so you must produce .s files using GCC as a cross compiler,
72872562Sobrienthen transfer them to MVS to assemble them.  This port is not reliable
72972562Sobrienyet.
73072562Sobrien
73172562Sobrien* The Power PC is now supported.
73272562Sobrien
73372562Sobrien* The i860-based Paragon machine is now supported.
73472562Sobrien
73572562Sobrien* The Hitachi 3050 (an HP-PA machine) is now supported.
73672562Sobrien
73772562Sobrien* The variable __GNUC_MINOR__ holds the minor version number of GCC, as
73872562Sobrienan integer.  For version 2.5.X, the value is 5.
73972562Sobrien
74072562Sobrien* In C, initializers for static and global variables are now processed
74172562Sobrienan element at a time, so that they don't need a lot of storage.
74272562Sobrien
74372562Sobrien* The C syntax for specifying which structure field comes next in an
74472562Sobrieninitializer is now `.FIELDNAME='.  The corresponding syntax for
74572562Sobrienarray initializers is now `[INDEX]='.  For example,
74672562Sobrien
74772562Sobrien  char whitespace[256]
74872562Sobrien    = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 };
74972562Sobrien
75072562SobrienThis was changed to accord with the syntax proposed by the Numerical
75172562SobrienC Extensions Group (NCEG).
75272562Sobrien
75372562Sobrien* Complex numbers are now supported in C.  Use the keyword __complex__
75472562Sobriento declare complex data types.  See the manual for details.
75572562Sobrien
75672562Sobrien* GCC now supports `long double' meaningfully on the Sparc (128-bit
75772562Sobrienfloating point) and on the 386 (96-bit floating point).  The Sparc
75872562Sobriensupport is enabled on Solaris 2.x because earlier system versions
75972562Sobrien(SunOS 4) have bugs in the emulation.
76072562Sobrien
76172562Sobrien* All targets now have assertions for cpu, machine and system.  So you
76272562Sobriencan now use assertions to distinguish among all supported targets.
76372562Sobrien
76472562Sobrien* Nested functions in C may now be inline.  Just declare them inline
76572562Sobrienin the usual way.
76672562Sobrien
76772562Sobrien* Packed structure members are now supported fully; it should be possible 
76872562Sobriento access them on any supported target, no matter how little alignment
76972562Sobrienthey have.
77072562Sobrien
77172562Sobrien* To declare that a function does not return, you must now write
77272562Sobriensomething like this (works only in 2.5):
77372562Sobrien
77472562Sobrien    void fatal () __attribute__ ((noreturn));
77572562Sobrien
77672562Sobrienor like this (works in older versions too):
77772562Sobrien
77872562Sobrien    typedef void voidfn ();
77972562Sobrien
78072562Sobrien    volatile voidfn fatal;
78172562Sobrien
78272562SobrienIt used to be possible to do so by writing this:
78372562Sobrien
78472562Sobrien    volatile void fatal ();
78572562Sobrien
78672562Sobrienbut it turns out that ANSI C requires that to mean something
78772562Sobrienelse (which is useless).
78872562Sobrien
78972562SobrienLikewise, to declare that a function is side-effect-free
79072562Sobrienso that calls may be deleted or combined, write
79172562Sobriensomething like this (works only in 2.5):
79272562Sobrien
79372562Sobrien    int computation () __attribute__ ((const));
79472562Sobrien
79572562Sobrienor like this (works in older versions too):
79672562Sobrien
79772562Sobrien    typedef int intfn ();
79872562Sobrien
79972562Sobrien    const intfn computation;
80072562Sobrien
80172562Sobrien* The new option -iwithprefixbefore specifies a directory to add to 
80272562Sobrienthe search path for include files in the same position where -I would
80372562Sobrienput it, but uses the specified prefix just like -iwithprefix.
80472562Sobrien
80572562Sobrien* Basic block profiling has been enhanced to record the function the
80672562Sobrienbasic block comes from, and if the module was compiled for debugging,
80772562Sobrienthe line number and filename.  A default version of the basic block
80872562Sobriensupport module has been added to libgcc2 that appends the basic block
80972562Sobrieninformation to a text file 'bb.out'.  Machine descriptions can now
81072562Sobrienoverride the basic block support module in the target macro file.
81172562Sobrien
81272562SobrienNew features in g++:
81372562Sobrien
81472562Sobrien* The new flag `-fansi-overloading' for C++.  Use a newly implemented
81572562Sobrienscheme of argument matching for C++.  It makes g++ more accurately
81672562Sobrienobey the rules set down in Chapter 13 of the Annotated C++ Reference
81772562SobrienManual (the ARM).  This option will be turned on by default in a
81872562Sobrienfuture release.
81972562Sobrien
82072562Sobrien* The -finline-debug flag is now gone (it was never really used by the
82172562Sobrien  compiler).
82272562Sobrien
82372562Sobrien* Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been
82472562Sobrien  dramatically improved.  You should not get any syntax errors or incorrect
82572562Sobrien  runtime results while using pointers to members correctly; if you do, it's
82672562Sobrien  a definite bug.
82772562Sobrien
82872562Sobrien* Forward declaration of an enum is now flagged as an error.
82972562Sobrien
83072562Sobrien* Class-local typedefs are now working properly.
83172562Sobrien
83272562Sobrien* Nested class support has been significantly improved.  The compiler
83372562Sobrien  will now (in theory) support up to 240 nested classes before hitting
83472562Sobrien  other system limits (like memory size).
83572562Sobrien
83672562Sobrien* There is a new C version of the `g++' driver, to replace the old
83772562Sobrien  shell script.  This should significantly improve the performance of
83872562Sobrien  executing g++ on a system where a user's PATH environment variable
83972562Sobrien  references many NFS-mounted filesystems.  This driver also works
84072562Sobrien  under MS-DOS and OS/2.
84172562Sobrien
84272562Sobrien* The ANSI committee working on the C++ standard has adopted a new
84372562Sobrien  keyword `mutable'.  This will allow you to make a specific member be
84472562Sobrien  modifiable in an otherwise const class.
84572562Sobrien
84672562SobrienNoteworthy GCC changes in version 2.4.4:
84772562Sobrien
84872562Sobrien  A crash building g++ on various hosts (including m68k) has been
84972562Sobrien  fixed.  Also the g++ compiler no longer reports incorrect
85072562Sobrien  ambiguities in some situations where they do not exist, and
85172562Sobrien  const template member functions are now being found properly.
85272562Sobrien
85372562SobrienNoteworthy GCC changes in version 2.4:
85472562Sobrien
85572562Sobrien* On each target, the default is now to return short structures
85672562Sobriencompatibly with the "usual" compiler on that target.
85772562Sobrien
85872562SobrienFor most targets, this means the default is to return all structures
85972562Sobrienin memory, like long structures, in whatever way is used on that
86072562Sobrientarget.  Use -freg-struct-return to enable returning short structures
86172562Sobrien(and unions) in registers.
86272562Sobrien
86372562SobrienThis change means that newly compiled binaries are incompatible with
86472562Sobrienbinaries compiled with previous versions of GCC.
86572562Sobrien
86672562SobrienOn some targets, GCC is itself the usual compiler.  On these targets,
86772562Sobrienthe default way to return short structures is still in registers.
86872562SobrienUse -fpcc-struct-return to tell GCC to return them in memory.
86972562Sobrien
87072562Sobrien* There is now a floating point emulator which can imitate the way all
87172562Sobriensupported target machines do floating point arithmetic.
87272562Sobrien
87372562SobrienThis makes it possible to have cross compilation to and from the VAX,
87472562Sobrienand between machines of different endianness.  However, this works
87572562Sobrienonly when the target machine description is updated to use the new
87672562Sobrienfacilities, and not all have been updated.
87772562Sobrien
87872562SobrienThis also makes possible support for longer floating point types.
87972562SobrienGCC 2.4 supports extended format on the 68K if you use `long double',
88072562Sobrienfor targets that have a 68881.  (When we have run time library
88172562Sobrienroutines for extended floating point, then `long double' will use
88272562Sobrienextended format on all 68K targets.)
88372562Sobrien
88472562SobrienWe expect to support extended floating point on the i386 and Sparc in
88572562Sobrienfuture versions.
88672562Sobrien
88772562Sobrien* Building GCC now automatically fixes the system's header files.
88872562SobrienThis should require no attention.
88972562Sobrien
89072562Sobrien* GCC now installs an unsigned data type as size_t when it fixes the
89172562Sobrienheader files (on all but a handful of old target machines).
89272562SobrienTherefore, the bug that size_t failed to be unsigned is fixed.
89372562Sobrien
89472562Sobrien* Building and installation are now completely separate.
89572562SobrienAll new files are constructed during the build process; 
89672562Sobrieninstallation just copies them.
89772562Sobrien
89872562Sobrien* New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc
89972562SobrienLite.
90072562Sobrien
90172562Sobrien* A totally new and much better Objective C run time system is included.
90272562Sobrien
90372562Sobrien* Objective C supports many new features.  Alas, I can't describe them
90472562Sobriensince I don't use that language; however, they are the same ones 
90572562Sobriensupported in recent versions of the NeXT operating system.
90672562Sobrien
90772562Sobrien* The builtin functions __builtin_apply_args, __builtin_apply and
90872562Sobrien__builtin_return let you record the arguments and returned
90972562Sobrienvalue of a function without knowing their number or type.
91072562Sobrien
91172562Sobrien* The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__
91272562Sobriengive the name of the function in the source, and a pretty-printed
91372562Sobrienversion of the name.  The two are the same in C, but differ in C++.
91472562Sobrien
91572562Sobrien* Casts to union types do not yield lvalues.
91672562Sobrien
91772562Sobrien* ## before an empty rest argument discards the preceding sequence
91872562Sobrienof non-whitespace characters from the macro definition.
91972562Sobrien(This feature is subject to change.)
92072562Sobrien
92172562Sobrien
92272562SobrienNew features specific to C++:
92372562Sobrien
92472562Sobrien* The manual contains a new section ``Common Misunderstandings with
92572562SobrienGNU C++'' that C++ users should read.
92672562Sobrien
92772562Sobrien* #pragma interface and #pragma implementation let you use the same
92872562SobrienC++ source file for both interface and implementation.
92972562SobrienHowever, this mechanism is still in transition.
93072562Sobrien
93172562Sobrien* Named returned values let you avoid an extra constructor call
93272562Sobrienwhen a function result has a class type.
93372562Sobrien
93472562Sobrien* The C++ operators <? and >? yield min and max, respectively.
93572562Sobrien
93672562Sobrien* C++ gotos can exit a block safely even if the block has
93772562Sobrienaggregates that require destructors.
93872562Sobrien
93972562Sobrien* gcc defines the macro __GNUG__ when compiling C++ programs.
94072562Sobrien
94172562Sobrien* GNU C++ now correctly distinguishes between the prefix and postfix
94272562Sobrienforms of overloaded operator ++ and --.  To avoid breaking old
94372562Sobriencode, if a class defines only the prefix form, the compiler
94472562Sobrienaccepts either ++obj or obj++, unless -pedantic is used.
94572562Sobrien
94672562Sobrien* If you are using version 2.3 of libg++, you need to rebuild it with
94772562Sobrien`make CC=gcc' to avoid mismatches in the definition of `size_t'.
94872562Sobrien
94972562SobrienNewly documented compiler options:
95072562Sobrien
95172562Sobrien-fnostartfiles
95272562Sobrien	Omit the standard system startup files when linking.
95372562Sobrien
95472562Sobrien-fvolatile-global
95572562Sobrien	Consider memory references to extern and global data items to
95672562Sobrien	be volatile.
95772562Sobrien
95872562Sobrien-idirafter DIR
95972562Sobrien	Add DIR to the second include path.
96072562Sobrien
96172562Sobrien-iprefix PREFIX
96272562Sobrien	Specify PREFIX for later -iwithprefix options.
96372562Sobrien
96472562Sobrien-iwithprefix DIR
96572562Sobrien	Add PREFIX/DIR to the second include path.
96672562Sobrien
96772562Sobrien-mv8
96872562Sobrien	Emit Sparc v8 code (with integer multiply and divide).
96972562Sobrien-msparclite
97072562Sobrien	Emit Sparclite code (roughly v7.5).
97172562Sobrien
97272562Sobrien-print-libgcc-file-name
97372562Sobrien	Search for the libgcc.a file, print its absolute file name, and exit.
97472562Sobrien
97572562Sobrien-Woverloaded-virtual
97672562Sobrien	Warn when a derived class function declaration may be an error
97772562Sobrien	in defining a C++ virtual function. 
97872562Sobrien
97972562Sobrien-Wtemplate-debugging
98072562Sobrien	When using templates in a C++ program, warn if debugging is
98172562Sobrien	not yet fully available.
98272562Sobrien
98372562Sobrien+eN
98472562Sobrien	Control how C++ virtual function definitions are used
98572562Sobrien	(like cfront 1.x).
98672562Sobrien
987