|
|
1.1 root 1: Noteworthy changes in GCC version 2.5.8:
2:
3: This release only fixes a few serious bugs. These include fixes for a
4: bug that prevented most programs from working on the RS/6000, a bug
5: that caused invalid assembler code for prgrams with a `switch'
6: statement on the NS32K, a G++ problem that caused undefined names in
7: some configurations, and several less erious problems, some of which
8: can affect most configuration.
9:
10: Noteworthy change in GCC version 2.5.7:
11:
12: This release only fixes a few bugs, one of which was causing bootstrap
13: compare errors on some systems.
14:
15: Noteworthy change in GCC version 2.5.6:
16:
17: A few backend bugs have been fixed, some of which only occur on one
18: machine.
19:
20: The C++ compiler in 2.5.6 includes:
21:
22: * fixes for some common crashes
23: * correct handling of nested types that are referenced as `foo::bar'
24: * spurious warnings about friends being declared static and never
25: defined should no longer appear
26: * enums that are local to a method in a class, or a class that's
27: local to a function, are now handled correctly. For example:
28: class foo { void bar () { enum { x, y } E; x; } };
29: void bar () { class foo { enum { x, y } E; E baz; }; }
30:
31: Noteworthy change in GCC version 2.5.5:
32:
33: A large number of C++ bugs have been fixed.
34:
35: The fixproto script adds prototypes conditionally on __cplusplus.
36:
37: Noteworthy change in GCC version 2.5.4:
38:
39: A bug fix in passing of structure arguments for the HP-PA architecture
40: makes code compiled with GCC 2.5.4 incompatible with code compiled
41: with earlier versions (if it passes struct arguments of 33 to 64 bits,
42: interspersed with other types of arguments).
43:
44: Noteworthy change in gcc version 2.5.3:
45:
46: The method of "mangling" C++ function names has been changed. So you
47: must recompile all C++ programs completely when you start using GCC
48: 2.5. Also, GCC 2.5 requires libg++ version 2.5. Earlier libg++
49: versions won't work with GCC 2.5. (This is generally true--GCC
50: version M.N requires libg++ version M.N.)
51:
52: Noteworthy GCC changes in version 2.5:
53:
54: * There is now support for the IBM 370 architecture as a target.
55: Currently the only operating system supported is MVS; GCC does not run
56: on MVS, so you must produce .s files using GCC as a cross compiler,
57: then transfer them to MVS to assemble them. This port is not reliable
58: yet.
59:
60: * The Power PC is now supported.
61:
62: * The i860-based Paragon machine is now supported.
63:
64: * The Hitachi 3050 (an HP-PA machine) is now supported.
65:
66: * The variable __GNUC_MINOR__ holds the minor version number of GCC, as
67: an integer. For version 2.5.X, the value is 5.
68:
69: * In C, initializers for static and global variables are now processed
70: an element at a time, so that they don't need a lot of storage.
71:
72: * The C syntax for specifying which structure field comes next in an
73: initializer is now `.FIELDNAME='. The corresponding syntax for
74: array initializers is now `[INDEX]='. For example,
75:
76: char whitespace[256]
77: = { [' '] = 1, ['\t'] = 1, ['\n'] = 1 };
78:
79: This was changed to accord with the syntax proposed by the Numerical
80: C Extensions Group (NCEG).
81:
82: * Complex numbers are now supported in C. Use the keyword __complex__
83: to declare complex data types. See the manual for details.
84:
85: * GCC now supports `long double' meaningfully on the Sparc (128-bit
86: floating point) and on the 386 (96-bit floating point). The Sparc
87: support is enabled on on Solaris 2.x because earlier system versions
88: (SunOS 4) have bugs in the emulation.
89:
90: * All targets now have assertions for cpu, machine and system. So you
91: can now use assertions to distinguish among all supported targets.
92:
93: * Nested functions in C may now be inline. Just declare them inline
94: in the usual way.
95:
96: * Packed structure members are now supported fully; it should be possible
97: to access them on any supported target, no matter how little alignment
98: they have.
99:
100: * To declare that a function does not return, you must now write
101: something like this (works only in 2.5):
102:
103: void fatal () __attribute__ ((noreturn));
104:
105: or like this (works in older versions too):
106:
107: typedef void voidfn ();
108:
109: volatile voidfn fatal;
110:
111: It used to be possible to do so by writing this:
112:
113: volatile void fatal ();
114:
115: but it turns out that ANSI C requires that to mean something
116: else (which is useless).
117:
118: Likewise, to declare that a function is side-effect-free
119: so that calls may be deleted or combined, write
120: something like this (works only in 2.5):
121:
122: int computation () __attribute__ ((const));
123:
124: or like this (works in older versions too):
125:
126: typedef int intfn ();
127:
128: const intfn computation;
129:
130: * The new option -iwithprefixbefore specifies a directory to add to
131: the search path for include files in the same position where -I would
132: put it, but uses the specified prefix just like -iwithprefix.
133:
134: * Basic block profiling has been enhanced to record the function the
135: basic block comes from, and if the module was compiled for debugging,
136: the line number and filename. A default version of the basic block
137: support module has been added to libgcc2 that appends the basic block
138: information to a text file 'bb.out'. Machine descriptions can now
139: override the basic block support module in the target macro file.
140:
141: New features in g++:
142:
143: * The new flag `-fansi-overloading' for C++. Use a newly implemented
144: scheme of argument matching for C++. It makes g++ more accurately
145: obey the rules set down in Chapter 13 of the Annotated C++ Reference
146: Manual (the ARM). This option will be turned on by default in a
147: future release.
148:
149: * The -finline-debug flag is now gone (it was never really used by the
150: compiler).
151:
152: * Recognizing the syntax for pointers to members, e.g., "foo::*bar", has been
153: dramatically improved. You should not get any syntax errors or incorrect
154: runtime results while using pointers to members correctly; if you do, it's
155: a definite bug.
156:
157: * Forward declaration of an enum is now flagged as an error.
158:
159: * Class-local typedefs are now working properly.
160:
161: * Nested class support has been significantly improved. The compiler
162: will now (in theory) support up to 240 nested classes before hitting
163: other system limits (like memory size).
164:
165: * There is a new C version of the `g++' driver, to replace the old
166: shell script. This should significantly improve the performance of
167: executing g++ on a system where a user's PATH environment variable
168: references many NFS-mounted filesystems. This driver also works
169: under MS-DOS and OS/2.
170:
171: * The ANSI committee working on the C++ standard has adopted a new
172: keyword `mutable'. This will allow you to make a specific member be
173: modifiable in an otherwise const class.
174:
175: Noteworthy GCC changes in version 2.4.4:
176:
177: A crash building g++ on various hosts (including m68k) has been
178: fixed. Also the g++ compiler no longer reports incorrect
179: ambiguities in some situations where they do not exist, and
180: const template member functions are now being found properly.
181:
182: Noteworthy GCC changes in version 2.4:
183:
184: * On each target, the default is now to return short structures
185: compatibly with the "usual" compiler on that target.
186:
187: For most targets, this means the default is to return all structures
188: in memory, like long structures, in whatever way is used on that
189: target. Use -freg-struct-return to enable returning short structures
190: (and unions) in registers.
191:
192: This change means that newly compiled binaries are incompatible with
193: binaries compiled with previous versions of GCC.
194:
195: On some targets, GCC is itself the usual compiler. On these targets,
196: the default way to return short structures is still in registers.
197: Use -fpcc-struct-return to tell GCC to return them in memory.
198:
199: * There is now a floating point emulator which can imitate the way all
200: supported target machines do floating point arithmetic.
201:
202: This makes it possible to have cross compilation to and from the VAX,
203: and between machines of different endianness. However, this works
204: only when the target machine description is updated to use the new
205: facilities, and not all have been updated.
206:
207: This also makes possible support for longer floating point types.
208: GCC 2.4 supports extended format on the 68K if you use `long double',
209: for targets that have a 68881. (When we have run time library
210: routines for extended floating point, then `long double' will use
211: extended format on all 68K targets.)
212:
213: We expect to support extended floating point on the i386 and Sparc in
214: future versions.
215:
216: * Building GCC now automatically fixes the system's header files.
217: This should require no attention.
218:
219: * GCC now installs an unsigned data type as size_t when it fixes the
220: header files (on all but a handful of old target machines).
221: Therefore, the bug that size_t failed to be unsigned is fixed.
222:
223: * Building and installation are now completely separate.
224: All new files are constructed during the build process;
225: installation just copies them.
226:
227: * New targets supported: Clipper, Hitachi SH, Hitachi 8300, and Sparc
228: Lite.
229:
230: * A totally new and much better Objective C run time system is included.
231:
232: * Objective C supports many new features. Alas, I can't describe them
233: since I don't use that language; however, they are the same ones
234: supported in recent versions of the NeXT operating system.
235:
236: * The builtin functions __builtin_apply_args, __builtin_apply and
237: __builtin_return let you record the arguments and returned
238: value of a function without knowing their number or type.
239:
240: * The builtin string variables __FUNCTION__ and __PRETTY_FUNCTION__
241: give the name of the function in the source, and a pretty-printed
242: version of the name. The two are the same in C, but differ in C++.
243:
244: * Casts to union types do not yield lvalues.
245:
246: * ## before an empty rest argument discards the preceding sequence
247: of non-whitespace characters from the macro definition.
248: (This feature is subject to change.)
249:
250:
251: New features specific to C++:
252:
253: * The manual contains a new section ``Common Misunderstandings with
254: GNU C++'' that C++ users should read.
255:
256: * #pragma interface and #pragma implementation let you use the same
257: C++ source file for both interface and implementation.
258: However, this mechanism is still in transition.
259:
260: * Named returned values let you avoid an extra constructor call
261: when a function result has a class type.
262:
263: * The C++ operators <? and >? yield min and max, respectively.
264:
265: * C++ gotos can exit a block safely even if the block has
266: aggregates that require destructors.
267:
268: * gcc defines the macro __GNUG__ when compiling C++ programs.
269:
270: * GNU C++ now correctly distinguishes between the prefix and postfix
271: forms of overloaded operator ++ and --. To avoid breaking old
272: code, if a class defines only the prefix form, the compiler
273: accepts either ++obj or obj++, unless -pedantic is used.
274:
275: * If you are using version 2.3 of libg++, you need to rebuild it with
276: `make CC=gcc' to avoid mismatches in the definition of `size_t'.
277:
278: Newly documented compiler options:
279:
280: -fnostartfiles
281: Omit the standard system startup files when linking.
282:
283: -fvolatile-global
284: Consider memory references to extern and global data items to
285: be volatile.
286:
287: -idirafter DIR
288: Add DIR to the second include path.
289:
290: -iprefix PREFIX
291: Specify PREFIX for later -iwithprefix options.
292:
293: -iwithprefix DIR
294: Add PREFIX/DIR to the second include path.
295:
296: -mv8
297: Emit Sparc v8 code (with integer multiply and divide).
298: -msparclite
299: Emit Sparclite code (roughly v7.5).
300:
301: -print-libgcc-file-name
302: Search for the libgcc.a file, print its absolute file name, and exit.
303:
304: -Woverloaded-virtual
305: Warn when a derived class function declaration may be an error
306: in defining a C++ virtual function.
307:
308: -Wtemplate-debugging
309: When using templates in a C++ program, warn if debugging is
310: not yet fully available.
311:
312: +eN
313: Control how C++ virtual function definitions are used
314: (like cfront 1.x).
315:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.