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