|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.