ONEWS revision 90075
1This file contains information about GCC releases up to GCC 2.8.1, and 2some information about EGCS releases. For more details of changes in 3EGCS releases, and details of changes in GCC 2.95 and more recent 4releases, see the release notes on the GCC web site and the file NEWS 5which contains the most relevant parts of those release notes in text 6form. 7 8Noteworthy changes in GCC for EGCS 1.1. 9--------------------------------------- 10 11The compiler now implements global common subexpression elimination (gcse) as 12well as global constant/copy propagation. (link to gcse page). 13 14More major improvements have been made to the alias analysis code. A new 15option to allow front-ends to provide alias information to the optimizers 16has also been added (-fstrict-aliasing). -fstrict-aliasing is off by default 17now, but will be enabled by default in the future. (link to alias page) 18 19Major changes continue in the exception handling support. This release 20includes some changes to reduce static overhead for exception handling. It 21also includes some major changes to the setjmp/longjmp based EH mechanism to 22make it less pessimistic. And finally, major infrastructure improvements 23to the dwarf2 EH mechanism have been made to make our EH support extensible. 24 25We have fixed the infamous security problems with temporary files. 26 27The "regmove" optimization pass has been nearly completely rewritten. It now 28uses much more information about the target to determine profitability of 29transformations. 30 31The compiler now recomputes register usage information immediately before 32register allocation. Previously such information was only not kept up to 33date after instruction combination which led to poor register allocation 34choices by our priority based register allocator. 35 36The register reloading phase of the compiler has been improved to better 37optimize spill code. This primarily helps targets which generate lots of 38spills (like the x86 ports and many register poor embedded ports). 39 40A few changes in the heuristics used by the register allocator and scheduler 41have been made which can significantly improve performance for certain 42applications. 43 44The compiler's branch shortening algorithms have been significantly improved 45to work better on targets which align jump targets. 46 47The compiler now supports the "ADDRESSOF" optimization which can significantly 48reduce the overhead for certain inline calls (and inline calls in general). 49 50The compiler now supports a code size optimization switch (-Os). When enabled 51the compiler will prefer optimizations which improve code size over those 52which improve code speed. 53 54The compiler has been improved to completely eliminate library calls which 55compute constant values. This is particularly useful on machines which 56do not have integer mul/div or floating point support on-chip. 57 58GCC now supports a "--help" option to print detailed help information. 59 60cpplib has been greatly improved. It is probably usable for some sites now 61(major missing feature is trigraphs). 62 63Memory footprint for the compiler has been significantly reduced for certain 64pathalogical cases. 65 66Build time improvements for targets which support lots of sched parameters 67(alpha and mips primarily). 68 69Compile time for certain programs using large constant initializers has been 70improved (affects glibc significantly). 71 72Plus an incredible number of infrastructure changes, warning fixes, bugfixes 73and local optimizations. 74 75Various improvements have been made to better support cross compilations. They 76are still not easy, but they are improving. 77 78Target specific NEWS 79 80 Sparc: Now includes V8 plus and V9 support, lots of tuning for Ultrasparcs 81 and uses the Haifa scheduler by default. 82 83 Alpha: EV6 tuned, optimized expansion of memcpy/bzero. 84 85 x86: Data in the static store is aligned per Intel recommendations. Jump 86 targets are aligned per Intel recommendations. Improved epilogue 87 sequences for Pentium chips. Backend improvements which should help 88 register allocation on all x86 variants. Support for PPro conditional 89 move instructions has been fixed and enabled. Random changes 90 throughout the port to make generated code more Pentium friendly. 91 Improved support for 64bit integer operations. 92 Unixware 7, a System V Release 5 target is now supported. 93 SCO OpenServer targets can support GAS. See gcc/INSTALL for details. 94 95 RS6000/PowerPC: Includes AIX4.3 support as well as PowerPC64 support. 96 Haifa instruction scheduling is enabled by default now. 97 98 MIPS: Multiply/Multiply-Add support has been largely rewritten to generate 99 more efficient code. Includes mips16 support. 100 101 M68K: Various micro-optimizations and Coldfire fixes. 102 103 M32r: Major improvements to this port. 104 105 Arm: Includes Thumb and super interworking support. 106 107EGCS includes all gcc2 changes up to and including the June 9, 1998 snapshot. 108 109 110Noteworthy changes in GCC version 2.8.1 111--------------------------------------- 112 113Numerous bugs have been fixed and some minor performance 114improvements (compilation speed) have been made. 115 116Noteworthy changes in GCC version 2.8.0 117--------------------------------------- 118 119A major change in this release is the addition of a framework for 120exception handling, currently used by C++. Many internal changes and 121optimization improvements have been made. These increase the 122maintainability and portability of GCC. GCC now uses autoconf to 123compute many host parameters. 124 125The following lists changes that add new features or targets. 126 127See cp/NEWS for new features of C++ in this release. 128 129New tools and features: 130 131 The Dwarf 2 debugging information format is supported on ELF systems, and 132 is the default for -ggdb where available. It can also be used for C++. 133 The Dwarf version 1 debugging format is also permitted for C++, but 134 does not work well. 135 136 gcov.c is provided for test coverage analysis and branch profiling 137 analysis is also supported; see -fprofile-arcs, -ftest-coverage, 138 and -fbranch-probabilities. 139 140 Support for the Checker memory checking tool. 141 142 New switch, -fstack-check, to check for stack overflow on systems that 143 don't have such built into their ABI. 144 145 New switches, -Wundef and -Wno-undef to warn if an undefined identifier 146 is evaluated in an #if directive. 147 148 Options -Wall and -Wimplicit now cause GCC to warn about implicit int 149 in declarations (e.g. `register i;'), since the C Standard committee 150 has decided to disallow this in the next revision of the standard; 151 -Wimplicit-function-declarations and -Wimplicit-int are subsets of 152 this. 153 154 Option -Wsign-compare causes GCC to warn about comparison of signed and 155 unsigned values. 156 157 Add -dI option of cccp for cxref. 158 159New features in configuration, installation and specs file handling: 160 161 New option --enable-c-cpplib to configure script. 162 163 You can use --with-cpu on the configure command to specify the default 164 CPU that GCC should generate code for. 165 166 The -specs=file switch allows you to override default specs used in 167 invoking programs like cc1, as, etc. 168 169 Allow including one specs file from another and renaming a specs 170 variable. 171 172 You can now relocate all GCC files with a single environment variable 173 or a registry entry under Windows 95 and Windows NT. 174 175Changes in Objective-C: 176 177 The Objective-C Runtime Library has been made thread-safe. 178 179 The Objective-C Runtime Library contains an interface for creating 180 mutexes, condition mutexes, and threads; it requires a back-end 181 implementation for the specific platform and/or thread package. 182 Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads, 183 Solaris, and Windows32. The --enable-threads parameter can be used 184 when configuring GCC to enable and select a thread back-end. 185 186 Objective-C is now configured as separate front-end language to GCC, 187 making it more convenient to conditionally build it. 188 189 The internal structures of the Objective-C Runtime Library have 190 changed sufficiently to warrant a new version number; now version 8. 191 Programs compiled with an older version must be recompiled. 192 193 The Objective-C Runtime Library can be built as a DLL on Windows 95 194 and Windows NT systems. 195 196 The Objective-C Runtime Library implements +load. 197 198The following new targets are supported (see also list under each 199individual CPU below): 200 201 Embedded target m32r-elf. 202 Embedded Hitachi Super-H using ELF. 203 RTEMS real-time system on various CPU targets. 204 ARC processor. 205 NEC V850 processor. 206 Matsushita MN10200 processor. 207 Matsushita MN10300 processor. 208 Sparc and PowerPC running on VxWorks. 209 Support both glibc versions 1 and 2 on Linux-based GNU systems. 210 211New features for DEC Alpha systems: 212 213 Allow detailed specification of IEEE fp support: 214 -mieee, -mieee-with-inexact, and -mieee-conformant 215 -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx 216 -mcpu=xxx for CPU selection 217 Support scheduling parameters for EV5. 218 Add support for BWX, CIX, and MAX instruction set extensions. 219 Support Linux-based GNU systems. 220 Support VMS. 221 222Additional supported processors and systems for MIPS targets: 223 224 MIPS4 instruction set. 225 R4100, R4300 and R5000 processors. 226 N32 and N64 ABI. 227 IRIX 6.2. 228 SNI SINIX. 229 230New features for Intel x86 family: 231 232 Add scheduling parameters for Pentium and Pentium Pro. 233 Support stabs on Solaris-x86. 234 Intel x86 processors running the SCO OpenServer 5 family. 235 Intel x86 processors running DG/UX. 236 Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT. 237 238New features for Motorola 68k family: 239 240 Support for 68060 processor. 241 More consistent switches to specify processor. 242 Motorola 68k family running AUX. 243 68040 running pSOS, ELF object files, DBX debugging. 244 Coldfire variant of Motorola m68k family. 245 246New features for the HP PA RISC: 247 248 -mspace and -mno-space 249 -mlong-load-store and -mno-long-load-store 250 -mbig-switch -mno-big-switch 251 252 GCC on the PA requires either gas-2.7 or the HP assembler; for best 253 results using GAS is highly recommended. GAS is required for -g and 254 exception handling support. 255 256New features for SPARC-based systems: 257 258 The ultrasparc cpu. 259 The sparclet cpu, supporting only a.out file format. 260 Sparc running SunOS 4 with the GNU assembler. 261 Sparc running the Linux-based GNU system. 262 Embedded Sparc processors running the ELF object file format. 263 -mcpu=xxx 264 -mtune=xxx 265 -malign-loops=xxx 266 -malign-jumps=xxx 267 -malign-functions=xxx 268 -mimpure-text and -mno-impure-text 269 270 Options -mno-v8 and -mno-sparclite are no longer supported on SPARC 271 targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930, 272 and -mf934 are deprecated and will be deleted in GCC 2.9. Use 273 -mcpu=xxx instead. 274 275New features for rs6000 and PowerPC systems: 276 277 Solaris 2.51 running on PowerPC's. 278 The Linux-based GNU system running on PowerPC's. 279 -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2 280 -mtune=xxx 281 -mrelocatable-lib, -mno-relocatable-lib 282 -msim, -mmve, -memb 283 -mupdate, -mno-update 284 -mfused-madd, -mno-fused-madd 285 286 -mregnames 287 -meabi 288 -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi 289 -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi 290 -memb, -msim, -mmvme 291 -myellowknife, -mads 292 wchar_t is now of type long as per the ABI, not unsigned short. 293 -p/-pg support 294 -mcpu=403 now implies -mstrict-align. 295 Implement System V profiling. 296 297 Aix 4.1 GCC targets now default to -mcpu=common so that programs 298 compiled can be moved between rs6000 and powerpc based systems. A 299 consequence of this is that -static won't work, and that some programs 300 may be slightly slower. 301 302 You can select the default value to use for -mcpu=xxx on rs6000 and 303 powerpc targets by using the --with-cpu=xxx option when configuring the 304 compiler. In addition, a new options, -mtune=xxx was added that 305 selects the machine to schedule for but does not select the 306 architecture level. 307 308 Directory names used for storing the multilib libraries on System V 309 and embedded PowerPC systems have been shortened to work with commands 310 like tar that have fixed limits on pathname size. 311 312New features for the Hitachi H8/300(H): 313 314 -malign-300 315 -ms (for the Hitachi H8/S processor) 316 -mint32 317 318New features for the ARM: 319 320 -march=xxx, -mtune=xxx, -mcpu=xxx 321 Support interworking with Thumb code. 322 ARM processor with a.out object format, COFF, or AOF assembler. 323 ARM on "semi-hosted" platform. 324 ARM running NetBSD. 325 ARM running the Linux-based GNU system. 326 327New feature for Solaris systems: 328 329 GCC installation no longer makes a copy of system include files, 330 thus insulating GCC better from updates to the operating system. 331 332 333Noteworthy changes in GCC version 2.7.2 334--------------------------------------- 335 336A few bugs have been fixed (most notably the generation of an 337invalid assembler opcode on some RS/6000 systems). 338 339Noteworthy changes in GCC version 2.7.1 340--------------------------------------- 341 342This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but 343also contains a few new features, mostly related to specific targets. 344 345Major changes have been made in code to support Windows NT. 346 347The following new targets are supported: 348 349 2.9 BSD on PDP-11 350 Linux on m68k 351 HP/UX version 10 on HP PA RISC (treated like version 9) 352 DEC Alpha running Windows NT 353 354When parsing C, GCC now recognizes C++ style `//' comments unless you 355specify `-ansi' or `-traditional'. 356 357The PowerPC System V targets (powerpc-*-sysv, powerpc-*-eabi) now use the 358calling sequence specified in the System V Application Binary Interface 359Processor Supplement (PowerPC Processor ABI Supplement) rather than the calling 360sequence used in GCC version 2.7.0. That calling sequence was based on the AIX 361calling sequence without function descriptors. To compile code for that older 362calling sequence, either configure the compiler for powerpc-*-eabiaix or use 363the -mcall-aix switch when compiling and linking. 364 365Noteworthy changes in GCC version 2.7.0 366--------------------------------------- 367 368GCC now works better on systems that use ".obj" and ".exe" instead of 369".o" and no extension. This involved changes to the driver program, 370gcc.c, to convert ".o" names to ".obj" and to GCC's Makefile to use 371".obj" and ".exe" in filenames that are not targets. In order to 372build GCC on such systems, you may need versions of GNU make and/or 373compatible shells. At this point, this support is preliminary. 374 375Object file extensions of ".obj" and executable file extensions of 376".exe" are allowed when using appropriate version of GNU Make. 377 378Numerous enhancements were made to the __attribute__ facility including 379more attributes and more places that support it. We now support the 380"packed", "nocommon", "noreturn", "volatile", "const", "unused", 381"transparent_union", "constructor", "destructor", "mode", "section", 382"align", "format", "weak", and "alias" attributes. Each of these 383names may also be specified with added underscores, e.g., "__packed__". 384__attribute__ may now be applied to parameter definitions, function 385definitions, and structure, enum, and union definitions. 386 387GCC now supports returning more structures in registers, as specified by 388many calling sequences (ABIs), such as on the HP PA RISC. 389 390A new option '-fpack-struct' was added to automatically pack all structure 391members together without holes. 392 393There is a new library (cpplib) and program (cppmain) that at some 394point will replace cpp (aka cccp). To use cppmain as cpp now, pass 395the option CCCP=cppmain to make. The library is already used by the 396fix-header program, which should speed up the fixproto script. 397 398New options for supported targets: 399 400 GNU on many targets. 401 NetBSD on MIPS, m68k, VAX, and x86. 402 LynxOS on x86, m68k, Sparc, and RS/6000. 403 VxWorks on many targets. 404 405 Windows/NT on x86 architecture. Initial support for Windows/NT on Alpha 406 (not fully working). 407 408 Many embedded targets, specifically UDI on a29k, aout, coff, elf, 409 and vsta "operating systems" on m68k, m88k, mips, sparc, and x86. 410 411Additional support for x86 (i386, i486, and Pentium): 412 413 Work with old and new linkers for Linux-based GNU systems, 414 supporting both a.out and ELF. 415 FreeBSD on x86. 416 Stdcall convention. 417 -malign-double, -mregparm=, -malign-loops= and -malign-jumps= switches. 418 On ISC systems, support -Xp like -posix. 419 420Additions for RS/6000: 421 422 Instruction scheduling information for PowerPC 403. 423 AIX 4.1 on PowerPC. 424 -mstring and -mno-string. 425 -msoft-float and floating-point emulation included. 426 Preliminary support for PowerPC System V.4 with or without the GNU as. 427 Preliminary support for EABI. 428 Preliminary support for 64-bit systems. 429 Both big and little endian systems. 430 431New features for MIPS-based systems: 432 433 r4650. 434 mips4 and R8000. 435 Irix 6.0. 436 64-bit ABI. 437 Allow dollar signs in labels on SGI/Irix 5.x. 438 439New support for HP PA RISC: 440 441 Generation of PIC (requires binutils-2.5.2.u6 or later). 442 HP-UX version 9 on HP PA RISC (dynamically links even with -g). 443 Processor variants for HP PA RISC: 700, 7100, and 7100LC. 444 Automatic generation of long calls when needed. 445 -mfast-indirect-calls for kernels and static binaries. 446 447 The called routine now copies arguments passed by invisible reference, 448 as required by the calling standard. 449 450Other new miscellaneous target-specific support: 451 452 -mno-multm on a29k. 453 -mold-align for i960. 454 Configuration for "semi-hosted" ARM. 455 -momit-leaf-frame-pointer for M88k. 456 SH3 variant of Hitachi Super-H and support both big and little endian. 457 458Changes to Objective-C: 459 460 Bare-bones implementation of NXConstantString has been added, 461 which is invoked by the @"string" directive. 462 463 Class * has been changed to Class to conform to the NextSTEP and 464 OpenStep runtime. 465 466 Enhancements to make dynamic loading easier. 467 468 The module version number has been updated to Version 7, thus existing 469 code will need to be recompiled to use the current run-time library. 470 471GCC now supports the ISO Normative Addendum 1 to the C Standard. 472As a result: 473 474 The header <iso646.h> defines macros for C programs written 475 in national variants of ISO 646. 476 477 The following digraph tokens are supported: 478 <: :> <% %> %: %:%: 479 These behave like the following, respectively: 480 [ ] { } # ## 481 482 Digraph tokens are supported unless you specify the `-traditional' 483 option; you do not need to specify `-ansi' or `-trigraphs'. Except 484 for contrived and unlikely examples involving preprocessor 485 stringizing, digraph interpretation doesn't change the meaning of 486 programs; this is unlike trigraph interpretation, which changes the 487 meanings of relatively common strings. 488 489 The macro __STDC_VERSION__ has the value 199409L. 490 491 As usual, for full conformance to the standard, you also need a 492 C library that conforms. 493 494The following lists changes that have been made to g++. If some 495features mentioned below sound unfamiliar, you will probably want to 496look at the recently-released public review copy of the C++ Working 497Paper. For PostScript and PDF (Adobe Acrobat) versions, see the 498archive at ftp://research.att.com/dist/stdc++/WP. For HTML and ASCII 499versions, see ftp://ftp.cygnus.com/pub/g++. On the web, see 500http://www.cygnus.com/~mrs/wp-draft. 501 502The scope of variables declared in the for-init-statement has been changed 503to conform to http://www.cygnus.com/~mrs/wp-draft/stmt.html#stmt.for; as a 504result, packages such as groff 1.09 will not compile unless you specify the 505-fno-for-scope flag. PLEASE DO NOT REPORT THIS AS A BUG; this is a change 506mandated by the C++ standardization committee. 507 508Binary incompatibilities: 509 510 The builtin 'bool' type is now the size of a machine word on RISC targets, 511 for code efficiency; it remains one byte long on CISC targets. 512 513 Code that does not use #pragma interface/implementation will most 514 likely shrink dramatically, as g++ now only emits the vtable for a 515 class in the translation unit where its first non-inline, non-abstract 516 virtual function is defined. 517 518 Classes that do not define the copy constructor will sometimes be 519 passed and returned in registers. This may illuminate latent bugs in 520 your code. 521 522Support for automatic template instantiation has *NOT* been added, due 523to a disagreement over design philosophies. 524 525Support for exception handling has been improved; more targets are now 526supported, and throws will use the RTTI mechanism to match against the 527catch parameter type. Optimization is NOT SUPPORTED with 528-fhandle-exceptions; no need to report this as a bug. 529 530Support for Run-Time Type Identification has been added with -frtti. 531This support is still in alpha; one major restriction is that any file 532compiled with -frtti must include <typeinfo.h>. 533 534Preliminary support for namespaces has been added. This support is far 535from complete, and probably not useful. 536 537Synthesis of compiler-generated constructors, destructors and 538assignment operators is now deferred until the functions are used. 539 540The parsing of expressions such as `a ? b : c = 1' has changed from 541`(a ? b : c) = 1' to `a : b ? (c = 1)'. 542 543The code generated for testing conditions, especially those using || 544and &&, is now more efficient. 545 546The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq, 547or, or_eq, xor and xor_eq are now supported. Use -ansi or 548-foperator-names to enable them. 549 550The 'explicit' keyword is now supported. 'explicit' is used to mark 551constructors and type conversion operators that should not be used 552implicitly. 553 554g++ now accepts the typename keyword, though it currently has no 555semantics; it can be a no-op in the current template implementation. 556You may want to start using it in your code, however, since the 557pending rewrite of the template implementation to compile STL properly 558(perhaps for 2.8.0, perhaps not) will require you to use it as 559indicated by the current draft. 560 561Handling of user-defined type conversion has been overhauled so that 562type conversion operators are now found and used properly in 563expressions and function calls. 564 565-fno-strict-prototype now only applies to function declarations with 566"C" linkage. 567 568g++ now warns about 'if (x=0)' with -Wparentheses or -Wall. 569 570#pragma weak and #pragma pack are supported on System V R4 targets, as 571are various other target-specific #pragmas supported by gcc. 572 573new and delete of const types is now allowed (with no additional 574semantics). 575 576Explicit instantiation of template methods is now supported. Also, 577'inline template class foo<int>;' can be used to emit only the vtable 578for a template class. 579 580With -fcheck-new, g++ will check the return value of all calls to 581operator new, and not attempt to modify a returned null pointer. 582 583The template instantiation code now handles more conversions when 584passing to a parameter that does not depend on template arguments. 585This means that code like 'string s; cout << s;' now works. 586 587Invalid jumps in a switch statement past declarations that require 588initializations are now caught. 589 590Functions declared 'extern inline' now have the same linkage semantics 591as inline member functions. On supported targets, where previously 592these functions (and vtables, and template instantiations) would have 593been defined statically, they will now be defined as weak symbols so 594that only one out-of-line definition is used. 595 596collect2 now demangles linker output, and c++filt has become part of 597the gcc distribution. 598 599Noteworthy changes in GCC version 2.6.3: 600 601A few more bugs have been fixed. 602 603Noteworthy changes in GCC version 2.6.2: 604 605A few bugs have been fixed. 606 607Names of attributes can now be preceded and followed by double underscores. 608 609Noteworthy changes in GCC version 2.6.1: 610 611Numerous (mostly minor) bugs have been fixed. 612 613The following new configurations are supported: 614 615 GNU on x86 (instead of treating it like MACH) 616 NetBSD on Sparc and Motorola 68k 617 AIX 4.1 on RS/6000 and PowerPC systems 618 Sequent DYNIX/ptx 1.x and 2.x. 619 Both COFF and ELF configurations on AViiON without using /bin/gcc 620 Windows/NT on x86 architecture; preliminary 621 AT&T DSP1610 digital signal processor chips 622 i960 systems on bare boards using COFF 623 PDP11; target only and not extensively tested 624 625The -pg option is now supported for Alpha under OSF/1 V3.0 or later. 626 627Files with an extension of ".c++" are treated as C++ code. 628 629The -Xlinker and -Wl arguments are now passed to the linker in the 630position they were specified on the command line. This makes it 631possible, for example, to pass flags to the linker about specific 632object files. 633 634The use of positional arguments to the configure script is no longer 635recommended. Use --target= to specify the target; see the GCC manual. 636 637The 386 now supports two new switches: -mreg-alloc=<string> changes 638the default register allocation order used by the compiler, and 639-mno-wide-multiply disables the use of the mul/imul instructions that 640produce 64 bit results in EAX:EDX from 32 bit operands to do long long 641multiplies and 32-bit division by constants. 642 643Noteworthy changes in GCC version 2.6.0: 644 645Numerous bugs have been fixed, in the C and C++ front-ends, as 646well as in the common compiler code. 647 648This release includes the C, Objective-C, and C++ compilers. However, 649we have moved the files for the C++ compiler (G++) files to a 650subdirectory, cp. Subsequent releases of GCC will split these files 651to a separate TAR file. 652 653The G++ team has been tracking the development of the ANSI standard for C++. 654Here are some new features added from the latest working paper: 655 656 * built-in boolean type 'bool', with constants 'true' and 'false'. 657 * array new and delete (operator new [] and delete []). 658 * WP-conforming lifetime of temporaries. 659 * explicit instantiation of templates (template class A<int>;), 660 along with an option (-fno-implicit-templates) to disable emission 661 of implicitly instantiated templates, obsoletes -fexternal-templates. 662 * static member constants (static const int foo = 4; within the 663 class declaration). 664 665Many error messages have been improved to tell the user more about the 666problem. Conformance checking with -pedantic-errors has been 667improved. G++ now compiles Fresco. 668 669There is now an experimental implementation of virtual functions using 670thunks instead of Cfront-style vtables, enabled with -fvtable-thunks. 671This option also enables a heuristic which causes the compiler to only 672emit the vtable in the translation unit where its first non-inline 673virtual function is defined; using this option and 674-fno-implicit-templates, users should be able to avoid #pragma 675interface/implementation altogether. 676 677Signatures have been added as a GNU C++ extension. Using the option 678-fhandle-signatures, users are able to turn on recognition of 679signatures. A short introduction on signatures is in the section 680`Extension to the C++ Language' in the manual. 681 682The `g++' program is now a C program, rather than a shell script. 683 684Lots and lots and lots of bugs fixes, in nested types, access control, 685pointers to member functions, the parser, templates, overload 686resolution, etc, etc. 687 688There have been two major enhancements to the Objective-C compiler: 689 6901) Added portability. It now runs on Alpha, and some problems with 691 message forwarding have been addressed on other platforms. 692 6932) Selectors have been redefined to be pointers to structs like: 694 { void *sel_id, char *sel_types }, where the sel_id is the unique 695 identifier, the selector itself is no longer unique. 696 697 Programmers should use the new function sel_eq to test selector 698 equivalence. 699 700The following major changes have been made to the base compiler and 701machine-specific files. 702 703- The MIL-STD-1750A is a new port, but still preliminary. 704 705- The h8/300h is now supported; both the h8/300 and h8/300h ports come 706 with 32 bit IEEE 754 software floating point support. 707 708- The 64-bit Sparc (v9) and 64-bit MIPS chips are supported. 709 710- NetBSD is supported on m68k, Intel x86, and pc523 systems and FreeBSD 711 on x86. 712 713- COFF is supported on x86, m68k, and Sparc systems running LynxOS. 714 715- 68K systems from Bull and Concurrent are supported and System V 716 Release 4 is supported on the Atari. 717 718- GCC supports GAS on the Motorola 3300 (sysV68) and debugging 719 (assuming GAS) on the Plexus 68K system. (However, GAS does not yet 720 work on those systems). 721 722- System V Release 4 is supported on MIPS (Tandem). 723 724- For DG/UX, an ELF configuration is now supported, and both the ELF 725 and BCS configurations support ELF and COFF object file formats. 726 727- OSF/1 V2.0 is supported on Alpha. 728 729- Function profiling is also supported on Alpha. 730 731- GAS and GDB is supported for Irix 5 (MIPS). 732 733- "common mode" (code that will run on both POWER and PowerPC 734 architectures) is now supported for the RS/6000 family; the 735 compiler knows about more PPC chips. 736 737- Both NeXTStep 2.1 and 3 are supported on 68k-based architectures. 738 739- On the AMD 29k, the -msoft-float is now supported, as well as 740 -mno-sum-in-toc for RS/6000, -mapp-regs and -mflat for Sparc, and 741 -membedded-pic for MIPS. 742 743- GCC can now convert division by integer constants into the equivalent 744 multiplication and shift operations when that is faster than the 745 division. 746 747- Two new warning options, -Wbad-function-cast and 748 -Wmissing-declarations have been added. 749 750- Configurations may now add machine-specific __attribute__ options on 751 type; many machines support the `section' attribute. 752 753- The -ffast-math flag permits some optimization that violate strict 754 IEEE rules, such as converting X * 0.0 to 0.0. 755 756Noteworthy changes in GCC version 2.5.8: 757 758This release only fixes a few serious bugs. These include fixes for a 759bug that prevented most programs from working on the RS/6000, a bug 760that caused invalid assembler code for programs with a `switch' 761statement on the NS32K, a G++ problem that caused undefined names in 762some configurations, and several less serious problems, some of which 763can affect most configuration. 764 765Noteworthy change in GCC version 2.5.7: 766 767This release only fixes a few bugs, one of which was causing bootstrap 768compare errors on some systems. 769 770Noteworthy change in GCC version 2.5.6: 771 772A few backend bugs have been fixed, some of which only occur on one 773machine. 774 775The C++ compiler in 2.5.6 includes: 776 777 * fixes for some common crashes 778 * correct handling of nested types that are referenced as `foo::bar' 779 * spurious warnings about friends being declared static and never 780 defined should no longer appear 781 * enums that are local to a method in a class, or a class that's 782 local to a function, are now handled correctly. For example: 783 class foo { void bar () { enum { x, y } E; x; } }; 784 void bar () { class foo { enum { x, y } E; E baz; }; } 785 786Noteworthy change in GCC version 2.5.5: 787 788A large number of C++ bugs have been fixed. 789 790The fixproto script adds prototypes conditionally on __cplusplus. 791 792Noteworthy change in GCC version 2.5.4: 793 794A bug fix in passing of structure arguments for the HP-PA architecture 795makes code compiled with GCC 2.5.4 incompatible with code compiled 796with earlier versions (if it passes struct arguments of 33 to 64 bits, 797interspersed with other types of arguments). 798 799Noteworthy change in gcc version 2.5.3: 800 801The method of "mangling" C++ function names has been changed. So you 802must recompile all C++ programs completely when you start using GCC 8032.5. Also, GCC 2.5 requires libg++ version 2.5. Earlier libg++ 804versions won't work with GCC 2.5. (This is generally true--GCC 805version M.N requires libg++ version M.N.) 806 807Noteworthy GCC changes in version 2.5: 808 809* There is now support for the IBM 370 architecture as a target. 810Currently the only operating system supported is MVS; GCC does not run 811on MVS, so you must produce .s files using GCC as a cross compiler, 812then transfer them to MVS to assemble them. This port is not reliable 813yet. 814 815* The Power PC is now supported. 816 817* The i860-based Paragon machine is now supported. 818 819* The Hitachi 3050 (an HP-PA machine) is now supported. 820 821* The variable __GNUC_MINOR__ holds the minor version number of GCC, as 822an integer. For version 2.5.X, the value is 5. 823 824* In C, initializers for static and global variables are now processed 825an element at a time, so that they don't need a lot of storage. 826 827* The C syntax for specifying which structure field comes next in an 828initializer is now `.FIELDNAME='. The corresponding syntax for 829array initializers is now `[INDEX]='. For example, 830 831 char whitespace[256] 832 = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 }; 833 834This was changed to accord with the syntax proposed by the Numerical 835C Extensions Group (NCEG). 836 837* Complex numbers are now supported in C. Use the keyword __complex__ 838to declare complex data types. See the manual for details. 839 840* GCC now supports `long double' meaningfully on the Sparc (128-bit 841floating point) and on the 386 (96-bit floating point). The Sparc 842support is enabled on Solaris 2.x because earlier system versions 843(SunOS 4) have bugs in the emulation. 844 845* All targets now have assertions for cpu, machine and system. So you 846can now use assertions to distinguish among all supported targets. 847 848* Nested functions in C may now be inline. Just declare them inline 849in the usual way. 850 851* Packed structure members are now supported fully; it should be possible 852to access them on any supported target, no matter how little alignment 853they have. 854 855* To declare that a function does not return, you must now write 856something like this (works only in 2.5): 857 858 void fatal () __attribute__ ((noreturn)); 859 860or like this (works in older versions too): 861 862 typedef void voidfn (); 863 864 volatile voidfn fatal; 865 866It used to be possible to do so by writing this: 867 868 volatile void fatal (); 869 870but it turns out that ANSI C requires that to mean something 871else (which is useless). 872 873Likewise, to declare that a function is side-effect-free 874so that calls may be deleted or combined, write 875something like this (works only in 2.5): 876 877 int computation () __attribute__ ((const)); 878 879or like this (works in older versions too): 880 881 typedef int intfn (); 882 883 const intfn computation; 884 885* The new option -iwithprefixbefore specifies a directory to add to 886the search path for include files in the same position where -I would 887put it, but uses the specified prefix just like -iwithprefix. 888 889* Basic block profiling has been enhanced to record the function the 890basic block comes from, and if the module was compiled for debugging, 891the line number and filename. A default version of the basic block 892support module has been added to libgcc2 that appends the basic block 893information to a text file 'bb.out'. Machine descriptions can now 894override the basic block support module in the target macro file. 895 896New features in g++: 897 898* The new flag `-fansi-overloading' for C++. Use a newly implemented 899scheme of argument matching for C++. It makes g++ more accurately 900obey the rules set down in Chapter 13 of the Annotated C++ Reference 901Manual (the ARM). This option will be turned on by default in a 902future release. 903 904* The -finline-debug flag is now gone (it was never really used by the 905 compiler). 906 907* Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been 908 dramatically improved. You should not get any syntax errors or incorrect 909 runtime results while using pointers to members correctly; if you do, it's 910 a definite bug. 911 912* Forward declaration of an enum is now flagged as an error. 913 914* Class-local typedefs are now working properly. 915 916* Nested class support has been significantly improved. The compiler 917 will now (in theory) support up to 240 nested classes before hitting 918 other system limits (like memory size). 919 920* There is a new C version of the `g++' driver, to replace the old 921 shell script. This should significantly improve the performance of 922 executing g++ on a system where a user's PATH environment variable 923 references many NFS-mounted filesystems. This driver also works 924 under MS-DOS and OS/2. 925 926* The ANSI committee working on the C++ standard has adopted a new 927 keyword `mutable'. This will allow you to make a specific member be 928 modifiable in an otherwise const class. 929 930Noteworthy GCC changes in version 2.4.4: 931 932 A crash building g++ on various hosts (including m68k) has been 933 fixed. Also the g++ compiler no longer reports incorrect 934 ambiguities in some situations where they do not exist, and 935 const template member functions are now being found properly. 936 937Noteworthy GCC changes in version 2.4: 938 939* On each target, the default is now to return short structures 940compatibly with the "usual" compiler on that target. 941 942For most targets, this means the default is to return all structures 943in memory, like long structures, in whatever way is used on that 944target. Use -freg-struct-return to enable returning short structures 945(and unions) in registers. 946 947This change means that newly compiled binaries are incompatible with 948binaries compiled with previous versions of GCC. 949 950On some targets, GCC is itself the usual compiler. On these targets, 951the default way to return short structures is still in registers. 952Use -fpcc-struct-return to tell GCC to return them in memory. 953 954* There is now a floating point emulator which can imitate the way all 955supported target machines do floating point arithmetic. 956 957This makes it possible to have cross compilation to and from the VAX, 958and between machines of different endianness. However, this works 959only when the target machine description is updated to use the new 960facilities, and not all have been updated. 961 962This also makes possible support for longer floating point types. 963GCC 2.4 supports extended format on the 68K if you use `long double', 964for targets that have a 68881. (When we have run time library 965routines for extended floating point, then `long double' will use 966extended format on all 68K targets.) 967 968We expect to support extended floating point on the i386 and Sparc in 969future versions. 970 971* Building GCC now automatically fixes the system's header files. 972This should require no attention. 973 974* GCC now installs an unsigned data type as size_t when it fixes the 975header files (on all but a handful of old target machines). 976Therefore, the bug that size_t failed to be unsigned is fixed. 977 978* Building and installation are now completely separate. 979All new files are constructed during the build process; 980installation just copies them. 981 982* New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc 983Lite. 984 985* A totally new and much better Objective C run time system is included. 986 987* Objective C supports many new features. Alas, I can't describe them 988since I don't use that language; however, they are the same ones 989supported in recent versions of the NeXT operating system. 990 991* The builtin functions __builtin_apply_args, __builtin_apply and 992__builtin_return let you record the arguments and returned 993value of a function without knowing their number or type. 994 995* The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__ 996give the name of the function in the source, and a pretty-printed 997version of the name. The two are the same in C, but differ in C++. 998 999* Casts to union types do not yield lvalues. 1000 1001* ## before an empty rest argument discards the preceding sequence 1002of non-whitespace characters from the macro definition. 1003(This feature is subject to change.) 1004 1005 1006New features specific to C++: 1007 1008* The manual contains a new section ``Common Misunderstandings with 1009GNU C++'' that C++ users should read. 1010 1011* #pragma interface and #pragma implementation let you use the same 1012C++ source file for both interface and implementation. 1013However, this mechanism is still in transition. 1014 1015* Named returned values let you avoid an extra constructor call 1016when a function result has a class type. 1017 1018* The C++ operators <? and >? yield min and max, respectively. 1019 1020* C++ gotos can exit a block safely even if the block has 1021aggregates that require destructors. 1022 1023* gcc defines the macro __GNUG__ when compiling C++ programs. 1024 1025* GNU C++ now correctly distinguishes between the prefix and postfix 1026forms of overloaded operator ++ and --. To avoid breaking old 1027code, if a class defines only the prefix form, the compiler 1028accepts either ++obj or obj++, unless -pedantic is used. 1029 1030* If you are using version 2.3 of libg++, you need to rebuild it with 1031`make CC=gcc' to avoid mismatches in the definition of `size_t'. 1032 1033Newly documented compiler options: 1034 1035-fnostartfiles 1036 Omit the standard system startup files when linking. 1037 1038-fvolatile-global 1039 Consider memory references to extern and global data items to 1040 be volatile. 1041 1042-idirafter DIR 1043 Add DIR to the second include path. 1044 1045-iprefix PREFIX 1046 Specify PREFIX for later -iwithprefix options. 1047 1048-iwithprefix DIR 1049 Add PREFIX/DIR to the second include path. 1050 1051-mv8 1052 Emit Sparc v8 code (with integer multiply and divide). 1053-msparclite 1054 Emit Sparclite code (roughly v7.5). 1055 1056-print-libgcc-file-name 1057 Search for the libgcc.a file, print its absolute file name, and exit. 1058 1059-Woverloaded-virtual 1060 Warn when a derived class function declaration may be an error 1061 in defining a C++ virtual function. 1062 1063-Wtemplate-debugging 1064 When using templates in a C++ program, warn if debugging is 1065 not yet fully available. 1066 1067+eN 1068 Control how C++ virtual function definitions are used 1069 (like cfront 1.x). 1070 1071