OSDN Git Service

* ChangeLog: Follow spelling conventions.
[pf3gnuchains/gcc-fork.git] / gcc / doc / trouble.texi
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
2 @c 1999, 2000, 2001 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
5
6 @node Trouble
7 @chapter Known Causes of Trouble with GCC
8 @cindex bugs, known
9 @cindex installation trouble
10 @cindex known causes of trouble
11
12 This section describes known problems that affect users of GCC@.  Most
13 of these are not GCC bugs per se---if they were, we would fix them.
14 But the result for a user may be like the result of a bug.
15
16 Some of these problems are due to bugs in other software, some are
17 missing features that are too much work to add, and some are places
18 where people's opinions differ as to what is best.
19
20 @menu
21 * Actual Bugs::               Bugs we will fix later.
22 * Cross-Compiler Problems::   Common problems of cross compiling with GCC.
23 * Interoperation::      Problems using GCC with other compilers,
24                            and with certain linkers, assemblers and debuggers.
25 * External Bugs::       Problems compiling certain programs.
26 * Incompatibilities::   GCC is incompatible with traditional C.
27 * Fixed Headers::       GCC uses corrected versions of system header files.
28                            This is necessary, but doesn't always work smoothly.
29 * Standard Libraries::  GCC uses the system C library, which might not be
30                            compliant with the ISO C standard.
31 * Disappointments::     Regrettable things we can't change, but not quite bugs.
32 * C++ Misunderstandings::     Common misunderstandings with GNU C++.
33 * Protoize Caveats::    Things to watch out for when using @code{protoize}.
34 * Non-bugs::            Things we think are right, but some others disagree.
35 * Warnings and Errors:: Which problems in your code get warnings,
36                          and which get errors.
37 @end menu
38
39 @node Actual Bugs
40 @section Actual Bugs We Haven't Fixed Yet
41
42 @itemize @bullet
43 @item
44 The @code{fixincludes} script interacts badly with automounters; if the
45 directory of system header files is automounted, it tends to be
46 unmounted while @code{fixincludes} is running.  This would seem to be a
47 bug in the automounter.  We don't know any good way to work around it.
48
49 @item
50 The @code{fixproto} script will sometimes add prototypes for the
51 @code{sigsetjmp} and @code{siglongjmp} functions that reference the
52 @code{jmp_buf} type before that type is defined.  To work around this,
53 edit the offending file and place the typedef in front of the
54 prototypes.
55
56 @item
57 @opindex pedantic-errors
58 When @option{-pedantic-errors} is specified, GCC will incorrectly give
59 an error message when a function name is specified in an expression
60 involving the comma operator.
61 @end itemize
62
63 @node Cross-Compiler Problems
64 @section Cross-Compiler Problems
65
66 You may run into problems with cross compilation on certain machines,
67 for several reasons.
68
69 @itemize @bullet
70 @item
71 Cross compilation can run into trouble for certain machines because
72 some target machines' assemblers require floating point numbers to be
73 written as @emph{integer} constants in certain contexts.
74
75 The compiler writes these integer constants by examining the floating
76 point value as an integer and printing that integer, because this is
77 simple to write and independent of the details of the floating point
78 representation.  But this does not work if the compiler is running on
79 a different machine with an incompatible floating point format, or
80 even a different byte-ordering.
81
82 In addition, correct constant folding of floating point values
83 requires representing them in the target machine's format.
84 (The C standard does not quite require this, but in practice
85 it is the only way to win.)
86
87 It is now possible to overcome these problems by defining macros such
88 as @code{REAL_VALUE_TYPE}.  But doing so is a substantial amount of
89 work for each target machine.
90 @xref{Cross-compilation,,Cross Compilation and Floating Point,
91 gccint, GNU Compiler Collection (GCC) Internals}.
92
93 @item
94 At present, the program @file{mips-tfile} which adds debug
95 support to object files on MIPS systems does not work in a cross
96 compile environment.
97 @end itemize
98
99 @node Interoperation
100 @section Interoperation
101
102 This section lists various difficulties encountered in using GCC
103 together with other compilers or with the assemblers, linkers,
104 libraries and debuggers on certain systems.
105
106 @itemize @bullet
107 @item
108 On many platforms, GCC supports a different ABI for C++ than do other
109 compilers, so the object files compiled by GCC cannot be used with object
110 files generated by another C++ compiler.
111
112 An area where the difference is most apparent is name mangling.  The use
113 of different name mangling is intentional, to protect you from more subtle
114 problems.
115 Compilers differ as to many internal details of C++ implementation,
116 including: how class instances are laid out, how multiple inheritance is
117 implemented, and how virtual function calls are handled.  If the name
118 encoding were made the same, your programs would link against libraries
119 provided from other compilers---but the programs would then crash when
120 run.  Incompatible libraries are then detected at link time, rather than
121 at run time.
122
123 @item
124 Older GDB versions sometimes fail to read the output of GCC version
125 2.  If you have trouble, get GDB version 4.4 or later.
126
127 @item
128 @cindex DBX
129 DBX rejects some files produced by GCC, though it accepts similar
130 constructs in output from PCC@.  Until someone can supply a coherent
131 description of what is valid DBX input and what is not, there is
132 nothing I can do about these problems.  You are on your own.
133
134 @item
135 The GNU assembler (GAS) does not support PIC@.  To generate PIC code, you
136 must use some other assembler, such as @file{/bin/as}.
137
138 @item
139 On some BSD systems, including some versions of Ultrix, use of profiling
140 causes static variable destructors (currently used only in C++) not to
141 be run.
142
143 @ignore
144 @cindex @code{vfork}, for the Sun-4
145 @item
146 There is a bug in @code{vfork} on the Sun-4 which causes the registers
147 of the child process to clobber those of the parent.  Because of this,
148 programs that call @code{vfork} are likely to lose when compiled
149 optimized with GCC when the child code alters registers which contain
150 C variables in the parent.  This affects variables which are live in the
151 parent across the call to @code{vfork}.
152
153 If you encounter this, you can work around the problem by declaring
154 variables @code{volatile} in the function that calls @code{vfork}, until
155 the problem goes away, or by not declaring them @code{register} and not
156 using @option{-O} for those source files.
157 @end ignore
158
159 @item
160 On some SGI systems, when you use @option{-lgl_s} as an option,
161 it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}.
162 Naturally, this does not happen when you use GCC@.
163 You must specify all three options explicitly.
164
165 @item
166 On a SPARC, GCC aligns all values of type @code{double} on an 8-byte
167 boundary, and it expects every @code{double} to be so aligned.  The Sun
168 compiler usually gives @code{double} values 8-byte alignment, with one
169 exception: function arguments of type @code{double} may not be aligned.
170
171 As a result, if a function compiled with Sun CC takes the address of an
172 argument of type @code{double} and passes this pointer of type
173 @code{double *} to a function compiled with GCC, dereferencing the
174 pointer may cause a fatal signal.
175
176 One way to solve this problem is to compile your entire program with GCC@.
177 Another solution is to modify the function that is compiled with
178 Sun CC to copy the argument into a local variable; local variables
179 are always properly aligned.  A third solution is to modify the function
180 that uses the pointer to dereference it via the following function
181 @code{access_double} instead of directly with @samp{*}:
182
183 @smallexample
184 inline double
185 access_double (double *unaligned_ptr)
186 @{
187   union d2i @{ double d; int i[2]; @};
188
189   union d2i *p = (union d2i *) unaligned_ptr;
190   union d2i u;
191
192   u.i[0] = p->i[0];
193   u.i[1] = p->i[1];
194
195   return u.d;
196 @}
197 @end smallexample
198
199 @noindent
200 Storing into the pointer can be done likewise with the same union.
201
202 @item
203 On Solaris, the @code{malloc} function in the @file{libmalloc.a} library
204 may allocate memory that is only 4 byte aligned.  Since GCC on the
205 SPARC assumes that doubles are 8 byte aligned, this may result in a
206 fatal signal if doubles are stored in memory allocated by the
207 @file{libmalloc.a} library.
208
209 The solution is to not use the @file{libmalloc.a} library.  Use instead
210 @code{malloc} and related functions from @file{libc.a}; they do not have
211 this problem.
212
213 @item
214 Sun forgot to include a static version of @file{libdl.a} with some
215 versions of SunOS (mainly 4.1).  This results in undefined symbols when
216 linking static binaries (that is, if you use @option{-static}).  If you
217 see undefined symbols @code{_dlclose}, @code{_dlsym} or @code{_dlopen}
218 when linking, compile and link against the file
219 @file{mit/util/misc/dlsym.c} from the MIT version of X windows.
220
221 @item
222 The 128-bit long double format that the SPARC port supports currently
223 works by using the architecturally defined quad-word floating point
224 instructions.  Since there is no hardware that supports these
225 instructions they must be emulated by the operating system.  Long
226 doubles do not work in Sun OS versions 4.0.3 and earlier, because the
227 kernel emulator uses an obsolete and incompatible format.  Long doubles
228 do not work in Sun OS version 4.1.1 due to a problem in a Sun library.
229 Long doubles do work on Sun OS versions 4.1.2 and higher, but GCC
230 does not enable them by default.  Long doubles appear to work in Sun OS
231 5.x (Solaris 2.x).
232
233 @item
234 On HP-UX version 9.01 on the HP PA, the HP compiler @code{cc} does not
235 compile GCC correctly.  We do not yet know why.  However, GCC
236 compiled on earlier HP-UX versions works properly on HP-UX 9.01 and can
237 compile itself properly on 9.01.
238
239 @item
240 On the HP PA machine, ADB sometimes fails to work on functions compiled
241 with GCC@.  Specifically, it fails to work on functions that use
242 @code{alloca} or variable-size arrays.  This is because GCC doesn't
243 generate HP-UX unwind descriptors for such functions.  It may even be
244 impossible to generate them.
245
246 @item
247 Debugging (@option{-g}) is not supported on the HP PA machine, unless you use
248 the preliminary GNU tools.
249
250 @item
251 Taking the address of a label may generate errors from the HP-UX
252 PA assembler.  GAS for the PA does not have this problem.
253
254 @item
255 Using floating point parameters for indirect calls to static functions
256 will not work when using the HP assembler.  There simply is no way for GCC
257 to specify what registers hold arguments for static functions when using
258 the HP assembler.  GAS for the PA does not have this problem.
259
260 @item
261 In extremely rare cases involving some very large functions you may
262 receive errors from the HP linker complaining about an out of bounds
263 unconditional branch offset.  This used to occur more often in previous
264 versions of GCC, but is now exceptionally rare.  If you should run
265 into it, you can work around by making your function smaller.
266
267 @item
268 GCC compiled code sometimes emits warnings from the HP-UX assembler of
269 the form:
270
271 @smallexample
272 (warning) Use of GR3 when
273   frame >= 8192 may cause conflict.
274 @end smallexample
275
276 These warnings are harmless and can be safely ignored.
277
278 @item
279 On the IBM RS/6000, compiling code of the form
280
281 @smallexample
282 extern int foo;
283
284 @dots{} foo @dots{}
285
286 static int foo;
287 @end smallexample
288
289 @noindent
290 will cause the linker to report an undefined symbol @code{foo}.
291 Although this behavior differs from most other systems, it is not a
292 bug because redefining an @code{extern} variable as @code{static}
293 is undefined in ISO C@.
294
295 @item
296 In extremely rare cases involving some very large functions you may
297 receive errors from the AIX Assembler complaining about a displacement
298 that is too large.  If you should run into it, you can work around by
299 making your function smaller.
300
301 @item
302 The @file{libstdc++.a} library in GCC relies on the SVR4 dynamic
303 linker semantics which merges global symbols between libraries and
304 applications, especially necessary for C++ streams functionality.
305 This is not the default behavior of AIX shared libraries and dynamic
306 linking.  @file{libstdc++.a} is built on AIX with ``runtime-linking''
307 enabled so that symbol merging can occur.  To utilize this feature,
308 the application linked with @file{libstdc++.a} must include the
309 @option{-Wl,-brtl} flag on the link line.  G++ cannot impose this
310 because this option may interfere with the semantics of the user
311 program and users may not always use @samp{g++} to link his or her
312 application. Applications are not required to use the
313 @option{-Wl,-brtl} flag on the link line---the rest of the
314 @file{libstdc++.a} library which is not dependent on the symbol
315 merging semantics will continue to function correctly.
316
317 @item
318 An application can interpose its own definition of functions for
319 functions invoked by @file{libstdc++.a} with ``runtime-linking''
320 enabled on AIX.  To accomplish this the application must be linked
321 with ``runtime-linking'' option and the functions explicitly must be
322 exported by the application (@option{-Wl,-brtl,-bE:exportfile}).
323
324 @item
325 AIX on the RS/6000 provides support (NLS) for environments outside of
326 the United States.  Compilers and assemblers use NLS to support
327 locale-specific representations of various objects including
328 floating-point numbers (@samp{.} vs @samp{,} for separating decimal
329 fractions). There have been problems reported where the library linked
330 with GCC does not produce the same floating-point formats that the
331 assembler accepts. If you have this problem, set the @env{LANG}
332 environment variable to @samp{C} or @samp{En_US}.
333
334 @item
335 @opindex fdollars-in-identifiers
336 Even if you specify @option{-fdollars-in-identifiers},
337 you cannot successfully use @samp{$} in identifiers on the RS/6000 due
338 to a restriction in the IBM assembler.  GAS supports these
339 identifiers.
340
341 @item
342 @opindex mno-serialize-volatile
343 There is an assembler bug in versions of DG/UX prior to 5.4.2.01 that
344 occurs when the @samp{fldcr} instruction is used.  GCC uses
345 @samp{fldcr} on the 88100 to serialize volatile memory references.  Use
346 the option @option{-mno-serialize-volatile} if your version of the
347 assembler has this bug.
348
349 @item
350 On VMS, GAS versions 1.38.1 and earlier may cause spurious warning
351 messages from the linker.  These warning messages complain of mismatched
352 psect attributes.  You can ignore them.
353
354 @item
355 On NewsOS version 3, if you include both of the files @file{stddef.h}
356 and @file{sys/types.h}, you get an error because there are two typedefs
357 of @code{size_t}.  You should change @file{sys/types.h} by adding these
358 lines around the definition of @code{size_t}:
359
360 @smallexample
361 #ifndef _SIZE_T
362 #define _SIZE_T
363 @var{actual-typedef-here}
364 #endif
365 @end smallexample
366
367 @cindex Alliant
368 @item
369 On the Alliant, the system's own convention for returning structures
370 and unions is unusual, and is not compatible with GCC no matter
371 what options are used.
372
373 @cindex RT PC
374 @cindex IBM RT PC
375 @item
376 @opindex mhc-struct-return
377 On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different
378 convention for structure and union returning.  Use the option
379 @option{-mhc-struct-return} to tell GCC to use a convention compatible
380 with it.
381
382 @cindex VAX calling convention
383 @cindex Ultrix calling convention
384 @item
385 @opindex fcall-saved
386 On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved
387 by function calls.  However, the C compiler uses conventions compatible
388 with BSD Unix: registers 2 through 5 may be clobbered by function calls.
389
390 GCC uses the same convention as the Ultrix C compiler.  You can use
391 these options to produce code compatible with the Fortran compiler:
392
393 @smallexample
394 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
395 @end smallexample
396
397 @item
398 On the WE32k, you may find that programs compiled with GCC do not
399 work with the standard shared C library.  You may need to link with
400 the ordinary C compiler.  If you do so, you must specify the following
401 options:
402
403 @smallexample
404 -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.8.1 -lgcc -lc_s
405 @end smallexample
406
407 The first specifies where to find the library @file{libgcc.a}
408 specified with the @option{-lgcc} option.
409
410 GCC does linking by invoking @command{ld}, just as @command{cc} does, and
411 there is no reason why it @emph{should} matter which compilation program
412 you use to invoke @command{ld}.  If someone tracks this problem down,
413 it can probably be fixed easily.
414
415 @item
416 On the Alpha, you may get assembler errors about invalid syntax as a
417 result of floating point constants.  This is due to a bug in the C
418 library functions @code{ecvt}, @code{fcvt} and @code{gcvt}.  Given valid
419 floating point numbers, they sometimes print @samp{NaN}.
420
421 @item
422 On Irix 4.0.5F (and perhaps in some other versions), an assembler bug
423 sometimes reorders instructions incorrectly when optimization is turned
424 on.  If you think this may be happening to you, try using the GNU
425 assembler; GAS version 2.1 supports ECOFF on Irix.
426
427 @opindex noasmopt
428 Or use the @option{-noasmopt} option when you compile GCC with itself,
429 and then again when you compile your program.  (This is a temporary
430 kludge to turn off assembler optimization on Irix.)  If this proves to
431 be what you need, edit the assembler spec in the file @file{specs} so
432 that it unconditionally passes @option{-O0} to the assembler, and never
433 passes @option{-O2} or @option{-O3}.
434 @end itemize
435
436 @node External Bugs
437 @section Problems Compiling Certain Programs
438
439 @c prevent bad page break with this line
440 Certain programs have problems compiling.
441
442 @itemize @bullet
443 @item
444 Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2
445 because of problems in DEC's versions of the X11 header files
446 @file{X11/Xlib.h} and @file{X11/Xutil.h}.  People recommend adding
447 @option{-I/usr/include/mit} to use the MIT versions of the header files,
448 or fixing the header files by adding this:
449
450 @example
451 #ifdef __STDC__
452 #define NeedFunctionPrototypes 0
453 #endif
454 @end example
455
456 @item
457 On various 386 Unix systems derived from System V, including SCO, ISC,
458 and ESIX, you may get error messages about running out of virtual memory
459 while compiling certain programs.
460
461 You can prevent this problem by linking GCC with the GNU malloc
462 (which thus replaces the malloc that comes with the system).  GNU malloc
463 is available as a separate package, and also in the file
464 @file{src/gmalloc.c} in the GNU Emacs 19 distribution.
465
466 If you have installed GNU malloc as a separate library package, use this
467 option when you relink GCC:
468
469 @example
470 MALLOC=/usr/local/lib/libgmalloc.a
471 @end example
472
473 Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
474 the object file to @file{gmalloc.o} and use this option when you relink
475 GCC:
476
477 @example
478 MALLOC=gmalloc.o
479 @end example
480 @end itemize
481
482 @node Incompatibilities
483 @section Incompatibilities of GCC
484 @cindex incompatibilities of GCC
485 @opindex traditional
486
487 There are several noteworthy incompatibilities between GNU C and K&R
488 (non-ISO) versions of C@.
489
490 @itemize @bullet
491 @cindex string constants
492 @cindex read-only strings
493 @cindex shared strings
494 @item
495 GCC normally makes string constants read-only.  If several
496 identical-looking string constants are used, GCC stores only one
497 copy of the string.
498
499 @cindex @code{mktemp}, and constant strings
500 One consequence is that you cannot call @code{mktemp} with a string
501 constant argument.  The function @code{mktemp} always alters the
502 string its argument points to.
503
504 @cindex @code{sscanf}, and constant strings
505 @cindex @code{fscanf}, and constant strings
506 @cindex @code{scanf}, and constant strings
507 Another consequence is that @code{sscanf} does not work on some systems
508 when passed a string constant as its format control string or input.
509 This is because @code{sscanf} incorrectly tries to write into the string
510 constant.  Likewise @code{fscanf} and @code{scanf}.
511
512 @opindex fwritable-strings
513 The best solution to these problems is to change the program to use
514 @code{char}-array variables with initialization strings for these
515 purposes instead of string constants.  But if this is not possible,
516 you can use the @option{-fwritable-strings} flag, which directs GCC
517 to handle string constants the same way most C compilers do.
518
519 @item
520 @code{-2147483648} is positive.
521
522 This is because 2147483648 cannot fit in the type @code{int}, so
523 (following the ISO C rules) its data type is @code{unsigned long int}.
524 Negating this value yields 2147483648 again.
525
526 @item
527 GCC does not substitute macro arguments when they appear inside of
528 string constants.  For example, the following macro in GCC
529
530 @example
531 #define foo(a) "a"
532 @end example
533
534 @noindent
535 will produce output @code{"a"} regardless of what the argument @var{a} is.
536
537 @cindex @code{setjmp} incompatibilities
538 @cindex @code{longjmp} incompatibilities
539 @item
540 When you use @code{setjmp} and @code{longjmp}, the only automatic
541 variables guaranteed to remain valid are those declared
542 @code{volatile}.  This is a consequence of automatic register
543 allocation.  Consider this function:
544
545 @example
546 jmp_buf j;
547
548 foo ()
549 @{
550   int a, b;
551
552   a = fun1 ();
553   if (setjmp (j))
554     return a;
555
556   a = fun2 ();
557   /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */
558   return a + fun3 ();
559 @}
560 @end example
561
562 Here @code{a} may or may not be restored to its first value when the
563 @code{longjmp} occurs.  If @code{a} is allocated in a register, then
564 its first value is restored; otherwise, it keeps the last value stored
565 in it.
566
567 @opindex W
568 If you use the @option{-W} option with the @option{-O} option, you will
569 get a warning when GCC thinks such a problem might be possible.
570
571 @item
572 Programs that use preprocessing directives in the middle of macro
573 arguments do not work with GCC@.  For example, a program like this
574 will not work:
575
576 @example
577 @group
578 foobar (
579 #define luser
580         hack)
581 @end group
582 @end example
583
584 ISO C does not permit such a construct.
585
586 @item
587 K&R compilers allow comments to cross over an inclusion boundary
588 (i.e.@: started in an include file and ended in the including file).  I think
589 this would be quite ugly and can't imagine it could be needed.
590
591 @cindex external declaration scope
592 @cindex scope of external declarations
593 @cindex declaration scope
594 @item
595 Declarations of external variables and functions within a block apply
596 only to the block containing the declaration.  In other words, they
597 have the same scope as any other declaration in the same place.
598
599 In some other C compilers, a @code{extern} declaration affects all the
600 rest of the file even if it happens within a block.
601
602 @item
603 In traditional C, you can combine @code{long}, etc., with a typedef name,
604 as shown here:
605
606 @example
607 typedef int foo;
608 typedef long foo bar;
609 @end example
610
611 In ISO C, this is not allowed: @code{long} and other type modifiers
612 require an explicit @code{int}.
613
614 @cindex typedef names as function parameters
615 @item
616 PCC allows typedef names to be used as function parameters.
617
618 @item
619 Traditional C allows the following erroneous pair of declarations to
620 appear together in a given scope:
621
622 @example
623 typedef int foo;
624 typedef foo foo;
625 @end example
626
627 @item
628 GCC treats all characters of identifiers as significant.  According to
629 K&R-1 (2.2), ``No more than the first eight characters are significant,
630 although more may be used.''.  Also according to K&R-1 (2.2), ``An
631 identifier is a sequence of letters and digits; the first character must
632 be a letter.  The underscore _ counts as a letter.'', but GCC also
633 allows dollar signs in identifiers.
634
635 @cindex whitespace
636 @item
637 PCC allows whitespace in the middle of compound assignment operators
638 such as @samp{+=}.  GCC, following the ISO standard, does not
639 allow this.
640
641 @cindex apostrophes
642 @cindex '
643 @item
644 GCC complains about unterminated character constants inside of
645 preprocessing conditionals that fail.  Some programs have English
646 comments enclosed in conditionals that are guaranteed to fail; if these
647 comments contain apostrophes, GCC will probably report an error.  For
648 example, this code would produce an error:
649
650 @example
651 #if 0
652 You can't expect this to work.
653 #endif
654 @end example
655
656 The best solution to such a problem is to put the text into an actual
657 C comment delimited by @samp{/*@dots{}*/}.
658
659 @item
660 Many user programs contain the declaration @samp{long time ();}.  In the
661 past, the system header files on many systems did not actually declare
662 @code{time}, so it did not matter what type your program declared it to
663 return.  But in systems with ISO C headers, @code{time} is declared to
664 return @code{time_t}, and if that is not the same as @code{long}, then
665 @samp{long time ();} is erroneous.
666
667 The solution is to change your program to use appropriate system headers
668 (@code{<time.h>} on systems with ISO C headers) and not to declare
669 @code{time} if the system header files declare it, or failing that to
670 use @code{time_t} as the return type of @code{time}.
671
672 @cindex @code{float} as function value type
673 @item
674 When compiling functions that return @code{float}, PCC converts it to
675 a double.  GCC actually returns a @code{float}.  If you are concerned
676 with PCC compatibility, you should declare your functions to return
677 @code{double}; you might as well say what you mean.
678
679 @cindex structures
680 @cindex unions
681 @item
682 When compiling functions that return structures or unions, GCC
683 output code normally uses a method different from that used on most
684 versions of Unix.  As a result, code compiled with GCC cannot call
685 a structure-returning function compiled with PCC, and vice versa.
686
687 The method used by GCC is as follows: a structure or union which is
688 1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or union
689 with any other size is stored into an address supplied by the caller
690 (usually in a special, fixed register, but on some machines it is passed
691 on the stack).  The machine-description macros @code{STRUCT_VALUE} and
692 @code{STRUCT_INCOMING_VALUE} tell GCC where to pass this address.
693
694 By contrast, PCC on most target machines returns structures and unions
695 of any size by copying the data into an area of static storage, and then
696 returning the address of that storage as if it were a pointer value.
697 The caller must copy the data from that memory area to the place where
698 the value is wanted.  GCC does not use this method because it is
699 slower and nonreentrant.
700
701 On some newer machines, PCC uses a reentrant convention for all
702 structure and union returning.  GCC on most of these machines uses a
703 compatible convention when returning structures and unions in memory,
704 but still returns small structures and unions in registers.
705
706 @opindex fpcc-struct-return
707 You can tell GCC to use a compatible convention for all structure and
708 union returning with the option @option{-fpcc-struct-return}.
709
710 @cindex preprocessing tokens
711 @cindex preprocessing numbers
712 @item
713 GCC complains about program fragments such as @samp{0x74ae-0x4000}
714 which appear to be two hexadecimal constants separated by the minus
715 operator.  Actually, this string is a single @dfn{preprocessing token}.
716 Each such token must correspond to one token in C@.  Since this does not,
717 GCC prints an error message.  Although it may appear obvious that what
718 is meant is an operator and two values, the ISO C standard specifically
719 requires that this be treated as erroneous.
720
721 A @dfn{preprocessing token} is a @dfn{preprocessing number} if it
722 begins with a digit and is followed by letters, underscores, digits,
723 periods and @samp{e+}, @samp{e-}, @samp{E+}, @samp{E-}, @samp{p+},
724 @samp{p-}, @samp{P+}, or @samp{P-} character sequences.  (In strict C89
725 mode, the sequences @samp{p+}, @samp{p-}, @samp{P+} and @samp{P-} cannot
726 appear in preprocessing numbers.)
727
728 To make the above program fragment valid, place whitespace in front of
729 the minus sign.  This whitespace will end the preprocessing number.
730 @end itemize
731
732 @node Fixed Headers
733 @section Fixed Header Files
734
735 GCC needs to install corrected versions of some system header files.
736 This is because most target systems have some header files that won't
737 work with GCC unless they are changed.  Some have bugs, some are
738 incompatible with ISO C, and some depend on special features of other
739 compilers.
740
741 Installing GCC automatically creates and installs the fixed header
742 files, by running a program called @code{fixincludes} (or for certain
743 targets an alternative such as @code{fixinc.svr4}).  Normally, you
744 don't need to pay attention to this.  But there are cases where it
745 doesn't do the right thing automatically.
746
747 @itemize @bullet
748 @item
749 If you update the system's header files, such as by installing a new
750 system version, the fixed header files of GCC are not automatically
751 updated.  The easiest way to update them is to reinstall GCC@.  (If
752 you want to be clever, look in the makefile and you can find a
753 shortcut.)
754
755 @item
756 On some systems, in particular SunOS 4, header file directories contain
757 machine-specific symbolic links in certain places.  This makes it
758 possible to share most of the header files among hosts running the
759 same version of SunOS 4 on different machine models.
760
761 The programs that fix the header files do not understand this special
762 way of using symbolic links; therefore, the directory of fixed header
763 files is good only for the machine model used to build it.
764
765 In SunOS 4, only programs that look inside the kernel will notice the
766 difference between machine models.  Therefore, for most purposes, you
767 need not be concerned about this.
768
769 It is possible to make separate sets of fixed header files for the
770 different machine models, and arrange a structure of symbolic links so
771 as to use the proper set, but you'll have to do this by hand.
772
773 @item
774 On Lynxos, GCC by default does not fix the header files.  This is
775 because bugs in the shell cause the @code{fixincludes} script to fail.
776
777 This means you will encounter problems due to bugs in the system header
778 files.  It may be no comfort that they aren't GCC's fault, but it
779 does mean that there's nothing for us to do about them.
780 @end itemize
781
782 @node Standard Libraries
783 @section Standard Libraries
784
785 @opindex Wall
786 GCC by itself attempts to be a conforming freestanding implementation.
787 @xref{Standards,,Language Standards Supported by GCC}, for details of
788 what this means.  Beyond the library facilities required of such an
789 implementation, the rest of the C library is supplied by the vendor of
790 the operating system.  If that C library doesn't conform to the C
791 standards, then your programs might get warnings (especially when using
792 @option{-Wall}) that you don't expect.
793
794 For example, the @code{sprintf} function on SunOS 4.1.3 returns
795 @code{char *} while the C standard says that @code{sprintf} returns an
796 @code{int}.  The @code{fixincludes} program could make the prototype for
797 this function match the Standard, but that would be wrong, since the
798 function will still return @code{char *}.
799
800 If you need a Standard compliant library, then you need to find one, as
801 GCC does not provide one.  The GNU C library (called @code{glibc})
802 provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for
803 GNU/Linux and HURD-based GNU systems; no recent version of it supports
804 other systems, though some very old versions did.  Version 2.2 of the
805 GNU C library includes nearly complete C99 support.  You could also ask
806 your operating system vendor if newer libraries are available.
807
808 @node Disappointments
809 @section Disappointments and Misunderstandings
810
811 These problems are perhaps regrettable, but we don't know any practical
812 way around them.
813
814 @itemize @bullet
815 @item
816 Certain local variables aren't recognized by debuggers when you compile
817 with optimization.
818
819 This occurs because sometimes GCC optimizes the variable out of
820 existence.  There is no way to tell the debugger how to compute the
821 value such a variable ``would have had'', and it is not clear that would
822 be desirable anyway.  So GCC simply does not mention the eliminated
823 variable when it writes debugging information.
824
825 You have to expect a certain amount of disagreement between the
826 executable and your source code, when you use optimization.
827
828 @cindex conflicting types
829 @cindex scope of declaration
830 @item
831 Users often think it is a bug when GCC reports an error for code
832 like this:
833
834 @example
835 int foo (struct mumble *);
836
837 struct mumble @{ @dots{} @};
838
839 int foo (struct mumble *x)
840 @{ @dots{} @}
841 @end example
842
843 This code really is erroneous, because the scope of @code{struct
844 mumble} in the prototype is limited to the argument list containing it.
845 It does not refer to the @code{struct mumble} defined with file scope
846 immediately below---they are two unrelated types with similar names in
847 different scopes.
848
849 But in the definition of @code{foo}, the file-scope type is used
850 because that is available to be inherited.  Thus, the definition and
851 the prototype do not match, and you get an error.
852
853 This behavior may seem silly, but it's what the ISO standard specifies.
854 It is easy enough for you to make your code work by moving the
855 definition of @code{struct mumble} above the prototype.  It's not worth
856 being incompatible with ISO C just to avoid an error for the example
857 shown above.
858
859 @item
860 Accesses to bit-fields even in volatile objects works by accessing larger
861 objects, such as a byte or a word.  You cannot rely on what size of
862 object is accessed in order to read or write the bit-field; it may even
863 vary for a given bit-field according to the precise usage.
864
865 If you care about controlling the amount of memory that is accessed, use
866 volatile but do not use bit-fields.
867
868 @item
869 GCC comes with shell scripts to fix certain known problems in system
870 header files.  They install corrected copies of various header files in
871 a special directory where only GCC will normally look for them.  The
872 scripts adapt to various systems by searching all the system header
873 files for the problem cases that we know about.
874
875 If new system header files are installed, nothing automatically arranges
876 to update the corrected header files.  You will have to reinstall GCC
877 to fix the new header files.  More specifically, go to the build
878 directory and delete the files @file{stmp-fixinc} and
879 @file{stmp-headers}, and the subdirectory @code{include}; then do
880 @samp{make install} again.
881
882 @item
883 @cindex floating point precision
884 On 68000 and x86 systems, for instance, you can get paradoxical results
885 if you test the precise values of floating point numbers.  For example,
886 you can find that a floating point value which is not a NaN is not equal
887 to itself.  This results from the fact that the floating point registers
888 hold a few more bits of precision than fit in a @code{double} in memory.
889 Compiled code moves values between memory and floating point registers
890 at its convenience, and moving them into memory truncates them.
891
892 @opindex ffloat-store
893 You can partially avoid this problem by using the @option{-ffloat-store}
894 option (@pxref{Optimize Options}).
895
896 @item
897 On AIX and other platforms without weak symbol support, templates
898 need to be instantiated explicitly and symbols for static members
899 of templates will not be generated.
900
901 @item
902 On AIX, GCC scans object files and library archives for static
903 constructors and destructors when linking an application before the
904 linker prunes unreferenced symbols.  This is necessary to prevent the
905 AIX linker from mistakenly assuming that static constructor or
906 destructor are unused and removing them before the scanning can occur.
907 All static constructors and destructors found will be referenced even
908 though the modules in which they occur may not be used by the program.
909 This may lead to both increased executable size and unexpected symbol
910 references.
911 @end itemize
912
913 @node C++ Misunderstandings
914 @section Common Misunderstandings with GNU C++
915
916 @cindex misunderstandings in C++
917 @cindex surprises in C++
918 @cindex C++ misunderstandings
919 C++ is a complex language and an evolving one, and its standard
920 definition (the ISO C++ standard) was only recently completed.  As a
921 result, your C++ compiler may occasionally surprise you, even when its
922 behavior is correct.  This section discusses some areas that frequently
923 give rise to questions of this sort.
924
925 @menu
926 * Static Definitions::  Static member declarations are not definitions
927 * Temporaries::         Temporaries may vanish before you expect
928 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
929 @end menu
930
931 @node Static Definitions
932 @subsection Declare @emph{and} Define Static Members
933
934 @cindex C++ static data, declaring and defining
935 @cindex static data in C++, declaring and defining
936 @cindex declaring static data in C++
937 @cindex defining static data in C++
938 When a class has static data members, it is not enough to @emph{declare}
939 the static member; you must also @emph{define} it.  For example:
940
941 @example
942 class Foo
943 @{
944   @dots{}
945   void method();
946   static int bar;
947 @};
948 @end example
949
950 This declaration only establishes that the class @code{Foo} has an
951 @code{int} named @code{Foo::bar}, and a member function named
952 @code{Foo::method}.  But you still need to define @emph{both}
953 @code{method} and @code{bar} elsewhere.  According to the ISO
954 standard, you must supply an initializer in one (and only one) source
955 file, such as:
956
957 @example
958 int Foo::bar = 0;
959 @end example
960
961 Other C++ compilers may not correctly implement the standard behavior.
962 As a result, when you switch to @code{g++} from one of these compilers,
963 you may discover that a program that appeared to work correctly in fact
964 does not conform to the standard: @code{g++} reports as undefined
965 symbols any static data members that lack definitions.
966
967 @node Temporaries
968 @subsection Temporaries May Vanish Before You Expect
969
970 @cindex temporaries, lifetime of
971 @cindex portions of temporary objects, pointers to
972 It is dangerous to use pointers or references to @emph{portions} of a
973 temporary object.  The compiler may very well delete the object before
974 you expect it to, leaving a pointer to garbage.  The most common place
975 where this problem crops up is in classes like string classes,
976 especially ones that define a conversion function to type @code{char *}
977 or @code{const char *}---which is one reason why the standard
978 @code{string} class requires you to call the @code{c_str} member
979 function.  However, any class that returns a pointer to some internal
980 structure is potentially subject to this problem.
981
982 For example, a program may use a function @code{strfunc} that returns
983 @code{string} objects, and another function @code{charfunc} that
984 operates on pointers to @code{char}:
985
986 @example
987 string strfunc ();
988 void charfunc (const char *);
989
990 void
991 f ()
992 @{
993   const char *p = strfunc().c_str();
994   @dots{}
995   charfunc (p);
996   @dots{}
997   charfunc (p);
998 @}
999 @end example
1000
1001 @noindent
1002 In this situation, it may seem reasonable to save a pointer to the C
1003 string returned by the @code{c_str} member function and use that rather
1004 than call @code{c_str} repeatedly.  However, the temporary string
1005 created by the call to @code{strfunc} is destroyed after @code{p} is
1006 initialized, at which point @code{p} is left pointing to freed memory.
1007
1008 Code like this may run successfully under some other compilers,
1009 particularly obsolete cfront-based compilers that delete temporaries
1010 along with normal local variables.  However, the GNU C++ behavior is
1011 standard-conforming, so if your program depends on late destruction of
1012 temporaries it is not portable.
1013
1014 The safe way to write such code is to give the temporary a name, which
1015 forces it to remain until the end of the scope of the name.  For
1016 example:
1017
1018 @example
1019 string& tmp = strfunc ();
1020 charfunc (tmp.c_str ());
1021 @end example
1022
1023 @node Copy Assignment
1024 @subsection Implicit Copy-Assignment for Virtual Bases
1025
1026 When a base class is virtual, only one subobject of the base class
1027 belongs to each full object.  Also, the constructors and destructors are
1028 invoked only once, and called from the most-derived class.  However, such
1029 objects behave unspecified when being assigned.  For example:
1030
1031 @example
1032 struct Base@{
1033   char *name;
1034   Base(char *n) : name(strdup(n))@{@}
1035   Base& operator= (const Base& other)@{
1036    free (name);
1037    name = strdup (other.name);
1038   @}
1039 @};
1040
1041 struct A:virtual Base@{
1042   int val;
1043   A():Base("A")@{@}
1044 @};
1045
1046 struct B:virtual Base@{
1047   int bval;
1048   B():Base("B")@{@}
1049 @};
1050
1051 struct Derived:public A, public B@{
1052   Derived():Base("Derived")@{@}
1053 @};
1054
1055 void func(Derived &d1, Derived &d2)
1056 @{
1057   d1 = d2;
1058 @}
1059 @end example
1060
1061 The C++ standard specifies that @samp{Base::Base} is only called once
1062 when constructing or copy-constructing a Derived object.  It is
1063 unspecified whether @samp{Base::operator=} is called more than once when
1064 the implicit copy-assignment for Derived objects is invoked (as it is
1065 inside @samp{func} in the example).
1066
1067 g++ implements the ``intuitive'' algorithm for copy-assignment: assign all
1068 direct bases, then assign all members.  In that algorithm, the virtual
1069 base subobject can be encountered many times.  In the example, copying
1070 proceeds in the following order: @samp{val}, @samp{name} (via
1071 @code{strdup}), @samp{bval}, and @samp{name} again.
1072
1073 If application code relies on copy-assignment, a user-defined
1074 copy-assignment operator removes any uncertainties.  With such an
1075 operator, the application can define whether and how the virtual base
1076 subobject is assigned.
1077
1078 @node Protoize Caveats
1079 @section Caveats of using @command{protoize}
1080
1081 The conversion programs @command{protoize} and @command{unprotoize} can
1082 sometimes change a source file in a way that won't work unless you
1083 rearrange it.
1084
1085 @itemize @bullet
1086 @item
1087 @command{protoize} can insert references to a type name or type tag before
1088 the definition, or in a file where they are not defined.
1089
1090 If this happens, compiler error messages should show you where the new
1091 references are, so fixing the file by hand is straightforward.
1092
1093 @item
1094 There are some C constructs which @command{protoize} cannot figure out.
1095 For example, it can't determine argument types for declaring a
1096 pointer-to-function variable; this you must do by hand.  @command{protoize}
1097 inserts a comment containing @samp{???} each time it finds such a
1098 variable; so you can find all such variables by searching for this
1099 string.  ISO C does not require declaring the argument types of
1100 pointer-to-function types.
1101
1102 @item
1103 Using @command{unprotoize} can easily introduce bugs.  If the program
1104 relied on prototypes to bring about conversion of arguments, these
1105 conversions will not take place in the program without prototypes.
1106 One case in which you can be sure @command{unprotoize} is safe is when
1107 you are removing prototypes that were made with @command{protoize}; if
1108 the program worked before without any prototypes, it will work again
1109 without them.
1110
1111 @opindex Wconversion
1112 You can find all the places where this problem might occur by compiling
1113 the program with the @option{-Wconversion} option.  It prints a warning
1114 whenever an argument is converted.
1115
1116 @item
1117 Both conversion programs can be confused if there are macro calls in and
1118 around the text to be converted.  In other words, the standard syntax
1119 for a declaration or definition must not result from expanding a macro.
1120 This problem is inherent in the design of C and cannot be fixed.  If
1121 only a few functions have confusing macro calls, you can easily convert
1122 them manually.
1123
1124 @item
1125 @command{protoize} cannot get the argument types for a function whose
1126 definition was not actually compiled due to preprocessing conditionals.
1127 When this happens, @command{protoize} changes nothing in regard to such
1128 a function.  @command{protoize} tries to detect such instances and warn
1129 about them.
1130
1131 You can generally work around this problem by using @command{protoize} step
1132 by step, each time specifying a different set of @option{-D} options for
1133 compilation, until all of the functions have been converted.  There is
1134 no automatic way to verify that you have got them all, however.
1135
1136 @item
1137 Confusion may result if there is an occasion to convert a function
1138 declaration or definition in a region of source code where there is more
1139 than one formal parameter list present.  Thus, attempts to convert code
1140 containing multiple (conditionally compiled) versions of a single
1141 function header (in the same vicinity) may not produce the desired (or
1142 expected) results.
1143
1144 If you plan on converting source files which contain such code, it is
1145 recommended that you first make sure that each conditionally compiled
1146 region of source code which contains an alternative function header also
1147 contains at least one additional follower token (past the final right
1148 parenthesis of the function header).  This should circumvent the
1149 problem.
1150
1151 @item
1152 @command{unprotoize} can become confused when trying to convert a function
1153 definition or declaration which contains a declaration for a
1154 pointer-to-function formal argument which has the same name as the
1155 function being defined or declared.  We recommend you avoid such choices
1156 of formal parameter names.
1157
1158 @item
1159 You might also want to correct some of the indentation by hand and break
1160 long lines.  (The conversion programs don't write lines longer than
1161 eighty characters in any case.)
1162 @end itemize
1163
1164 @node Non-bugs
1165 @section Certain Changes We Don't Want to Make
1166
1167 This section lists changes that people frequently request, but which
1168 we do not make because we think GCC is better without them.
1169
1170 @itemize @bullet
1171 @item
1172 Checking the number and type of arguments to a function which has an
1173 old-fashioned definition and no prototype.
1174
1175 Such a feature would work only occasionally---only for calls that appear
1176 in the same file as the called function, following the definition.  The
1177 only way to check all calls reliably is to add a prototype for the
1178 function.  But adding a prototype eliminates the motivation for this
1179 feature.  So the feature is not worthwhile.
1180
1181 @item
1182 Warning about using an expression whose type is signed as a shift count.
1183
1184 Shift count operands are probably signed more often than unsigned.
1185 Warning about this would cause far more annoyance than good.
1186
1187 @item
1188 Warning about assigning a signed value to an unsigned variable.
1189
1190 Such assignments must be very common; warning about them would cause
1191 more annoyance than good.
1192
1193 @item
1194 Warning when a non-void function value is ignored.
1195
1196 Coming as I do from a Lisp background, I balk at the idea that there is
1197 something dangerous about discarding a value.  There are functions that
1198 return values which some callers may find useful; it makes no sense to
1199 clutter the program with a cast to @code{void} whenever the value isn't
1200 useful.
1201
1202 @item
1203 @opindex fshort-enums
1204 Making @option{-fshort-enums} the default.
1205
1206 This would cause storage layout to be incompatible with most other C
1207 compilers.  And it doesn't seem very important, given that you can get
1208 the same result in other ways.  The case where it matters most is when
1209 the enumeration-valued object is inside a structure, and in that case
1210 you can specify a field width explicitly.
1211
1212 @item
1213 Making bit-fields unsigned by default on particular machines where ``the
1214 ABI standard'' says to do so.
1215
1216 The ISO C standard leaves it up to the implementation whether a bit-field
1217 declared plain @code{int} is signed or not.  This in effect creates two
1218 alternative dialects of C@.
1219
1220 @opindex fsigned-bitfields
1221 @opindex funsigned-bitfields
1222 The GNU C compiler supports both dialects; you can specify the signed
1223 dialect with @option{-fsigned-bitfields} and the unsigned dialect with
1224 @option{-funsigned-bitfields}.  However, this leaves open the question of
1225 which dialect to use by default.
1226
1227 Currently, the preferred dialect makes plain bit-fields signed, because
1228 this is simplest.  Since @code{int} is the same as @code{signed int} in
1229 every other context, it is cleanest for them to be the same in bit-fields
1230 as well.
1231
1232 Some computer manufacturers have published Application Binary Interface
1233 standards which specify that plain bit-fields should be unsigned.  It is
1234 a mistake, however, to say anything about this issue in an ABI@.  This is
1235 because the handling of plain bit-fields distinguishes two dialects of C@.
1236 Both dialects are meaningful on every type of machine.  Whether a
1237 particular object file was compiled using signed bit-fields or unsigned
1238 is of no concern to other object files, even if they access the same
1239 bit-fields in the same data structures.
1240
1241 A given program is written in one or the other of these two dialects.
1242 The program stands a chance to work on most any machine if it is
1243 compiled with the proper dialect.  It is unlikely to work at all if
1244 compiled with the wrong dialect.
1245
1246 Many users appreciate the GNU C compiler because it provides an
1247 environment that is uniform across machines.  These users would be
1248 inconvenienced if the compiler treated plain bit-fields differently on
1249 certain machines.
1250
1251 Occasionally users write programs intended only for a particular machine
1252 type.  On these occasions, the users would benefit if the GNU C compiler
1253 were to support by default the same dialect as the other compilers on
1254 that machine.  But such applications are rare.  And users writing a
1255 program to run on more than one type of machine cannot possibly benefit
1256 from this kind of compatibility.
1257
1258 This is why GCC does and will treat plain bit-fields in the same
1259 fashion on all types of machines (by default).
1260
1261 There are some arguments for making bit-fields unsigned by default on all
1262 machines.  If, for example, this becomes a universal de facto standard,
1263 it would make sense for GCC to go along with it.  This is something
1264 to be considered in the future.
1265
1266 (Of course, users strongly concerned about portability should indicate
1267 explicitly in each bit-field whether it is signed or not.  In this way,
1268 they write programs which have the same meaning in both C dialects.)
1269
1270 @item
1271 @opindex ansi
1272 @opindex std
1273 Undefining @code{__STDC__} when @option{-ansi} is not used.
1274
1275 Currently, GCC defines @code{__STDC__} unconditionally.  This provides
1276 good results in practice.
1277
1278 Programmers normally use conditionals on @code{__STDC__} to ask whether
1279 it is safe to use certain features of ISO C, such as function
1280 prototypes or ISO token concatenation.  Since plain @command{gcc} supports
1281 all the features of ISO C, the correct answer to these questions is
1282 ``yes''.
1283
1284 Some users try to use @code{__STDC__} to check for the availability of
1285 certain library facilities.  This is actually incorrect usage in an ISO
1286 C program, because the ISO C standard says that a conforming
1287 freestanding implementation should define @code{__STDC__} even though it
1288 does not have the library facilities.  @samp{gcc -ansi -pedantic} is a
1289 conforming freestanding implementation, and it is therefore required to
1290 define @code{__STDC__}, even though it does not come with an ISO C
1291 library.
1292
1293 Sometimes people say that defining @code{__STDC__} in a compiler that
1294 does not completely conform to the ISO C standard somehow violates the
1295 standard.  This is illogical.  The standard is a standard for compilers
1296 that claim to support ISO C, such as @samp{gcc -ansi}---not for other
1297 compilers such as plain @command{gcc}.  Whatever the ISO C standard says
1298 is relevant to the design of plain @command{gcc} without @option{-ansi} only
1299 for pragmatic reasons, not as a requirement.
1300
1301 GCC normally defines @code{__STDC__} to be 1, and in addition
1302 defines @code{__STRICT_ANSI__} if you specify the @option{-ansi} option,
1303 or a @option{-std} option for strict conformance to some version of ISO C@.
1304 On some hosts, system include files use a different convention, where
1305 @code{__STDC__} is normally 0, but is 1 if the user specifies strict
1306 conformance to the C Standard.  GCC follows the host convention when
1307 processing system include files, but when processing user files it follows
1308 the usual GNU C convention.
1309
1310 @item
1311 Undefining @code{__STDC__} in C++.
1312
1313 Programs written to compile with C++-to-C translators get the
1314 value of @code{__STDC__} that goes with the C compiler that is
1315 subsequently used.  These programs must test @code{__STDC__}
1316 to determine what kind of C preprocessor that compiler uses:
1317 whether they should concatenate tokens in the ISO C fashion
1318 or in the traditional fashion.
1319
1320 These programs work properly with GNU C++ if @code{__STDC__} is defined.
1321 They would not work otherwise.
1322
1323 In addition, many header files are written to provide prototypes in ISO
1324 C but not in traditional C@.  Many of these header files can work without
1325 change in C++ provided @code{__STDC__} is defined.  If @code{__STDC__}
1326 is not defined, they will all fail, and will all need to be changed to
1327 test explicitly for C++ as well.
1328
1329 @item
1330 Deleting ``empty'' loops.
1331
1332 Historically, GCC has not deleted ``empty'' loops under the
1333 assumption that the most likely reason you would put one in a program is
1334 to have a delay, so deleting them will not make real programs run any
1335 faster.
1336
1337 However, the rationale here is that optimization of a nonempty loop
1338 cannot produce an empty one, which holds for C but is not always the
1339 case for C++.
1340
1341 @opindex funroll-loops
1342 Moreover, with @option{-funroll-loops} small ``empty'' loops are already
1343 removed, so the current behavior is both sub-optimal and inconsistent
1344 and will change in the future.
1345
1346 @item
1347 Making side effects happen in the same order as in some other compiler.
1348
1349 @cindex side effects, order of evaluation
1350 @cindex order of evaluation, side effects
1351 It is never safe to depend on the order of evaluation of side effects.
1352 For example, a function call like this may very well behave differently
1353 from one compiler to another:
1354
1355 @example
1356 void func (int, int);
1357
1358 int i = 2;
1359 func (i++, i++);
1360 @end example
1361
1362 There is no guarantee (in either the C or the C++ standard language
1363 definitions) that the increments will be evaluated in any particular
1364 order.  Either increment might happen first.  @code{func} might get the
1365 arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}.
1366
1367 @item
1368 Not allowing structures with volatile fields in registers.
1369
1370 Strictly speaking, there is no prohibition in the ISO C standard
1371 against allowing structures with volatile fields in registers, but
1372 it does not seem to make any sense and is probably not what you wanted
1373 to do.  So the compiler will give an error message in this case.
1374
1375 @item
1376 Making certain warnings into errors by default.
1377
1378 Some ISO C testsuites report failure when the compiler does not produce
1379 an error message for a certain program.
1380
1381 @opindex pedantic-errors
1382 ISO C requires a ``diagnostic'' message for certain kinds of invalid
1383 programs, but a warning is defined by GCC to count as a diagnostic.  If
1384 GCC produces a warning but not an error, that is correct ISO C support.
1385 If test suites call this ``failure'', they should be run with the GCC
1386 option @option{-pedantic-errors}, which will turn these warnings into
1387 errors.
1388
1389 @end itemize
1390
1391 @node Warnings and Errors
1392 @section Warning Messages and Error Messages
1393
1394 @cindex error messages
1395 @cindex warnings vs errors
1396 @cindex messages, warning and error
1397 The GNU compiler can produce two kinds of diagnostics: errors and
1398 warnings.  Each kind has a different purpose:
1399
1400 @itemize @w{}
1401 @item
1402 @dfn{Errors} report problems that make it impossible to compile your
1403 program.  GCC reports errors with the source file name and line
1404 number where the problem is apparent.
1405
1406 @item
1407 @dfn{Warnings} report other unusual conditions in your code that
1408 @emph{may} indicate a problem, although compilation can (and does)
1409 proceed.  Warning messages also report the source file name and line
1410 number, but include the text @samp{warning:} to distinguish them
1411 from error messages.
1412 @end itemize
1413
1414 Warnings may indicate danger points where you should check to make sure
1415 that your program really does what you intend; or the use of obsolete
1416 features; or the use of nonstandard features of GNU C or C++.  Many
1417 warnings are issued only if you ask for them, with one of the @option{-W}
1418 options (for instance, @option{-Wall} requests a variety of useful
1419 warnings).
1420
1421 @opindex pedantic
1422 @opindex pedantic-errors
1423 GCC always tries to compile your program if possible; it never
1424 gratuitously rejects a program whose meaning is clear merely because
1425 (for instance) it fails to conform to a standard.  In some cases,
1426 however, the C and C++ standards specify that certain extensions are
1427 forbidden, and a diagnostic @emph{must} be issued by a conforming
1428 compiler.  The @option{-pedantic} option tells GCC to issue warnings in
1429 such cases; @option{-pedantic-errors} says to make them errors instead.
1430 This does not mean that @emph{all} non-ISO constructs get warnings
1431 or errors.
1432
1433 @xref{Warning Options,,Options to Request or Suppress Warnings}, for
1434 more detail on these and related command-line options.