OSDN Git Service

* doc/extend.texi, doc/gcc.texi, doc/install.texi, doc/tm.texi:
[pf3gnuchains/gcc-fork.git] / gcc / doc / gcc.texi
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename gcc.info
4 @c @setfilename usegcc.info
5 @c @setfilename portgcc.info
6 @c To produce the full manual, use the "gcc.info" setfilename, and
7 @c make sure the following do NOT begin with '@c' (and the @clear lines DO)
8 @set INTERNALS
9 @set USING
10 @c To produce a user-only manual, use the "usegcc.info" setfilename, and
11 @c make sure the following does NOT begin with '@c':
12 @c @clear INTERNALS
13 @c To produce a porter-only manual, use the "portgcc.info" setfilename,
14 @c and make sure the following does NOT begin with '@c':
15 @c @clear USING
16
17 @c (For FSF printing, turn on smallbook, comment out finalout below;
18 @c that is all that is needed.)
19
20 @c 6/27/96 FSF DO wants smallbook fmt for 1st bound edition.
21 @c @smallbook
22
23 @c i also commented out the finalout command, so if there *are* any
24 @c overfulls, you'll (hopefully) see the rectangle in the right hand
25 @c margin. -mew 15june93
26 @c @finalout
27
28 @c NOTE: checks/things to do:
29 @c
30 @c -have bob do a search in all seven files for "mew" (ideally --mew,
31 @c  but i may have forgotten the occasional "--"..).
32 @c     Just checked... all have `--'!  Bob 22Jul96
33 @c     Use this to search:   grep -n '\-\-mew' *.texi
34 @c -item/itemx, text after all (sub/sub)section titles, etc..
35 @c -consider putting the lists of options on pp 17--> etc in columns or
36 @c  some such.
37 @c -overfulls.  do a search for "mew" in the files, and you will see
38 @c   overfulls that i noted but could not deal with.
39 @c -have to add text:  beginning of chapter 8
40
41 @c
42 @c anything else?                       --mew 10feb93
43
44 @c For consistency, use the following:
45 @c - "32-bit" rather than "32 bit" as an adjective.
46 @c - American rather than British spelling (in particular -or and -ize).
47 @c - "back end" as a noun, "back-end" as an adjective.
48 @c - "bit-field" not "bitfield" or "bit field" (following the C and C++
49 @c   standards).
50 @c - "built-in" as an adjective ("built-in function"), or sometimes
51 @c   "built in", not "builtin" (which isn't a word).
52 @c - "dependent" as an adjective, and "dependency".
53 @c - "front end" as a noun, "front-end" as an adjective.
54 @c - "GCC" for the GNU Compiler Collection, both generally
55 @c   and as the GNU C Compiler in the context of compiling C;
56 @c   "G++" for the C++ compiler; "gcc" and "g++" (lowercase),
57 @c   marked up with @command, for the commands for compilation when the
58 @c   emphasis is on those; "GNU C" and "GNU C++" for language dialects;
59 @c   and try to avoid the older term "GNU CC".
60 @c - "nonzero" rather than "non-zero".
61 @c - "@code{NULL}" rather than "NULL".
62 @c - "Objective-C" rather than "Objective C".
63
64 @macro gcctabopt{body}
65 @code{\body\}
66 @end macro
67 @macro gccoptlist{body}
68 @smallexample
69 \body\
70 @end smallexample
71 @end macro
72 @c Makeinfo handles the above macro OK, TeX needs manual line breaks;
73 @c they get lost at some point in handling the macro.  But if @macro is
74 @c used here rather than @alias, it produces double line breaks.
75 @iftex
76 @alias gol = *
77 @end iftex
78 @ifnottex
79 @macro gol
80 @end macro
81 @end ifnottex
82
83 @ifset INTERNALS
84 @ifset USING
85 @settitle Using and Porting the GNU Compiler Collection (GCC)
86 @end ifset
87 @end ifset
88 @c seems reasonable to assume at least one of INTERNALS or USING is set...
89 @ifclear INTERNALS
90 @settitle Using the GNU Compiler Collection
91 @end ifclear
92 @ifclear USING
93 @settitle Porting the GNU Compiler Collection
94 @end ifclear
95
96 @c Create a separate index for command line options.
97 @defcodeindex op
98 @c Merge the standard indexes into a single one.
99 @syncodeindex fn cp
100 @syncodeindex vr cp
101 @syncodeindex ky cp
102 @syncodeindex pg cp
103 @syncodeindex tp cp
104
105 @c %**end of header
106
107 @c Use with @@smallbook.
108
109 @c Cause even numbered pages to be printed on the left hand side of
110 @c the page and odd numbered pages to be printed on the right hand
111 @c side of the page.  Using this, you can print on both sides of a
112 @c sheet of paper and have the text on the same part of the sheet.
113
114 @c The text on right hand pages is pushed towards the right hand
115 @c margin and the text on left hand pages is pushed toward the left
116 @c hand margin.
117 @c (To provide the reverse effect, set bindingoffset to -0.75in.)
118
119 @c @tex
120 @c \global\bindingoffset=0.75in
121 @c \global\normaloffset =0.75in
122 @c @end tex
123
124 @c Change the font used for @def... commands, since the default
125 @c proportional one used is bad for names starting __.
126 @tex
127 \global\setfont\defbf\ttbshape{10}{\magstep1}
128 @end tex
129
130 @ifnottex
131 @dircategory Programming
132 @direntry
133 * gcc: (gcc).                  The GNU Compiler Collection.
134 @end direntry
135 @ifset INTERNALS
136 @ifset USING
137 This file documents the use and the internals of the GNU compiler.
138 @end ifset
139 @end ifset
140 @ifclear USING
141 This file documents the internals of the GNU compiler.
142 @end ifclear
143 @ifclear INTERNALS
144 This file documents the use of the GNU compiler.
145 @end ifclear
146 @sp 1
147 Published by the Free Software Foundation@*
148 59 Temple Place - Suite 330@*
149 Boston, MA 02111-1307 USA
150 @sp 1
151 @c When you update the list of years below, search for copyright{} and
152 @c update the other copy too.
153 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
154 1999, 2000, 2001 Free Software Foundation, Inc.
155 @sp 1
156 Permission is granted to copy, distribute and/or modify this document
157 under the terms of the GNU Free Documentation License, Version 1.1 or
158 any later version published by the Free Software Foundation; with the
159 Invariant Sections being ``GNU General Public License'' and ``Funding
160 Free Software'', the Front-Cover texts being (a) (see below), and with
161 the Back-Cover Texts being (b) (see below).  A copy of the license is
162 included in the section entitled ``GNU Free Documentation License''.
163
164 (a) The FSF's Front-Cover Text is:
165
166      A GNU Manual
167
168 (b) The FSF's Back-Cover Text is:
169
170      You have freedom to copy and modify this GNU Manual, like GNU
171      software.  Copies published by the Free Software Foundation raise
172      funds for GNU development.
173 @end ifnottex
174
175 @setchapternewpage odd
176 @c @finalout
177 @titlepage
178 @ifset INTERNALS
179 @ifset USING
180 @center @titlefont{Using and Porting the GNU Compiler Collection}
181
182 @end ifset
183 @end ifset
184 @ifclear INTERNALS
185 @title Using the GNU Compiler Collection
186 @end ifclear
187 @ifclear USING
188 @title Porting the GNU Compiler Collection
189 @end ifclear
190 @sp 2
191 @center Richard M. Stallman
192 @sp 3
193 @center Last updated 22 June 2001
194 @sp 1
195 @c The version number appears five times more in this file.
196
197 @center for GCC 3.1
198 @page
199 @vskip 0pt plus 1filll
200 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
201 1999, 2000, 2001  Free Software Foundation, Inc.
202 @sp 2
203 For GCC Version 3.1@*
204 @sp 1
205 Published by the Free Software Foundation @*
206 59 Temple Place---Suite 330@*
207 Boston, MA 02111-1307, USA@*
208 Last printed April, 1998.@*
209 Printed copies are available for $50 each.@*
210 ISBN 1-882114-37-X
211 @sp 1
212 Permission is granted to copy, distribute and/or modify this document
213 under the terms of the GNU Free Documentation License, Version 1.1 or
214 any later version published by the Free Software Foundation; with the
215 Invariant Sections being ``GNU General Public License'', the Front-Cover
216 texts being (a) (see below), and with the Back-Cover Texts being (b)
217 (see below).  A copy of the license is included in the section entitled
218 ``GNU Free Documentation License''.
219
220 (a) The FSF's Front-Cover Text is:
221
222      A GNU Manual
223
224 (b) The FSF's Back-Cover Text is:
225
226      You have freedom to copy and modify this GNU Manual, like GNU
227      software.  Copies published by the Free Software Foundation raise
228      funds for GNU development.
229 @end titlepage
230 @summarycontents
231 @contents
232 @page
233
234 @node Top, G++ and GCC,, (DIR)
235 @top Introduction
236 @cindex introduction
237
238 @ifset INTERNALS
239 @ifset USING
240 This manual documents how to run, install and port the GNU
241 compiler, as well as its new features and incompatibilities, and how to
242 report bugs.  It corresponds to GCC version 3.1.
243 @end ifset
244 @end ifset
245
246 @ifclear INTERNALS
247 This manual documents how to run and install the GNU compiler,
248 as well as its new features and incompatibilities, and how to report
249 bugs.  It corresponds to GCC version 3.1.
250 @end ifclear
251 @ifclear USING
252 This manual documents how to port the GNU compiler,
253 as well as its new features and incompatibilities, and how to report
254 bugs.  It corresponds to GCC version 3.1.
255 @end ifclear
256
257 @menu
258 @ifset USING
259 * G++ and GCC::     You can compile C or C++ programs.
260 * Standards::       Language standards supported by GCC.
261 * Invoking GCC::    Command options supported by @samp{gcc}.
262 * Installation::    How to configure, compile and install GCC.
263 * C Implementation:: How GCC implements the ISO C specification.
264 * C Extensions::    GNU extensions to the C language family.
265 * C++ Extensions::  GNU extensions to the C++ language.
266 * Objective-C::     GNU Objective-C runtime features.
267 * Gcov::            gcov: a GCC test coverage program.
268 * Trouble::         If you have trouble installing GCC.
269 * Bugs::            How, why and where to report bugs.
270 * Service::         How to find suppliers of support for GCC.
271 * Contributing::    How to contribute to testing and developing GCC.
272 * VMS::             Using GCC on VMS.
273 * Makefile::        Additional Makefile and configure information.
274 @end ifset
275 @ifset INTERNALS
276 * Portability::     Goals of GCC's portability features.
277 * Interface::       Function-call interface of GCC output.
278 * Passes::          Order of passes, what they do, and what each file is for.
279 * Trees::           The source representation used by the C and C++ front ends.
280 * RTL::             The intermediate representation that most passes work on.
281 * Machine Desc::    How to write machine description instruction patterns.
282 * Target Macros::   How to write the machine description C macros and functions.
283 * Config::          Writing the @file{xm-@var{machine}.h} file.
284 * Fragments::       Writing the @file{t-@var{target}} and @file{x-@var{host}} files.
285 @end ifset
286
287 * Funding::         How to help assure funding for free software.
288 * GNU/Linux::       Linux and the GNU Project
289
290 * Copying::         GNU General Public License says
291                      how you can copy and share GCC.
292 * GNU Free Documentation License:: How you can copy and share this manual.
293 * Contributors::    People who have contributed to GCC.
294
295 * Option Index::    Index to command line options.
296 * Index::           Index of concepts and symbol names.
297 @end menu
298
299 @ifset USING
300 @node G++ and GCC
301 @chapter Compile C, C++, Objective-C, Ada, CHILL, Fortran, or Java
302
303 @cindex Objective-C
304 @cindex Fortran
305 @cindex Java
306 @cindex CHILL
307 @cindex Ada
308 Several versions of the compiler (C, C++, Objective-C, Ada, CHILL,
309 Fortran, and Java) are integrated; this is why we use the name
310 ``GNU Compiler Collection''.  GCC can compile programs written in any of these
311 languages.  The Ada, CHILL, Fortran, and Java compilers are described in
312 separate manuals.
313
314 @cindex GCC
315 ``GCC'' is a common shorthand term for the GNU Compiler Collection.  This is both
316 the most general name for the compiler, and the name used when the
317 emphasis is on compiling C programs (as the abbreviation formerly
318 stood for ``GNU C Compiler'').
319
320 @cindex C++
321 @cindex G++
322 When referring to C++ compilation, it is usual to call the compiler
323 ``G++''.  Since there is only one compiler, it is also accurate to call
324 it ``GCC'' no matter what the language context; however, the term
325 ``G++'' is more useful when the emphasis is on compiling C++ programs.
326
327 @cindex Ada
328 @cindex GNAT
329 Similarly, when we talk about Ada compilation, we usually call the
330 compiler ``GNAT'', for the same reasons.
331
332 We use the name ``GCC'' to refer to the compilation system as a
333 whole, and more specifically to the language-independent part of the
334 compiler.  For example, we refer to the optimization options as
335 affecting the behavior of ``GCC'' or sometimes just ``the compiler''.
336
337 Front ends for other languages, such as Mercury and Pascal exist but
338 have not yet been integrated into GCC@.  These front ends, like that for C++,
339 are built in subdirectories of GCC and link to it.  The result is an
340 integrated compiler that can compile programs written in C, C++,
341 Objective-C, or any of the languages for which you have installed front
342 ends.
343
344 In this manual, we only discuss the options for the C, Objective-C, and
345 C++ compilers and those of the GCC core.  Consult the documentation
346 of the other front ends for the options to use when compiling programs
347 written in other languages.
348
349 @cindex compiler compared to C++ preprocessor
350 @cindex intermediate C version, nonexistent
351 @cindex C intermediate output, nonexistent
352 G++ is a @emph{compiler}, not merely a preprocessor.  G++ builds object
353 code directly from your C++ program source.  There is no intermediate C
354 version of the program.  (By contrast, for example, some other
355 implementations use a program that generates a C program from your C++
356 source.)  Avoiding an intermediate C representation of the program means
357 that you get better object code, and better debugging information.  The
358 GNU debugger, GDB, works with this information in the object code to
359 give you comprehensive C++ source-level editing capabilities
360 (@pxref{C,,C and C++,gdb.info, Debugging with GDB}).
361
362 @c FIXME!  Someone who knows something about Objective-C ought to put in
363 @c a paragraph or two about it here, and move the index entry down when
364 @c there is more to point to than the general mention in the 1st par.
365
366 @node Standards
367 @chapter Language Standards Supported by GCC
368 @cindex C standard
369 @cindex C standards
370 @cindex ANSI C standard
371 @cindex ANSI C
372 @cindex ANSI C89
373 @cindex C89
374 @cindex ANSI X3.159-1989
375 @cindex X3.159-1989
376 @cindex ISO C standard
377 @cindex ISO C
378 @cindex ISO C89
379 @cindex ISO C90
380 @cindex ISO/IEC 9899
381 @cindex ISO 9899
382 @cindex C90
383 @cindex ISO C94
384 @cindex C94
385 @cindex ISO C95
386 @cindex C95
387 @cindex ISO C99
388 @cindex C99
389 @cindex ISO C9X
390 @cindex C9X
391 @cindex Technical Corrigenda
392 @cindex TC1
393 @cindex Technical Corrigendum 1
394 @cindex TC2
395 @cindex Technical Corrigendum 2
396 @cindex AMD1
397 @cindex freestanding implementation
398 @cindex freestanding environment
399 @cindex hosted implementation
400 @cindex hosted environment
401 @findex __STDC_HOSTED__
402
403 For each language compiled by GCC for which there is a standard, GCC
404 attempts to follow one or more versions of that standard, possibly
405 with some exceptions, and possibly with some extensions.
406
407 GCC supports three versions of the C standard, although support for
408 the most recent version is not yet complete.
409
410 @opindex std
411 @opindex ansi
412 @opindex pedantic
413 @opindex pedantic-errors
414 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
415 published in 1990.  This standard was ratified as an ISO standard
416 (ISO/IEC 9899:1990) later in 1990.  There were no technical
417 differences between these publications, although the sections of the
418 ANSI standard were renumbered and became clauses in the ISO standard.
419 This standard, in both its forms, is commonly known as @dfn{C89}, or
420 occasionally as @dfn{C90}, from the dates of ratification.  The ANSI
421 standard, but not the ISO standard, also came with a Rationale
422 document.  To select this standard in GCC, use one of the options
423 @option{-ansi}, @option{-std=c89} or @option{-std=iso9899:1990}; to obtain
424 all the diagnostics required by the standard, you should also specify
425 @option{-pedantic} (or @option{-pedantic-errors} if you want them to be
426 errors rather than warnings).  @xref{C Dialect Options,,Options
427 Controlling C Dialect}.
428
429 Errors in the 1990 ISO C standard were corrected in two Technical
430 Corrigenda published in 1994 and 1996.  GCC does not support the
431 uncorrected version.
432
433 An amendment to the 1990 standard was published in 1995.  This
434 amendment added digraphs and @code{__STDC_VERSION__} to the language,
435 but otherwise concerned the library.  This amendment is commonly known
436 as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or
437 @dfn{C95}.  To select this standard in GCC, use the option
438 @option{-std=iso9899:199409} (with, as for other standard versions,
439 @option{-pedantic} to receive all required diagnostics).
440
441 A new edition of the ISO C standard was published in 1999 as ISO/IEC
442 9899:1999, and is commonly known as @dfn{C99}.  GCC has incomplete
443 support for this standard version; see
444 @uref{http://gcc.gnu.org/c99status.html} for details.  To select this
445 standard, use @option{-std=c99} or @option{-std=iso9899:1999}.  (While in
446 development, drafts of this standard version were referred to as
447 @dfn{C9X}.)
448
449 @opindex traditional
450 GCC also has some limited support for traditional (pre-ISO) C with the
451 @option{-traditional} option.  This support may be of use for compiling
452 some very old programs that have not been updated to ISO C, but should
453 not be used for new programs.  It will not work with some modern C
454 libraries such as the GNU C library.
455
456 By default, GCC provides some extensions to the C language that on
457 rare occasions conflict with the C standard.  @xref{C
458 Extensions,,Extensions to the C Language Family}.  Use of the
459 @option{-std} options listed above will disable these extensions where
460 they conflict with the C standard version selected.  You may also
461 select an extended version of the C language explicitly with
462 @option{-std=gnu89} (for C89 with GNU extensions) or @option{-std=gnu99}
463 (for C99 with GNU extensions).  The default, if no C language dialect
464 options are given, is @option{-std=gnu89}; this will change to
465 @option{-std=gnu99} in some future release when the C99 support is
466 complete.  Some features that are part of the C99 standard are
467 accepted as extensions in C89 mode.
468
469 The ISO C standard defines (in clause 4) two classes of conforming
470 implementation.  A @dfn{conforming hosted implementation} supports the
471 whole standard including all the library facilities; a @dfn{conforming
472 freestanding implementation} is only required to provide certain
473 library facilities: those in @code{<float.h>}, @code{<limits.h>},
474 @code{<stdarg.h>}, and @code{<stddef.h>}; since AMD1, also those in
475 @code{<iso646.h>}; and in C99, also those in @code{<stdbool.h>} and
476 @code{<stdint.h>}.  In addition, complex types, added in C99, are not
477 required for freestanding implementations.  The standard also defines
478 two environments for programs, a @dfn{freestanding environment},
479 required of all implementations and which may not have library
480 facilities beyond those required of freestanding implementations,
481 where the handling of program startup and termination are
482 implementation-defined, and a @dfn{hosted environment}, which is not
483 required, in which all the library facilities are provided and startup
484 is through a function @code{int main (void)} or @code{int main (int,
485 char *[])}.  An OS kernel would be a freestanding environment; a
486 program using the facilities of an operating system would normally be
487 in a hosted implementation.
488
489 @opindex ffreestanding
490 GCC aims towards being usable as a conforming freestanding
491 implementation, or as the compiler for a conforming hosted
492 implementation.  By default, it will act as the compiler for a hosted
493 implementation, defining @code{__STDC_HOSTED__} as @code{1} and
494 presuming that when the names of ISO C functions are used, they have
495 the semantics defined in the standard.  To make it act as a conforming
496 freestanding implementation for a freestanding environment, use the
497 option @option{-ffreestanding}; it will then define
498 @code{__STDC_HOSTED__} to @code{0} and not make assumptions about the
499 meanings of function names from the standard library.  To build an OS
500 kernel, you may well still need to make your own arrangements for
501 linking and startup.  @xref{C Dialect Options,,Options Controlling C
502 Dialect}.
503
504 GCC does not provide the library facilities required only of hosted
505 implementations, nor yet all the facilities required by C99 of
506 freestanding implementations; to use the facilities of a hosted
507 environment, you will need to find them elsewhere (for example, in the
508 GNU C library).  @xref{Standard Libraries,,Standard Libraries}.
509
510 For references to Technical Corrigenda, Rationale documents and
511 information concerning the history of C that is available online, see
512 @uref{http://gcc.gnu.org/readings.html}
513
514 @c FIXME: details of C++ standard.
515
516 There is no formal written standard for Objective-C@.  The most
517 authoritative manual is ``Object-Oriented Programming and the
518 Objective-C Language'', available at a number of web sites;
519 @uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/} has a
520 recent version, while @uref{http://www.toodarkpark.org/computers/objc/}
521 is an older example.  @uref{http://www.gnustep.org} includes useful
522 information as well.
523
524 @xref{Top, GNAT Reference Manual, About This Guide, gnat_rm, 
525 GNAT Reference Manual}, for information on standard
526 conformance and compatibility of the Ada compiler.
527
528 @xref{References,,Language Definition References, chill, GNU Chill},
529 for details of the CHILL standard.
530
531 @xref{Language,,The GNU Fortran Language, g77, Using and Porting GNU
532 Fortran}, for details of the Fortran language supported by GCC@.
533
534 @xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj},
535 for details of compatibility between @code{gcj} and the Java Platform.
536
537 @include invoke.texi
538
539 @include install-old.texi
540
541 @include extend.texi
542
543 @include objc.texi
544
545 @include gcov.texi
546
547 @node Trouble
548 @chapter Known Causes of Trouble with GCC
549 @cindex bugs, known
550 @cindex installation trouble
551 @cindex known causes of trouble
552
553 This section describes known problems that affect users of GCC@.  Most
554 of these are not GCC bugs per se---if they were, we would fix them.
555 But the result for a user may be like the result of a bug.
556
557 Some of these problems are due to bugs in other software, some are
558 missing features that are too much work to add, and some are places
559 where people's opinions differ as to what is best.
560
561 @menu
562 * Actual Bugs::               Bugs we will fix later.
563 * Cross-Compiler Problems::   Common problems of cross compiling with GCC.
564 * Interoperation::      Problems using GCC with other compilers,
565                            and with certain linkers, assemblers and debuggers.
566 * External Bugs::       Problems compiling certain programs.
567 * Incompatibilities::   GCC is incompatible with traditional C.
568 * Fixed Headers::       GCC uses corrected versions of system header files.
569                            This is necessary, but doesn't always work smoothly.
570 * Standard Libraries::  GCC uses the system C library, which might not be
571                            compliant with the ISO C standard.
572 * Disappointments::     Regrettable things we can't change, but not quite bugs.
573 * C++ Misunderstandings::     Common misunderstandings with GNU C++.
574 * Protoize Caveats::    Things to watch out for when using @code{protoize}.
575 * Non-bugs::            Things we think are right, but some others disagree.
576 * Warnings and Errors:: Which problems in your code get warnings,
577                          and which get errors.
578 @end menu
579
580 @node Actual Bugs
581 @section Actual Bugs We Haven't Fixed Yet
582
583 @itemize @bullet
584 @item
585 The @code{fixincludes} script interacts badly with automounters; if the
586 directory of system header files is automounted, it tends to be
587 unmounted while @code{fixincludes} is running.  This would seem to be a
588 bug in the automounter.  We don't know any good way to work around it.
589
590 @item
591 The @code{fixproto} script will sometimes add prototypes for the
592 @code{sigsetjmp} and @code{siglongjmp} functions that reference the
593 @code{jmp_buf} type before that type is defined.  To work around this,
594 edit the offending file and place the typedef in front of the
595 prototypes.
596
597 @item
598 @opindex pedantic-errors
599 When @option{-pedantic-errors} is specified, GCC will incorrectly give
600 an error message when a function name is specified in an expression
601 involving the comma operator.
602 @end itemize
603
604 @node Cross-Compiler Problems
605 @section Cross-Compiler Problems
606
607 You may run into problems with cross compilation on certain machines,
608 for several reasons.
609
610 @itemize @bullet
611 @item
612 Cross compilation can run into trouble for certain machines because
613 some target machines' assemblers require floating point numbers to be
614 written as @emph{integer} constants in certain contexts.
615
616 The compiler writes these integer constants by examining the floating
617 point value as an integer and printing that integer, because this is
618 simple to write and independent of the details of the floating point
619 representation.  But this does not work if the compiler is running on
620 a different machine with an incompatible floating point format, or
621 even a different byte-ordering.
622
623 In addition, correct constant folding of floating point values
624 requires representing them in the target machine's format.
625 (The C standard does not quite require this, but in practice
626 it is the only way to win.)
627
628 It is now possible to overcome these problems by defining macros such
629 as @code{REAL_VALUE_TYPE}.  But doing so is a substantial amount of
630 work for each target machine.
631 @ifset INTERNALS
632 @xref{Cross-compilation}.
633 @end ifset
634 @ifclear INTERNALS
635 @xref{Cross-compilation,,Cross Compilation and Floating Point Format,
636 gcc.info, Using and Porting GCC}.
637 @end ifclear
638
639 @item
640 At present, the program @file{mips-tfile} which adds debug
641 support to object files on MIPS systems does not work in a cross
642 compile environment.
643 @end itemize
644
645 @node Interoperation
646 @section Interoperation
647
648 This section lists various difficulties encountered in using GCC
649 together with other compilers or with the assemblers, linkers,
650 libraries and debuggers on certain systems.
651
652 @itemize @bullet
653 @item
654 Objective-C does not work on the RS/6000.
655
656 @item
657 G++ does not do name mangling in the same way as other C++
658 compilers.  This means that object files compiled with one compiler
659 cannot be used with another.
660
661 This effect is intentional, to protect you from more subtle problems.
662 Compilers differ as to many internal details of C++ implementation,
663 including: how class instances are laid out, how multiple inheritance is
664 implemented, and how virtual function calls are handled.  If the name
665 encoding were made the same, your programs would link against libraries
666 provided from other compilers---but the programs would then crash when
667 run.  Incompatible libraries are then detected at link time, rather than
668 at run time.
669
670 @item
671 Older GDB versions sometimes fail to read the output of GCC version
672 2.  If you have trouble, get GDB version 4.4 or later.
673
674 @item
675 @cindex DBX
676 DBX rejects some files produced by GCC, though it accepts similar
677 constructs in output from PCC@.  Until someone can supply a coherent
678 description of what is valid DBX input and what is not, there is
679 nothing I can do about these problems.  You are on your own.
680
681 @item
682 The GNU assembler (GAS) does not support PIC@.  To generate PIC code, you
683 must use some other assembler, such as @file{/bin/as}.
684
685 @item
686 On some BSD systems, including some versions of Ultrix, use of profiling
687 causes static variable destructors (currently used only in C++) not to
688 be run.
689
690 @ignore
691 @cindex @code{vfork}, for the Sun-4
692 @item
693 There is a bug in @code{vfork} on the Sun-4 which causes the registers
694 of the child process to clobber those of the parent.  Because of this,
695 programs that call @code{vfork} are likely to lose when compiled
696 optimized with GCC when the child code alters registers which contain
697 C variables in the parent.  This affects variables which are live in the
698 parent across the call to @code{vfork}.
699
700 If you encounter this, you can work around the problem by declaring
701 variables @code{volatile} in the function that calls @code{vfork}, until
702 the problem goes away, or by not declaring them @code{register} and not
703 using @option{-O} for those source files.
704 @end ignore
705
706 @item
707 On some SGI systems, when you use @option{-lgl_s} as an option,
708 it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}.
709 Naturally, this does not happen when you use GCC@.
710 You must specify all three options explicitly.
711
712 @item
713 On a Sparc, GCC aligns all values of type @code{double} on an 8-byte
714 boundary, and it expects every @code{double} to be so aligned.  The Sun
715 compiler usually gives @code{double} values 8-byte alignment, with one
716 exception: function arguments of type @code{double} may not be aligned.
717
718 As a result, if a function compiled with Sun CC takes the address of an
719 argument of type @code{double} and passes this pointer of type
720 @code{double *} to a function compiled with GCC, dereferencing the
721 pointer may cause a fatal signal.
722
723 One way to solve this problem is to compile your entire program with GCC@.
724 Another solution is to modify the function that is compiled with
725 Sun CC to copy the argument into a local variable; local variables
726 are always properly aligned.  A third solution is to modify the function
727 that uses the pointer to dereference it via the following function
728 @code{access_double} instead of directly with @samp{*}:
729
730 @smallexample
731 inline double
732 access_double (double *unaligned_ptr)
733 @{
734   union d2i @{ double d; int i[2]; @};
735
736   union d2i *p = (union d2i *) unaligned_ptr;
737   union d2i u;
738
739   u.i[0] = p->i[0];
740   u.i[1] = p->i[1];
741
742   return u.d;
743 @}
744 @end smallexample
745
746 @noindent
747 Storing into the pointer can be done likewise with the same union.
748
749 @item
750 On Solaris, the @code{malloc} function in the @file{libmalloc.a} library
751 may allocate memory that is only 4 byte aligned.  Since GCC on the
752 Sparc assumes that doubles are 8 byte aligned, this may result in a
753 fatal signal if doubles are stored in memory allocated by the
754 @file{libmalloc.a} library.
755
756 The solution is to not use the @file{libmalloc.a} library.  Use instead
757 @code{malloc} and related functions from @file{libc.a}; they do not have
758 this problem.
759
760 @item
761 Sun forgot to include a static version of @file{libdl.a} with some
762 versions of SunOS (mainly 4.1).  This results in undefined symbols when
763 linking static binaries (that is, if you use @option{-static}).  If you
764 see undefined symbols @code{_dlclose}, @code{_dlsym} or @code{_dlopen}
765 when linking, compile and link against the file
766 @file{mit/util/misc/dlsym.c} from the MIT version of X windows.
767
768 @item
769 The 128-bit long double format that the Sparc port supports currently
770 works by using the architecturally defined quad-word floating point
771 instructions.  Since there is no hardware that supports these
772 instructions they must be emulated by the operating system.  Long
773 doubles do not work in Sun OS versions 4.0.3 and earlier, because the
774 kernel emulator uses an obsolete and incompatible format.  Long doubles
775 do not work in Sun OS version 4.1.1 due to a problem in a Sun library.
776 Long doubles do work on Sun OS versions 4.1.2 and higher, but GCC
777 does not enable them by default.  Long doubles appear to work in Sun OS
778 5.x (Solaris 2.x).
779
780 @item
781 On HP-UX version 9.01 on the HP PA, the HP compiler @code{cc} does not
782 compile GCC correctly.  We do not yet know why.  However, GCC
783 compiled on earlier HP-UX versions works properly on HP-UX 9.01 and can
784 compile itself properly on 9.01.
785
786 @item
787 On the HP PA machine, ADB sometimes fails to work on functions compiled
788 with GCC@.  Specifically, it fails to work on functions that use
789 @code{alloca} or variable-size arrays.  This is because GCC doesn't
790 generate HP-UX unwind descriptors for such functions.  It may even be
791 impossible to generate them.
792
793 @item
794 Debugging (@option{-g}) is not supported on the HP PA machine, unless you use
795 the preliminary GNU tools (@pxref{Installation}).
796
797 @item
798 Taking the address of a label may generate errors from the HP-UX
799 PA assembler.  GAS for the PA does not have this problem.
800
801 @item
802 Using floating point parameters for indirect calls to static functions
803 will not work when using the HP assembler.  There simply is no way for GCC
804 to specify what registers hold arguments for static functions when using
805 the HP assembler.  GAS for the PA does not have this problem.
806
807 @item
808 In extremely rare cases involving some very large functions you may
809 receive errors from the HP linker complaining about an out of bounds
810 unconditional branch offset.  This used to occur more often in previous
811 versions of GCC, but is now exceptionally rare.  If you should run
812 into it, you can work around by making your function smaller.
813
814 @item
815 GCC compiled code sometimes emits warnings from the HP-UX assembler of
816 the form:
817
818 @smallexample
819 (warning) Use of GR3 when
820   frame >= 8192 may cause conflict.
821 @end smallexample
822
823 These warnings are harmless and can be safely ignored.
824
825 @item
826 The current version of the assembler (@file{/bin/as}) for the RS/6000
827 has certain problems that prevent the @option{-g} option in GCC from
828 working.  Note that @file{Makefile.in} uses @option{-g} by default when
829 compiling @file{libgcc2.c}.
830
831 IBM has produced a fixed version of the assembler.  The upgraded
832 assembler unfortunately was not included in any of the AIX 3.2 update
833 PTF releases (3.2.2, 3.2.3, or 3.2.3e).  Users of AIX 3.1 should request
834 PTF U403044 from IBM and users of AIX 3.2 should request PTF U416277.
835 See the file @file{README.RS6000} for more details on these updates.
836
837 You can test for the presence of a fixed assembler by using the
838 command
839
840 @smallexample
841 as -u < /dev/null
842 @end smallexample
843
844 @noindent
845 If the command exits normally, the assembler fix already is installed.
846 If the assembler complains that @option{-u} is an unknown flag, you need to
847 order the fix.
848
849 @item
850 On the IBM RS/6000, compiling code of the form
851
852 @smallexample
853 extern int foo;
854
855 @dots{} foo @dots{}
856
857 static int foo;
858 @end smallexample
859
860 @noindent
861 will cause the linker to report an undefined symbol @code{foo}.
862 Although this behavior differs from most other systems, it is not a
863 bug because redefining an @code{extern} variable as @code{static}
864 is undefined in ISO C@.
865
866 @item
867 AIX on the RS/6000 provides support (NLS) for environments outside of
868 the United States.  Compilers and assemblers use NLS to support
869 locale-specific representations of various objects including
870 floating-point numbers (@samp{.} vs @samp{,} for separating decimal fractions).
871 There have been problems reported where the library linked with GCC does
872 not produce the same floating-point formats that the assembler accepts.
873 If you have this problem, set the @env{LANG} environment variable to
874 @samp{C} or @samp{En_US}.
875
876 @item
877 @opindex fdollars-in-identifiers
878 Even if you specify @option{-fdollars-in-identifiers},
879 you cannot successfully use @samp{$} in identifiers on the RS/6000 due
880 to a restriction in the IBM assembler.  GAS supports these
881 identifiers.
882
883 @item
884 On the RS/6000, XLC version 1.3.0.0 will miscompile @file{jump.c}.  XLC
885 version 1.3.0.1 or later fixes this problem.  You can obtain XLC-1.3.0.2
886 by requesting PTF 421749 from IBM@.
887
888 @item
889 @opindex mno-serialize-volatile
890 There is an assembler bug in versions of DG/UX prior to 5.4.2.01 that
891 occurs when the @samp{fldcr} instruction is used.  GCC uses
892 @samp{fldcr} on the 88100 to serialize volatile memory references.  Use
893 the option @option{-mno-serialize-volatile} if your version of the
894 assembler has this bug.
895
896 @item
897 On VMS, GAS versions 1.38.1 and earlier may cause spurious warning
898 messages from the linker.  These warning messages complain of mismatched
899 psect attributes.  You can ignore them.  @xref{VMS Install}.
900
901 @item
902 On NewsOS version 3, if you include both of the files @file{stddef.h}
903 and @file{sys/types.h}, you get an error because there are two typedefs
904 of @code{size_t}.  You should change @file{sys/types.h} by adding these
905 lines around the definition of @code{size_t}:
906
907 @smallexample
908 #ifndef _SIZE_T
909 #define _SIZE_T
910 @var{actual-typedef-here}
911 #endif
912 @end smallexample
913
914 @cindex Alliant
915 @item
916 On the Alliant, the system's own convention for returning structures
917 and unions is unusual, and is not compatible with GCC no matter
918 what options are used.
919
920 @cindex RT PC
921 @cindex IBM RT PC
922 @item
923 @opindex mhc-struct-return
924 On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different
925 convention for structure and union returning.  Use the option
926 @option{-mhc-struct-return} to tell GCC to use a convention compatible
927 with it.
928
929 @cindex VAX calling convention
930 @cindex Ultrix calling convention
931 @item
932 @opindex fcall-saved
933 On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved
934 by function calls.  However, the C compiler uses conventions compatible
935 with BSD Unix: registers 2 through 5 may be clobbered by function calls.
936
937 GCC uses the same convention as the Ultrix C compiler.  You can use
938 these options to produce code compatible with the Fortran compiler:
939
940 @smallexample
941 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
942 @end smallexample
943
944 @item
945 On the WE32k, you may find that programs compiled with GCC do not
946 work with the standard shared C library.  You may need to link with
947 the ordinary C compiler.  If you do so, you must specify the following
948 options:
949
950 @smallexample
951 -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.8.1 -lgcc -lc_s
952 @end smallexample
953
954 The first specifies where to find the library @file{libgcc.a}
955 specified with the @option{-lgcc} option.
956
957 GCC does linking by invoking @command{ld}, just as @command{cc} does, and
958 there is no reason why it @emph{should} matter which compilation program
959 you use to invoke @command{ld}.  If someone tracks this problem down,
960 it can probably be fixed easily.
961
962 @item
963 On the Alpha, you may get assembler errors about invalid syntax as a
964 result of floating point constants.  This is due to a bug in the C
965 library functions @code{ecvt}, @code{fcvt} and @code{gcvt}.  Given valid
966 floating point numbers, they sometimes print @samp{NaN}.
967
968 @item
969 On Irix 4.0.5F (and perhaps in some other versions), an assembler bug
970 sometimes reorders instructions incorrectly when optimization is turned
971 on.  If you think this may be happening to you, try using the GNU
972 assembler; GAS version 2.1 supports ECOFF on Irix.
973
974 @opindex noasmopt
975 Or use the @option{-noasmopt} option when you compile GCC with itself,
976 and then again when you compile your program.  (This is a temporary
977 kludge to turn off assembler optimization on Irix.)  If this proves to
978 be what you need, edit the assembler spec in the file @file{specs} so
979 that it unconditionally passes @option{-O0} to the assembler, and never
980 passes @option{-O2} or @option{-O3}.
981 @end itemize
982
983 @node External Bugs
984 @section Problems Compiling Certain Programs
985
986 @c prevent bad page break with this line
987 Certain programs have problems compiling.
988
989 @itemize @bullet
990 @item
991 Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2
992 because of problems in DEC's versions of the X11 header files
993 @file{X11/Xlib.h} and @file{X11/Xutil.h}.  People recommend adding
994 @option{-I/usr/include/mit} to use the MIT versions of the header files,
995 using the @option{-traditional} switch to turn off ISO C, or fixing the
996 header files by adding this:
997
998 @example
999 #ifdef __STDC__
1000 #define NeedFunctionPrototypes 0
1001 #endif
1002 @end example
1003
1004 @item
1005 On various 386 Unix systems derived from System V, including SCO, ISC,
1006 and ESIX, you may get error messages about running out of virtual memory
1007 while compiling certain programs.
1008
1009 You can prevent this problem by linking GCC with the GNU malloc
1010 (which thus replaces the malloc that comes with the system).  GNU malloc
1011 is available as a separate package, and also in the file
1012 @file{src/gmalloc.c} in the GNU Emacs 19 distribution.
1013
1014 If you have installed GNU malloc as a separate library package, use this
1015 option when you relink GCC:
1016
1017 @example
1018 MALLOC=/usr/local/lib/libgmalloc.a
1019 @end example
1020
1021 Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
1022 the object file to @file{gmalloc.o} and use this option when you relink
1023 GCC:
1024
1025 @example
1026 MALLOC=gmalloc.o
1027 @end example
1028 @end itemize
1029
1030 @node Incompatibilities
1031 @section Incompatibilities of GCC
1032 @cindex incompatibilities of GCC
1033 @opindex traditional
1034
1035 There are several noteworthy incompatibilities between GNU C and K&R
1036 (non-ISO) versions of C@.  The @option{-traditional} option
1037 eliminates many of these incompatibilities, @emph{but not all}, by
1038 telling GCC to behave like a K&R C compiler.
1039
1040 @itemize @bullet
1041 @cindex string constants
1042 @cindex read-only strings
1043 @cindex shared strings
1044 @item
1045 GCC normally makes string constants read-only.  If several
1046 identical-looking string constants are used, GCC stores only one
1047 copy of the string.
1048
1049 @cindex @code{mktemp}, and constant strings
1050 One consequence is that you cannot call @code{mktemp} with a string
1051 constant argument.  The function @code{mktemp} always alters the
1052 string its argument points to.
1053
1054 @cindex @code{sscanf}, and constant strings
1055 @cindex @code{fscanf}, and constant strings
1056 @cindex @code{scanf}, and constant strings
1057 Another consequence is that @code{sscanf} does not work on some systems
1058 when passed a string constant as its format control string or input.
1059 This is because @code{sscanf} incorrectly tries to write into the string
1060 constant.  Likewise @code{fscanf} and @code{scanf}.
1061
1062 @opindex fwritable-strings
1063 The best solution to these problems is to change the program to use
1064 @code{char}-array variables with initialization strings for these
1065 purposes instead of string constants.  But if this is not possible,
1066 you can use the @option{-fwritable-strings} flag, which directs GCC
1067 to handle string constants the same way most C compilers do.
1068 @option{-traditional} also has this effect, among others.
1069
1070 @item
1071 @code{-2147483648} is positive.
1072
1073 This is because 2147483648 cannot fit in the type @code{int}, so
1074 (following the ISO C rules) its data type is @code{unsigned long int}.
1075 Negating this value yields 2147483648 again.
1076
1077 @item
1078 GCC does not substitute macro arguments when they appear inside of
1079 string constants.  For example, the following macro in GCC
1080
1081 @example
1082 #define foo(a) "a"
1083 @end example
1084
1085 @noindent
1086 will produce output @code{"a"} regardless of what the argument @var{a} is.
1087
1088 The @option{-traditional} option directs GCC to handle such cases
1089 (among others) in the old-fashioned (non-ISO) fashion.
1090
1091 @cindex @code{setjmp} incompatibilities
1092 @cindex @code{longjmp} incompatibilities
1093 @item
1094 When you use @code{setjmp} and @code{longjmp}, the only automatic
1095 variables guaranteed to remain valid are those declared
1096 @code{volatile}.  This is a consequence of automatic register
1097 allocation.  Consider this function:
1098
1099 @example
1100 jmp_buf j;
1101
1102 foo ()
1103 @{
1104   int a, b;
1105
1106   a = fun1 ();
1107   if (setjmp (j))
1108     return a;
1109
1110   a = fun2 ();
1111   /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */
1112   return a + fun3 ();
1113 @}
1114 @end example
1115
1116 Here @code{a} may or may not be restored to its first value when the
1117 @code{longjmp} occurs.  If @code{a} is allocated in a register, then
1118 its first value is restored; otherwise, it keeps the last value stored
1119 in it.
1120
1121 @opindex W
1122 If you use the @option{-W} option with the @option{-O} option, you will
1123 get a warning when GCC thinks such a problem might be possible.
1124
1125 The @option{-traditional} option directs GCC to put variables in
1126 the stack by default, rather than in registers, in functions that
1127 call @code{setjmp}.  This results in the behavior found in
1128 traditional C compilers.
1129
1130 @item
1131 Programs that use preprocessing directives in the middle of macro
1132 arguments do not work with GCC@.  For example, a program like this
1133 will not work:
1134
1135 @example
1136 @group
1137 foobar (
1138 #define luser
1139         hack)
1140 @end group
1141 @end example
1142
1143 ISO C does not permit such a construct.  It would make sense to support
1144 it when @option{-traditional} is used, but it is too much work to
1145 implement.
1146
1147 @item
1148 K&R compilers allow comments to cross over an inclusion boundary
1149 (i.e.@: started in an include file and ended in the including file).  I think
1150 this would be quite ugly and can't imagine it could be needed.
1151
1152 @cindex external declaration scope
1153 @cindex scope of external declarations
1154 @cindex declaration scope
1155 @item
1156 Declarations of external variables and functions within a block apply
1157 only to the block containing the declaration.  In other words, they
1158 have the same scope as any other declaration in the same place.
1159
1160 In some other C compilers, a @code{extern} declaration affects all the
1161 rest of the file even if it happens within a block.
1162
1163 The @option{-traditional} option directs GCC to treat all @code{extern}
1164 declarations as global, like traditional compilers.
1165
1166 @item
1167 In traditional C, you can combine @code{long}, etc., with a typedef name,
1168 as shown here:
1169
1170 @example
1171 typedef int foo;
1172 typedef long foo bar;
1173 @end example
1174
1175 In ISO C, this is not allowed: @code{long} and other type modifiers
1176 require an explicit @code{int}.  Because this criterion is expressed
1177 by Bison grammar rules rather than C code, the @option{-traditional}
1178 flag cannot alter it.
1179
1180 @cindex typedef names as function parameters
1181 @item
1182 PCC allows typedef names to be used as function parameters.  The
1183 difficulty described immediately above applies here too.
1184
1185 @item
1186 When in @option{-traditional} mode, GCC allows the following erroneous
1187 pair of declarations to appear together in a given scope:
1188
1189 @example
1190 typedef int foo;
1191 typedef foo foo;
1192 @end example
1193
1194 @item
1195 GCC treats all characters of identifiers as significant, even when in
1196 @option{-traditional} mode.  According to K&R-1 (2.2), ``No more than the
1197 first eight characters are significant, although more may be used.''.
1198 Also according to K&R-1 (2.2), ``An identifier is a sequence of letters
1199 and digits; the first character must be a letter.  The underscore _
1200 counts as a letter.'', but GCC also allows dollar signs in identifiers.
1201
1202 @cindex whitespace
1203 @item
1204 PCC allows whitespace in the middle of compound assignment operators
1205 such as @samp{+=}.  GCC, following the ISO standard, does not
1206 allow this.  The difficulty described immediately above applies here
1207 too.
1208
1209 @cindex apostrophes
1210 @cindex '
1211 @item
1212 GCC complains about unterminated character constants inside of
1213 preprocessing conditionals that fail.  Some programs have English
1214 comments enclosed in conditionals that are guaranteed to fail; if these
1215 comments contain apostrophes, GCC will probably report an error.  For
1216 example, this code would produce an error:
1217
1218 @example
1219 #if 0
1220 You can't expect this to work.
1221 #endif
1222 @end example
1223
1224 The best solution to such a problem is to put the text into an actual
1225 C comment delimited by @samp{/*@dots{}*/}.  However,
1226 @option{-traditional} suppresses these error messages.
1227
1228 @item
1229 Many user programs contain the declaration @samp{long time ();}.  In the
1230 past, the system header files on many systems did not actually declare
1231 @code{time}, so it did not matter what type your program declared it to
1232 return.  But in systems with ISO C headers, @code{time} is declared to
1233 return @code{time_t}, and if that is not the same as @code{long}, then
1234 @samp{long time ();} is erroneous.
1235
1236 The solution is to change your program to use appropriate system headers
1237 (@code{<time.h>} on systems with ISO C headers) and not to declare
1238 @code{time} if the system header files declare it, or failing that to
1239 use @code{time_t} as the return type of @code{time}.
1240
1241 @cindex @code{float} as function value type
1242 @item
1243 When compiling functions that return @code{float}, PCC converts it to
1244 a double.  GCC actually returns a @code{float}.  If you are concerned
1245 with PCC compatibility, you should declare your functions to return
1246 @code{double}; you might as well say what you mean.
1247
1248 @cindex structures
1249 @cindex unions
1250 @item
1251 When compiling functions that return structures or unions, GCC
1252 output code normally uses a method different from that used on most
1253 versions of Unix.  As a result, code compiled with GCC cannot call
1254 a structure-returning function compiled with PCC, and vice versa.
1255
1256 The method used by GCC is as follows: a structure or union which is
1257 1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or union
1258 with any other size is stored into an address supplied by the caller
1259 (usually in a special, fixed register, but on some machines it is passed
1260 on the stack).  The machine-description macros @code{STRUCT_VALUE} and
1261 @code{STRUCT_INCOMING_VALUE} tell GCC where to pass this address.
1262
1263 By contrast, PCC on most target machines returns structures and unions
1264 of any size by copying the data into an area of static storage, and then
1265 returning the address of that storage as if it were a pointer value.
1266 The caller must copy the data from that memory area to the place where
1267 the value is wanted.  GCC does not use this method because it is
1268 slower and nonreentrant.
1269
1270 On some newer machines, PCC uses a reentrant convention for all
1271 structure and union returning.  GCC on most of these machines uses a
1272 compatible convention when returning structures and unions in memory,
1273 but still returns small structures and unions in registers.
1274
1275 @opindex fpcc-struct-return
1276 You can tell GCC to use a compatible convention for all structure and
1277 union returning with the option @option{-fpcc-struct-return}.
1278
1279 @cindex preprocessing tokens
1280 @cindex preprocessing numbers
1281 @item
1282 GCC complains about program fragments such as @samp{0x74ae-0x4000}
1283 which appear to be two hexadecimal constants separated by the minus
1284 operator.  Actually, this string is a single @dfn{preprocessing token}.
1285 Each such token must correspond to one token in C@.  Since this does not,
1286 GCC prints an error message.  Although it may appear obvious that what
1287 is meant is an operator and two values, the ISO C standard specifically
1288 requires that this be treated as erroneous.
1289
1290 A @dfn{preprocessing token} is a @dfn{preprocessing number} if it
1291 begins with a digit and is followed by letters, underscores, digits,
1292 periods and @samp{e+}, @samp{e-}, @samp{E+}, @samp{E-}, @samp{p+},
1293 @samp{p-}, @samp{P+}, or @samp{P-} character sequences.  (In strict C89
1294 mode, the sequences @samp{p+}, @samp{p-}, @samp{P+} and @samp{P-} cannot
1295 appear in preprocessing numbers.)
1296
1297 To make the above program fragment valid, place whitespace in front of
1298 the minus sign.  This whitespace will end the preprocessing number.
1299 @end itemize
1300
1301 @node Fixed Headers
1302 @section Fixed Header Files
1303
1304 GCC needs to install corrected versions of some system header files.
1305 This is because most target systems have some header files that won't
1306 work with GCC unless they are changed.  Some have bugs, some are
1307 incompatible with ISO C, and some depend on special features of other
1308 compilers.
1309
1310 Installing GCC automatically creates and installs the fixed header
1311 files, by running a program called @code{fixincludes} (or for certain
1312 targets an alternative such as @code{fixinc.svr4}).  Normally, you
1313 don't need to pay attention to this.  But there are cases where it
1314 doesn't do the right thing automatically.
1315
1316 @itemize @bullet
1317 @item
1318 If you update the system's header files, such as by installing a new
1319 system version, the fixed header files of GCC are not automatically
1320 updated.  The easiest way to update them is to reinstall GCC@.  (If
1321 you want to be clever, look in the makefile and you can find a
1322 shortcut.)
1323
1324 @item
1325 On some systems, in particular SunOS 4, header file directories contain
1326 machine-specific symbolic links in certain places.  This makes it
1327 possible to share most of the header files among hosts running the
1328 same version of SunOS 4 on different machine models.
1329
1330 The programs that fix the header files do not understand this special
1331 way of using symbolic links; therefore, the directory of fixed header
1332 files is good only for the machine model used to build it.
1333
1334 In SunOS 4, only programs that look inside the kernel will notice the
1335 difference between machine models.  Therefore, for most purposes, you
1336 need not be concerned about this.
1337
1338 It is possible to make separate sets of fixed header files for the
1339 different machine models, and arrange a structure of symbolic links so
1340 as to use the proper set, but you'll have to do this by hand.
1341
1342 @item
1343 On Lynxos, GCC by default does not fix the header files.  This is
1344 because bugs in the shell cause the @code{fixincludes} script to fail.
1345
1346 This means you will encounter problems due to bugs in the system header
1347 files.  It may be no comfort that they aren't GCC's fault, but it
1348 does mean that there's nothing for us to do about them.
1349 @end itemize
1350
1351 @node Standard Libraries
1352 @section Standard Libraries
1353
1354 @opindex Wall
1355 GCC by itself attempts to be a conforming freestanding implementation.
1356 @xref{Standards,,Language Standards Supported by GCC}, for details of
1357 what this means.  Beyond the library facilities required of such an
1358 implementation, the rest of the C library is supplied by the vendor of
1359 the operating system.  If that C library doesn't conform to the C
1360 standards, then your programs might get warnings (especially when using
1361 @option{-Wall}) that you don't expect.
1362
1363 For example, the @code{sprintf} function on SunOS 4.1.3 returns
1364 @code{char *} while the C standard says that @code{sprintf} returns an
1365 @code{int}.  The @code{fixincludes} program could make the prototype for
1366 this function match the Standard, but that would be wrong, since the
1367 function will still return @code{char *}.
1368
1369 If you need a Standard compliant library, then you need to find one, as
1370 GCC does not provide one.  The GNU C library (called @code{glibc})
1371 provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for
1372 GNU/Linux and HURD-based GNU systems; no recent version of it supports
1373 other systems, though some very old versions did.  Version 2.2 of the
1374 GNU C library includes nearly complete C99 support.  You could also ask
1375 your operating system vendor if newer libraries are available.
1376
1377 @node Disappointments
1378 @section Disappointments and Misunderstandings
1379
1380 These problems are perhaps regrettable, but we don't know any practical
1381 way around them.
1382
1383 @itemize @bullet
1384 @item
1385 Certain local variables aren't recognized by debuggers when you compile
1386 with optimization.
1387
1388 This occurs because sometimes GCC optimizes the variable out of
1389 existence.  There is no way to tell the debugger how to compute the
1390 value such a variable ``would have had'', and it is not clear that would
1391 be desirable anyway.  So GCC simply does not mention the eliminated
1392 variable when it writes debugging information.
1393
1394 You have to expect a certain amount of disagreement between the
1395 executable and your source code, when you use optimization.
1396
1397 @cindex conflicting types
1398 @cindex scope of declaration
1399 @item
1400 Users often think it is a bug when GCC reports an error for code
1401 like this:
1402
1403 @example
1404 int foo (struct mumble *);
1405
1406 struct mumble @{ @dots{} @};
1407
1408 int foo (struct mumble *x)
1409 @{ @dots{} @}
1410 @end example
1411
1412 This code really is erroneous, because the scope of @code{struct
1413 mumble} in the prototype is limited to the argument list containing it.
1414 It does not refer to the @code{struct mumble} defined with file scope
1415 immediately below---they are two unrelated types with similar names in
1416 different scopes.
1417
1418 But in the definition of @code{foo}, the file-scope type is used
1419 because that is available to be inherited.  Thus, the definition and
1420 the prototype do not match, and you get an error.
1421
1422 This behavior may seem silly, but it's what the ISO standard specifies.
1423 It is easy enough for you to make your code work by moving the
1424 definition of @code{struct mumble} above the prototype.  It's not worth
1425 being incompatible with ISO C just to avoid an error for the example
1426 shown above.
1427
1428 @item
1429 Accesses to bit-fields even in volatile objects works by accessing larger
1430 objects, such as a byte or a word.  You cannot rely on what size of
1431 object is accessed in order to read or write the bit-field; it may even
1432 vary for a given bit-field according to the precise usage.
1433
1434 If you care about controlling the amount of memory that is accessed, use
1435 volatile but do not use bit-fields.
1436
1437 @item
1438 GCC comes with shell scripts to fix certain known problems in system
1439 header files.  They install corrected copies of various header files in
1440 a special directory where only GCC will normally look for them.  The
1441 scripts adapt to various systems by searching all the system header
1442 files for the problem cases that we know about.
1443
1444 If new system header files are installed, nothing automatically arranges
1445 to update the corrected header files.  You will have to reinstall GCC
1446 to fix the new header files.  More specifically, go to the build
1447 directory and delete the files @file{stmp-fixinc} and
1448 @file{stmp-headers}, and the subdirectory @code{include}; then do
1449 @samp{make install} again.
1450
1451 @item
1452 @cindex floating point precision
1453 On 68000 and x86 systems, for instance, you can get paradoxical results
1454 if you test the precise values of floating point numbers.  For example,
1455 you can find that a floating point value which is not a NaN is not equal
1456 to itself.  This results from the fact that the floating point registers
1457 hold a few more bits of precision than fit in a @code{double} in memory.
1458 Compiled code moves values between memory and floating point registers
1459 at its convenience, and moving them into memory truncates them.
1460
1461 @opindex ffloat-store
1462 You can partially avoid this problem by using the @option{-ffloat-store}
1463 option (@pxref{Optimize Options}).
1464
1465 @item
1466 On the MIPS, variable argument functions using @file{varargs.h}
1467 cannot have a floating point value for the first argument.  The
1468 reason for this is that in the absence of a prototype in scope,
1469 if the first argument is a floating point, it is passed in a
1470 floating point register, rather than an integer register.
1471
1472 If the code is rewritten to use the ISO standard @file{stdarg.h}
1473 method of variable arguments, and the prototype is in scope at
1474 the time of the call, everything will work fine.
1475
1476 @item
1477 On the H8/300 and H8/300H, variable argument functions must be
1478 implemented using the ISO standard @file{stdarg.h} method of
1479 variable arguments.  Furthermore, calls to functions using @file{stdarg.h}
1480 variable arguments must have a prototype for the called function
1481 in scope at the time of the call.
1482 @end itemize
1483
1484 @node C++ Misunderstandings
1485 @section Common Misunderstandings with GNU C++
1486
1487 @cindex misunderstandings in C++
1488 @cindex surprises in C++
1489 @cindex C++ misunderstandings
1490 C++ is a complex language and an evolving one, and its standard
1491 definition (the ISO C++ standard) was only recently completed.  As a
1492 result, your C++ compiler may occasionally surprise you, even when its
1493 behavior is correct.  This section discusses some areas that frequently
1494 give rise to questions of this sort.
1495
1496 @menu
1497 * Static Definitions::  Static member declarations are not definitions
1498 * Temporaries::         Temporaries may vanish before you expect
1499 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
1500 @end menu
1501
1502 @node Static Definitions
1503 @subsection Declare @emph{and} Define Static Members
1504
1505 @cindex C++ static data, declaring and defining
1506 @cindex static data in C++, declaring and defining
1507 @cindex declaring static data in C++
1508 @cindex defining static data in C++
1509 When a class has static data members, it is not enough to @emph{declare}
1510 the static member; you must also @emph{define} it.  For example:
1511
1512 @example
1513 class Foo
1514 @{
1515   @dots{}
1516   void method();
1517   static int bar;
1518 @};
1519 @end example
1520
1521 This declaration only establishes that the class @code{Foo} has an
1522 @code{int} named @code{Foo::bar}, and a member function named
1523 @code{Foo::method}.  But you still need to define @emph{both}
1524 @code{method} and @code{bar} elsewhere.  According to the ISO
1525 standard, you must supply an initializer in one (and only one) source
1526 file, such as:
1527
1528 @example
1529 int Foo::bar = 0;
1530 @end example
1531
1532 Other C++ compilers may not correctly implement the standard behavior.
1533 As a result, when you switch to @code{g++} from one of these compilers,
1534 you may discover that a program that appeared to work correctly in fact
1535 does not conform to the standard: @code{g++} reports as undefined
1536 symbols any static data members that lack definitions.
1537
1538 @node Temporaries
1539 @subsection Temporaries May Vanish Before You Expect
1540
1541 @cindex temporaries, lifetime of
1542 @cindex portions of temporary objects, pointers to
1543 It is dangerous to use pointers or references to @emph{portions} of a
1544 temporary object.  The compiler may very well delete the object before
1545 you expect it to, leaving a pointer to garbage.  The most common place
1546 where this problem crops up is in classes like string classes,
1547 especially ones that define a conversion function to type @code{char *}
1548 or @code{const char *}---which is one reason why the standard
1549 @code{string} class requires you to call the @code{c_str} member
1550 function.  However, any class that returns a pointer to some internal
1551 structure is potentially subject to this problem.
1552
1553 For example, a program may use a function @code{strfunc} that returns
1554 @code{string} objects, and another function @code{charfunc} that
1555 operates on pointers to @code{char}:
1556
1557 @example
1558 string strfunc ();
1559 void charfunc (const char *);
1560
1561 void
1562 f ()
1563 @{
1564   const char *p = strfunc().c_str();
1565   @dots{}
1566   charfunc (p);
1567   @dots{}
1568   charfunc (p);
1569 @}
1570 @end example
1571
1572 @noindent
1573 In this situation, it may seem reasonable to save a pointer to the C
1574 string returned by the @code{c_str} member function and use that rather
1575 than call @code{c_str} repeatedly.  However, the temporary string
1576 created by the call to @code{strfunc} is destroyed after @code{p} is
1577 initialized, at which point @code{p} is left pointing to freed memory.
1578
1579 Code like this may run successfully under some other compilers,
1580 particularly obsolete cfront-based compilers that delete temporaries
1581 along with normal local variables.  However, the GNU C++ behavior is
1582 standard-conforming, so if your program depends on late destruction of
1583 temporaries it is not portable.
1584
1585 The safe way to write such code is to give the temporary a name, which
1586 forces it to remain until the end of the scope of the name.  For
1587 example:
1588
1589 @example
1590 string& tmp = strfunc ();
1591 charfunc (tmp.c_str ());
1592 @end example
1593
1594 @node Copy Assignment
1595 @subsection Implicit Copy-Assignment for Virtual Bases
1596
1597 When a base class is virtual, only one subobject of the base class
1598 belongs to each full object.  Also, the constructors and destructors are
1599 invoked only once, and called from the most-derived class.  However, such
1600 objects behave unspecified when being assigned.  For example:
1601
1602 @example
1603 struct Base@{
1604   char *name;
1605   Base(char *n) : name(strdup(n))@{@}
1606   Base& operator= (const Base& other)@{
1607    free (name);
1608    name = strdup (other.name);
1609   @}
1610 @};
1611
1612 struct A:virtual Base@{
1613   int val;
1614   A():Base("A")@{@}
1615 @};
1616
1617 struct B:virtual Base@{
1618   int bval;
1619   B():Base("B")@{@}
1620 @};
1621
1622 struct Derived:public A, public B@{
1623   Derived():Base("Derived")@{@}
1624 @};
1625
1626 void func(Derived &d1, Derived &d2)
1627 @{
1628   d1 = d2;
1629 @}
1630 @end example
1631
1632 The C++ standard specifies that @samp{Base::Base} is only called once
1633 when constructing or copy-constructing a Derived object.  It is
1634 unspecified whether @samp{Base::operator=} is called more than once when
1635 the implicit copy-assignment for Derived objects is invoked (as it is
1636 inside @samp{func} in the example).
1637
1638 g++ implements the ``intuitive'' algorithm for copy-assignment: assign all
1639 direct bases, then assign all members.  In that algorithm, the virtual
1640 base subobject can be encountered many times.  In the example, copying
1641 proceeds in the following order: @samp{val}, @samp{name} (via
1642 @code{strdup}), @samp{bval}, and @samp{name} again.
1643
1644 If application code relies on copy-assignment, a user-defined
1645 copy-assignment operator removes any uncertainties.  With such an
1646 operator, the application can define whether and how the virtual base
1647 subobject is assigned.
1648
1649 @node Protoize Caveats
1650 @section Caveats of using @command{protoize}
1651
1652 The conversion programs @command{protoize} and @command{unprotoize} can
1653 sometimes change a source file in a way that won't work unless you
1654 rearrange it.
1655
1656 @itemize @bullet
1657 @item
1658 @command{protoize} can insert references to a type name or type tag before
1659 the definition, or in a file where they are not defined.
1660
1661 If this happens, compiler error messages should show you where the new
1662 references are, so fixing the file by hand is straightforward.
1663
1664 @item
1665 There are some C constructs which @command{protoize} cannot figure out.
1666 For example, it can't determine argument types for declaring a
1667 pointer-to-function variable; this you must do by hand.  @command{protoize}
1668 inserts a comment containing @samp{???} each time it finds such a
1669 variable; so you can find all such variables by searching for this
1670 string.  ISO C does not require declaring the argument types of
1671 pointer-to-function types.
1672
1673 @item
1674 Using @command{unprotoize} can easily introduce bugs.  If the program
1675 relied on prototypes to bring about conversion of arguments, these
1676 conversions will not take place in the program without prototypes.
1677 One case in which you can be sure @command{unprotoize} is safe is when
1678 you are removing prototypes that were made with @command{protoize}; if
1679 the program worked before without any prototypes, it will work again
1680 without them.
1681
1682 @opindex Wconversion
1683 You can find all the places where this problem might occur by compiling
1684 the program with the @option{-Wconversion} option.  It prints a warning
1685 whenever an argument is converted.
1686
1687 @item
1688 Both conversion programs can be confused if there are macro calls in and
1689 around the text to be converted.  In other words, the standard syntax
1690 for a declaration or definition must not result from expanding a macro.
1691 This problem is inherent in the design of C and cannot be fixed.  If
1692 only a few functions have confusing macro calls, you can easily convert
1693 them manually.
1694
1695 @item
1696 @command{protoize} cannot get the argument types for a function whose
1697 definition was not actually compiled due to preprocessing conditionals.
1698 When this happens, @command{protoize} changes nothing in regard to such
1699 a function.  @command{protoize} tries to detect such instances and warn
1700 about them.
1701
1702 You can generally work around this problem by using @command{protoize} step
1703 by step, each time specifying a different set of @option{-D} options for
1704 compilation, until all of the functions have been converted.  There is
1705 no automatic way to verify that you have got them all, however.
1706
1707 @item
1708 Confusion may result if there is an occasion to convert a function
1709 declaration or definition in a region of source code where there is more
1710 than one formal parameter list present.  Thus, attempts to convert code
1711 containing multiple (conditionally compiled) versions of a single
1712 function header (in the same vicinity) may not produce the desired (or
1713 expected) results.
1714
1715 If you plan on converting source files which contain such code, it is
1716 recommended that you first make sure that each conditionally compiled
1717 region of source code which contains an alternative function header also
1718 contains at least one additional follower token (past the final right
1719 parenthesis of the function header).  This should circumvent the
1720 problem.
1721
1722 @item
1723 @command{unprotoize} can become confused when trying to convert a function
1724 definition or declaration which contains a declaration for a
1725 pointer-to-function formal argument which has the same name as the
1726 function being defined or declared.  We recommend you avoid such choices
1727 of formal parameter names.
1728
1729 @item
1730 You might also want to correct some of the indentation by hand and break
1731 long lines.  (The conversion programs don't write lines longer than
1732 eighty characters in any case.)
1733 @end itemize
1734
1735 @node Non-bugs
1736 @section Certain Changes We Don't Want to Make
1737
1738 This section lists changes that people frequently request, but which
1739 we do not make because we think GCC is better without them.
1740
1741 @itemize @bullet
1742 @item
1743 Checking the number and type of arguments to a function which has an
1744 old-fashioned definition and no prototype.
1745
1746 Such a feature would work only occasionally---only for calls that appear
1747 in the same file as the called function, following the definition.  The
1748 only way to check all calls reliably is to add a prototype for the
1749 function.  But adding a prototype eliminates the motivation for this
1750 feature.  So the feature is not worthwhile.
1751
1752 @item
1753 Warning about using an expression whose type is signed as a shift count.
1754
1755 Shift count operands are probably signed more often than unsigned.
1756 Warning about this would cause far more annoyance than good.
1757
1758 @item
1759 Warning about assigning a signed value to an unsigned variable.
1760
1761 Such assignments must be very common; warning about them would cause
1762 more annoyance than good.
1763
1764 @item
1765 Warning when a non-void function value is ignored.
1766
1767 Coming as I do from a Lisp background, I balk at the idea that there is
1768 something dangerous about discarding a value.  There are functions that
1769 return values which some callers may find useful; it makes no sense to
1770 clutter the program with a cast to @code{void} whenever the value isn't
1771 useful.
1772
1773 @item
1774 @opindex fshort-enums
1775 Making @option{-fshort-enums} the default.
1776
1777 This would cause storage layout to be incompatible with most other C
1778 compilers.  And it doesn't seem very important, given that you can get
1779 the same result in other ways.  The case where it matters most is when
1780 the enumeration-valued object is inside a structure, and in that case
1781 you can specify a field width explicitly.
1782
1783 @item
1784 Making bit-fields unsigned by default on particular machines where ``the
1785 ABI standard'' says to do so.
1786
1787 The ISO C standard leaves it up to the implementation whether a bit-field
1788 declared plain @code{int} is signed or not.  This in effect creates two
1789 alternative dialects of C@.
1790
1791 @opindex fsigned-bitfields
1792 @opindex funsigned-bitfields
1793 The GNU C compiler supports both dialects; you can specify the signed
1794 dialect with @option{-fsigned-bitfields} and the unsigned dialect with
1795 @option{-funsigned-bitfields}.  However, this leaves open the question of
1796 which dialect to use by default.
1797
1798 Currently, the preferred dialect makes plain bit-fields signed, because
1799 this is simplest.  Since @code{int} is the same as @code{signed int} in
1800 every other context, it is cleanest for them to be the same in bit-fields
1801 as well.
1802
1803 Some computer manufacturers have published Application Binary Interface
1804 standards which specify that plain bit-fields should be unsigned.  It is
1805 a mistake, however, to say anything about this issue in an ABI@.  This is
1806 because the handling of plain bit-fields distinguishes two dialects of C@.
1807 Both dialects are meaningful on every type of machine.  Whether a
1808 particular object file was compiled using signed bit-fields or unsigned
1809 is of no concern to other object files, even if they access the same
1810 bit-fields in the same data structures.
1811
1812 A given program is written in one or the other of these two dialects.
1813 The program stands a chance to work on most any machine if it is
1814 compiled with the proper dialect.  It is unlikely to work at all if
1815 compiled with the wrong dialect.
1816
1817 Many users appreciate the GNU C compiler because it provides an
1818 environment that is uniform across machines.  These users would be
1819 inconvenienced if the compiler treated plain bit-fields differently on
1820 certain machines.
1821
1822 Occasionally users write programs intended only for a particular machine
1823 type.  On these occasions, the users would benefit if the GNU C compiler
1824 were to support by default the same dialect as the other compilers on
1825 that machine.  But such applications are rare.  And users writing a
1826 program to run on more than one type of machine cannot possibly benefit
1827 from this kind of compatibility.
1828
1829 This is why GCC does and will treat plain bit-fields in the same
1830 fashion on all types of machines (by default).
1831
1832 There are some arguments for making bit-fields unsigned by default on all
1833 machines.  If, for example, this becomes a universal de facto standard,
1834 it would make sense for GCC to go along with it.  This is something
1835 to be considered in the future.
1836
1837 (Of course, users strongly concerned about portability should indicate
1838 explicitly in each bit-field whether it is signed or not.  In this way,
1839 they write programs which have the same meaning in both C dialects.)
1840
1841 @item
1842 @opindex ansi
1843 @opindex traditional
1844 @opindex std
1845 Undefining @code{__STDC__} when @option{-ansi} is not used.
1846
1847 Currently, GCC defines @code{__STDC__} as long as you don't use
1848 @option{-traditional}.  This provides good results in practice.
1849
1850 Programmers normally use conditionals on @code{__STDC__} to ask whether
1851 it is safe to use certain features of ISO C, such as function
1852 prototypes or ISO token concatenation.  Since plain @command{gcc} supports
1853 all the features of ISO C, the correct answer to these questions is
1854 ``yes''.
1855
1856 Some users try to use @code{__STDC__} to check for the availability of
1857 certain library facilities.  This is actually incorrect usage in an ISO
1858 C program, because the ISO C standard says that a conforming
1859 freestanding implementation should define @code{__STDC__} even though it
1860 does not have the library facilities.  @samp{gcc -ansi -pedantic} is a
1861 conforming freestanding implementation, and it is therefore required to
1862 define @code{__STDC__}, even though it does not come with an ISO C
1863 library.
1864
1865 Sometimes people say that defining @code{__STDC__} in a compiler that
1866 does not completely conform to the ISO C standard somehow violates the
1867 standard.  This is illogical.  The standard is a standard for compilers
1868 that claim to support ISO C, such as @samp{gcc -ansi}---not for other
1869 compilers such as plain @command{gcc}.  Whatever the ISO C standard says
1870 is relevant to the design of plain @command{gcc} without @option{-ansi} only
1871 for pragmatic reasons, not as a requirement.
1872
1873 GCC normally defines @code{__STDC__} to be 1, and in addition
1874 defines @code{__STRICT_ANSI__} if you specify the @option{-ansi} option,
1875 or a @option{-std} option for strict conformance to some version of ISO C@.
1876 On some hosts, system include files use a different convention, where
1877 @code{__STDC__} is normally 0, but is 1 if the user specifies strict
1878 conformance to the C Standard.  GCC follows the host convention when
1879 processing system include files, but when processing user files it follows
1880 the usual GNU C convention.
1881
1882 @item
1883 Undefining @code{__STDC__} in C++.
1884
1885 Programs written to compile with C++-to-C translators get the
1886 value of @code{__STDC__} that goes with the C compiler that is
1887 subsequently used.  These programs must test @code{__STDC__}
1888 to determine what kind of C preprocessor that compiler uses:
1889 whether they should concatenate tokens in the ISO C fashion
1890 or in the traditional fashion.
1891
1892 These programs work properly with GNU C++ if @code{__STDC__} is defined.
1893 They would not work otherwise.
1894
1895 In addition, many header files are written to provide prototypes in ISO
1896 C but not in traditional C@.  Many of these header files can work without
1897 change in C++ provided @code{__STDC__} is defined.  If @code{__STDC__}
1898 is not defined, they will all fail, and will all need to be changed to
1899 test explicitly for C++ as well.
1900
1901 @item
1902 Deleting ``empty'' loops.
1903
1904 Historically, GCC has not deleted ``empty'' loops under the
1905 assumption that the most likely reason you would put one in a program is
1906 to have a delay, so deleting them will not make real programs run any
1907 faster.
1908
1909 However, the rationale here is that optimization of a nonempty loop
1910 cannot produce an empty one, which holds for C but is not always the
1911 case for C++.
1912
1913 @opindex funroll-loops
1914 Moreover, with @option{-funroll-loops} small ``empty'' loops are already
1915 removed, so the current behavior is both sub-optimal and inconsistent
1916 and will change in the future.
1917
1918 @item
1919 Making side effects happen in the same order as in some other compiler.
1920
1921 @cindex side effects, order of evaluation
1922 @cindex order of evaluation, side effects
1923 It is never safe to depend on the order of evaluation of side effects.
1924 For example, a function call like this may very well behave differently
1925 from one compiler to another:
1926
1927 @example
1928 void func (int, int);
1929
1930 int i = 2;
1931 func (i++, i++);
1932 @end example
1933
1934 There is no guarantee (in either the C or the C++ standard language
1935 definitions) that the increments will be evaluated in any particular
1936 order.  Either increment might happen first.  @code{func} might get the
1937 arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}.
1938
1939 @item
1940 Not allowing structures with volatile fields in registers.
1941
1942 Strictly speaking, there is no prohibition in the ISO C standard
1943 against allowing structures with volatile fields in registers, but
1944 it does not seem to make any sense and is probably not what you wanted
1945 to do.  So the compiler will give an error message in this case.
1946
1947 @item
1948 Making certain warnings into errors by default.
1949
1950 Some ISO C testsuites report failure when the compiler does not produce
1951 an error message for a certain program.
1952
1953 @opindex pedantic-errors
1954 ISO C requires a ``diagnostic'' message for certain kinds of invalid
1955 programs, but a warning is defined by GCC to count as a diagnostic.  If
1956 GCC produces a warning but not an error, that is correct ISO C support.
1957 If test suites call this ``failure'', they should be run with the GCC
1958 option @option{-pedantic-errors}, which will turn these warnings into
1959 errors.
1960
1961 @end itemize
1962
1963 @node Warnings and Errors
1964 @section Warning Messages and Error Messages
1965
1966 @cindex error messages
1967 @cindex warnings vs errors
1968 @cindex messages, warning and error
1969 The GNU compiler can produce two kinds of diagnostics: errors and
1970 warnings.  Each kind has a different purpose:
1971
1972 @itemize @w{}
1973 @item
1974 @dfn{Errors} report problems that make it impossible to compile your
1975 program.  GCC reports errors with the source file name and line
1976 number where the problem is apparent.
1977
1978 @item
1979 @dfn{Warnings} report other unusual conditions in your code that
1980 @emph{may} indicate a problem, although compilation can (and does)
1981 proceed.  Warning messages also report the source file name and line
1982 number, but include the text @samp{warning:} to distinguish them
1983 from error messages.
1984 @end itemize
1985
1986 Warnings may indicate danger points where you should check to make sure
1987 that your program really does what you intend; or the use of obsolete
1988 features; or the use of nonstandard features of GNU C or C++.  Many
1989 warnings are issued only if you ask for them, with one of the @option{-W}
1990 options (for instance, @option{-Wall} requests a variety of useful
1991 warnings).
1992
1993 @opindex pedantic
1994 @opindex pedantic-errors
1995 GCC always tries to compile your program if possible; it never
1996 gratuitously rejects a program whose meaning is clear merely because
1997 (for instance) it fails to conform to a standard.  In some cases,
1998 however, the C and C++ standards specify that certain extensions are
1999 forbidden, and a diagnostic @emph{must} be issued by a conforming
2000 compiler.  The @option{-pedantic} option tells GCC to issue warnings in
2001 such cases; @option{-pedantic-errors} says to make them errors instead.
2002 This does not mean that @emph{all} non-ISO constructs get warnings
2003 or errors.
2004
2005 @xref{Warning Options,,Options to Request or Suppress Warnings}, for
2006 more detail on these and related command-line options.
2007
2008 @node Bugs
2009 @chapter Reporting Bugs
2010 @cindex bugs
2011 @cindex reporting bugs
2012
2013 Your bug reports play an essential role in making GCC reliable.
2014
2015 When you encounter a problem, the first thing to do is to see if it is
2016 already known.  @xref{Trouble}.  If it isn't known, then you should
2017 report the problem.
2018
2019 Reporting a bug may help you by bringing a solution to your problem, or
2020 it may not.  (If it does not, look in the service directory; see
2021 @ref{Service}.)  In any case, the principal function of a bug report is
2022 to help the entire community by making the next version of GCC work
2023 better.  Bug reports are your contribution to the maintenance of GCC@.
2024
2025 Since the maintainers are very overloaded, we cannot respond to every
2026 bug report.  However, if the bug has not been fixed, we are likely to
2027 send you a patch and ask you to tell us whether it works.
2028
2029 In order for a bug report to serve its purpose, you must include the
2030 information that makes for fixing the bug.
2031
2032 @menu
2033 * Criteria:  Bug Criteria.   Have you really found a bug?
2034 * Where: Bug Lists.          Where to send your bug report.
2035 * Reporting: Bug Reporting.  How to report a bug effectively.
2036 * GNATS: gccbug.             You can use a bug reporting tool.
2037 * Known: Trouble.            Known problems.
2038 * Help: Service.             Where to ask for help.
2039 @end menu
2040
2041 @node Bug Criteria,Bug Lists,,Bugs
2042 @section Have You Found a Bug?
2043 @cindex bug criteria
2044
2045 If you are not sure whether you have found a bug, here are some guidelines:
2046
2047 @itemize @bullet
2048 @cindex fatal signal
2049 @cindex core dump
2050 @item
2051 If the compiler gets a fatal signal, for any input whatever, that is a
2052 compiler bug.  Reliable compilers never crash.
2053
2054 @cindex invalid assembly code
2055 @cindex assembly code, invalid
2056 @item
2057 If the compiler produces invalid assembly code, for any input whatever
2058 (except an @code{asm} statement), that is a compiler bug, unless the
2059 compiler reports errors (not just warnings) which would ordinarily
2060 prevent the assembler from being run.
2061
2062 @cindex undefined behavior
2063 @cindex undefined function value
2064 @cindex increment operators
2065 @item
2066 If the compiler produces valid assembly code that does not correctly
2067 execute the input source code, that is a compiler bug.
2068
2069 However, you must double-check to make sure, because you may have run
2070 into an incompatibility between GNU C and traditional C
2071 (@pxref{Incompatibilities}).  These incompatibilities might be considered
2072 bugs, but they are inescapable consequences of valuable features.
2073
2074 Or you may have a program whose behavior is undefined, which happened
2075 by chance to give the desired results with another C or C++ compiler.
2076
2077 For example, in many nonoptimizing compilers, you can write @samp{x;}
2078 at the end of a function instead of @samp{return x;}, with the same
2079 results.  But the value of the function is undefined if @code{return}
2080 is omitted; it is not a bug when GCC produces different results.
2081
2082 Problems often result from expressions with two increment operators,
2083 as in @code{f (*p++, *p++)}.  Your previous compiler might have
2084 interpreted that expression the way you intended; GCC might
2085 interpret it another way.  Neither compiler is wrong.  The bug is
2086 in your code.
2087
2088 After you have localized the error to a single source line, it should
2089 be easy to check for these things.  If your program is correct and
2090 well defined, you have found a compiler bug.
2091
2092 @item
2093 If the compiler produces an error message for valid input, that is a
2094 compiler bug.
2095
2096 @cindex invalid input
2097 @item
2098 If the compiler does not produce an error message for invalid input,
2099 that is a compiler bug.  However, you should note that your idea of
2100 ``invalid input'' might be my idea of ``an extension'' or ``support
2101 for traditional practice''.
2102
2103 @item
2104 If you are an experienced user of one of the languages GCC supports, your
2105 suggestions for improvement of GCC are welcome in any case.
2106 @end itemize
2107
2108 @node Bug Lists,Bug Reporting,Bug Criteria,Bugs
2109 @section Where to Report Bugs
2110 @cindex bug report mailing lists
2111 @kindex gcc-bugs@@gcc.gnu.org or bug-gcc@@gnu.org
2112 Send bug reports for the GNU Compiler Collection to
2113 @email{gcc-bugs@@gcc.gnu.org}.  In accordance with the GNU-wide
2114 convention, in which bug reports for tool ``foo'' are sent
2115 to @samp{bug-foo@@gnu.org}, the address @email{bug-gcc@@gnu.org}
2116 may also be used; it will forward to the address given above.
2117
2118 Please read @uref{http://gcc.gnu.org/bugs.html} for additional and/or
2119 more up-to-date bug reporting instructions before you post a bug report.
2120
2121 @node Bug Reporting,gccbug,Bug Lists,Bugs
2122 @section How to Report Bugs
2123 @cindex compiler bugs, reporting
2124
2125 The fundamental principle of reporting bugs usefully is this:
2126 @strong{report all the facts}.  If you are not sure whether to state a
2127 fact or leave it out, state it!
2128
2129 Often people omit facts because they think they know what causes the
2130 problem and they conclude that some details don't matter.  Thus, you might
2131 assume that the name of the variable you use in an example does not matter.
2132 Well, probably it doesn't, but one cannot be sure.  Perhaps the bug is a
2133 stray memory reference which happens to fetch from the location where that
2134 name is stored in memory; perhaps, if the name were different, the contents
2135 of that location would fool the compiler into doing the right thing despite
2136 the bug.  Play it safe and give a specific, complete example.  That is the
2137 easiest thing for you to do, and the most helpful.
2138
2139 Keep in mind that the purpose of a bug report is to enable someone to
2140 fix the bug if it is not known.  It isn't very important what happens if
2141 the bug is already known.  Therefore, always write your bug reports on
2142 the assumption that the bug is not known.
2143
2144 Sometimes people give a few sketchy facts and ask, ``Does this ring a
2145 bell?''  This cannot help us fix a bug, so it is basically useless.  We
2146 respond by asking for enough details to enable us to investigate.
2147 You might as well expedite matters by sending them to begin with.
2148
2149 Try to make your bug report self-contained.  If we have to ask you for
2150 more information, it is best if you include all the previous information
2151 in your response, as well as the information that was missing.
2152
2153 Please report each bug in a separate message.  This makes it easier for
2154 us to track which bugs have been fixed and to forward your bugs reports
2155 to the appropriate maintainer.
2156
2157 To enable someone to investigate the bug, you should include all these
2158 things:
2159
2160 @itemize @bullet
2161 @item
2162 The version of GCC@.  You can get this by running it with the
2163 @option{-v} option.
2164
2165 Without this, we won't know whether there is any point in looking for
2166 the bug in the current version of GCC@.
2167
2168 @item
2169 A complete input file that will reproduce the bug.  If the bug is in the
2170 C preprocessor, send a source file and any header files that it
2171 requires.  If the bug is in the compiler proper (@file{cc1}), send the
2172 preprocessor output generated by adding @option{-save-temps} to the
2173 compilation command (@pxref{Debugging Options}).  When you do this, use
2174 the same @option{-I}, @option{-D} or @option{-U} options that you used in
2175 actual compilation.  Then send the @var{input}.i or @var{input}.ii files
2176 generated.
2177
2178 A single statement is not enough of an example.  In order to compile it,
2179 it must be embedded in a complete file of compiler input; and the bug
2180 might depend on the details of how this is done.
2181
2182 Without a real example one can compile, all anyone can do about your bug
2183 report is wish you luck.  It would be futile to try to guess how to
2184 provoke the bug.  For example, bugs in register allocation and reloading
2185 frequently depend on every little detail of the function they happen in.
2186
2187 Even if the input file that fails comes from a GNU program, you should
2188 still send the complete test case.  Don't ask the GCC maintainers to
2189 do the extra work of obtaining the program in question---they are all
2190 overworked as it is.  Also, the problem may depend on what is in the
2191 header files on your system; it is unreliable for the GCC maintainers
2192 to try the problem with the header files available to them.  By sending
2193 CPP output, you can eliminate this source of uncertainty and save us
2194 a certain percentage of wild goose chases.
2195
2196 @item
2197 The command arguments you gave GCC to compile that example
2198 and observe the bug.  For example, did you use @option{-O}?  To guarantee
2199 you won't omit something important, list all the options.
2200
2201 If we were to try to guess the arguments, we would probably guess wrong
2202 and then we would not encounter the bug.
2203
2204 @item
2205 The type of machine you are using, and the operating system name and
2206 version number.
2207
2208 @item
2209 The operands you gave to the @code{configure} command when you installed
2210 the compiler.
2211
2212 @item
2213 A complete list of any modifications you have made to the compiler
2214 source.  (We don't promise to investigate the bug unless it happens in
2215 an unmodified compiler.  But if you've made modifications and don't tell
2216 us, then you are sending us on a wild goose chase.)
2217
2218 Be precise about these changes.  A description in English is not
2219 enough---send a context diff for them.
2220
2221 Adding files of your own (such as a machine description for a machine we
2222 don't support) is a modification of the compiler source.
2223
2224 @item
2225 Details of any other deviations from the standard procedure for installing
2226 GCC@.
2227
2228 @item
2229 A description of what behavior you observe that you believe is
2230 incorrect.  For example, ``The compiler gets a fatal signal,'' or,
2231 ``The assembler instruction at line 208 in the output is incorrect.''
2232
2233 Of course, if the bug is that the compiler gets a fatal signal, then one
2234 can't miss it.  But if the bug is incorrect output, the maintainer might
2235 not notice unless it is glaringly wrong.  None of us has time to study
2236 all the assembler code from a 50-line C program just on the chance that
2237 one instruction might be wrong.  We need @emph{you} to do this part!
2238
2239 Even if the problem you experience is a fatal signal, you should still
2240 say so explicitly.  Suppose something strange is going on, such as, your
2241 copy of the compiler is out of synch, or you have encountered a bug in
2242 the C library on your system.  (This has happened!)  Your copy might
2243 crash and the copy here would not.  If you @i{said} to expect a crash,
2244 then when the compiler here fails to crash, we would know that the bug
2245 was not happening.  If you don't say to expect a crash, then we would
2246 not know whether the bug was happening.  We would not be able to draw
2247 any conclusion from our observations.
2248
2249 If the problem is a diagnostic when compiling GCC with some other
2250 compiler, say whether it is a warning or an error.
2251
2252 Often the observed symptom is incorrect output when your program is run.
2253 Sad to say, this is not enough information unless the program is short
2254 and simple.  None of us has time to study a large program to figure out
2255 how it would work if compiled correctly, much less which line of it was
2256 compiled wrong.  So you will have to do that.  Tell us which source line
2257 it is, and what incorrect result happens when that line is executed.  A
2258 person who understands the program can find this as easily as finding a
2259 bug in the program itself.
2260
2261 @item
2262 If you send examples of assembler code output from GCC,
2263 please use @option{-g} when you make them.  The debugging information
2264 includes source line numbers which are essential for correlating the
2265 output with the input.
2266
2267 @item
2268 If you wish to mention something in the GCC source, refer to it by
2269 context, not by line number.
2270
2271 The line numbers in the development sources don't match those in your
2272 sources.  Your line numbers would convey no useful information to the
2273 maintainers.
2274
2275 @item
2276 Additional information from a debugger might enable someone to find a
2277 problem on a machine which he does not have available.  However, you
2278 need to think when you collect this information if you want it to have
2279 any chance of being useful.
2280
2281 @cindex backtrace for bug reports
2282 For example, many people send just a backtrace, but that is never
2283 useful by itself.  A simple backtrace with arguments conveys little
2284 about GCC because the compiler is largely data-driven; the same
2285 functions are called over and over for different RTL insns, doing
2286 different things depending on the details of the insn.
2287
2288 Most of the arguments listed in the backtrace are useless because they
2289 are pointers to RTL list structure.  The numeric values of the
2290 pointers, which the debugger prints in the backtrace, have no
2291 significance whatever; all that matters is the contents of the objects
2292 they point to (and most of the contents are other such pointers).
2293
2294 In addition, most compiler passes consist of one or more loops that
2295 scan the RTL insn sequence.  The most vital piece of information about
2296 such a loop---which insn it has reached---is usually in a local variable,
2297 not in an argument.
2298
2299 @findex debug_rtx
2300 What you need to provide in addition to a backtrace are the values of
2301 the local variables for several stack frames up.  When a local
2302 variable or an argument is an RTX, first print its value and then use
2303 the GDB command @code{pr} to print the RTL expression that it points
2304 to.  (If GDB doesn't run on your machine, use your debugger to call
2305 the function @code{debug_rtx} with the RTX as an argument.)  In
2306 general, whenever a variable is a pointer, its value is no use
2307 without the data it points to.
2308 @end itemize
2309
2310 Here are some things that are not necessary:
2311
2312 @itemize @bullet
2313 @item
2314 A description of the envelope of the bug.
2315
2316 Often people who encounter a bug spend a lot of time investigating
2317 which changes to the input file will make the bug go away and which
2318 changes will not affect it.
2319
2320 This is often time consuming and not very useful, because the way we
2321 will find the bug is by running a single example under the debugger with
2322 breakpoints, not by pure deduction from a series of examples.  You might
2323 as well save your time for something else.
2324
2325 Of course, if you can find a simpler example to report @emph{instead} of
2326 the original one, that is a convenience.  Errors in the output will be
2327 easier to spot, running under the debugger will take less time, etc.
2328 Most GCC bugs involve just one function, so the most straightforward
2329 way to simplify an example is to delete all the function definitions
2330 except the one where the bug occurs.  Those earlier in the file may be
2331 replaced by external declarations if the crucial function depends on
2332 them.  (Exception: inline functions may affect compilation of functions
2333 defined later in the file.)
2334
2335 However, simplification is not vital; if you don't want to do this,
2336 report the bug anyway and send the entire test case you used.
2337
2338 @item
2339 In particular, some people insert conditionals @samp{#ifdef BUG} around
2340 a statement which, if removed, makes the bug not happen.  These are just
2341 clutter; we won't pay any attention to them anyway.  Besides, you should
2342 send us cpp output, and that can't have conditionals.
2343
2344 @item
2345 A patch for the bug.
2346
2347 A patch for the bug is useful if it is a good one.  But don't omit the
2348 necessary information, such as the test case, on the assumption that a
2349 patch is all we need.  We might see problems with your patch and decide
2350 to fix the problem another way, or we might not understand it at all.
2351
2352 Sometimes with a program as complicated as GCC it is very hard to
2353 construct an example that will make the program follow a certain path
2354 through the code.  If you don't send the example, we won't be able to
2355 construct one, so we won't be able to verify that the bug is fixed.
2356
2357 And if we can't understand what bug you are trying to fix, or why your
2358 patch should be an improvement, we won't install it.  A test case will
2359 help us to understand.
2360
2361 See @uref{http://gcc.gnu.org/contribute.html}
2362 for guidelines on how to make it easy for us to
2363 understand and install your patches.
2364
2365 @item
2366 A guess about what the bug is or what it depends on.
2367
2368 Such guesses are usually wrong.  Even I can't guess right about such
2369 things without first using the debugger to find the facts.
2370
2371 @item
2372 A core dump file.
2373
2374 We have no way of examining a core dump for your type of machine
2375 unless we have an identical system---and if we do have one,
2376 we should be able to reproduce the crash ourselves.
2377 @end itemize
2378
2379 @node gccbug,, Bug Reporting, Bugs
2380 @section The gccbug script
2381 @cindex gccbug script
2382
2383 To simplify creation of bug reports, and to allow better tracking of
2384 reports, we use the GNATS bug tracking system.  Part of that system is
2385 the @code{gccbug} script.  This is a Unix shell script, so you need a
2386 shell to run it.  It is normally installed in the same directory where
2387 @code{gcc} is installed.
2388
2389 The gccbug script is derived from send-pr, @pxref{using
2390 send-pr,,Creating new Problem Reports,send-pr,Reporting Problems}.  When
2391 invoked, it starts a text editor so you can fill out the various fields
2392 of the report.  When the you quit the editor, the report is automatically
2393 send to the bug reporting address.
2394
2395 A number of fields in this bug report form are specific to GCC, and are
2396 explained at @uref{http://gcc.gnu.org/gnats.html}.
2397
2398 @node Service
2399 @chapter How To Get Help with GCC
2400
2401 If you need help installing, using or changing GCC, there are two
2402 ways to find it:
2403
2404 @itemize @bullet
2405 @item
2406 Send a message to a suitable network mailing list.  First try
2407 @email{gcc-help@@gcc.gnu.org} (for help installing or using GCC), and if
2408 that brings no response, try @email{gcc@@gcc.gnu.org}.  For help
2409 changing GCC, ask @email{gcc@@gcc.gnu.org}.  If you think you have found
2410 a bug in GCC, please report it following the instructions at
2411 @pxref{Bug Reporting}.
2412
2413 @item
2414 Look in the service directory for someone who might help you for a fee.
2415 The service directory is found at
2416 @uref{http://www.gnu.org/prep/service.html}.
2417 @end itemize
2418
2419 @c For further information, see
2420 @c @uref{http://gcc.gnu.org/cgi-bin/fom.cgi?file=12}.
2421 @c FIXME: this URL may be too volatile, this FAQ entry needs to move to
2422 @c the regular web pages before we can uncomment the reference.
2423
2424 @node Contributing
2425 @chapter Contributing to GCC Development
2426
2427 If you would like to help pretest GCC releases to assure they work well,
2428 our current development sources are available by CVS (see
2429 @uref{http://gcc.gnu.org/cvs.html}).  Source and binary snapshots are
2430 also available for FTP; see @uref{http://gcc.gnu.org/snapshots.html}.
2431
2432 If you would like to work on improvements to GCC, please read the
2433 advice at these URLs:
2434
2435 @smallexample
2436 @uref{http://gcc.gnu.org/contribute.html} 
2437 @uref{http://gcc.gnu.org/contributewhy.html}
2438 @end smallexample
2439
2440 @noindent
2441 for information on how to make useful contributions and avoid
2442 duplication of effort.  Suggested projects are listed at
2443 @uref{http://gcc.gnu.org/projects/}.
2444
2445 @node VMS
2446 @chapter Using GCC on VMS
2447
2448 @c prevent bad page break with this line
2449 Here is how to use GCC on VMS@.
2450
2451 @menu
2452 * Include Files and VMS::  Where the preprocessor looks for the include files.
2453 * Global Declarations::    How to do globaldef, globalref and globalvalue with
2454                            GCC.
2455 * VMS Misc::               Misc information.
2456 @end menu
2457
2458 @node Include Files and VMS
2459 @section Include Files and VMS
2460
2461 @cindex include files and VMS
2462 @cindex VMS and include files
2463 @cindex header files and VMS
2464 Due to the differences between the filesystems of Unix and VMS, GCC
2465 attempts to translate file names in @samp{#include} into names that VMS
2466 will understand.  The basic strategy is to prepend a prefix to the
2467 specification of the include file, convert the whole filename to a VMS
2468 filename, and then try to open the file.  GCC tries various prefixes
2469 one by one until one of them succeeds:
2470
2471 @enumerate
2472 @item
2473 The first prefix is the @samp{GNU_CC_INCLUDE:} logical name: this is
2474 where GNU C header files are traditionally stored.  If you wish to store
2475 header files in non-standard locations, then you can assign the logical
2476 @samp{GNU_CC_INCLUDE} to be a search list, where each element of the
2477 list is suitable for use with a rooted logical.
2478
2479 @item
2480 The next prefix tried is @samp{SYS$SYSROOT:[SYSLIB.]}.  This is where
2481 VAX-C header files are traditionally stored.
2482
2483 @item
2484 If the include file specification by itself is a valid VMS filename, the
2485 preprocessor then uses this name with no prefix in an attempt to open
2486 the include file.
2487
2488 @item
2489 If the file specification is not a valid VMS filename (i.e.@: does not
2490 contain a device or a directory specifier, and contains a @samp{/}
2491 character), the preprocessor tries to convert it from Unix syntax to
2492 VMS syntax.
2493
2494 Conversion works like this: the first directory name becomes a device,
2495 and the rest of the directories are converted into VMS-format directory
2496 names.  For example, the name @file{X11/foobar.h} is
2497 translated to @file{X11:[000000]foobar.h} or @file{X11:foobar.h},
2498 whichever one can be opened.  This strategy allows you to assign a
2499 logical name to point to the actual location of the header files.
2500
2501 @item
2502 If none of these strategies succeeds, the @samp{#include} fails.
2503 @end enumerate
2504
2505 Include directives of the form:
2506
2507 @example
2508 #include foobar
2509 @end example
2510
2511 @noindent
2512 are a common source of incompatibility between VAX-C and GCC@.  VAX-C
2513 treats this much like a standard @code{#include <foobar.h>} directive.
2514 That is incompatible with the ISO C behavior implemented by GCC: to
2515 expand the name @code{foobar} as a macro.  Macro expansion should
2516 eventually yield one of the two standard formats for @code{#include}:
2517
2518 @example
2519 #include "@var{file}"
2520 #include <@var{file}>
2521 @end example
2522
2523 If you have this problem, the best solution is to modify the source to
2524 convert the @code{#include} directives to one of the two standard forms.
2525 That will work with either compiler.  If you want a quick and dirty fix,
2526 define the file names as macros with the proper expansion, like this:
2527
2528 @example
2529 #define stdio <stdio.h>
2530 @end example
2531
2532 @noindent
2533 This will work, as long as the name doesn't conflict with anything else
2534 in the program.
2535
2536 Another source of incompatibility is that VAX-C assumes that:
2537
2538 @example
2539 #include "foobar"
2540 @end example
2541
2542 @noindent
2543 is actually asking for the file @file{foobar.h}.  GCC does not
2544 make this assumption, and instead takes what you ask for literally;
2545 it tries to read the file @file{foobar}.  The best way to avoid this
2546 problem is to always specify the desired file extension in your include
2547 directives.
2548
2549 GCC for VMS is distributed with a set of include files that is
2550 sufficient to compile most general purpose programs.  Even though the
2551 GCC distribution does not contain header files to define constants
2552 and structures for some VMS system-specific functions, there is no
2553 reason why you cannot use GCC with any of these functions.  You first
2554 may have to generate or create header files, either by using the public
2555 domain utility @code{UNSDL} (which can be found on a DECUS tape), or by
2556 extracting the relevant modules from one of the system macro libraries,
2557 and using an editor to construct a C header file.
2558
2559 A @code{#include} file name cannot contain a DECNET node name.  The
2560 preprocessor reports an I/O error if you attempt to use a node name,
2561 whether explicitly, or implicitly via a logical name.
2562
2563 @node Global Declarations
2564 @section Global Declarations and VMS
2565
2566 @findex GLOBALREF
2567 @findex GLOBALDEF
2568 @findex GLOBALVALUEDEF
2569 @findex GLOBALVALUEREF
2570 GCC does not provide the @code{globalref}, @code{globaldef} and
2571 @code{globalvalue} keywords of VAX-C@.  You can get the same effect with
2572 an obscure feature of GAS, the GNU assembler.  (This requires GAS
2573 version 1.39 or later.)  The following macros allow you to use this
2574 feature in a fairly natural way:
2575
2576 @smallexample
2577 #ifdef __GNUC__
2578 #define GLOBALREF(TYPE,NAME)                      \
2579   TYPE NAME                                       \
2580   asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME)
2581 #define GLOBALDEF(TYPE,NAME,VALUE)                \
2582   TYPE NAME                                       \
2583   asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) \
2584     = VALUE
2585 #define GLOBALVALUEREF(TYPE,NAME)                 \
2586   const TYPE NAME[1]                              \
2587   asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)
2588 #define GLOBALVALUEDEF(TYPE,NAME,VALUE)           \
2589   const TYPE NAME[1]                              \
2590   asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)  \
2591     = @{VALUE@}
2592 #else
2593 #define GLOBALREF(TYPE,NAME) \
2594   globalref TYPE NAME
2595 #define GLOBALDEF(TYPE,NAME,VALUE) \
2596   globaldef TYPE NAME = VALUE
2597 #define GLOBALVALUEDEF(TYPE,NAME,VALUE) \
2598   globalvalue TYPE NAME = VALUE
2599 #define GLOBALVALUEREF(TYPE,NAME) \
2600   globalvalue TYPE NAME
2601 #endif
2602 @end smallexample
2603
2604 @noindent
2605 (The @code{_$$PsectAttributes_GLOBALSYMBOL} prefix at the start of the
2606 name is removed by the assembler, after it has modified the attributes
2607 of the symbol).  These macros are provided in the VMS binaries
2608 distribution in a header file @file{GNU_HACKS.H}.  An example of the
2609 usage is:
2610
2611 @example
2612 GLOBALREF (int, ijk);
2613 GLOBALDEF (int, jkl, 0);
2614 @end example
2615
2616 The macros @code{GLOBALREF} and @code{GLOBALDEF} cannot be used
2617 straightforwardly for arrays, since there is no way to insert the array
2618 dimension into the declaration at the right place.  However, you can
2619 declare an array with these macros if you first define a typedef for the
2620 array type, like this:
2621
2622 @example
2623 typedef int intvector[10];
2624 GLOBALREF (intvector, foo);
2625 @end example
2626
2627 Array and structure initializers will also break the macros; you can
2628 define the initializer to be a macro of its own, or you can expand the
2629 @code{GLOBALDEF} macro by hand.  You may find a case where you wish to
2630 use the @code{GLOBALDEF} macro with a large array, but you are not
2631 interested in explicitly initializing each element of the array.  In
2632 such cases you can use an initializer like: @code{@{0,@}}, which will
2633 initialize the entire array to @code{0}.
2634
2635 A shortcoming of this implementation is that a variable declared with
2636 @code{GLOBALVALUEREF} or @code{GLOBALVALUEDEF} is always an array.  For
2637 example, the declaration:
2638
2639 @example
2640 GLOBALVALUEREF(int, ijk);
2641 @end example
2642
2643 @noindent
2644 declares the variable @code{ijk} as an array of type @code{int [1]}.
2645 This is done because a globalvalue is actually a constant; its ``value''
2646 is what the linker would normally consider an address.  That is not how
2647 an integer value works in C, but it is how an array works.  So treating
2648 the symbol as an array name gives consistent results---with the
2649 exception that the value seems to have the wrong type.  @strong{Don't
2650 try to access an element of the array.}  It doesn't have any elements.
2651 The array ``address'' may not be the address of actual storage.
2652
2653 The fact that the symbol is an array may lead to warnings where the
2654 variable is used.  Insert type casts to avoid the warnings.  Here is an
2655 example; it takes advantage of the ISO C feature allowing macros that
2656 expand to use the same name as the macro itself.
2657
2658 @example
2659 GLOBALVALUEREF (int, ss$_normal);
2660 GLOBALVALUEDEF (int, xyzzy,123);
2661 #ifdef __GNUC__
2662 #define ss$_normal ((int) ss$_normal)
2663 #define xyzzy ((int) xyzzy)
2664 #endif
2665 @end example
2666
2667 Don't use @code{globaldef} or @code{globalref} with a variable whose
2668 type is an enumeration type; this is not implemented.  Instead, make the
2669 variable an integer, and use a @code{globalvaluedef} for each of the
2670 enumeration values.  An example of this would be:
2671
2672 @example
2673 #ifdef __GNUC__
2674 GLOBALDEF (int, color, 0);
2675 GLOBALVALUEDEF (int, RED, 0);
2676 GLOBALVALUEDEF (int, BLUE, 1);
2677 GLOBALVALUEDEF (int, GREEN, 3);
2678 #else
2679 enum globaldef color @{RED, BLUE, GREEN = 3@};
2680 #endif
2681 @end example
2682
2683 @node VMS Misc
2684 @section Other VMS Issues
2685
2686 @cindex exit status and VMS
2687 @cindex return value of @code{main}
2688 @cindex @code{main} and the exit status
2689 GCC automatically arranges for @code{main} to return 1 by default if
2690 you fail to specify an explicit return value.  This will be interpreted
2691 by VMS as a status code indicating a normal successful completion.
2692 Version 1 of GCC did not provide this default.
2693
2694 GCC on VMS works only with the GNU assembler, GAS@.  You need version
2695 1.37 or later of GAS in order to produce value debugging information for
2696 the VMS debugger.  Use the ordinary VMS linker with the object files
2697 produced by GAS@.
2698
2699 @cindex shared VMS run time system
2700 @cindex @file{VAXCRTL}
2701 Under previous versions of GCC, the generated code would occasionally
2702 give strange results when linked to the sharable @file{VAXCRTL} library.
2703 Now this should work.
2704
2705 A caveat for use of @code{const} global variables: the @code{const}
2706 modifier must be specified in every external declaration of the variable
2707 in all of the source files that use that variable.  Otherwise the linker
2708 will issue warnings about conflicting attributes for the variable.  Your
2709 program will still work despite the warnings, but the variable will be
2710 placed in writable storage.
2711
2712 @cindex name augmentation
2713 @cindex case sensitivity and VMS
2714 @cindex VMS and case sensitivity
2715 Although the VMS linker does distinguish between upper and lower case
2716 letters in global symbols, most VMS compilers convert all such symbols
2717 into upper case and most run-time library routines also have upper case
2718 names.  To be able to reliably call such routines, GCC (by means of
2719 the assembler GAS) converts global symbols into upper case like other
2720 VMS compilers.  However, since the usual practice in C is to distinguish
2721 case, GCC (via GAS) tries to preserve usual C behavior by augmenting
2722 each name that is not all lower case.  This means truncating the name
2723 to at most 23 characters and then adding more characters at the end
2724 which encode the case pattern of those 23.   Names which contain at
2725 least one dollar sign are an exception; they are converted directly into
2726 upper case without augmentation.
2727
2728 Name augmentation yields bad results for programs that use precompiled
2729 libraries (such as Xlib) which were generated by another compiler.  You
2730 can use the compiler option @samp{/NOCASE_HACK} to inhibit augmentation;
2731 it makes external C functions and variables case-independent as is usual
2732 on VMS@.  Alternatively, you could write all references to the functions
2733 and variables in such libraries using lower case; this will work on VMS,
2734 but is not portable to other systems.  The compiler option @samp{/NAMES}
2735 also provides control over global name handling.
2736
2737 Function and variable names are handled somewhat differently with G++.
2738 The GNU C++ compiler performs @dfn{name mangling} on function
2739 names, which means that it adds information to the function name to
2740 describe the data types of the arguments that the function takes.  One
2741 result of this is that the name of a function can become very long.
2742 Since the VMS linker only recognizes the first 31 characters in a name,
2743 special action is taken to ensure that each function and variable has a
2744 unique name that can be represented in 31 characters.
2745
2746 If the name (plus a name augmentation, if required) is less than 32
2747 characters in length, then no special action is performed.  If the name
2748 is longer than 31 characters, the assembler (GAS) will generate a
2749 hash string based upon the function name, truncate the function name to
2750 23 characters, and append the hash string to the truncated name.  If the
2751 @samp{/VERBOSE} compiler option is used, the assembler will print both
2752 the full and truncated names of each symbol that is truncated.
2753
2754 The @samp{/NOCASE_HACK} compiler option should not be used when you are
2755 compiling programs that use libg++.  libg++ has several instances of
2756 objects (i.e.  @code{Filebuf} and @code{filebuf}) which become
2757 indistinguishable in a case-insensitive environment.  This leads to
2758 cases where you need to inhibit augmentation selectively (if you were
2759 using libg++ and Xlib in the same program, for example).  There is no
2760 special feature for doing this, but you can get the result by defining a
2761 macro for each mixed case symbol for which you wish to inhibit
2762 augmentation.  The macro should expand into the lower case equivalent of
2763 itself.  For example:
2764
2765 @example
2766 #define StuDlyCapS studlycaps
2767 @end example
2768
2769 These macro definitions can be placed in a header file to minimize the
2770 number of changes to your source code.
2771
2772 @node Makefile
2773 @chapter Additional Makefile and configure information.
2774
2775 @section Makefile Targets
2776 @cindex makefile targets
2777 @cindex targets, makefile
2778
2779 @table @code
2780 @item all
2781 This is the default target.  Depending on what your build/host/target
2782 configuration is, it coordinates all the things that need to be built.
2783
2784 @item doc
2785 Produce info-formatted documentation.  Also, @code{make dvi} is
2786 available for DVI-formatted documentation, and @code{make
2787 generated-manpages} to generate man pages.
2788
2789 @item mostlyclean
2790 Delete the files made while building the compiler.
2791
2792 @item clean
2793 That, and all the other files built by @code{make all}.
2794
2795 @item distclean
2796 That, and all the files created by @code{configure}.
2797
2798 @item extraclean
2799 That, and any temporary or intermediate files, like emacs backup files.
2800
2801 @item maintainer-clean
2802 Distclean plus any file that can be generated from other files.  Note
2803 that additional tools may be required beyond what is normally needed to
2804 build gcc.
2805
2806 @item install
2807 Installs gcc.
2808
2809 @item uninstall
2810 Deletes installed files.
2811
2812 @item check
2813 Run the testsuite.  This creates a @file{testsuite} subdirectory that
2814 has various @file{.sum} and @file{.log} files containing the results of
2815 the testing.  You can run subsets with, for example, @code{make check-gcc}.
2816 You can specify specific tests by setting RUNTESTFLAGS to be the name
2817 of the @file{.exp} file, optionally followed by (for some tests) an equals
2818 and a file wildcard, like:
2819
2820 @example
2821 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*"
2822 @end example
2823
2824 Note that running the testsuite may require additional tools be
2825 installed, such as TCL or dejagnu.
2826
2827 @item bootstrap
2828 Builds gcc three times---once with the native compiler, once with the
2829 native-built compiler it just built, and once with the compiler it built
2830 the second time.  In theory, the last two should produce the same
2831 results, which @code{make compare} can check.  Each step of this process
2832 is called a ``stage'', and the results of each stage @var{N}
2833 (@var{N} = 1@dots{}3) are copied to a subdirectory @file{stage@var{N}/}.
2834
2835 @item bootstrap-lean
2836 Like @code{bootstrap}, except that the various stages are removed once
2837 they're no longer needed.  This saves disk space.
2838
2839 @item bubblestrap
2840 Once bootstrapped, this incrementally rebuilds each of the three stages,
2841 one at a time.  It does this by ``bubbling'' the stages up from their
2842 subdirectories, rebuilding them, and copying them back to their
2843 subdirectories.  This will allow you to, for example, quickly rebuild a
2844 bootstrapped compiler after changing the sources, without having to do a
2845 full bootstrap.
2846
2847 @item quickstrap
2848 Rebuilds the most recently built stage.  Since each stage requires
2849 special invocation, using this target means you don't have to keep track
2850 of which stage you're on or what invocation that stage needs.
2851
2852 @item cleanstrap
2853 Removed everything (@code{make clean}) and rebuilds (@code{make bootstrap}).
2854
2855 @item stage@var{N} (@var{N} = 1@dots{}4)
2856 For each stage, moves the appropriate files to the @file{stage@var{N}}
2857 subdirectory.
2858
2859 @item unstage@var{N} (@var{N} = 1@dots{}4)
2860 Undoes the corresponding @code{stage@var{N}}.
2861
2862 @item restage@var{N} (@var{N} = 1@dots{}4)
2863 Undoes the corresponding @code{stage@var{N}} and rebuilds it with the
2864 appropriate flags.
2865
2866 @item compare
2867 Compares the results of stages 2 and 3.  This ensures that the compiler
2868 is running properly, since it should produce the same object files
2869 regardless of how it itself was compiled.
2870
2871 @end table
2872
2873 @section Configure Terms and History
2874 @cindex configure terms
2875 @cindex canadian
2876
2877 This section is not instructions for building GCC.  If you are trying to
2878 do a build, you should first read @uref{http://gcc.gnu.org/install/} or
2879 whatever installation instructions came with your source package.
2880
2881 The configure and build process has a long and colorful history, and can
2882 be confusing to anyone who doesn't know why things are the way they are.
2883 While there are other documents which describe the configuration process
2884 in detail, here are a few things that everyone working on GCC should
2885 know.
2886
2887 There are three system names that the build knows about: the machine you
2888 are building on (@dfn{build}), the machine that you are building for
2889 (@dfn{host}), and the machine that GCC will produce code for
2890 (@dfn{target}).  When you configure GCC, you specify these with
2891 @option{--build=}, @option{--host=}, and @option{--target=}.
2892
2893 Specifying the host without specifying the build should be avoided, as
2894 @command{configure} may (and once did) assume that the host you specify
2895 is also the build, which may not be true.
2896
2897 If build, host, and target are all the same, this is called a
2898 @dfn{native}.  If build and host are the same but target is different,
2899 this is called a @dfn{cross}.  If build, host, and target are all
2900 different this is called a @dfn{canadian} (for obscure reasons dealing
2901 with Canada's political party and the background of the person working
2902 on the build at that time).  If host and target are the same, but build
2903 is different, you are using a cross-compiler to build a native for a
2904 different system.  Some people call this a @dfn{host-x-host},
2905 @dfn{crossed native}, or @dfn{cross-built native}.  If build and target
2906 are the same, but host is different, you are using a cross compiler to
2907 build a cross compiler that produces code for the machine you're
2908 building on.  This is rare, so there is no common say of describing it
2909 (although I propose calling it a @dfn{crossback}).
2910
2911 If build and host are the same, the GCC you are building will also be
2912 used to build the target libraries (like @code{libstdc++}).  If build and host
2913 are different, you must have already build and installed a cross
2914 compiler that will be used to build the target libraries (if you
2915 configured with @option{--target=foo-bar}, this compiler will be called
2916 @command{foo-bar-gcc}).
2917
2918 In the case of target libraries, the machine you're building for is the
2919 machine you specified with @option{--target}.  So, build is the machine
2920 you're building on (no change there), host is the machine you're
2921 building for (the target libraries are built for the target, so host is
2922 the target you specified), and target doesn't apply (because you're not
2923 building a compiler, you're building libraries).  The configure/make
2924 process will adjust these variables as needed.  It also sets
2925 @code{$with_cross_host} to the original @option{--host} value in case you
2926 need it.
2927
2928 Libiberty, for example, is built twice.  The first time, host comes from
2929 @option{--host} and the second time host comes from @option{--target}.
2930 Historically, libiberty has not been built for the build machine,
2931 though, which causes some interesting issues with programs used to
2932 generate sources for the build.  Fixing this, so that libiberty is built
2933 three times, has long been on the to-do list.
2934
2935 @end ifset
2936
2937 @ifset INTERNALS
2938 @node Portability
2939 @chapter GCC and Portability
2940 @cindex portability
2941 @cindex GCC and portability
2942
2943 The main goal of GCC was to make a good, fast compiler for machines in
2944 the class that the GNU system aims to run on: 32-bit machines that address
2945 8-bit bytes and have several general registers.  Elegance, theoretical
2946 power and simplicity are only secondary.
2947
2948 GCC gets most of the information about the target machine from a machine
2949 description which gives an algebraic formula for each of the machine's
2950 instructions.  This is a very clean way to describe the target.  But when
2951 the compiler needs information that is difficult to express in this
2952 fashion, I have not hesitated to define an ad-hoc parameter to the machine
2953 description.  The purpose of portability is to reduce the total work needed
2954 on the compiler; it was not of interest for its own sake.
2955
2956 @cindex endianness
2957 @cindex autoincrement addressing, availability
2958 @findex abort
2959 GCC does not contain machine dependent code, but it does contain code
2960 that depends on machine parameters such as endianness (whether the most
2961 significant byte has the highest or lowest address of the bytes in a word)
2962 and the availability of autoincrement addressing.  In the RTL-generation
2963 pass, it is often necessary to have multiple strategies for generating code
2964 for a particular kind of syntax tree, strategies that are usable for different
2965 combinations of parameters.  Often I have not tried to address all possible
2966 cases, but only the common ones or only the ones that I have encountered.
2967 As a result, a new target may require additional strategies.  You will know
2968 if this happens because the compiler will call @code{abort}.  Fortunately,
2969 the new strategies can be added in a machine-independent fashion, and will
2970 affect only the target machines that need them.
2971 @end ifset
2972
2973 @ifset INTERNALS
2974 @node Interface
2975 @chapter Interfacing to GCC Output
2976 @cindex interfacing to GCC output
2977 @cindex run-time conventions
2978 @cindex function call conventions
2979 @cindex conventions, run-time
2980
2981 GCC is normally configured to use the same function calling convention
2982 normally in use on the target system.  This is done with the
2983 machine-description macros described (@pxref{Target Macros}).
2984
2985 @cindex unions, returning
2986 @cindex structures, returning
2987 @cindex returning structures and unions
2988 However, returning of structure and union values is done differently on
2989 some target machines.  As a result, functions compiled with PCC
2990 returning such types cannot be called from code compiled with GCC,
2991 and vice versa.  This does not cause trouble often because few Unix
2992 library routines return structures or unions.
2993
2994 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
2995 long in the same registers used for @code{int} or @code{double} return
2996 values.  (GCC typically allocates variables of such types in
2997 registers also.)  Structures and unions of other sizes are returned by
2998 storing them into an address passed by the caller (usually in a
2999 register).  The machine-description macros @code{STRUCT_VALUE} and
3000 @code{STRUCT_INCOMING_VALUE} tell GCC where to pass this address.
3001
3002 By contrast, PCC on most target machines returns structures and unions
3003 of any size by copying the data into an area of static storage, and then
3004 returning the address of that storage as if it were a pointer value.
3005 The caller must copy the data from that memory area to the place where
3006 the value is wanted.  This is slower than the method used by GCC, and
3007 fails to be reentrant.
3008
3009 On some target machines, such as RISC machines and the 80386, the
3010 standard system convention is to pass to the subroutine the address of
3011 where to return the value.  On these machines, GCC has been
3012 configured to be compatible with the standard compiler, when this method
3013 is used.  It may not be compatible for structures of 1, 2, 4 or 8 bytes.
3014
3015 @cindex argument passing
3016 @cindex passing arguments
3017 GCC uses the system's standard convention for passing arguments.  On
3018 some machines, the first few arguments are passed in registers; in
3019 others, all are passed on the stack.  It would be possible to use
3020 registers for argument passing on any machine, and this would probably
3021 result in a significant speedup.  But the result would be complete
3022 incompatibility with code that follows the standard convention.  So this
3023 change is practical only if you are switching to GCC as the sole C
3024 compiler for the system.  We may implement register argument passing on
3025 certain machines once we have a complete GNU system so that we can
3026 compile the libraries with GCC@.
3027
3028 On some machines (particularly the Sparc), certain types of arguments
3029 are passed ``by invisible reference''.  This means that the value is
3030 stored in memory, and the address of the memory location is passed to
3031 the subroutine.
3032
3033 @cindex @code{longjmp} and automatic variables
3034 If you use @code{longjmp}, beware of automatic variables.  ISO C says that
3035 automatic variables that are not declared @code{volatile} have undefined
3036 values after a @code{longjmp}.  And this is all GCC promises to do,
3037 because it is very difficult to restore register variables correctly, and
3038 one of GCC's features is that it can put variables in registers without
3039 your asking it to.
3040
3041 If you want a variable to be unaltered by @code{longjmp}, and you don't
3042 want to write @code{volatile} because old C compilers don't accept it,
3043 just take the address of the variable.  If a variable's address is ever
3044 taken, even if just to compute it and ignore it, then the variable cannot
3045 go in a register:
3046
3047 @example
3048 @{
3049   int careful;
3050   &careful;
3051   @dots{}
3052 @}
3053 @end example
3054
3055 @cindex arithmetic libraries
3056 @cindex math libraries
3057 @opindex msoft-float
3058 Code compiled with GCC may call certain library routines.  Most of
3059 them handle arithmetic for which there are no instructions.  This
3060 includes multiply and divide on some machines, and floating point
3061 operations on any machine for which floating point support is disabled
3062 with @option{-msoft-float}.  Some standard parts of the C library, such as
3063 @code{bcopy} or @code{memcpy}, are also called automatically.  The usual
3064 function call interface is used for calling the library routines.
3065
3066 Some of these routines can be defined in mostly machine-independent C;
3067 they appear in @file{libgcc2.c}.  Others must be hand-written in
3068 assembly language for each processor.  Wherever they are defined, they
3069 are compiled into the support library, @file{libgcc.a}, which is
3070 automatically searched when you link programs with GCC@.
3071 @end ifset
3072
3073 @ifset INTERNALS
3074 @node Passes
3075 @chapter Passes and Files of the Compiler
3076 @cindex passes and files of the compiler
3077 @cindex files and passes of the compiler
3078 @cindex compiler passes and files
3079
3080 @cindex top level of compiler
3081 The overall control structure of the compiler is in @file{toplev.c}.  This
3082 file is responsible for initialization, decoding arguments, opening and
3083 closing files, and sequencing the passes.
3084
3085 @cindex parsing pass
3086 The parsing pass is invoked only once, to parse the entire input.  A
3087 high level tree representation is then generated from the input,
3088 one function at a time.  This tree code is then transformed into RTL
3089 intermediate code, and processed.  The files involved in transforming
3090 the trees into RTL are @file{expr.c}, @file{expmed.c}, and
3091 @file{stmt.c}.
3092 @c Note, the above files aren't strictly the only files involved. It's
3093 @c all over the place (function.c, final.c,etc).  However, those are
3094 @c the files that are supposed to be directly involved, and have
3095 @c their purpose listed as such, so i've only listed them.
3096 The order of trees that are processed, is not
3097 necessarily the same order they are generated from
3098 the input, due to deferred inlining, and other considerations.
3099
3100 @findex rest_of_compilation
3101 @findex rest_of_decl_compilation
3102 Each time the parsing pass reads a complete function definition or
3103 top-level declaration, it calls either the function
3104 @code{rest_of_compilation}, or the function
3105 @code{rest_of_decl_compilation} in @file{toplev.c}, which are
3106 responsible for all further processing necessary, ending with output of
3107 the assembler language.  All other compiler passes run, in sequence,
3108 within @code{rest_of_compilation}.  When that function returns from
3109 compiling a function definition, the storage used for that function
3110 definition's compilation is entirely freed, unless it is an inline
3111 function, or was deferred for some reason (this can occur in
3112 templates, for example).
3113 @ifset USING
3114 (@pxref{Inline,,An Inline Function is As Fast As a Macro}).
3115 @end ifset
3116 @ifclear USING
3117 (@pxref{Inline,,An Inline Function is As Fast As a Macro,gcc.texi,Using GCC}).
3118 @end ifclear
3119
3120 Here is a list of all the passes of the compiler and their source files.
3121 Also included is a description of where debugging dumps can be requested
3122 with @option{-d} options.
3123
3124 @itemize @bullet
3125 @item
3126 Parsing.  This pass reads the entire text of a function definition,
3127 constructing a high level tree representation.  (Because of the semantic
3128 analysis that takes place during this pass, it does more than is
3129 formally considered to be parsing.)
3130
3131 The tree representation does not entirely follow C syntax, because it is
3132 intended to support other languages as well.
3133
3134 Language-specific data type analysis is also done in this pass, and every
3135 tree node that represents an expression has a data type attached.
3136 Variables are represented as declaration nodes.
3137
3138 The language-independent source files for parsing are
3139 @file{tree.c}, @file{fold-const.c}, and @file{stor-layout.c}.
3140 There are also header files @file{tree.h} and @file{tree.def}
3141 which define the format of the tree representation.
3142
3143 C preprocessing, for language front ends, that want or require it, is
3144 performed by cpplib, which is covered in separate documentation.  In
3145 particular, the internals are covered in @xref{Top, ,Cpplib internals,
3146 cppinternals, Cpplib Internals}.
3147
3148 @c Avoiding overfull is tricky here.
3149 The source files to parse C are
3150 @file{c-convert.c},
3151 @file{c-decl.c},
3152 @file{c-errors.c},
3153 @file{c-lang.c},
3154 @file{c-parse.in},
3155 @file{c-aux-info.c},
3156 and
3157 @file{c-typeck.c},
3158 along with a header file
3159 @file{c-tree.h}
3160 and some files shared with Objective-C and C++.
3161
3162 The source files for parsing C++ are in @file{cp/}.
3163 They are @file{parse.y},
3164 @file{class.c},
3165 @file{cvt.c}, @file{decl.c}, @file{decl2.c},
3166 @file{except.c},
3167 @file{expr.c}, @file{init.c}, @file{lex.c},
3168 @file{method.c}, @file{ptree.c},
3169 @file{search.c}, @file{spew.c},
3170 @file{semantics.c}, @file{tree.c},
3171 @file{typeck2.c}, and
3172 @file{typeck.c}, along with header files @file{cp-tree.def},
3173 @file{cp-tree.h}, and @file{decl.h}.
3174
3175 The special source files for parsing Objective-C are in @file{objc/}.
3176 They are @file{objc-act.c}, @file{objc-tree.def}, and @file{objc-act.h}.
3177 Certain C-specific files are used for this as well.
3178
3179 The files
3180 @file{c-common.c},
3181 @file{c-common.def},
3182 @file{c-dump.c},
3183 @file{c-format.c},
3184 @file{c-pragma.c},
3185 @file{c-semantics.c},
3186 and
3187 @file{c-lex.c},
3188 along with header files
3189 @file{c-common.h},
3190 @file{c-dump.h},
3191 @file{c-lex.h},
3192 and
3193 @file{c-pragma.h},
3194 are also used for all of the above languages.
3195
3196
3197 @cindex Tree optimization
3198 @item
3199 Tree optimization.   This is the optimization of the tree
3200 representation, before converting into RTL code.
3201
3202 @cindex inline on trees, automatic
3203 Currently, the main optimization performed here is tree-based
3204 inlining.
3205 This is implemented for C++ in @file{cp/optimize.c}.  Note that
3206 tree based inlining turns off rtx based inlining (since it's more
3207 powerful, it would be a waste of time to do rtx based inlining in
3208 addition).
3209 The C front end currently does not perform tree based inlining.
3210
3211 @cindex constant folding
3212 @cindex arithmetic simplifications
3213 @cindex simplifications, arithmetic
3214 Constant folding and some arithmetic simplifications are also done
3215 during this pass, on the tree representation.
3216 The routines that perform these tasks are located in @file{fold-const.c}.
3217
3218 @cindex RTL generation
3219 @item
3220 RTL generation.  This is the conversion of syntax tree into RTL code.
3221
3222 @cindex target-parameter-dependent code
3223 This is where the bulk of target-parameter-dependent code is found,
3224 since often it is necessary for strategies to apply only when certain
3225 standard kinds of instructions are available.  The purpose of named
3226 instruction patterns is to provide this information to the RTL
3227 generation pass.
3228
3229 @cindex tail recursion optimization
3230 Optimization is done in this pass for @code{if}-conditions that are
3231 comparisons, boolean operations or conditional expressions.  Tail
3232 recursion is detected at this time also.  Decisions are made about how
3233 best to arrange loops and how to output @code{switch} statements.
3234
3235 @c Avoiding overfull is tricky here.
3236 The source files for RTL generation include
3237 @file{stmt.c},
3238 @file{calls.c},
3239 @file{expr.c},
3240 @file{explow.c},
3241 @file{expmed.c},
3242 @file{function.c},
3243 @file{optabs.c}
3244 and @file{emit-rtl.c}.
3245 Also, the file
3246 @file{insn-emit.c}, generated from the machine description by the
3247 program @code{genemit}, is used in this pass.  The header file
3248 @file{expr.h} is used for communication within this pass.
3249
3250 @findex genflags
3251 @findex gencodes
3252 The header files @file{insn-flags.h} and @file{insn-codes.h},
3253 generated from the machine description by the programs @code{genflags}
3254 and @code{gencodes}, tell this pass which standard names are available
3255 for use and which patterns correspond to them.
3256
3257 Aside from debugging information output, none of the following passes
3258 refers to the tree structure representation of the function (only
3259 part of which is saved).
3260
3261 @cindex inline on rtx, automatic
3262 The decision of whether the function can and should be expanded inline
3263 in its subsequent callers is made at the end of rtl generation.  The
3264 function must meet certain criteria, currently related to the size of
3265 the function and the types and number of parameters it has.  Note that
3266 this function may contain loops, recursive calls to itself
3267 (tail-recursive functions can be inlined!), gotos, in short, all
3268 constructs supported by GCC@.  The file @file{integrate.c} contains
3269 the code to save a function's rtl for later inlining and to inline that
3270 rtl when the function is called.  The header file @file{integrate.h}
3271 is also used for this purpose.
3272
3273 @opindex dr
3274 The option @option{-dr} causes a debugging dump of the RTL code after
3275 this pass.  This dump file's name is made by appending @samp{.rtl} to
3276 the input file name.
3277
3278 @c Should the exception handling pass be talked about here?
3279
3280 @cindex sibling call optimization
3281 @item
3282 Sibiling call optimization.   This pass performs tail recursion
3283 elimination, and tail and sibling call optimizations.  The purpose of
3284 these optimizations is to reduce the overhead of function calls,
3285 whenever possible.
3286
3287 The source file of this pass is @file{sibcall.c}
3288
3289 @opindex di
3290 The option @option{-di} causes a debugging dump of the RTL code after
3291 this pass is run.  This dump file's name is made by appending
3292 @samp{.sibling} to the input file name.
3293
3294 @cindex jump optimization
3295 @cindex unreachable code
3296 @cindex dead code
3297 @item
3298 Jump optimization.  This pass simplifies jumps to the following
3299 instruction, jumps across jumps, and jumps to jumps.  It deletes
3300 unreferenced labels and unreachable code, except that unreachable code
3301 that contains a loop is not recognized as unreachable in this pass.
3302 (Such loops are deleted later in the basic block analysis.)  It also
3303 converts some code originally written with jumps into sequences of
3304 instructions that directly set values from the results of comparisons,
3305 if the machine has such instructions.
3306
3307 Jump optimization is performed two or three times.  The first time is
3308 immediately following RTL generation.  The second time is after CSE,
3309 but only if CSE says repeated jump optimization is needed.  The
3310 last time is right before the final pass.  That time, cross-jumping
3311 and deletion of no-op move instructions are done together with the
3312 optimizations described above.
3313
3314 The source file of this pass is @file{jump.c}.
3315
3316 @opindex dj
3317 The option @option{-dj} causes a debugging dump of the RTL code after
3318 this pass is run for the first time.  This dump file's name is made by
3319 appending @samp{.jump} to the input file name.
3320
3321
3322 @cindex register use analysis
3323 @item
3324 Register scan.  This pass finds the first and last use of each
3325 register, as a guide for common subexpression elimination.  Its source
3326 is in @file{regclass.c}.
3327
3328 @cindex jump threading
3329 @item
3330 @opindex fthread-jumps
3331 Jump threading.  This pass detects a condition jump that branches to an
3332 identical or inverse test.  Such jumps can be @samp{threaded} through
3333 the second conditional test.  The source code for this pass is in
3334 @file{jump.c}.  This optimization is only performed if
3335 @option{-fthread-jumps} is enabled.
3336
3337 @cindex SSA optimizations
3338 @cindex Single Static Assignment optimizations
3339 @opindex fssa
3340 @item
3341 Static Single Assignment (SSA) based optimization passes.  The
3342 SSA conversion passes (to/from) are turned on by the @option{-fssa}
3343 option (it is also done automatically if you enable an SSA optimization pass).
3344 These passes utilize a form called Static Single Assignment.  In SSA form,
3345 each variable (pseudo register) is only set once, giving you def-use
3346 and use-def chains for free, and enabling a lot more optimization
3347 passes to be run in linear time.
3348 Conversion to and from SSA form is handled by functions in
3349 @file{ssa.c}.
3350
3351 @opindex de
3352 The option @option{-de} causes a debugging dump of the RTL code after
3353 this pass.  This dump file's name is made by appending @samp{.ssa} to
3354 the input file name.
3355 @itemize @bullet
3356 @cindex SSA Conditional Constant Propagation
3357 @cindex Conditional Constant Propagation, SSA based
3358 @cindex conditional constant propagation
3359 @opindex fssa-ccp
3360 @item
3361 SSA Conditional Constant Propagation.  Turned on by the @option{-fssa-ccp}
3362 SSA Aggressive Dead Code Elimination.  Turned on by the @option{-fssa-dce}
3363 option.  This pass performs conditional constant propagation to simplify
3364 instructions including conditional branches.  This pass is more aggressive
3365 than the constant propgation done by the CSE and GCSE pases, but operates
3366 in linear time.
3367
3368 @opindex dW
3369 The option @option{-dW} causes a debugging dump of the RTL code after
3370 this pass.  This dump file's name is made by appending @samp{.ssaccp} to
3371 the input file name.
3372
3373 @cindex SSA DCE
3374 @cindex DCE, SSA based
3375 @cindex dead code elimination
3376 @opindex fssa-dce
3377 @item
3378 SSA Aggressive Dead Code Elimination.  Turned on by the @option{-fssa-dce}
3379 option.  This pass performs elimination of code considered unnecessary because
3380 it has no externally visible effects on the program.  It operates in
3381 linear time.
3382
3383 @opindex dX
3384 The option @option{-dX} causes a debugging dump of the RTL code after
3385 this pass.  This dump file's name is made by appending @samp{.ssadce} to
3386 the input file name.
3387 @end itemize
3388
3389 @cindex common subexpression elimination
3390 @cindex constant propagation
3391 @item
3392 Common subexpression elimination.  This pass also does constant
3393 propagation.  Its source files are @file{cse.c}, and @file{cselib.c}.
3394 If constant  propagation causes conditional jumps to become
3395 unconditional or to become no-ops, jump optimization is run again when
3396 CSE is finished.
3397
3398 @opindex ds
3399 The option @option{-ds} causes a debugging dump of the RTL code after
3400 this pass.  This dump file's name is made by appending @samp{.cse} to
3401 the input file name.
3402
3403 @cindex global common subexpression elimination
3404 @cindex constant propagation
3405 @cindex copy propagation
3406 @item
3407 Global common subexpression elimination.  This pass performs two
3408 different types of GCSE  depending on whether you are optimizing for
3409 size or not (LCM based GCSE tends to increase code size for a gain in
3410 speed, while Morel-Renvoise based GCSE does not).
3411 When optimizing for size, GCSE is done using Morel-Renvoise Partial
3412 Redundancy Elimination, with the exception that it does not try to move
3413 invariants out of loops---that is left to  the loop optimization pass.
3414 If MR PRE GCSE is done, code hoisting (aka unification) is also done, as
3415 well as load motion.
3416 If you are optimizing for speed, LCM (lazy code motion) based GCSE is
3417 done.  LCM is based on the work of Knoop, Ruthing, and Steffen.  LCM
3418 based GCSE also does loop invariant code motion.  We also perform load
3419 and store motion when optimizing for speed.
3420 Regardless of which type of GCSE is used, the GCSE pass also performs
3421 global constant and  copy propagation.
3422
3423 The source file for this pass is @file{gcse.c}, and the LCM routines
3424 are in @file{lcm.c}.
3425
3426 @opindex dG
3427 The option @option{-dG} causes a debugging dump of the RTL code after
3428 this pass.  This dump file's name is made by appending @samp{.gcse} to
3429 the input file name.
3430
3431 @cindex loop optimization
3432 @cindex code motion
3433 @cindex strength-reduction
3434 @item
3435 Loop optimization.  This pass moves constant expressions out of loops,
3436 and optionally does strength-reduction and loop unrolling as well.
3437 Its source files are @file{loop.c} and @file{unroll.c}, plus the header
3438 @file{loop.h} used for communication between them.  Loop unrolling uses
3439 some functions in @file{integrate.c} and the header @file{integrate.h}.
3440 Loop dependency analysis routines are contained in @file{dependence.c}.
3441
3442 @opindex dL
3443 The option @option{-dL} causes a debugging dump of the RTL code after
3444 this pass.  This dump file's name is made by appending @samp{.loop} to
3445 the input file name.
3446
3447 @item
3448 @opindex frerun-cse-after-loop
3449 If @option{-frerun-cse-after-loop} was enabled, a second common
3450 subexpression elimination pass is performed after the loop optimization
3451 pass.  Jump threading is also done again at this time if it was specified.
3452
3453 @opindex dt
3454 The option @option{-dt} causes a debugging dump of the RTL code after
3455 this pass.  This dump file's name is made by appending @samp{.cse2} to
3456 the input file name.
3457
3458 @cindex data flow analysis
3459 @cindex analysis, data flow
3460 @cindex basic blocks
3461 @item
3462 Data flow analysis (@file{flow.c}).  This pass divides the program
3463 into basic blocks (and in the process deletes unreachable loops); then
3464 it computes which pseudo-registers are live at each point in the
3465 program, and makes the first instruction that uses a value point at
3466 the instruction that computed the value.
3467
3468 @cindex autoincrement/decrement analysis
3469 This pass also deletes computations whose results are never used, and
3470 combines memory references with add or subtract instructions to make
3471 autoincrement or autodecrement addressing.
3472
3473 @opindex df
3474 The option @option{-df} causes a debugging dump of the RTL code after
3475 this pass.  This dump file's name is made by appending @samp{.flow} to
3476 the input file name.  If stupid register allocation is in use, this
3477 dump file reflects the full results of such allocation.
3478
3479 @cindex instruction combination
3480 @item
3481 Instruction combination (@file{combine.c}).  This pass attempts to
3482 combine groups of two or three instructions that are related by data
3483 flow into single instructions.  It combines the RTL expressions for
3484 the instructions by substitution, simplifies the result using algebra,
3485 and then attempts to match the result against the machine description.
3486
3487 @opindex dc
3488 The option @option{-dc} causes a debugging dump of the RTL code after
3489 this pass.  This dump file's name is made by appending @samp{.combine}
3490 to the input file name.
3491
3492 @cindex if conversion
3493 @item
3494 If-conversion is a transformation that transforms control dependencies
3495 into data dependencies (IE it transforms conditional code into a
3496 single control stream).
3497 It is implemented in the file @file{ifcvt.c}.
3498
3499 @opindex dE
3500 The option @option{-dE} causes a debugging dump of the RTL code after
3501 this pass.  This dump file's name is made by appending @samp{.ce} to
3502 the input file name.
3503
3504 @cindex register movement
3505 @item
3506 Register movement (@file{regmove.c}).  This pass looks for cases where
3507 matching constraints would force an instruction to need a reload, and
3508 this reload would be a register to register move.  It then attempts
3509 to change the registers used by the instruction to avoid the move
3510 instruction.
3511
3512 @opindex dN
3513 The option @option{-dN} causes a debugging dump of the RTL code after
3514 this pass.  This dump file's name is made by appending @samp{.regmove}
3515 to the input file name.
3516
3517 @cindex instruction scheduling
3518 @cindex scheduling, instruction
3519 @item
3520 Instruction scheduling (@file{sched.c}).  This pass looks for
3521 instructions whose output will not be available by the time that it is
3522 used in subsequent instructions.  (Memory loads and floating point
3523 instructions often have this behavior on RISC machines).  It re-orders
3524 instructions within a basic block to try to separate the definition and
3525 use of items that otherwise would cause pipeline stalls.
3526
3527 Instruction scheduling is performed twice.  The first time is immediately
3528 after instruction combination and the second is immediately after reload.
3529
3530 @opindex dS
3531 The option @option{-dS} causes a debugging dump of the RTL code after this
3532 pass is run for the first time.  The dump file's name is made by
3533 appending @samp{.sched} to the input file name.
3534
3535 @cindex register class preference pass
3536 @item
3537 Register class preferencing.  The RTL code is scanned to find out
3538 which register class is best for each pseudo register.  The source
3539 file is @file{regclass.c}.
3540
3541 @cindex register allocation
3542 @cindex local register allocation
3543 @item
3544 Local register allocation (@file{local-alloc.c}).  This pass allocates
3545 hard registers to pseudo registers that are used only within one basic
3546 block.  Because the basic block is linear, it can use fast and
3547 powerful techniques to do a very good job.
3548
3549 @opindex dl
3550 The option @option{-dl} causes a debugging dump of the RTL code after
3551 this pass.  This dump file's name is made by appending @samp{.lreg} to
3552 the input file name.
3553
3554 @cindex global register allocation
3555 @item
3556 Global register allocation (@file{global.c}).  This pass
3557 allocates hard registers for the remaining pseudo registers (those
3558 whose life spans are not contained in one basic block).
3559
3560 @cindex reloading
3561 @item
3562 Reloading.  This pass renumbers pseudo registers with the hardware
3563 registers numbers they were allocated.  Pseudo registers that did not
3564 get hard registers are replaced with stack slots.  Then it finds
3565 instructions that are invalid because a value has failed to end up in
3566 a register, or has ended up in a register of the wrong kind.  It fixes
3567 up these instructions by reloading the problematical values
3568 temporarily into registers.  Additional instructions are generated to
3569 do the copying.
3570
3571 The reload pass also optionally eliminates the frame pointer and inserts
3572 instructions to save and restore call-clobbered registers around calls.
3573
3574 Source files are @file{reload.c} and @file{reload1.c}, plus the header
3575 @file{reload.h} used for communication between them.
3576
3577 @opindex dg
3578 The option @option{-dg} causes a debugging dump of the RTL code after
3579 this pass.  This dump file's name is made by appending @samp{.greg} to
3580 the input file name.
3581
3582 @cindex instruction scheduling
3583 @cindex scheduling, instruction
3584 @item
3585 Instruction scheduling is repeated here to try to avoid pipeline stalls
3586 due to memory loads generated for spilled pseudo registers.
3587
3588 @opindex dR
3589 The option @option{-dR} causes a debugging dump of the RTL code after
3590 this pass.  This dump file's name is made by appending @samp{.sched2}
3591 to the input file name.
3592
3593 @cindex basic block reordering
3594 @cindex reordering, block
3595 @item
3596 Basic block reordering.  This pass implements profile guided code
3597 positioning.  If profile information is not available, various types of
3598 static analysis are performed to make the predictions normally coming
3599 from the profile feedback (IE execution frequency, branch probability,
3600 etc).  It is implemented in the file @file{bb-reorder.c}, and the
3601 various prediction routines are in @file{predict.c}.
3602
3603 @opindex dB
3604 The option @option{-dB} causes a debugging dump of the RTL code after
3605 this pass.  This dump file's name is made by appending @samp{.bbro} to
3606 the input file name.
3607
3608 @cindex cross-jumping
3609 @cindex no-op move instructions
3610 @item
3611 Jump optimization is repeated, this time including cross-jumping
3612 and deletion of no-op move instructions.
3613
3614 @opindex dJ
3615 The option @option{-dJ} causes a debugging dump of the RTL code after
3616 this pass.  This dump file's name is made by appending @samp{.jump2}
3617 to the input file name.
3618
3619 @cindex delayed branch scheduling
3620 @cindex scheduling, delayed branch
3621 @item
3622 Delayed branch scheduling.  This optional pass attempts to find
3623 instructions that can go into the delay slots of other instructions,
3624 usually jumps and calls.  The source file name is @file{reorg.c}.
3625
3626 @opindex dd
3627 The option @option{-dd} causes a debugging dump of the RTL code after
3628 this pass.  This dump file's name is made by appending @samp{.dbr}
3629 to the input file name.
3630
3631 @cindex branch shortening
3632 @item
3633 Branch shortening.  On many RISC machines, branch instructions have a
3634 limited range.  Thus, longer sequences of instructions must be used for
3635 long branches.  In this pass, the compiler figures out what how far each
3636 instruction will be from each other instruction, and therefore whether
3637 the usual instructions, or the longer sequences, must be used for each
3638 branch.
3639
3640 @cindex register-to-stack conversion
3641 @item
3642 Conversion from usage of some hard registers to usage of a register
3643 stack may be done at this point.  Currently, this is supported only
3644 for the floating-point registers of the Intel 80387 coprocessor.   The
3645 source file name is @file{reg-stack.c}.
3646
3647 @opindex dk
3648 The options @option{-dk} causes a debugging dump of the RTL code after
3649 this pass.  This dump file's name is made by appending @samp{.stack}
3650 to the input file name.
3651
3652 @cindex final pass
3653 @cindex peephole optimization
3654 @item
3655 Final.  This pass outputs the assembler code for the function.  It is
3656 also responsible for identifying spurious test and compare
3657 instructions.  Machine-specific peephole optimizations are performed
3658 at the same time.  The function entry and exit sequences are generated
3659 directly as assembler code in this pass; they never exist as RTL@.
3660
3661 The source files are @file{final.c} plus @file{insn-output.c}; the
3662 latter is generated automatically from the machine description by the
3663 tool @file{genoutput}.  The header file @file{conditions.h} is used
3664 for communication between these files.
3665
3666 @cindex debugging information generation
3667 @item
3668 Debugging information output.  This is run after final because it must
3669 output the stack slot offsets for pseudo registers that did not get
3670 hard registers.  Source files are @file{dbxout.c} for DBX symbol table
3671 format, @file{sdbout.c} for SDB symbol table format,  @file{dwarfout.c}
3672 for DWARF symbol table format, and the files @file{dwarf2out.c} and
3673 @file{dwarf2asm.c} for DWARF2 symbol table format.
3674 @end itemize
3675
3676 Some additional files are used by all or many passes:
3677
3678 @itemize @bullet
3679 @item
3680 Every pass uses @file{machmode.def} and @file{machmode.h} which define
3681 the machine modes.
3682
3683 @item
3684 Several passes use @file{real.h}, which defines the default
3685 representation of floating point constants and how to operate on them.
3686
3687 @item
3688 All the passes that work with RTL use the header files @file{rtl.h}
3689 and @file{rtl.def}, and subroutines in file @file{rtl.c}.  The tools
3690 @code{gen*} also use these files to read and work with the machine
3691 description RTL@.
3692
3693 @item
3694 All the tools that read the machine description use support routines
3695 found in @file{gensupport.c}, @file{errors.c}, and @file{read-rtl.c}.
3696
3697 @findex genconfig
3698 @item
3699 Several passes refer to the header file @file{insn-config.h} which
3700 contains a few parameters (C macro definitions) generated
3701 automatically from the machine description RTL by the tool
3702 @code{genconfig}.
3703
3704 @cindex instruction recognizer
3705 @item
3706 Several passes use the instruction recognizer, which consists of
3707 @file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c}
3708 and @file{insn-extract.c} that are generated automatically from the
3709 machine description by the tools @file{genrecog} and
3710 @file{genextract}.
3711
3712 @item
3713 Several passes use the header files @file{regs.h} which defines the
3714 information recorded about pseudo register usage, and @file{basic-block.h}
3715 which defines the information recorded about basic blocks.
3716
3717 @item
3718 @file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector
3719 with a bit for each hard register, and some macros to manipulate it.
3720 This type is just @code{int} if the machine has few enough hard registers;
3721 otherwise it is an array of @code{int} and some of the macros expand
3722 into loops.
3723
3724 @item
3725 Several passes use instruction attributes.  A definition of the
3726 attributes defined for a particular machine is in file
3727 @file{insn-attr.h}, which is generated from the machine description by
3728 the program @file{genattr}.  The file @file{insn-attrtab.c} contains
3729 subroutines to obtain the attribute values for insns.  It is generated
3730 from the machine description by the program @file{genattrtab}.
3731 @end itemize
3732 @end ifset
3733
3734 @ifset INTERNALS
3735 @include c-tree.texi
3736 @include rtl.texi
3737 @include md.texi
3738 @include tm.texi
3739 @end ifset
3740
3741 @ifset INTERNALS
3742 @node Config
3743 @chapter The Configuration File
3744 @cindex configuration file
3745 @cindex @file{xm-@var{machine}.h}
3746
3747 The configuration file @file{xm-@var{machine}.h} contains macro
3748 definitions that describe the machine and system on which the compiler
3749 is running, unlike the definitions in @file{@var{machine}.h}, which
3750 describe the machine for which the compiler is producing output.  Most
3751 of the values in @file{xm-@var{machine}.h} are actually the same on all
3752 machines that GCC runs on, so large parts of all configuration files
3753 are identical.  But there are some macros that vary:
3754
3755 @table @code
3756 @findex USG
3757 @item USG
3758 Define this macro if the host system is System V@.
3759
3760 @findex VMS
3761 @item VMS
3762 Define this macro if the host system is VMS@.
3763
3764 @findex FATAL_EXIT_CODE
3765 @item FATAL_EXIT_CODE
3766 A C expression for the status code to be returned when the compiler
3767 exits after serious errors.  The default is the system-provided macro
3768 @samp{EXIT_FAILURE}, or @samp{1} if the system doesn't define that
3769 macro.  Define this macro only if these defaults are incorrect.
3770
3771 @findex SUCCESS_EXIT_CODE
3772 @item SUCCESS_EXIT_CODE
3773 A C expression for the status code to be returned when the compiler
3774 exits without serious errors.  (Warnings are not serious errors.)  The
3775 default is the system-provided macro @samp{EXIT_SUCCESS}, or @samp{0} if
3776 the system doesn't define that macro.  Define this macro only if these
3777 defaults are incorrect.
3778
3779 @findex HOST_WORDS_BIG_ENDIAN
3780 @item HOST_WORDS_BIG_ENDIAN
3781 Defined if the host machine stores words of multi-word values in
3782 big-endian order.  (GCC does not depend on the host byte ordering
3783 within a word.)
3784
3785 @findex HOST_FLOAT_WORDS_BIG_ENDIAN
3786 @item HOST_FLOAT_WORDS_BIG_ENDIAN
3787 Define this macro to be 1 if the host machine stores @code{DFmode},
3788 @code{XFmode} or @code{TFmode} floating point numbers in memory with the
3789 word containing the sign bit at the lowest address; otherwise, define it
3790 to be zero.
3791
3792 This macro need not be defined if the ordering is the same as for
3793 multi-word integers.
3794
3795 @findex HOST_FLOAT_FORMAT
3796 @item HOST_FLOAT_FORMAT
3797 A numeric code distinguishing the floating point format for the host
3798 machine.  See @code{TARGET_FLOAT_FORMAT} in @ref{Storage Layout} for the
3799 alternatives and default.
3800
3801 @findex HOST_BITS_PER_CHAR
3802 @item HOST_BITS_PER_CHAR
3803 A C expression for the number of bits in @code{char} on the host
3804 machine.
3805
3806 @findex HOST_BITS_PER_SHORT
3807 @item HOST_BITS_PER_SHORT
3808 A C expression for the number of bits in @code{short} on the host
3809 machine.
3810
3811 @findex HOST_BITS_PER_INT
3812 @item HOST_BITS_PER_INT
3813 A C expression for the number of bits in @code{int} on the host
3814 machine.
3815
3816 @findex HOST_BITS_PER_LONG
3817 @item HOST_BITS_PER_LONG
3818 A C expression for the number of bits in @code{long} on the host
3819 machine.
3820
3821 @findex HOST_BITS_PER_LONGLONG
3822 @item HOST_BITS_PER_LONGLONG
3823 A C expression for the number of bits in @code{long long} on the host
3824 machine.
3825
3826 @findex ONLY_INT_FIELDS
3827 @item ONLY_INT_FIELDS
3828 Define this macro to indicate that the host compiler only supports
3829 @code{int} bit-fields, rather than other integral types, including
3830 @code{enum}, as do most C compilers.
3831
3832 @findex OBSTACK_CHUNK_SIZE
3833 @item OBSTACK_CHUNK_SIZE
3834 A C expression for the size of ordinary obstack chunks.
3835 If you don't define this, a usually-reasonable default is used.
3836
3837 @findex OBSTACK_CHUNK_ALLOC
3838 @item OBSTACK_CHUNK_ALLOC
3839 The function used to allocate obstack chunks.
3840 If you don't define this, @code{xmalloc} is used.
3841
3842 @findex OBSTACK_CHUNK_FREE
3843 @item OBSTACK_CHUNK_FREE
3844 The function used to free obstack chunks.
3845 If you don't define this, @code{free} is used.
3846
3847 @findex USE_C_ALLOCA
3848 @item USE_C_ALLOCA
3849 Define this macro to indicate that the compiler is running with the
3850 @code{alloca} implemented in C@.  This version of @code{alloca} can be
3851 found in the file @file{alloca.c}; to use it, you must also alter the
3852 @file{Makefile} variable @code{ALLOCA}.  (This is done automatically
3853 for the systems on which we know it is needed.)
3854
3855 If you do define this macro, you should probably do it as follows:
3856
3857 @example
3858 #ifndef __GNUC__
3859 #define USE_C_ALLOCA
3860 #else
3861 #define alloca __builtin_alloca
3862 #endif
3863 @end example
3864
3865 @noindent
3866 so that when the compiler is compiled with GCC it uses the more
3867 efficient built-in @code{alloca} function.
3868
3869 @item FUNCTION_CONVERSION_BUG
3870 @findex FUNCTION_CONVERSION_BUG
3871 Define this macro to indicate that the host compiler does not properly
3872 handle converting a function value to a pointer-to-function when it is
3873 used in an expression.
3874
3875 @findex MULTIBYTE_CHARS
3876 @item MULTIBYTE_CHARS
3877 Define this macro to enable support for multibyte characters in the
3878 input to GCC@.  This requires that the host system support the ISO C
3879 library functions for converting multibyte characters to wide
3880 characters.
3881
3882 @findex POSIX
3883 @item POSIX
3884 Define this if your system is POSIX.1 compliant.
3885
3886 @findex PATH_SEPARATOR
3887 @item PATH_SEPARATOR
3888 Define this macro to be a C character constant representing the
3889 character used to separate components in paths.  The default value is
3890 the colon character
3891
3892 @findex DIR_SEPARATOR
3893 @item DIR_SEPARATOR
3894 If your system uses some character other than slash to separate
3895 directory names within a file specification, define this macro to be a C
3896 character constant specifying that character.  When GCC displays file
3897 names, the character you specify will be used.  GCC will test for
3898 both slash and the character you specify when parsing filenames.
3899
3900 @findex DIR_SEPARATOR_2
3901 @item DIR_SEPARATOR_2
3902 If your system uses an alternative character other than
3903 @samp{DIR_SEPARATOR} to separate directory names within a file
3904 specification, define this macro to be a C character constant specifying
3905 that character.  If you define this macro, GCC will test for slash,
3906 @samp{DIR_SEPARATOR}, and @samp{DIR_SEPARATOR_2} when parsing filenames.
3907
3908 @findex TARGET_OBJECT_SUFFIX
3909 @item TARGET_OBJECT_SUFFIX
3910 Define this macro to be a C string representing the suffix for object
3911 files on your target machine.  If you do not define this macro, GCC will
3912 use @samp{.o} as the suffix for object files.
3913
3914 @findex TARGET_EXECUTABLE_SUFFIX
3915 @item TARGET_EXECUTABLE_SUFFIX
3916 Define this macro to be a C string representing the suffix to be
3917 automatically added to executable files on your target machine.  If you
3918 do not define this macro, GCC will use the null string as the suffix for
3919 executable files.
3920
3921 @findex HOST_OBJECT_SUFFIX
3922 @item HOST_OBJECT_SUFFIX
3923 Define this macro to be a C string representing the suffix for object
3924 files on your host machine (@samp{xm-*.h}).  If you do not define this
3925 macro, GCC will use @samp{.o} as the suffix for object files.
3926
3927 @findex HOST_EXECUTABLE_SUFFIX
3928 @item HOST_EXECUTABLE_SUFFIX
3929 Define this macro to be a C string representing the suffix for
3930 executable files on your host machine (@samp{xm-*.h}).  If you do not
3931 define this macro, GCC will use the null string as the suffix for
3932 executable files.
3933
3934 @findex HOST_BIT_BUCKET
3935 @item HOST_BIT_BUCKET
3936 The name of a file or file-like object on the host system which acts as
3937 a ``bit bucket''.  If you do not define this macro, GCC will use
3938 @samp{/dev/null} as the bit bucket.  If the target does not support a
3939 bit bucket, this should be defined to the null string, or some other
3940 invalid filename.  If the bit bucket is not writable, GCC will use a
3941 temporary file instead.
3942
3943 @findex COLLECT_EXPORT_LIST
3944 @item COLLECT_EXPORT_LIST
3945 If defined, @code{collect2} will scan the individual object files
3946 specified on its command line and create an export list for the linker.
3947 Define this macro for systems like AIX, where the linker discards
3948 object files that are not referenced from @code{main} and uses export
3949 lists.
3950
3951 @findex COLLECT2_HOST_INITIALIZATION
3952 @item COLLECT2_HOST_INITIALIZATION
3953 If defined, a C statement (sans semicolon) that performs host-dependent
3954 initialization when @code{collect2} is being initialized.
3955
3956 @findex GCC_DRIVER_HOST_INITIALIZATION
3957 @item GCC_DRIVER_HOST_INITIALIZATION
3958 If defined, a C statement (sans semicolon) that performs host-dependent
3959 initialization when a compilation driver is being initialized.
3960
3961 @findex UPDATE_PATH_HOST_CANONICALIZE
3962 @item UPDATE_PATH_HOST_CANONICALIZE (@var{path})
3963 If defined, a C statement (sans semicolon) that performs host-dependent
3964 canonicalization when a path used in a compilation driver or
3965 preprocessor is canonicalized.  @var{path} is a malloc-ed path to be
3966 canonicalized.  If the C statement does canonicalize @var{path} into a
3967 different buffer, the old path should be freed and the new buffer should
3968 have been allocated with malloc.
3969 @end table
3970
3971 @findex bzero
3972 @findex bcmp
3973 In addition, configuration files for system V define @code{bcopy},
3974 @code{bzero} and @code{bcmp} as aliases.  Some files define @code{alloca}
3975 as a macro when compiled with GCC, in order to take advantage of the
3976 benefit of GCC's built-in @code{alloca}.
3977
3978 @node Fragments
3979 @chapter Makefile Fragments
3980 @cindex makefile fragment
3981
3982 When you configure GCC using the @file{configure} script
3983 (@pxref{Installation}), it will construct the file @file{Makefile} from
3984 the template file @file{Makefile.in}.  When it does this, it will
3985 incorporate makefile fragment files from the @file{config} directory,
3986 named @file{t-@var{target}} and @file{x-@var{host}}.  If these files do
3987 not exist, it means nothing needs to be added for a given target or
3988 host.
3989
3990 @menu
3991 * Target Fragment:: Writing the @file{t-@var{target}} file.
3992 * Host Fragment::   Writing the @file{x-@var{host}} file.
3993 @end menu
3994
3995 @node Target Fragment
3996 @section The Target Makefile Fragment
3997 @cindex target makefile fragment
3998 @cindex @file{t-@var{target}}
3999
4000 The target makefile fragment, @file{t-@var{target}}, defines special
4001 target dependent variables and targets used in the @file{Makefile}:
4002
4003 @table @code
4004 @findex LIBGCC2_CFLAGS
4005 @item LIBGCC2_CFLAGS
4006 Compiler flags to use when compiling @file{libgcc2.c}.
4007
4008 @findex LIB2FUNCS_EXTRA
4009 @item LIB2FUNCS_EXTRA
4010 A list of source file names to be compiled or assembled and inserted
4011 into @file{libgcc.a}.
4012
4013 @findex Floating Point Emulation
4014 @item Floating Point Emulation
4015 To have GCC include software floating point libraries in @file{libgcc.a}
4016 define @code{FPBIT} and @code{DPBIT} along with a few rules as follows:
4017 @smallexample
4018 # We want fine grained libraries, so use the new code
4019 # to build the floating point emulation libraries.
4020 FPBIT = fp-bit.c
4021 DPBIT = dp-bit.c
4022
4023
4024 fp-bit.c: $(srcdir)/config/fp-bit.c
4025         echo '#define FLOAT' > fp-bit.c
4026         cat $(srcdir)/config/fp-bit.c >> fp-bit.c
4027
4028 dp-bit.c: $(srcdir)/config/fp-bit.c
4029         cat $(srcdir)/config/fp-bit.c > dp-bit.c
4030 @end smallexample
4031
4032 You may need to provide additional #defines at the beginning of @file{fp-bit.c}
4033 and @file{dp-bit.c} to control target endianness and other options.
4034
4035
4036 @findex CRTSTUFF_T_CFLAGS
4037 @item CRTSTUFF_T_CFLAGS
4038 Special flags used when compiling @file{crtstuff.c}.
4039 @xref{Initialization}.
4040
4041 @findex CRTSTUFF_T_CFLAGS_S
4042 @item CRTSTUFF_T_CFLAGS_S
4043 Special flags used when compiling @file{crtstuff.c} for shared
4044 linking.  Used if you use @file{crtbeginS.o} and @file{crtendS.o}
4045 in @code{EXTRA-PARTS}.
4046 @xref{Initialization}.
4047
4048 @findex MULTILIB_OPTIONS
4049 @item MULTILIB_OPTIONS
4050 For some targets, invoking GCC in different ways produces objects
4051 that can not be linked together.  For example, for some targets GCC
4052 produces both big and little endian code.  For these targets, you must
4053 arrange for multiple versions of @file{libgcc.a} to be compiled, one for
4054 each set of incompatible options.  When GCC invokes the linker, it
4055 arranges to link in the right version of @file{libgcc.a}, based on
4056 the command line options used.
4057
4058 The @code{MULTILIB_OPTIONS} macro lists the set of options for which
4059 special versions of @file{libgcc.a} must be built.  Write options that
4060 are mutually incompatible side by side, separated by a slash.  Write
4061 options that may be used together separated by a space.  The build
4062 procedure will build all combinations of compatible options.
4063
4064 For example, if you set @code{MULTILIB_OPTIONS} to @samp{m68000/m68020
4065 msoft-float}, @file{Makefile} will build special versions of
4066 @file{libgcc.a} using the following sets of options:  @option{-m68000},
4067 @option{-m68020}, @option{-msoft-float}, @samp{-m68000 -msoft-float}, and
4068 @samp{-m68020 -msoft-float}.
4069
4070 @findex MULTILIB_DIRNAMES
4071 @item MULTILIB_DIRNAMES
4072 If @code{MULTILIB_OPTIONS} is used, this variable specifies the
4073 directory names that should be used to hold the various libraries.
4074 Write one element in @code{MULTILIB_DIRNAMES} for each element in
4075 @code{MULTILIB_OPTIONS}.  If @code{MULTILIB_DIRNAMES} is not used, the
4076 default value will be @code{MULTILIB_OPTIONS}, with all slashes treated
4077 as spaces.
4078
4079 For example, if @code{MULTILIB_OPTIONS} is set to @samp{m68000/m68020
4080 msoft-float}, then the default value of @code{MULTILIB_DIRNAMES} is
4081 @samp{m68000 m68020 msoft-float}.  You may specify a different value if
4082 you desire a different set of directory names.
4083
4084 @findex MULTILIB_MATCHES
4085 @item MULTILIB_MATCHES
4086 Sometimes the same option may be written in two different ways.  If an
4087 option is listed in @code{MULTILIB_OPTIONS}, GCC needs to know about
4088 any synonyms.  In that case, set @code{MULTILIB_MATCHES} to a list of
4089 items of the form @samp{option=option} to describe all relevant
4090 synonyms.  For example, @samp{m68000=mc68000 m68020=mc68020}.
4091
4092 @findex MULTILIB_EXCEPTIONS
4093 @item MULTILIB_EXCEPTIONS
4094 Sometimes when there are multiple sets of @code{MULTILIB_OPTIONS} being
4095 specified, there are combinations that should not be built.  In that
4096 case, set @code{MULTILIB_EXCEPTIONS} to be all of the switch exceptions
4097 in shell case syntax that should not be built.
4098
4099 For example, in the PowerPC embedded ABI support, it is not desirable
4100 to build libraries compiled with the @option{-mcall-aix} option
4101 and either of the @option{-fleading-underscore} or @option{-mlittle} options
4102 at the same time.  Therefore @code{MULTILIB_EXCEPTIONS} is set to
4103 @smallexample
4104 *mcall-aix/*fleading-underscore* *mlittle/*mcall-aix*
4105 @end smallexample
4106
4107 @findex MULTILIB_EXTRA_OPTS
4108 @item MULTILIB_EXTRA_OPTS
4109 Sometimes it is desirable that when building multiple versions of
4110 @file{libgcc.a} certain options should always be passed on to the
4111 compiler.  In that case, set @code{MULTILIB_EXTRA_OPTS} to be the list
4112 of options to be used for all builds.
4113 @end table
4114
4115 @node Host Fragment
4116 @section The Host Makefile Fragment
4117 @cindex host makefile fragment
4118 @cindex @file{x-@var{host}}
4119
4120 The host makefile fragment, @file{x-@var{host}}, defines special host
4121 dependent variables and targets used in the @file{Makefile}:
4122
4123 @table @code
4124 @findex CC
4125 @item CC
4126 The compiler to use when building the first stage.
4127
4128 @findex INSTALL
4129 @item INSTALL
4130 The install program to use.
4131 @end table
4132 @end ifset
4133
4134 @include funding.texi
4135
4136 @node GNU/Linux
4137 @unnumbered Linux and the GNU Project
4138
4139 Many computer users run a modified version of the GNU system every
4140 day, without realizing it.  Through a peculiar turn of events, the
4141 version of GNU which is widely used today is more often known as
4142 ``Linux'', and many users are not aware of the extent of its
4143 connection with the GNU Project.
4144
4145 There really is a Linux; it is a kernel, and these people are using
4146 it.  But you can't use a kernel by itself; a kernel is useful only as
4147 part of a whole system.  The system in which Linux is typically used
4148 is a modified variant of the GNU system---in other words, a Linux-based
4149 GNU system.
4150
4151 Many users are not fully aware of the distinction between the kernel,
4152 which is Linux, and the whole system, which they also call ``Linux''.
4153 The ambiguous use of the name doesn't promote understanding.
4154
4155 Programmers generally know that Linux is a kernel.  But since they
4156 have generally heard the whole system called ``Linux'' as well, they
4157 often envisage a history which fits that name.  For example, many
4158 believe that once Linus Torvalds finished writing the kernel, his
4159 friends looked around for other free software, and for no particular
4160 reason most everything necessary to make a Unix-like system was
4161 already available.
4162
4163 What they found was no accident---it was the GNU system.  The available
4164 free software added up to a complete system because the GNU Project
4165 had been working since 1984 to make one.  The GNU Manifesto
4166 had set forth the goal of developing a free Unix-like system, called
4167 GNU@.  By the time Linux was written, the system was almost finished.
4168
4169 Most free software projects have the goal of developing a particular
4170 program for a particular job.  For example, Linus Torvalds set out to
4171 write a Unix-like kernel (Linux); Donald Knuth set out to write a text
4172 formatter (TeX); Bob Scheifler set out to develop a window system (X
4173 Windows).  It's natural to measure the contribution of this kind of
4174 project by specific programs that came from the project.
4175
4176 If we tried to measure the GNU Project's contribution in this way,
4177 what would we conclude?  One CD-ROM vendor found that in their ``Linux
4178 distribution'', GNU software was the largest single contingent, around
4179 28% of the total source code, and this included some of the essential
4180 major components without which there could be no system.  Linux itself
4181 was about 3%.  So if you were going to pick a name for the system
4182 based on who wrote the programs in the system, the most appropriate
4183 single choice would be ``GNU''@.
4184
4185 But we don't think that is the right way to consider the question.
4186 The GNU Project was not, is not, a project to develop specific
4187 software packages.  It was not a project to develop a C compiler,
4188 although we did.  It was not a project to develop a text editor,
4189 although we developed one.  The GNU Project's aim was to develop
4190 @emph{a complete free Unix-like system}.
4191
4192 Many people have made major contributions to the free software in the
4193 system, and they all deserve credit.  But the reason it is @emph{a
4194 system}---and not just a collection of useful programs---is because the
4195 GNU Project set out to make it one.  We wrote the programs that were
4196 needed to make a @emph{complete} free system.  We wrote essential but
4197 unexciting major components, such as the assembler and linker, because
4198 you can't have a system without them.  A complete system needs more
4199 than just programming tools, so we wrote other components as well,
4200 such as the Bourne Again SHell, the PostScript interpreter
4201 Ghostscript, and the GNU C library.
4202
4203 By the early 90s we had put together the whole system aside from the
4204 kernel (and we were also working on a kernel, the GNU Hurd, which runs
4205 on top of Mach).  Developing this kernel has been a lot harder than we
4206 expected, and we are still working on finishing it.
4207
4208 Fortunately, you don't have to wait for it, because Linux is working
4209 now.  When Linus Torvalds wrote Linux, he filled the last major gap.
4210 People could then put Linux together with the GNU system to make a
4211 complete free system: a Linux-based GNU system (or GNU/Linux system,
4212 for short).
4213
4214 Putting them together sounds simple, but it was not a trivial job.
4215 The GNU C library (called glibc for short) needed substantial changes.
4216 Integrating a complete system as a distribution that would work ``out
4217 of the box'' was a big job, too.  It required addressing the issue of
4218 how to install and boot the system---a problem we had not tackled,
4219 because we hadn't yet reached that point.  The people who developed
4220 the various system distributions made a substantial contribution.
4221
4222 The GNU Project supports GNU/Linux systems as well as @emph{the}
4223 GNU system---even with funds.  We funded the rewriting of the
4224 Linux-related extensions to the GNU C library, so that now they are
4225 well integrated, and the newest GNU/Linux systems use the current
4226 library release with no changes.  We also funded an early stage of the
4227 development of Debian GNU/Linux.
4228
4229 We use Linux-based GNU systems today for most of our work, and we hope
4230 you use them too.  But please don't confuse the public by using the
4231 name ``Linux'' ambiguously.  Linux is the kernel, one of the essential
4232 major components of the system.  The system as a whole is more or less
4233 the GNU system.
4234
4235 @include gpl.texi
4236
4237 @c ---------------------------------------------------------------------
4238 @c GFDL
4239 @c ---------------------------------------------------------------------
4240
4241 @include fdl.texi
4242
4243 @node Contributors
4244 @unnumbered Contributors to GCC
4245 @cindex contributors
4246 @include contrib.texi
4247
4248 @c ---------------------------------------------------------------------
4249 @c Indexes
4250 @c ---------------------------------------------------------------------
4251
4252 @node Option Index
4253 @unnumbered Option Index
4254
4255 GCC's command line options are indexed here without any initial @samp{-}
4256 or @samp{--}.  Where an option has both positive and negative forms
4257 (such as @option{-f@var{option}} and @option{-fno-@var{option}}),
4258 relevant entries in the manual are indexed under the most appropriate
4259 form; it may sometimes be useful to look up both forms.
4260
4261 @printindex op
4262
4263 @node Index
4264 @unnumbered Index
4265
4266 @printindex cp
4267
4268 @c ---------------------------------------------------------------------
4269 @c Epilogue
4270 @c ---------------------------------------------------------------------
4271
4272 @bye