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 | |
---|