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