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