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