Annotation of gcc/NEWS, revision 1.1.1.4

1.1.1.4 ! root        1: Noteworthy changes in GCC version 2.7.2:
        !             2: 
        !             3: A few bugs have been fixed (most notably the generation of an
        !             4: invalid assembler opcode on some RS/6000 systems).
        !             5: 
        !             6: Noteworthy changes in GCC version 2.7.1:
        !             7: 
        !             8: This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but
        !             9: also contains a few new features, mostly related to specific targets.
        !            10: 
        !            11: Major changes have been made in code to support Windows NT.
        !            12: 
        !            13: The following new targets are supported:
        !            14: 
        !            15:        2.9 BSD on PDP-11
        !            16:        Linux on m68k
        !            17:        HP/UX version 10 on HP PA RISC (treated like version 9)
        !            18:        DEC Alpha running Windows NT
        !            19: 
        !            20: When parsing C, GCC now recognizes C++ style `//' comments unless you
        !            21: specify `-ansi' or `-traditional'.
        !            22: 
        !            23: The PowerPC System V targets (powerpc-*-sysv, powerpc-*-eabi) now use the
        !            24: calling sequence specified in the System V Application Binary Interface
        !            25: Processor Supplement (PowerPC Processor ABI Supplement) rather than the calling
        !            26: sequence used in GCC version 2.7.0.  That calling sequence was based on the AIX
        !            27: calling sequence without function descriptors.  To compile code for that older
        !            28: calling sequence, either configure the compiler for powerpc-*-eabiaix or use
        !            29: the -mcall-aix switch when compiling and linking.
        !            30: 
        !            31: Noteworthy changes in GCC version 2.7.0:
        !            32: 
        !            33: GCC now works better on systems that use ".obj" and ".exe" instead of
        !            34: ".o" and no extension.  This involved changes to the driver program,
        !            35: gcc.c, to convert ".o" names to ".obj" and to GCC's Makefile to use
        !            36: ".obj" and ".exe" in filenames that are not targets.  In order to
        !            37: build GCC on such systems, you may need versions of GNU make and/or
        !            38: compatible shells.  At this point, this support is preliminary.
        !            39: 
        !            40: Object file extensions of ".obj" and executable file extensions of
        !            41: ".exe" are allowed when using appropriate version of GNU Make.
        !            42: 
        !            43: Numerous enhancements were made to the __attribute__ facility including
        !            44: more attributes and more places that support it.  We now support the
        !            45: "packed", "nocommon", "noreturn", "volatile", "const", "unused",
        !            46: "transparent_union", "constructor", "destructor", "mode", "section",
        !            47: "align", "format", "weak", and "alias" attributes.  Each of these
        !            48: names may also be specified with added underscores, e.g., "__packed__".
        !            49: __attribute__ may now be applied to parameter definitions, function
        !            50: definitions, and structure, enum, and union definitions.
        !            51: 
        !            52: GCC now supports returning more structures in registers, as specified by
        !            53: many calling sequences (ABIs), such as on the HP PA RISC.
        !            54: 
        !            55: A new option '-fpack-struct' was added to automatically pack all structure
        !            56: members together without holes.
        !            57: 
        !            58: There is a new library (cpplib) and program (cppmain) that at some
        !            59: point will replace cpp (aka cccp).  To use cppmain as cpp now, pass
        !            60: the option CCCP=cppmain to make.  The library is already used by the
        !            61: fix-header program, which should speed up the fixproto script.
        !            62: 
        !            63: New options for supported targets:
        !            64: 
        !            65:     GNU on many targets.
        !            66:     NetBSD on MIPS, m68k, VAX, and x86.
        !            67:     LynxOS on x86, m68k, Sparc, and RS/6000.
        !            68:     VxWorks on many targets.
        !            69: 
        !            70:     Windows/NT on x86 architecture.  Initial support for Windows/NT on Alpha
        !            71:     (not fully working).
        !            72: 
        !            73:     Many embedded targets, specifically UDI on a29k, aout, coff, elf,
        !            74:     and vsta "operating systems" on m68k, m88k, mips, sparc, and x86.
        !            75: 
        !            76: Additional support for x86 (i386, i486, and Pentium):
        !            77: 
        !            78:     Work with old and new linkers for Linux-based GNU systems,
        !            79:        supporting both a.out and ELF.
        !            80:     FreeBSD on x86.
        !            81:     Stdcall convention.
        !            82:     -malign-double, -mregparm=, -malign-loops= and -malign-jumps=  switches.
        !            83:     On ISC systems, support -Xp like -posix.
        !            84: 
        !            85: Additions for RS/6000:
        !            86: 
        !            87:     Instruction scheduling information for PowerPC 403.
        !            88:     AIX 4.1 on PowerPC.
        !            89:     -mstring and -mno-string.
        !            90:     -msoft-float and floating-point emulation included.
        !            91:     Preliminary support for PowerPC System V.4 with or without the GNU as.
        !            92:     Preliminary support for EABI.
        !            93:     Preliminary support for 64-bit systems.
        !            94:     Both big and little endian systems.
        !            95: 
        !            96: New features for MIPS-based systems:
        !            97: 
        !            98:     r4650.
        !            99:     mips4 and R8000.
        !           100:     Irix 6.0.
        !           101:     64-bit ABI.
        !           102:     Allow dollar signs in labels on SGI/Irix 5.x.
        !           103: 
        !           104: New support for HP PA RISC:
        !           105: 
        !           106:     Generation of PIC (requires binutils-2.5.2.u6 or later).
        !           107:     HP-UX version 9 on HP PA RISC (dynamically links even with -g).
        !           108:     Processor variants for HP PA RISC: 700, 7100, and 7100LC.
        !           109:     Automatic generation of long calls when needed.
        !           110:     -mfast-indirect-calls for kernels and static binaries.
        !           111: 
        !           112:     The called routine now copies arguments passed by invisible reference,
        !           113:     as required by the calling standard.
        !           114: 
        !           115: Other new miscellaneous target-specific support:
        !           116: 
        !           117:     -mno-multm on a29k.
        !           118:     -mold-align for i960.
        !           119:     Configuration for "semi-hosted" ARM.
        !           120:     -momit-leaf-frame-pointer for M88k.
        !           121:     SH3 variant of Hitachi Super-H and support both big and little endian.
        !           122: 
        !           123: Changes to Objective-C:
        !           124: 
        !           125:     Bare-bones implementation of NXConstantString has been added,
        !           126:     which is invoked by the @"string" directive.
        !           127: 
        !           128:     Class * has been changed to Class to conform to the NextSTEP and
        !           129:     OpenStep runtime.
        !           130: 
        !           131:     Enhancements to make dynamic loading easier.
        !           132: 
        !           133:     The module version number has been updated to Version 7, thus existing
        !           134:     code will need to be recompiled to use the current run-time library.
        !           135: 
        !           136: GCC now supports the ISO Normative Addendum 1 to the C Standard.
        !           137: As a result:
        !           138: 
        !           139:     The header <iso646.h> defines macros for C programs written
        !           140:     in national variants of ISO 646.
        !           141: 
        !           142:     The following digraph tokens are supported:
        !           143:        <:      :>      <%      %>      %:      %:%:
        !           144:     These behave like the following, respectively:
        !           145:        [       ]       {       }       #       ##
        !           146: 
        !           147:     Digraph tokens are supported unless you specify the `-traditional'
        !           148:     option; you do not need to specify `-ansi' or `-trigraphs'.  Except
        !           149:     for contrived and unlikely examples involving preprocessor
        !           150:     stringizing, digraph interpretation doesn't change the meaning of
        !           151:     programs; this is unlike trigraph interpretation, which changes the
        !           152:     meanings of relatively common strings.
        !           153: 
        !           154:     The macro __STDC_VERSION__ has the value 199409L.
        !           155: 
        !           156:   As usual, for full conformance to the standard, you also need a
        !           157:   C library that conforms.
        !           158: 
        !           159: The following lists changes that have been made to g++.  If some
        !           160: features mentioned below sound unfamiliar, you will probably want to
        !           161: look at the recently-released public review copy of the C++ Working
        !           162: Paper.  For PostScript and PDF (Adobe Acrobat) versions, see the
        !           163: archive at ftp://research.att.com/dist/stdc++/WP.  For HTML and ASCII
        !           164: versions, see ftp://ftp.cygnus.com/pub/g++.  On the web, see
        !           165: http://www.cygnus.com/~mrs/wp-draft.
        !           166: 
        !           167: The scope of variables declared in the for-init-statement has been changed
        !           168: to conform to http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for; as a
        !           169: result, packages such as groff 1.09 will not compile unless you specify the
        !           170: -fno-for-scope flag.  PLEASE DO NOT REPORT THIS AS A BUG; this is a change
        !           171: mandated by the C++ standardization committee.
        !           172: 
        !           173: Binary incompatibilities:
        !           174: 
        !           175:     The builtin 'bool' type is now the size of a machine word on RISC targets,
        !           176:     for code efficiency; it remains one byte long on CISC targets.
        !           177: 
        !           178:     Code that does not use #pragma interface/implementation will most
        !           179:     likely shrink dramatically, as g++ now only emits the vtable for a
        !           180:     class in the translation unit where its first non-inline, non-abstract
        !           181:     virtual function is defined.
        !           182: 
        !           183:     Classes that do not define the copy constructor will sometimes be
        !           184:     passed and returned in registers.  This may illuminate latent bugs in
        !           185:     your code.
        !           186: 
        !           187: Support for automatic template instantiation has *NOT* been added, due
        !           188: to a disagreement over design philosophies.
        !           189: 
        !           190: Support for exception handling has been improved; more targets are now
        !           191: supported, and throws will use the RTTI mechanism to match against the
        !           192: catch parameter type.  Optimization is NOT SUPPORTED with
        !           193: -fhandle-exceptions; no need to report this as a bug.
        !           194: 
        !           195: Support for Run-Time Type Identification has been added with -frtti.
        !           196: This support is still in alpha; one major restriction is that any file
        !           197: compiled with -frtti must include <typeinfo.h>.
        !           198: 
        !           199: Preliminary support for namespaces has been added.  This support is far
        !           200: from complete, and probably not useful.
        !           201: 
        !           202: Synthesis of compiler-generated constructors, destructors and
        !           203: assignment operators is now deferred until the functions are used.
        !           204: 
        !           205: The parsing of expressions such as `a ? b : c = 1' has changed from
        !           206: `(a ? b : c) = 1' to `a : b ? (c = 1)'.
        !           207: 
        !           208: The code generated for testing conditions, especially those using ||
        !           209: and &&, is now more efficient.
        !           210: 
        !           211: The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
        !           212: or, or_eq, xor and xor_eq are now supported.  Use -ansi or
        !           213: -foperator-names to enable them.
        !           214: 
        !           215: The 'explicit' keyword is now supported.  'explicit' is used to mark
        !           216: constructors and type conversion operators that should not be used
        !           217: implicitly.
        !           218: 
        !           219: g++ now accepts the typename keyword, though it currently has no
        !           220: semantics; it can be a no-op in the current template implementation.
        !           221: You may want to start using it in your code, however, since the
        !           222: pending rewrite of the template implementation to compile STL properly
        !           223: (perhaps for 2.8.0, perhaps not) will require you to use it as
        !           224: indicated by the current draft.
        !           225: 
        !           226: Handling of user-defined type conversion has been overhauled so that
        !           227: type conversion operators are now found and used properly in
        !           228: expressions and function calls.
        !           229: 
        !           230: -fno-strict-prototype now only applies to function declarations with
        !           231: "C" linkage.
        !           232: 
        !           233: g++ now warns about 'if (x=0)' with -Wparentheses or -Wall.
        !           234: 
        !           235: #pragma weak and #pragma pack are supported on System V R4 targets, as
        !           236: are various other target-specific #pragmas supported by gcc.
        !           237: 
        !           238: new and delete of const types is now allowed (with no additional
        !           239: semantics).
        !           240: 
        !           241: Explicit instantiation of template methods is now supported.  Also,
        !           242: 'inline template class foo<int>;' can be used to emit only the vtable
        !           243: for a template class.
        !           244: 
        !           245: With -fcheck-new, g++ will check the return value of all calls to
        !           246: operator new, and not attempt to modify a returned null pointer.
        !           247: 
        !           248: The template instantiation code now handles more conversions when
        !           249: passing to a parameter that does not depend on template arguments.
        !           250: This means that code like 'string s; cout << s;' now works.
        !           251: 
        !           252: Invalid jumps in a switch statement past declarations that require
        !           253: initializations are now caught.
        !           254: 
        !           255: Functions declared 'extern inline' now have the same linkage semantics
        !           256: as inline member functions.  On supported targets, where previously
        !           257: these functions (and vtables, and template instantiations) would have
        !           258: been defined statically, they will now be defined as weak symbols so
        !           259: that only one out-of-line definition is used.
        !           260: 
        !           261: collect2 now demangles linker output, and c++filt has become part of
        !           262: the gcc distribution.
        !           263: 
1.1.1.3   root      264: Noteworthy changes in GCC version 2.6.3:
                    265: 
                    266: A few more bugs have been fixed.
                    267: 
                    268: Noteworthy changes in GCC version 2.6.2:
                    269: 
                    270: A few bugs have been fixed.
                    271: 
                    272: Names of attributes can now be preceded and followed by double underscores.
                    273: 
                    274: Noteworthy changes in GCC version 2.6.1:
                    275: 
                    276: Numerous (mostly minor) bugs have been fixed.
                    277: 
                    278: The following new configurations are supported:
                    279: 
                    280:        GNU on x86 (instead of treating it like MACH)
                    281:        NetBSD on Sparc and Motorola 68k
                    282:        AIX 4.1 on RS/6000 and PowerPC systems
                    283:        Sequent DYNUX/ptx 1.x and 2.x.
                    284:        Both COFF and ELF configurations on AViiON without using /bin/gcc
                    285:        Windows/NT on x86 architecture; preliminary
                    286:        AT&T DSP1610 digital signal processor chips
                    287:        i960 systems on bare boards using COFF
                    288:        PDP11; target only and not extensively tested
                    289: 
                    290: The -pg option is now supported for Alpha under OSF/1 V3.0 or later.
                    291: 
                    292: Files with an extension of ".c++" are treated as C++ code.
                    293: 
                    294: The -Xlinker and -Wl arguments are now passed to the linker in the
                    295: position they were specified on the command line.  This makes it
                    296: possible, for example, to pass flags to the linker about specific
                    297: object files.
                    298: 
                    299: The use of positional arguments to the configure script is no longer
                    300: recommended.  Use --target= to specify the target; see the GCC manual.
                    301: 
                    302: The 386 now supports two new switches: -mreg-alloc=<string> changes
                    303: the default register allocation order used by the compiler, and
                    304: -mno-wide-multiply disables the use of the mul/imul instructions that
                    305: produce 64 bit results in EAX:EDX from 32 bit operands to do long long
                    306: multiplies and 32-bit division by constants.
                    307: 
                    308: Noteworthy changes in GCC version 2.6.0:
                    309: 
                    310: Numerous bugs have been fixed, in the C and C++ front-ends, as
                    311: well as in the common compiler code.
                    312: 
                    313: This release includes the C, Objective-C, and C++ compilers.  However,
                    314: we have moved the files for the C++ compiler (G++) files to a
                    315: subdirectory, cp.  Subsequent releases of GCC will split these files
                    316: to a separate TAR file.
                    317: 
                    318: The G++ team has been tracking the development of the ANSI standard for C++.
                    319: Here are some new features added from the latest working paper:
                    320: 
                    321:        * built-in boolean type 'bool', with constants 'true' and 'false'.
                    322:        * array new and delete (operator new [] and delete []).
                    323:        * WP-conforming lifetime of temporaries.
                    324:        * explicit instantiation of templates (template class A<int>;),
                    325:           along with an option (-fno-implicit-templates) to disable emission
                    326:           of implicitly instantiated templates, obsoletes -fexternal-templates.
                    327:        * static member constants (static const int foo = 4; within the
                    328:           class declaration).
                    329: 
                    330: Many error messages have been improved to tell the user more about the
                    331: problem.  Conformance checking with -pedantic-errors has been
                    332: improved.  G++ now compiles Fresco.
                    333: 
                    334: There is now an experimental implementation of virtual functions using
                    335: thunks instead of Cfront-style vtables, enabled with -fvtable-thunks.
                    336: This option also enables a heuristic which causes the compiler to only
                    337: emit the vtable in the translation unit where its first non-inline
                    338: virtual function is defined; using this option and
                    339: -fno-implicit-templates, users should be able to avoid #pragma
                    340: interface/implementation altogether.
                    341: 
                    342: Signatures have been added as a GNU C++ extension.  Using the option
                    343: -fhandle-signatures, users are able to turn on recognition of
                    344: signatures.  A short introduction on signatures is in the section
                    345: `Extension to the C++ Language' in the manual.
                    346: 
                    347: The `g++' program is now a C program, rather than a shell script.
                    348: 
                    349: Lots and lots and lots of bugs fixes, in nested types, access control,
                    350: pointers to member functions, the parser, templates, overload
                    351: resolution, etc, etc.
                    352: 
                    353: There have been two major enhancements to the Objective-C compiler:
                    354: 
                    355: 1) Added portability.  It now runs on Alpha, and some problems with
                    356:    message forwarding have been addressed on other platforms.
                    357: 
                    358: 2) Selectors have been redefined to be pointers to structs like:
                    359:    { void *sel_id, char *sel_types }, where the sel_id is the unique
                    360:    identifier, the selector itself is no longer unique.  
                    361: 
                    362:    Programmers should use the new function sel_eq to test selector
                    363:    equivalence.
                    364: 
                    365: The following major changes have been made to the base compiler and
                    366: machine-specific files.
                    367: 
                    368: - The MIL-STD-1750A is a new port, but still preliminary.
                    369: 
                    370: - The h8/300h is now supported; both the h8/300 and h8/300h ports come
                    371:   with 32 bit IEEE 754 software floating point support.
                    372: 
                    373: - The 64-bit Sparc (v9) and 64-bit MIPS chips are supported.
                    374: 
                    375: - NetBSD is supported on m68k, Intel x86, and pc523 systems and FreeBSD
                    376:   on x86.
                    377: 
                    378: - COFF is supported on x86, m68k, and Sparc systems running LynxOS.
                    379: 
                    380: - 68K systems from Bull and Concurrent are supported and System V
                    381:   Release 4 is supported on the Atari.
                    382: 
                    383: - GCC supports GAS on the Motorola 3300 (sysV68) and debugging
                    384:   (assuming GAS) on the Plexus 68K system.  (However, GAS does not yet
                    385:   work on those systems).
                    386: 
                    387: - System V Release 4 is supported on MIPS (Tandem).
                    388: 
                    389: - For DG/UX, an ELF configuration is now supported, and both the ELF
                    390:   and BCS configurations support ELF and COFF object file formats.
                    391: 
                    392: - OSF/1 V2.0 is supported on Alpha.
                    393: 
                    394: - Function profiling is also supported on Alpha.
                    395: 
                    396: - GAS and GDB is supported for Irix 5 (MIPS).
                    397: 
                    398: - "common mode" (code that will run on both POWER and PowerPC
                    399:   architectures) is now supported for the RS/6000 family; the
                    400:   compiler knows about more PPC chips.
                    401: 
                    402: - Both NeXTStep 2.1 and 3 are supported on 68k-based architectures.
                    403: 
                    404: - On the AMD 29k, the -msoft-float is now supported, as well as
                    405:   -mno-sum-in-toc for RS/6000, -mapp-regs and -mflat for Sparc, and
                    406:   -membedded-pic for MIPS.
                    407: 
                    408: - GCC can now convert division by integer constants into the equivalent
                    409:   multiplication and shift operations when that is faster than the
                    410:   division.
                    411:        
                    412: - Two new warning options, -Wbad-function-cast and
                    413:   -Wmissing-declarations have been added.
                    414: 
                    415: - Configurations may now add machine-specific __attribute__ options on
                    416:   type; many machines support the `section' attribute.
                    417: 
                    418: - The -ffast-math flag permits some optimization that violate strict
                    419:   IEEE rules, such as converting X * 0.0 to 0.0.
                    420: 
1.1.1.2   root      421: Noteworthy changes in GCC version 2.5.8:
                    422: 
                    423: This release only fixes a few serious bugs.  These include fixes for a
                    424: bug that prevented most programs from working on the RS/6000, a bug
1.1.1.4 ! root      425: that caused invalid assembler code for programs with a `switch'
1.1.1.2   root      426: statement on the NS32K, a G++ problem that caused undefined names in
1.1.1.4 ! root      427: some configurations, and several less serious problems, some of which
1.1.1.2   root      428: can affect most configuration.
                    429: 
                    430: Noteworthy change in GCC version 2.5.7:
                    431: 
                    432: This release only fixes a few bugs, one of which was causing bootstrap
                    433: compare errors on some systems.
                    434: 
                    435: Noteworthy change in GCC version 2.5.6:
                    436: 
                    437: A few backend bugs have been fixed, some of which only occur on one
                    438: machine.
                    439: 
                    440: The C++ compiler in 2.5.6 includes:
                    441: 
                    442:  * fixes for some common crashes
                    443:  * correct handling of nested types that are referenced as `foo::bar'
                    444:  * spurious warnings about friends being declared static and never
                    445:    defined should no longer appear
                    446:  * enums that are local to a method in a class, or a class that's
                    447:    local to a function, are now handled correctly.  For example:
                    448:        class foo { void bar () { enum { x, y } E; x; } };
                    449:        void bar () { class foo { enum { x, y } E; E baz; }; }
                    450: 
                    451: Noteworthy change in GCC version 2.5.5:
                    452: 
                    453: A large number of C++ bugs have been fixed.
                    454: 
                    455: The fixproto script adds prototypes conditionally on __cplusplus.
                    456: 
                    457: Noteworthy change in GCC version 2.5.4:
                    458: 
                    459: A bug fix in passing of structure arguments for the HP-PA architecture
                    460: makes code compiled with GCC 2.5.4 incompatible with code compiled
                    461: with earlier versions (if it passes struct arguments of 33 to 64 bits,
                    462: interspersed with other types of arguments).
                    463: 
                    464: Noteworthy change in gcc version 2.5.3:
                    465: 
                    466: The method of "mangling" C++ function names has been changed.  So you
                    467: must recompile all C++ programs completely when you start using GCC
                    468: 2.5.  Also, GCC 2.5 requires libg++ version 2.5.  Earlier libg++
                    469: versions won't work with GCC 2.5.  (This is generally true--GCC
                    470: version M.N requires libg++ version M.N.)
                    471: 
                    472: Noteworthy GCC changes in version 2.5:
                    473: 
                    474: * There is now support for the IBM 370 architecture as a target.
                    475: Currently the only operating system supported is MVS; GCC does not run
                    476: on MVS, so you must produce .s files using GCC as a cross compiler,
                    477: then transfer them to MVS to assemble them.  This port is not reliable
                    478: yet.
                    479: 
                    480: * The Power PC is now supported.
                    481: 
                    482: * The i860-based Paragon machine is now supported.
                    483: 
                    484: * The Hitachi 3050 (an HP-PA machine) is now supported.
                    485: 
                    486: * The variable __GNUC_MINOR__ holds the minor version number of GCC, as
                    487: an integer.  For version 2.5.X, the value is 5.
                    488: 
                    489: * In C, initializers for static and global variables are now processed
                    490: an element at a time, so that they don't need a lot of storage.
                    491: 
                    492: * The C syntax for specifying which structure field comes next in an
                    493: initializer is now `.FIELDNAME='.  The corresponding syntax for
                    494: array initializers is now `[INDEX]='.  For example,
                    495: 
                    496:   char whitespace[256]
                    497:     = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 };
                    498: 
                    499: This was changed to accord with the syntax proposed by the Numerical
                    500: C Extensions Group (NCEG).
                    501: 
                    502: * Complex numbers are now supported in C.  Use the keyword __complex__
                    503: to declare complex data types.  See the manual for details.
                    504: 
                    505: * GCC now supports `long double' meaningfully on the Sparc (128-bit
                    506: floating point) and on the 386 (96-bit floating point).  The Sparc
                    507: support is enabled on on Solaris 2.x because earlier system versions
                    508: (SunOS 4) have bugs in the emulation.
                    509: 
                    510: * All targets now have assertions for cpu, machine and system.  So you
                    511: can now use assertions to distinguish among all supported targets.
                    512: 
                    513: * Nested functions in C may now be inline.  Just declare them inline
                    514: in the usual way.
                    515: 
                    516: * Packed structure members are now supported fully; it should be possible 
                    517: to access them on any supported target, no matter how little alignment
                    518: they have.
                    519: 
                    520: * To declare that a function does not return, you must now write
                    521: something like this (works only in 2.5):
                    522: 
                    523:     void fatal () __attribute__ ((noreturn));
                    524: 
                    525: or like this (works in older versions too):
                    526: 
                    527:     typedef void voidfn ();
                    528: 
                    529:     volatile voidfn fatal;
                    530: 
                    531: It used to be possible to do so by writing this:
                    532: 
                    533:     volatile void fatal ();
                    534: 
                    535: but it turns out that ANSI C requires that to mean something
                    536: else (which is useless).
                    537: 
                    538: Likewise, to declare that a function is side-effect-free
                    539: so that calls may be deleted or combined, write
                    540: something like this (works only in 2.5):
                    541: 
                    542:     int computation () __attribute__ ((const));
                    543: 
                    544: or like this (works in older versions too):
                    545: 
                    546:     typedef int intfn ();
                    547: 
                    548:     const intfn computation;
                    549: 
                    550: * The new option -iwithprefixbefore specifies a directory to add to 
                    551: the search path for include files in the same position where -I would
                    552: put it, but uses the specified prefix just like -iwithprefix.
                    553: 
                    554: * Basic block profiling has been enhanced to record the function the
                    555: basic block comes from, and if the module was compiled for debugging,
                    556: the line number and filename.  A default version of the basic block
                    557: support module has been added to libgcc2 that appends the basic block
                    558: information to a text file 'bb.out'.  Machine descriptions can now
                    559: override the basic block support module in the target macro file.
                    560: 
                    561: New features in g++:
                    562: 
                    563: * The new flag `-fansi-overloading' for C++.  Use a newly implemented
                    564: scheme of argument matching for C++.  It makes g++ more accurately
                    565: obey the rules set down in Chapter 13 of the Annotated C++ Reference
                    566: Manual (the ARM).  This option will be turned on by default in a
                    567: future release.
                    568: 
                    569: * The -finline-debug flag is now gone (it was never really used by the
                    570:   compiler).
                    571: 
                    572: * Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been
                    573:   dramatically improved.  You should not get any syntax errors or incorrect
                    574:   runtime results while using pointers to members correctly; if you do, it's
                    575:   a definite bug.
                    576: 
                    577: * Forward declaration of an enum is now flagged as an error.
                    578: 
                    579: * Class-local typedefs are now working properly.
                    580: 
                    581: * Nested class support has been significantly improved.  The compiler
                    582:   will now (in theory) support up to 240 nested classes before hitting
                    583:   other system limits (like memory size).
                    584: 
                    585: * There is a new C version of the `g++' driver, to replace the old
                    586:   shell script.  This should significantly improve the performance of
                    587:   executing g++ on a system where a user's PATH environment variable
                    588:   references many NFS-mounted filesystems.  This driver also works
                    589:   under MS-DOS and OS/2.
                    590: 
                    591: * The ANSI committee working on the C++ standard has adopted a new
                    592:   keyword `mutable'.  This will allow you to make a specific member be
                    593:   modifiable in an otherwise const class.
                    594: 
1.1       root      595: Noteworthy GCC changes in version 2.4.4:
                    596: 
                    597:   A crash building g++ on various hosts (including m68k) has been
                    598:   fixed.  Also the g++ compiler no longer reports incorrect
                    599:   ambiguities in some situations where they do not exist, and
                    600:   const template member functions are now being found properly.
                    601: 
                    602: Noteworthy GCC changes in version 2.4:
                    603: 
                    604: * On each target, the default is now to return short structures
                    605: compatibly with the "usual" compiler on that target.
                    606: 
                    607: For most targets, this means the default is to return all structures
                    608: in memory, like long structures, in whatever way is used on that
                    609: target.  Use -freg-struct-return to enable returning short structures
                    610: (and unions) in registers.
                    611: 
                    612: This change means that newly compiled binaries are incompatible with
                    613: binaries compiled with previous versions of GCC.
                    614: 
                    615: On some targets, GCC is itself the usual compiler.  On these targets,
                    616: the default way to return short structures is still in registers.
                    617: Use -fpcc-struct-return to tell GCC to return them in memory.
                    618: 
                    619: * There is now a floating point emulator which can imitate the way all
                    620: supported target machines do floating point arithmetic.
                    621: 
                    622: This makes it possible to have cross compilation to and from the VAX,
                    623: and between machines of different endianness.  However, this works
                    624: only when the target machine description is updated to use the new
                    625: facilities, and not all have been updated.
                    626: 
                    627: This also makes possible support for longer floating point types.
                    628: GCC 2.4 supports extended format on the 68K if you use `long double',
                    629: for targets that have a 68881.  (When we have run time library
                    630: routines for extended floating point, then `long double' will use
                    631: extended format on all 68K targets.)
                    632: 
                    633: We expect to support extended floating point on the i386 and Sparc in
                    634: future versions.
                    635: 
                    636: * Building GCC now automatically fixes the system's header files.
                    637: This should require no attention.
                    638: 
                    639: * GCC now installs an unsigned data type as size_t when it fixes the
                    640: header files (on all but a handful of old target machines).
                    641: Therefore, the bug that size_t failed to be unsigned is fixed.
                    642: 
                    643: * Building and installation are now completely separate.
                    644: All new files are constructed during the build process; 
                    645: installation just copies them.
                    646: 
                    647: * New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc
                    648: Lite.
                    649: 
                    650: * A totally new and much better Objective C run time system is included.
                    651: 
                    652: * Objective C supports many new features.  Alas, I can't describe them
                    653: since I don't use that language; however, they are the same ones 
                    654: supported in recent versions of the NeXT operating system.
                    655: 
                    656: * The builtin functions __builtin_apply_args, __builtin_apply and
                    657: __builtin_return let you record the arguments and returned
                    658: value of a function without knowing their number or type.
                    659: 
                    660: * The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__
                    661: give the name of the function in the source, and a pretty-printed
                    662: version of the name.  The two are the same in C, but differ in C++.
                    663: 
                    664: * Casts to union types do not yield lvalues.
                    665: 
                    666: * ## before an empty rest argument discards the preceding sequence
                    667: of non-whitespace characters from the macro definition.
                    668: (This feature is subject to change.)
                    669: 
                    670: 
                    671: New features specific to C++:
                    672: 
                    673: * The manual contains a new section ``Common Misunderstandings with
                    674: GNU C++'' that C++ users should read.
                    675: 
                    676: * #pragma interface and #pragma implementation let you use the same
                    677: C++ source file for both interface and implementation.
                    678: However, this mechanism is still in transition.
                    679: 
                    680: * Named returned values let you avoid an extra constructor call
                    681: when a function result has a class type.
                    682: 
                    683: * The C++ operators <? and >? yield min and max, respectively.
                    684: 
                    685: * C++ gotos can exit a block safely even if the block has
                    686: aggregates that require destructors.
                    687: 
                    688: * gcc defines the macro __GNUG__ when compiling C++ programs.
                    689: 
                    690: * GNU C++ now correctly distinguishes between the prefix and postfix
                    691: forms of overloaded operator ++ and --.  To avoid breaking old
                    692: code, if a class defines only the prefix form, the compiler
                    693: accepts either ++obj or obj++, unless -pedantic is used.
                    694: 
                    695: * If you are using version 2.3 of libg++, you need to rebuild it with
                    696: `make CC=gcc' to avoid mismatches in the definition of `size_t'.
                    697: 
                    698: Newly documented compiler options:
                    699: 
                    700: -fnostartfiles
                    701:        Omit the standard system startup files when linking.
                    702: 
                    703: -fvolatile-global
                    704:        Consider memory references to extern and global data items to
                    705:        be volatile.
                    706: 
                    707: -idirafter DIR
                    708:        Add DIR to the second include path.
                    709: 
                    710: -iprefix PREFIX
                    711:        Specify PREFIX for later -iwithprefix options.
                    712: 
                    713: -iwithprefix DIR
                    714:        Add PREFIX/DIR to the second include path.
                    715: 
                    716: -mv8
                    717:        Emit Sparc v8 code (with integer multiply and divide).
                    718: -msparclite
                    719:        Emit Sparclite code (roughly v7.5).
                    720: 
                    721: -print-libgcc-file-name
                    722:        Search for the libgcc.a file, print its absolute file name, and exit.
                    723: 
                    724: -Woverloaded-virtual
                    725:        Warn when a derived class function declaration may be an error
                    726:        in defining a C++ virtual function. 
                    727: 
                    728: -Wtemplate-debugging
                    729:        When using templates in a C++ program, warn if debugging is
                    730:        not yet fully available.
                    731: 
                    732: +eN
                    733:        Control how C++ virtual function definitions are used
                    734:        (like cfront 1.x).
1.1.1.2   root      735: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.