OSDN Git Service

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