.\" Copyright (c) 1991, 1992, 1993, 1994 Free Software Foundation    -*-Text-*-
.\" See section COPYING for conditions for redistribution
.\"
.\" Set up \*(lq, \*(rq if -man hasn't already set it up.
.if @@\*(lq@ \{\
.	ds lq "
.	if t .ds lq ``
.	if !@@\(lq@ .ds lq "\(lq
.\}
.if @@\*(rq@ \{\
.	ds rq "
.	if t .ds rq ''
.	if !@@\(rq@ .ds rq "\(rq
.\}
.de Id
.ds Rv \\$3
.ds Dt \\$4
..
.de Sp
.if n .sp
.if t .sp 0.4
..
.Id $Id: gcc.1,v 1.4 1993/10/13 23:19:12 pesch Exp $
.TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools"
.SH NAME
gcc, g++ \- GNU project C and C++ Compiler (v2.7)
.SH SYNOPSIS
.B gcc
.RI "[ " option " | " filename " ].\|.\|."
.br
.B g++
.RI "[ " option " | " filename " ].\|.\|."
.SH WARNING
The information in this man page is an extract from the full
documentation of the GNU C compiler, and is limited to the meaning of
the options.
.PP
This man page is not kept up to date except when volunteers want to
maintain it.  If you find a discrepancy between the man page and the
software, please check the Info file, which is the authoritative
documentation.
.PP
If we find that the things in this man page that are out of date cause
significant confusion or complaints, we will stop distributing the man
page.  The alternative, updating the man page when we update the Info
file, is impossible because the rest of the work of maintaining GNU CC
leaves us no time for that.  The GNU project regards man pages as
obsolete and should not let them take time away from other things.
.PP
For complete and current documentation, refer to the Info file `\|\c
.B gcc\c
\&\|' or the manual
.I
Using and Porting GNU CC (for version 2.0)\c
\&.  Both are made from the Texinfo source file
.BR gcc.texinfo .
.SH DESCRIPTION
The C and C++ compilers are integrated.  Both process input files
through one or more of four stages: preprocessing, compilation,
assembly, and linking.  Source filename suffixes identify the source
language, but which name you use for the compiler governs default
assumptions:
.TP
.B gcc
assumes preprocessed (\c
.B .i\c
\&) files are C and assumes C style linking.
.TP
.B g++
assumes preprocessed (\c
.B .i\c
\&) files are C++ and assumes C++ style linking.
.PP
Suffixes of source file names indicate the language and kind of
processing to be done:
.Sp
.nf
.ta \w'\fB.cxx\fP  'u
\&\fB.c\fP	C source; preprocess, compile, assemble
\&\fB.C\fP	C++ source; preprocess, compile, assemble
\&\fB.cc\fP	C++ source; preprocess, compile, assemble
\&\fB.cxx\fP	C++ source; preprocess, compile, assemble
\&\fB.m\fP	Objective-C source; preprocess, compile, assemble
\&\fB.i\fP	preprocessed C; compile, assemble
\&\fB.ii\fP	preprocessed C++; compile, assemble
\&\fB.s\fP	Assembler source; assemble
\&\fB.S\fP	Assembler source; preprocess, assemble
\&\fB.h\fP	Preprocessor file; not usually named on command line
.Sp
.fi
Files with other suffixes are passed to the linker.  Common cases include:
.Sp
.nf
\&\fB.o\fP	Object file
\&\fB.a\fP	Archive file
.br
.fi
.Sp
Linking is always the last stage unless you use one of the
.BR \-c ,
.BR \-S ,
or
.B \-E
options to avoid it (or unless compilation errors stop the whole
process).  For the link stage, all
.B .o
files corresponding to source files,
.B \-l
libraries, unrecognized filenames (including named
.B .o
object files and
.B .a
archives)
are passed to the linker in command-line order.
.SH OPTIONS
Options must be separate: `\|\c
.B \-dr\c
\&\|' is quite different from `\|\c
.B \-d \-r
\&\|'.
.PP
Most `\|\c
.B \-f\c
\&\|' and `\|\c
.B \-W\c
\&\|' options have two contrary forms:
.BI \-f name
and
.BI \-fno\- name\c
\& (or
.BI \-W name
and
.BI \-Wno\- name\c
\&).  Only the non-default forms are shown here.
.PP
Here is a summary of all the options, grouped by type.  Explanations are
in the following sections.
.hy 0
.na
.TP
.B Overall Options
.br
\-c
\-S
\-E
.RI "\-o " file
\-pipe
\-v
.RI "\-x " language
.TP
.B Language Options
\-ansi
\-fall\-virtual
\-fcond\-mismatch
\-fdollars\-in\-identifiers
\-fenum\-int\-equiv
\-fexternal\-templates
\-fno\-asm
\-fno\-builtin
\-fhosted
\-fno\-hosted
\-ffreestanding
\-fno\-freestanding
\-fno\-strict\-prototype
\-fsigned\-bitfields
\-fsigned\-char
\-fthis\-is\-variable
\-funsigned\-bitfields
\-funsigned\-char
\-fwritable\-strings
\-traditional
\-traditional\-cpp
\-trigraphs
.TP
.B Warning Options
\-fsyntax\-only
\-pedantic
\-pedantic\-errors
\-w
\-W
\-Wall
\-Waggregate\-return
\-Wcast\-align
\-Wcast\-qual
\-Wchar\-subscript
\-Wcomment
\-Wconversion
\-Wenum\-clash
\-Werror
\-Wformat
.RI \-Wid\-clash\- len
\-Wimplicit
\-Winline
\-Wmain
\-Wmissing\-prototypes
\-Wmissing\-declarations
\-Wnested\-externs
\-Wno\-import
\-Wparentheses
\-Wpointer\-arith
\-Wredundant\-decls
\-Wreturn\-type
\-Wshadow
\-Wstrict\-prototypes
\-Wswitch
\-Wtemplate\-debugging
\-Wtraditional
\-Wtrigraphs
\-Wuninitialized
\-Wunused
\-Wwrite\-strings
.TP
.B Debugging Options
\-a
.RI \-d letters
\-fpretend\-float
\-g
.RI \-g level
\-gcoff
\-gxcoff
\-gxcoff+
\-gdwarf
\-gdwarf+
\-gstabs
\-gstabs+
\-ggdb
\-p
\-pg
\-save\-temps
.RI \-print\-file\-name= library
\-print\-libgcc\-file\-name
.RI \-print\-prog\-name= program
.TP
.B Optimization Options
\-fcaller\-saves
\-fcse\-follow\-jumps
\-fcse\-skip\-blocks
\-fdelayed\-branch
\-felide\-constructors
\-fexpensive\-optimizations
\-ffast\-math
\-ffloat\-store
\-fforce\-addr
\-fforce\-mem
\-finline\-functions
\-fkeep\-inline\-functions
\-fmemoize\-lookups
\-fno\-default\-inline
\-fno\-defer\-pop
\-fno\-function\-cse
\-fno\-inline
\-fno\-peephole
\-fomit\-frame\-pointer
\-frerun\-cse\-after\-loop
\-fschedule\-insns
\-fschedule\-insns2
\-fstrength\-reduce
\-fthread\-jumps
\-funroll\-all\-loops
\-funroll\-loops
\-O
\-O2
.TP
.B Preprocessor Options
.RI \-A assertion
\-C
\-dD
\-dM
\-dN
.RI \-D macro [\|= defn \|]
\-E
\-H
.RI "\-idirafter " dir
.RI "\-include " file
.RI "\-imacros " file
.RI "\-iprefix " file
.RI "\-iwithprefix " dir
\-M
\-MD
\-MM
\-MMD
\-nostdinc
\-P
.RI \-U macro
\-undef
.TP
.B Assembler Option
.RI \-Wa, option
.TP
.B Linker Options
.RI \-l library
\-nostartfiles
\-nostdlib
\-static
\-shared
\-symbolic
.RI "\-Xlinker\ " option
.RI \-Wl, option
.RI "\-u " symbol
.TP
.B Directory Options
.RI \-B prefix
.RI \-I dir
\-I\-
.RI \-L dir
.TP
.B Target Options
.RI "\-b  " machine
.RI "\-V " version
.TP
.B Configuration Dependent Options
.I M680x0\ Options
.br
\-m68000
\-m68020
\-m68020\-40
\-m68030
\-m68040
\-m68881
\-mbitfield
\-mc68000
\-mc68020
\-mfpa
\-mnobitfield
\-mrtd
\-mshort
\-msoft\-float
.Sp
.I VAX Options
.br
\-mg
\-mgnu
\-munix
.Sp
.I SPARC Options
.br
\-mepilogue
\-mfpu
\-mhard\-float
\-mno\-fpu
\-mno\-epilogue
\-msoft\-float
\-msparclite
\-mv8
\-msupersparc
\-mcypress
.Sp
.I Convex Options
.br
\-margcount
\-mc1
\-mc2
\-mnoargcount
.Sp
.I AMD29K Options
.br
\-m29000
\-m29050
\-mbw
\-mdw
\-mkernel\-registers
\-mlarge
\-mnbw
\-mnodw
\-msmall
\-mstack\-check
\-muser\-registers
.Sp
.I M88K Options
.br
\-m88000
\-m88100
\-m88110
\-mbig\-pic
\-mcheck\-zero\-division
\-mhandle\-large\-shift
\-midentify\-revision
\-mno\-check\-zero\-division
\-mno\-ocs\-debug\-info
\-mno\-ocs\-frame\-position
\-mno\-optimize\-arg\-area
\-mno\-serialize\-volatile
\-mno\-underscores
\-mocs\-debug\-info
\-mocs\-frame\-position
\-moptimize\-arg\-area
\-mserialize\-volatile
.RI \-mshort\-data\- num
\-msvr3
\-msvr4
\-mtrap\-large\-shift
\-muse\-div\-instruction
\-mversion\-03.00
\-mwarn\-passed\-structs
.Sp
.I RS6000 Options
.br
\-mfp\-in\-toc
\-mno\-fop\-in\-toc
.Sp
.I RT Options
.br
\-mcall\-lib\-mul
\-mfp\-arg\-in\-fpregs
\-mfp\-arg\-in\-gregs
\-mfull\-fp\-blocks
\-mhc\-struct\-return
\-min\-line\-mul
\-mminimum\-fp\-blocks
\-mnohc\-struct\-return
.Sp
.I MIPS Options
.br
\-mcpu=\fIcpu type\fP
\-mips2
\-mips3
\-mint64
\-mlong64
\-mlonglong128
\-mmips\-as
\-mgas
\-mrnames
\-mno\-rnames
\-mgpopt
\-mno\-gpopt
\-mstats
\-mno\-stats
\-mmemcpy
\-mno\-memcpy
\-mno\-mips\-tfile
\-mmips\-tfile
\-msoft\-float
\-mhard\-float
\-mabicalls
\-mno\-abicalls
\-mhalf\-pic
\-mno\-half\-pic
\-G \fInum\fP
\-nocpp
.Sp
.I i386 Options
.br
\-m486
\-mno\-486
\-msoft\-float
\-mno\-fp\-ret\-in\-387
.Sp
.I HPPA Options
.br
\-mpa\-risc\-1\-0
\-mpa\-risc\-1\-1
\-mkernel
\-mshared\-libs
\-mno\-shared\-libs
\-mlong\-calls
\-mdisable\-fpregs
\-mdisable\-indexing
\-mtrailing\-colon
.Sp
.I i960 Options
.br
\-m\fIcpu-type\fP
\-mnumerics
\-msoft\-float
\-mleaf\-procedures
\-mno\-leaf\-procedures
\-mtail\-call
\-mno\-tail\-call
\-mcomplex\-addr
\-mno\-complex\-addr
\-mcode\-align
\-mno\-code\-align
\-mic\-compat
\-mic2.0\-compat
\-mic3.0\-compat
\-masm\-compat
\-mintel\-asm
\-mstrict\-align
\-mno\-strict\-align
\-mold\-align
\-mno\-old\-align
.Sp
.I DEC Alpha Options
.br
\-mfp\-regs
\-mno\-fp\-regs
\-mno\-soft\-float
\-msoft\-float
.Sp
.I System V Options
.br
\-G
\-Qy
\-Qn
.RI \-YP, paths
.RI \-Ym, dir
.TP
.B Code Generation Options
.RI \-fcall\-saved\- reg
.RI \-fcall\-used\- reg
.RI \-ffixed\- reg
\-finhibit\-size\-directive
\-fnonnull\-objects
\-fno\-common
\-fno\-ident
\-fno\-gnu\-linker
\-fpcc\-struct\-return
\-fpic
\-fPIC
\-freg\-struct\-return
\-fshared\-data
\-fshort\-enums
\-fshort\-double
\-fvolatile
\-fvolatile\-global
\-fverbose\-asm
.ad b
.hy 1
.SH OVERALL OPTIONS
.TP
.BI "\-x " "language"
Specify explicitly the
.I language\c
\& for the following input files (rather than choosing a default based
on the file name suffix) .  This option applies to all following input
files until the next `\|\c
.B \-x\c
\&\|' option.  Possible values of \c
.I language\c
\& are
`\|\c
.B c\c
\&\|', `\|\c
.B objective\-c\c
\&\|', `\|\c
.B c\-header\c
\&\|', `\|\c
.B c++\c
\&\|',
`\|\c
.B cpp\-output\c
\&\|', `\|\c
.B assembler\c
\&\|', and `\|\c
.B assembler\-with\-cpp\c
\&\|'.
.TP
.B \-x none
Turn off any specification of a language, so that subsequent files are
handled according to their file name suffixes (as they are if `\|\c
.B \-x\c
\&\|'
has not been used at all).
.PP
If you want only some of the four stages (preprocess, compile,
assemble, link), you can use
`\|\c
.B \-x\c
\&\|' (or filename suffixes) to tell \c
.B gcc\c
\& where to start, and
one of the options `\|\c
.B \-c\c
\&\|', `\|\c
.B \-S\c
\&\|', or `\|\c
.B \-E\c
\&\|' to say where
.B gcc\c
\& is to stop.  Note that some combinations (for example,
`\|\c
.B \-x cpp\-output \-E\c
\&\|') instruct \c
.B gcc\c
\& to do nothing at all.
.TP
.B \-c
Compile or assemble the source files, but do not link.  The compiler
output is an object file corresponding to each source file.
.Sp
By default, GCC makes the object file name for a source file by replacing
the suffix `\|\c
.B .c\c
\&\|', `\|\c
.B .i\c
\&\|', `\|\c
.B .s\c
\&\|', etc., with `\|\c
.B .o\c
\&\|'.  Use
.B \-o\c
\& to select another name.
.Sp
GCC ignores any unrecognized input files (those that do not require
compilation or assembly) with the
.B \-c
option.
.TP
.B \-S
Stop after the stage of compilation proper; do not assemble.  The output
is an assembler code file for each non-assembler input
file specified.
.Sp
By default, GCC makes the assembler file name for a source file by
replacing the suffix `\|\c
.B .c\c
\&\|', `\|\c
.B .i\c
\&\|', etc., with `\|\c
.B .s\c
\&\|'.  Use
.B \-o\c
\& to select another name.
.Sp
GCC ignores any input files that don't require compilation.
.TP
.B \-E
Stop after the preprocessing stage; do not run the compiler proper.  The
output is preprocessed source code, which is sent to the
standard output.
.Sp
GCC ignores input files which don't require preprocessing.
.TP
.BI "\-o " file
Place output in file \c
.I file\c
\&.  This applies regardless to whatever
sort of output GCC is producing, whether it be an executable file,
an object file, an assembler file or preprocessed C code.
.Sp
Since only one output file can be specified, it does not make sense to
use `\|\c
.B \-o\c
\&\|' when compiling more than one input file, unless you are
producing an executable file as output.
.Sp
If you do not specify `\|\c
.B \-o\c
\&\|', the default is to put an executable file
in `\|\c
.B a.out\c
\&\|', the object file for `\|\c
.I source\c
.B \&.\c
.I suffix\c
\&\c
\&\|' in
`\|\c
.I source\c
.B \&.o\c
\&\|', its assembler file in `\|\c
.I source\c
.B \&.s\c
\&\|', and
all preprocessed C source on standard output.
.TP
.B \-v
Print (on standard error output) the commands executed to run the stages
of compilation.  Also print the version number of the compiler driver
program and of the preprocessor and the compiler proper.
.TP
.B \-pipe
Use pipes rather than temporary files for communication between the
various stages of compilation.  This fails to work on some systems where
the assembler cannot read from a pipe; but the GNU assembler has
no trouble.
.PP
.SH LANGUAGE OPTIONS
The following options control the dialect of C that the compiler
accepts:
.TP
.B \-ansi
Support all ANSI standard C programs.
.Sp
This turns off certain features of GNU C that are incompatible with
ANSI C, such as the \c
.B asm\c
\&, \c
.B inline\c
\& and \c
.B typeof
keywords, and predefined macros such as \c
.B unix\c
\& and \c
.B vax
that identify the type of system you are using.  It also enables the
undesirable and rarely used ANSI trigraph feature, and disallows `\|\c
.B $\c
\&\|' as part of identifiers.
.Sp
The alternate keywords \c
.B _\|_asm_\|_\c
\&, \c
.B _\|_extension_\|_\c
\&,
.B _\|_inline_\|_\c
\& and \c
.B _\|_typeof_\|_\c
\& continue to work despite
`\|\c
.B \-ansi\c
\&\|'.  You would not want to use them in an ANSI C program, of
course, but it is useful to put them in header files that might be included
in compilations done with `\|\c
.B \-ansi\c
\&\|'.  Alternate predefined macros
such as \c
.B _\|_unix_\|_\c
\& and \c
.B _\|_vax_\|_\c
\& are also available, with or
without `\|\c
.B \-ansi\c
\&\|'.
.Sp
The `\|\c
.B \-ansi\c
\&\|' option does not cause non-ANSI programs to be
rejected gratuitously.  For that, `\|\c
.B \-pedantic\c
\&\|' is required in
addition to `\|\c
.B \-ansi\c
\&\|'.
.Sp
The preprocessor predefines a macro \c
.B _\|_STRICT_ANSI_\|_\c
\& when you use the `\|\c
.B \-ansi\c
\&\|'
option.  Some header files may notice this macro and refrain
from declaring certain functions or defining certain macros that the
ANSI standard doesn't call for; this is to avoid interfering with any
programs that might use these names for other things.
.TP
.B \-fno\-asm
Do not recognize \c
.B asm\c
\&, \c
.B inline\c
\& or \c
.B typeof\c
\& as a
keyword.  These words may then be used as identifiers.  You can
use \c
.B _\|_asm_\|_\c
\&, \c
.B _\|_inline_\|_\c
\& and \c
.B _\|_typeof_\|_\c
\& instead.
`\|\c
.B \-ansi\c
\&\|' implies `\|\c
.B \-fno\-asm\c
\&\|'.
.TP
.B \-fno\-builtin
Don't recognize built-in functions that do not begin with two leading
underscores.  Currently, the functions affected include \c
.B _exit\c
\&,
.B abort\c
\&, \c
.B abs\c
\&, \c
.B alloca\c
\&, \c
.B cos\c
\&, \c
.B exit\c
\&,
.B fabs\c
\&, \c
.B labs\c
\&, \c
.B memcmp\c
\&, \c
.B memcpy\c
\&, \c
.B sin\c
\&,
.B sqrt\c
\&, \c
.B strcmp\c
\&, \c
.B strcpy\c
\&, and \c
.B strlen\c
\&.
.Sp
The `\|\c
.B \-ansi\c
\&\|' option prevents \c
.B alloca\c
\& and \c
.B _exit\c
\& from
being builtin functions.
.TP
.B \-fhosted
Compile for a hosted environment; this implies the `\|\c
.B \-fbuiltin\c
\&\|' option, and implies that suspicious declarations of
.B main\c
\& should be warned about.
.TP
.B \-ffreestanding
Compile for a freestanding environment; this implies the `\|\c
.B \-fno-builtin\c
\&\|' option, and implies that
.B main\c
\& has no special requirements.
.TP
.B \-fno\-strict\-prototype
Treat a function declaration with no arguments, such as `\|\c
.B int foo
();\c
\&\|', as C would treat it\(em\&as saying nothing about the number of
arguments or their types (C++ only).  Normally, such a declaration in
C++ means that the function \c
.B foo\c
\& takes no arguments.
.TP
.B \-trigraphs
Support ANSI C trigraphs.  The `\|\c
.B \-ansi\c
\&\|' option implies `\|\c
.B \-trigraphs\c
\&\|'.
.TP
.B \-traditional
Attempt to support some aspects of traditional C compilers.
For details, see the GNU C Manual; the duplicate list here
has been deleted so that we won't get complaints when it
is out of date.
.Sp
But one note about C++ programs only (not C).  `\|\c
.B \-traditional\c
\&\|' has one additional effect for C++: assignment to
.B this
is permitted.  This is the same as the effect of `\|\c
.B \-fthis\-is\-variable\c
\&\|'.
.TP
.B \-traditional\-cpp
Attempt to support some aspects of traditional C preprocessors.
This includes the items that specifically mention the preprocessor above,
but none of the other effects of `\|\c
.B \-traditional\c
\&\|'.
.TP
.B \-fdollars\-in\-identifiers
Permit the use of `\|\c
.B $\c
\&\|' in identifiers (C++ only).  You can also use
`\|\c
.B \-fno\-dollars\-in\-identifiers\c
\&\|' to explicitly prohibit use of
`\|\c
.B $\c
\&\|'.  (GNU C++ allows `\|\c
.B $\c
\&\|' by default on some target systems
but not others.)
.TP
.B \-fenum\-int\-equiv
Permit implicit conversion of \c
.B int\c
\& to enumeration types (C++
only).  Normally GNU C++ allows conversion of \c
.B enum\c
\& to \c
.B int\c
\&,
but not the other way around.
.TP
.B \-fexternal\-templates
Produce smaller code for template declarations, by generating only a
single copy of each template function where it is defined (C++ only).
To use this option successfully, you must also mark all files that
use templates with either `\|\c
.B #pragma implementation\c
\&\|' (the definition) or
`\|\c
.B #pragma interface\c
\&\|' (declarations).

When your code is compiled with `\|\c
.B \-fexternal\-templates\c
\&\|', all
template instantiations are external.  You must arrange for all
necessary instantiations to appear in the implementation file; you can
do this with a \c
.B typedef\c
\& that references each instantiation needed.
Conversely, when you compile using the default option
`\|\c
.B \-fno\-external\-templates\c
\&\|', all template instantiations are
explicitly internal.
.TP
.B \-fall\-virtual
Treat all possible member functions as virtual, implicitly.  All
member functions (except for constructor functions and
.B new
or
.B delete
member operators) are treated as virtual functions of the class where
they appear.
.Sp
This does not mean that all calls to these member functions will be
made through the internal table of virtual functions.  Under some
circumstances, the compiler can determine that a call to a given
virtual function can be made directly; in these cases the calls are
direct in any case.
.TP
.B \-fcond\-mismatch
Allow conditional expressions with mismatched types in the second and
third arguments.  The value of such an expression is void.
.TP
.B \-fthis\-is\-variable
Permit assignment to \c
.B this\c
\& (C++ only).  The incorporation of
user-defined free store management into C++ has made assignment to
`\|\c
.B this\c
\&\|' an anachronism.  Therefore, by default it is invalid to
assign to \c
.B this\c
\& within a class member function.  However, for
backwards compatibility, you can make it valid with
`\|\c
.B \-fthis-is-variable\c
\&\|'.
.TP
.B \-funsigned\-char
Let the type \c
.B char\c
\& be unsigned, like \c
.B unsigned char\c
\&.
.Sp
Each kind of machine has a default for what \c
.B char\c
\& should
be.  It is either like \c
.B unsigned char\c
\& by default or like
.B signed char\c
\& by default.
.Sp
Ideally, a portable program should always use \c
.B signed char\c
\& or
.B unsigned char\c
\& when it depends on the signedness of an object.
But many programs have been written to use plain \c
.B char\c
\& and
expect it to be signed, or expect it to be unsigned, depending on the
machines they were written for.  This option, and its inverse, let you
make such a program work with the opposite default.
.Sp
The type \c
.B char\c
\& is always a distinct type from each of
.B signed char\c
\& and \c
.B unsigned char\c
\&, even though its behavior
is always just like one of those two.
.TP
.B \-fsigned\-char
Let the type \c
.B char\c
\& be signed, like \c
.B signed char\c
\&.
.Sp
Note that this is equivalent to `\|\c
.B \-fno\-unsigned\-char\c
\&\|', which is
the negative form of `\|\c
.B \-funsigned\-char\c
\&\|'.  Likewise,
`\|\c
.B \-fno\-signed\-char\c
\&\|' is equivalent to `\|\c
.B \-funsigned\-char\c
\&\|'.
.TP
.B \-fsigned\-bitfields
.TP
.B \-funsigned\-bitfields
.TP
.B \-fno\-signed\-bitfields
.TP
.B \-fno\-unsigned\-bitfields
These options control whether a bitfield is
signed or unsigned, when declared with no explicit `\|\c
.B signed\c
\&\|' or `\|\c
.B unsigned\c
\&\|' qualifier.  By default, such a bitfield is
signed, because this is consistent: the basic integer types such as
.B int\c
\& are signed types.
.Sp
However, when you specify `\|\c
.B \-traditional\c
\&\|', bitfields are all unsigned
no matter what.
.TP
.B \-fwritable\-strings
Store string constants in the writable data segment and don't uniquize
them.  This is for compatibility with old programs which assume they
can write into string constants.  `\|\c
.B \-traditional\c
\&\|' also has this
effect.
.Sp
Writing into string constants is a very bad idea; \*(lqconstants\*(rq should
be constant.
.SH PREPROCESSOR OPTIONS
These options control the C preprocessor, which is run on each C source
file before actual compilation.
.PP
If you use the `\|\c
.B \-E\c
\&\|' option, GCC does nothing except preprocessing.
Some of these options make sense only together with `\|\c
.B \-E\c
\&\|' because
they cause the preprocessor output to be unsuitable for actual
compilation.
.TP
.BI "\-include " "file"
Process \c
.I file\c
\& as input before processing the regular input file.
In effect, the contents of \c
.I file\c
\& are compiled first.  Any `\|\c
.B \-D\c
\&\|'
and `\|\c
.B \-U\c
\&\|' options on the command line are always processed before
`\|\c
.B \-include \c
.I file\c
\&\c
\&\|', regardless of the order in which they are
written.  All the `\|\c
.B \-include\c
\&\|' and `\|\c
.B \-imacros\c
\&\|' options are
processed in the order in which they are written.
.TP
.BI "\-imacros " file
Process \c
.I file\c
\& as input, discarding the resulting output, before
processing the regular input file.  Because the output generated from
.I file\c
\& is discarded, the only effect of `\|\c
.B \-imacros \c
.I file\c
\&\c
\&\|' is to
make the macros defined in \c
.I file\c
\& available for use in the main
input.  The preprocessor evaluates any `\|\c
.B \-D\c
\&\|' and `\|\c
.B \-U\c
\&\|' options
on the command line before processing `\|\c
.B \-imacros\c
.I file\c
\&\|', regardless of the order in
which they are written.  All the `\|\c
.B \-include\c
\&\|' and `\|\c
.B \-imacros\c
\&\|'
options are processed in the order in which they are written.
.TP
.BI "\-idirafter " "dir"
Add the directory \c
.I dir\c
\& to the second include path.  The directories
on the second include path are searched when a header file is not found
in any of the directories in the main include path (the one that
`\|\c
.B \-I\c
\&\|' adds to).
.TP
.BI "\-iprefix " "prefix"
Specify \c
.I prefix\c
\& as the prefix for subsequent `\|\c
.B \-iwithprefix\c
\&\|'
options.
.TP
.BI "\-iwithprefix " "dir"
Add a directory to the second include path.  The directory's name is
made by concatenating \c
.I prefix\c
\& and \c
.I dir\c
\&, where \c
.I prefix
was specified previously with `\|\c
.B \-iprefix\c
\&\|'.
.TP
.B \-nostdinc
Do not search the standard system directories for header files.  Only
the directories you have specified with `\|\c
.B \-I\c
\&\|' options (and the
current directory, if appropriate) are searched.
.Sp
By using both `\|\c
.B \-nostdinc\c
\&\|' and `\|\c
.B \-I\-\c
\&\|', you can limit the include-file search file to only those
directories you specify explicitly.
.TP
.B \-nostdinc++
Do not search for header files in the C++\-specific standard directories,
but do still search the other standard directories.
(This option is used when building `\|\c
.B libg++\c
\&\|'.)
.TP
.B \-undef
Do not predefine any nonstandard macros.  (Including architecture flags).
.TP
.B \-E
Run only the C preprocessor.  Preprocess all the C source files
specified and output the results to standard output or to the
specified output file.
.TP
.B \-C
Tell the preprocessor not to discard comments.  Used with the
`\|\c
.B \-E\c
\&\|' option.
.TP
.B \-P
Tell the preprocessor not to generate `\|\c
.B #line\c
\&\|' commands.
Used with the `\|\c
.B \-E\c
\&\|' option.
.TP
.B \-M\  [ \-MG ]
Tell the preprocessor to output a rule suitable for \c
.B make
describing the dependencies of each object file.  For each source file,
the preprocessor outputs one \c
.B make\c
\&-rule whose target is the object
file name for that source file and whose dependencies are all the files
`\|\c
.B #include\c
\&\|'d in it.  This rule may be a single line or may be
continued with `\|\c
.B \e\c
\&\|'-newline if it is long.  The list of rules is
printed on standard output instead of the preprocessed C program.
.Sp
`\|\c
.B \-M\c
\&\|' implies `\|\c
.B \-E\c
\&\|'.
.Sp
`\|\c
.B \-MG\c
\&\|' says to treat missing header files as generated files and assume \c
they live in the same directory as the source file.  It must be specified \c
in addition to `\|\c
.B \-M\c
\&\|'.
.TP
.B \-MM\  [ \-MG ]
Like `\|\c
.B \-M\c
\&\|' but the output mentions only the user header files
included with `\|\c
.B #include "\c
.I file\c
\&"\c
\&\|'.  System header files
included with `\|\c
.B #include <\c
.I file\c
\&>\c
\&\|' are omitted.
.TP
.B \-MD
Like `\|\c
.B \-M\c
\&\|' but the dependency information is written to files with
names made by replacing `\|\c
.B .o\c
\&\|' with `\|\c
.B .d\c
\&\|' at the end of the
output file names.  This is in addition to compiling the file as
specified\(em\&`\|\c
.B \-MD\c
\&\|' does not inhibit ordinary compilation the way
`\|\c
.B \-M\c
\&\|' does.
.Sp
The Mach utility `\|\c
.B md\c
\&\|' can be used to merge the `\|\c
.B .d\c
\&\|' files
into a single dependency file suitable for using with the `\|\c
.B make\c
\&\|'
command.
.TP
.B \-MMD
Like `\|\c
.B \-MD\c
\&\|' except mention only user header files, not system
header files.
.TP
.B \-H
Print the name of each header file used, in addition to other normal
activities.
.TP
.BI "\-A" "question" ( answer )
Assert the answer
.I answer
for
.I question\c
\&, in case it is tested
with a preprocessor conditional such as `\|\c
.BI "#if #" question ( answer )\c
\&\|'.  `\|\c
.B \-A\-\c
\&\|' disables the standard
assertions that normally describe the target machine.
.TP
.BI "\-A" "question"\c
\&(\c
.I answer\c
\&)
Assert the answer \c
.I answer\c
\& for \c
.I question\c
\&, in case it is tested
with a preprocessor conditional such as `\|\c
.B #if
#\c
.I question\c
\&(\c
.I answer\c
\&)\c
\&\|'.  `\|\c
.B \-A-\c
\&\|' disables the standard
assertions that normally describe the target machine.
.TP
.BI \-D macro
Define macro \c
.I macro\c
\& with the string `\|\c
.B 1\c
\&\|' as its definition.
.TP
.BI \-D macro = defn
Define macro \c
.I macro\c
\& as \c
.I defn\c
\&.    All instances of `\|\c
.B \-D\c
\&\|' on
the command line are processed before any `\|\c
.B \-U\c
\&\|' options.
.TP
.BI \-U macro
Undefine macro \c
.I macro\c
\&.  `\|\c
.B \-U\c
\&\|' options are evaluated after all `\|\c
.B \-D\c
\&\|' options, but before any `\|\c
.B \-include\c
\&\|' and `\|\c
.B \-imacros\c
\&\|' options.
.TP
.B \-dM
Tell the preprocessor to output only a list of the macro definitions
that are in effect at the end of preprocessing.  Used with the `\|\c
.B \-E\c
\&\|'
option.
.TP
.B \-dD
Tell the preprocessor to pass all macro definitions into the output, in
their proper sequence in the rest of the output.
.TP
.B \-dN
Like `\|\c
.B \-dD\c
\&\|' except that the macro arguments and contents are omitted.
Only `\|\c
.B #define \c
.I name\c
\&\c
\&\|' is included in the output.
.SH ASSEMBLER OPTION
.TP
.BI "\-Wa," "option"
Pass \c
.I option\c
\& as an option to the assembler.  If \c
.I option
contains commas, it is split into multiple options at the commas.
.SH LINKER OPTIONS
These options come into play when the compiler links object files into
an executable output file.  They are meaningless if the compiler is
not doing a link step.
.TP
.I object-file-name
A file name that does not end in a special recognized suffix is
considered to name an object file or library.  (Object files are
distinguished from libraries by the linker according to the file
contents.)  If GCC does a link step, these object files are used as input
to the linker.
.TP
.BI \-l library
Use the library named \c
.I library\c
\& when linking.
.Sp
The linker searches a standard list of directories for the library,
which is actually a file named `\|\c
.B lib\c
.I library\c
\&.a\c
\&\|'.  The linker
then uses this file as if it had been specified precisely by name.
.Sp
The directories searched include several standard system directories
plus any that you specify with `\|\c
.B \-L\c
\&\|'.
.Sp
Normally the files found this way are library files\(em\&archive files
whose members are object files.  The linker handles an archive file by
scanning through it for members which define symbols that have so far
been referenced but not defined.  However, if the linker finds an
ordinary object file rather than a library, the object file is linked
in the usual fashion.  The only difference between using an `\|\c
.B \-l\c
\&\|' option and specifying a file
name is that `\|\c
.B \-l\c
\&\|' surrounds
.I library
with `\|\c
.B lib\c
\&\|' and `\|\c
.B .a\c
\&\|' and searches several directories.
.TP
.B \-lobjc
You need this special case of the
.B \-l
option in order to link an Objective C program.
.TP
.B \-nostartfiles
Do not use the standard system startup files when linking.
The standard libraries are used normally.
.TP
.B \-nostdlib
Don't use the standard system libraries and startup files when linking.
Only the files you specify will be passed to the linker.
.TP
.B \-static
On systems that support dynamic linking, this prevents linking with the shared
libraries.  On other systems, this option has no effect.
.TP
.B \-shared
Produce a shared object which can then be linked with other objects to
form an executable.  Only a few systems support this option.
.TP
.B \-symbolic
Bind references to global symbols when building a shared object.  Warn
about any unresolved references (unless overridden by the link editor
option `\|\c
.B
\-Xlinker \-z \-Xlinker defs\c
\&\|').  Only a few systems support
this option.
.TP
.BI "\-Xlinker " "option"
Pass \c
.I option
as an option to the linker.  You can use this to
supply system-specific linker options which GNU CC does not know how to
recognize.
.Sp
If you want to pass an option that takes an argument, you must use
`\|\c
.B \-Xlinker\c
\&\|' twice, once for the option and once for the argument.
For example, to pass `\|\c
.B
\-assert definitions\c
\&\|', you must write
`\|\c
.B
\-Xlinker \-assert \-Xlinker definitions\c
\&\|'.  It does not work to write
`\|\c
.B
\-Xlinker "\-assert definitions"\c
\&\|', because this passes the entire
string as a single argument, which is not what the linker expects.
.TP
.BI "\-Wl," "option"
Pass \c
.I option\c
\& as an option to the linker.  If \c
.I option\c
\& contains
commas, it is split into multiple options at the commas.
.TP
.BI "\-u " "symbol"
Pretend the symbol
.I symbol
is undefined, to force linking of
library modules to define it.  You can use `\|\c
.B \-u\c
\&\|' multiple times with
different symbols to force loading of additional library modules.
.SH DIRECTORY OPTIONS
These options specify directories to search for header files, for
libraries and for parts of the compiler:
.TP
.BI "\-I" "dir"
Append directory \c
.I dir\c
\& to the list of directories searched for include files.
.TP
.B \-I\-
Any directories you specify with `\|\c
.B \-I\c
\&\|' options before the `\|\c
.B \-I\-\c
\&\|'
option are searched only for the case of `\|\c
.B
#include "\c
.I file\c
.B
\&"\c
\&\|';
they are not searched for `\|\c
.B #include <\c
.I file\c
\&>\c
\&\|'.
.Sp
If additional directories are specified with `\|\c
.B \-I\c
\&\|' options after
the `\|\c
.B \-I\-\c
\&\|', these directories are searched for all `\|\c
.B #include\c
\&\|'
directives.  (Ordinarily \c
.I all\c
\& `\|\c
.B \-I\c
\&\|' directories are used
this way.)
.Sp
In addition, the `\|\c
.B \-I\-\c
\&\|' option inhibits the use of the current
directory (where the current input file came from) as the first search
directory for `\|\c
.B
#include "\c
.I file\c
.B
\&"\c
\&\|'.  There is no way to
override this effect of `\|\c
.B \-I\-\c
\&\|'.  With `\|\c
.B \-I.\c
\&\|' you can specify
searching the directory which was current when the compiler was
invoked.  That is not exactly the same as what the preprocessor does
by default, but it is often satisfactory.
.Sp
`\|\c
.B \-I\-\c
\&\|' does not inhibit the use of the standard system directories
for header files.  Thus, `\|\c
.B \-I\-\c
\&\|' and `\|\c
.B \-nostdinc\c
\&\|' are
independent.
.TP
.BI "\-L" "dir"
Add directory \c
.I dir\c
\& to the list of directories to be searched
for `\|\c
.B \-l\c
\&\|'.
.TP
.BI "\-B" "prefix"
This option specifies where to find the executables, libraries and
data files of the compiler itself.
.Sp
The compiler driver program runs one or more of the subprograms
`\|\c
.B cpp\c
\&\|', `\|\c
.B cc1\c
\&\|' (or, for C++, `\|\c
.B cc1plus\c
\&\|'), `\|\c
.B as\c
\&\|' and `\|\c
.B ld\c
\&\|'.  It tries
.I prefix\c
\& as a prefix for each program it tries to run, both with and
without `\|\c
.I machine\c
.B /\c
.I version\c
.B /\c
\&\|'.
.Sp
For each subprogram to be run, the compiler driver first tries the
`\|\c
.B \-B\c
\&\|' prefix, if any.  If that name is not found, or if `\|\c
.B \-B\c
\&\|'
was not specified, the driver tries two standard prefixes, which are
`\|\c
.B /usr/lib/gcc/\c
\&\|' and `\|\c
.B /usr/local/lib/gcc-lib/\c
\&\|'.  If neither of
those results in a file name that is found, the compiler driver
searches for the unmodified program
name, using the directories specified in your
`\|\c
.B PATH\c
\&\|' environment variable.
.Sp
The run-time support file `\|\c
.B libgcc.a\c
\&\|' is also searched for using the
`\|\c
.B \-B\c
\&\|' prefix, if needed.  If it is not found there, the two
standard prefixes above are tried, and that is all.  The file is left
out of the link if it is not found by those means.  Most of the time,
on most machines, `\|\c
.B libgcc.a\c
\&\|' is not actually necessary.
.Sp
You can get a similar result from the environment variable
.B GCC_EXEC_PREFIX\c
\&; if it is defined, its value is used as a prefix
in the same way.  If both the `\|\c
.B \-B\c
\&\|' option and the
.B GCC_EXEC_PREFIX\c
\& variable are present, the `\|\c
.B \-B\c
\&\|' option is
used first and the environment variable value second.
.SH WARNING OPTIONS
Warnings are diagnostic messages that report constructions which
are not inherently erroneous but which are risky or suggest there
may have been an error.
.Sp
These options control the amount and kinds of warnings produced by GNU
CC:
.TP
.B \-fsyntax\-only
Check the code for syntax errors, but don't emit any output.
.TP
.B \-w
Inhibit all warning messages.
.TP
.B \-Wno\-import
Inhibit warning messages about the use of
.BR #import .
.TP
.B \-pedantic
Issue all the warnings demanded by strict ANSI standard C; reject
all programs that use forbidden extensions.
.Sp
Valid ANSI standard C programs should compile properly with or without
this option (though a rare few will require `\|\c
.B \-ansi\c
\&\|').  However,
without this option, certain GNU extensions and traditional C features
are supported as well.  With this option, they are rejected.  There is
no reason to \c
.I use\c
\& this option; it exists only to satisfy pedants.
.Sp
`\|\c
.B \-pedantic\c
\&\|' does not cause warning messages for use of the
alternate keywords whose names begin and end with `\|\c
.B _\|_\c
\&\|'.  Pedantic
warnings are also disabled in the expression that follows
.B _\|_extension_\|_\c
\&.  However, only system header files should use
these escape routes; application programs should avoid them.
.TP
.B \-pedantic\-errors
Like `\|\c
.B \-pedantic\c
\&\|', except that errors are produced rather than
warnings.
.TP
.B \-W
Print extra warning messages for these events:
.TP
\ \ \ \(bu
A nonvolatile automatic variable might be changed by a call to
.B longjmp\c
\&.  These warnings are possible only in
optimizing compilation.
.Sp
The compiler sees only the calls to \c
.B setjmp\c
\&.  It cannot know
where \c
.B longjmp\c
\& will be called; in fact, a signal handler could
call it at any point in the code.  As a result, you may get a warning
even when there is in fact no problem because \c
.B longjmp\c
\& cannot
in fact be called at the place which would cause a problem.
.TP
\ \ \ \(bu
A function can return either with or without a value.  (Falling
off the end of the function body is considered returning without
a value.)  For example, this function would evoke such a
warning:
.Sp
.nf
foo (a)
{
  if (a > 0)
    return a;
}
.Sp
.fi
Spurious warnings can occur because GNU CC does not realize that
certain functions (including \c
.B abort\c
\& and \c
.B longjmp\c
\&)
will never return.
.TP
\ \ \ \(bu
An expression-statement or the left-hand side of a comma expression
contains no side effects. 
To suppress the warning, cast the unused expression to void.
For example, an expression such as `\|\c
.B x[i,j]\c
\&\|' will cause a warning,
but `\|\c
.B x[(void)i,j]\c
\&\|' will not.
.TP
\ \ \ \(bu
An unsigned value is compared against zero with `\|\c
.B >\c
\&\|' or `\|\c
.B <=\c
\&\|'.
.PP
.TP
.B \-Wimplicit
Warn whenever a function or parameter is implicitly declared.
.TP
.B \-Wmain
Warn if the
.B main
function is declared or defined with a suspicious type.
Typically, it is a function with external linkage, returning
.B int\c
\&, and
taking zero or two arguments.

.TP
.B \-Wreturn\-type
Warn whenever a function is defined with a return-type that defaults
to \c
.B int\c
\&.  Also warn about any \c
.B return\c
\& statement with no
return-value in a function whose return-type is not \c
.B void\c
\&.
.TP
.B \-Wunused
Warn whenever a local variable is unused aside from its declaration,
whenever a function is declared static but never defined, and whenever
a statement computes a result that is explicitly not used.
.TP
.B \-Wswitch
Warn whenever a \c
.B switch\c
\& statement has an index of enumeral type
and lacks a \c
.B case\c
\& for one or more of the named codes of that
enumeration.  (The presence of a \c
.B default\c
\& label prevents this
warning.)  \c
.B case\c
\& labels outside the enumeration range also
provoke warnings when this option is used.
.TP
.B \-Wcomment
Warn whenever a comment-start sequence `\|\c
.B /\(**\c
\&\|' appears in a comment.
.TP
.B \-Wtrigraphs
Warn if any trigraphs are encountered (assuming they are enabled).
.TP
.B \-Wformat
Check calls to \c
.B printf\c
\& and \c
.B scanf\c
\&, etc., to make sure that
the arguments supplied have types appropriate to the format string
specified.
.TP
.B \-Wchar\-subscripts
Warn if an array subscript has type
.BR char .
This is a common cause of error, as programmers often forget that this
type is signed on some machines.
.TP
.B \-Wuninitialized
An automatic variable is used without first being initialized.
.Sp
These warnings are possible only in optimizing compilation,
because they require data flow information that is computed only
when optimizing.  If you don't specify `\|\c
.B \-O\c
\&\|', you simply won't
get these warnings.
.Sp
These warnings occur only for variables that are candidates for
register allocation.  Therefore, they do not occur for a variable that
is declared \c
.B volatile\c
\&, or whose address is taken, or whose size
is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
structures, unions or arrays, even when they are in registers.
.Sp
Note that there may be no warning about a variable that is used only
to compute a value that itself is never used, because such
computations may be deleted by data flow analysis before the warnings
are printed.
.Sp
These warnings are made optional because GNU CC is not smart
enough to see all the reasons why the code might be correct
despite appearing to have an error.  Here is one example of how
this can happen:
.Sp
.nf
{
  int x;
  switch (y)
    {
    case 1: x = 1;
      break;
    case 2: x = 4;
      break;
    case 3: x = 5;
    }
  foo (x);
}
.Sp
.fi
If the value of \c
.B y\c
\& is always 1, 2 or 3, then \c
.B x\c
\& is
always initialized, but GNU CC doesn't know this.  Here is
another common case:
.Sp
.nf
{
  int save_y;
  if (change_y) save_y = y, y = new_y;
  .\|.\|.
  if (change_y) y = save_y;
}
.Sp
.fi
This has no bug because \c
.B save_y\c
\& is used only if it is set.
.Sp
Some spurious warnings can be avoided if you declare as
.B volatile\c
\& all the functions you use that never return.
.TP
.B \-Wparentheses
Warn if parentheses are omitted in certain contexts.
.TP
.B \-Wtemplate\-debugging
When using templates in a C++ program, warn if debugging is not yet
fully available (C++ only).
.TP
.B \-Wall
All of the above `\|\c
.B \-W\c
\&\|' options combined.  These are all the
options which pertain to usage that we recommend avoiding and that we
believe is easy to avoid, even in conjunction with macros.
.PP
The remaining `\|\c
.B \-W.\|.\|.\c
\&\|' options are not implied by `\|\c
.B \-Wall\c
\&\|'
because they warn about constructions that we consider reasonable to
use, on occasion, in clean programs.
.TP
.B \-Wtraditional
Warn about certain constructs that behave differently in traditional and
ANSI C.
.TP
\ \ \ \(bu
Macro arguments occurring within string constants in the macro body.
These would substitute the argument in traditional C, but are part of
the constant in ANSI C.
.TP
\ \ \ \(bu
A function declared external in one block and then used after the end of
the block.
.TP
\ \ \ \(bu
A \c
.B switch\c
\& statement has an operand of type \c
.B long\c
\&.
.PP
.TP
.B \-Wshadow
Warn whenever a local variable shadows another local variable.
.TP
.BI "\-Wid\-clash\-" "len"
Warn whenever two distinct identifiers match in the first \c
.I len
characters.  This may help you prepare a program that will compile
with certain obsolete, brain-damaged compilers.
.TP
.B \-Wpointer\-arith
Warn about anything that depends on the \*(lqsize of\*(rq a function type or
of \c
.B void\c
\&.  GNU C assigns these types a size of 1, for
convenience in calculations with \c
.B void \(**\c
\& pointers and pointers
to functions.
.TP
.B \-Wcast\-qual
Warn whenever a pointer is cast so as to remove a type qualifier from
the target type.  For example, warn if a \c
.B const char \(**\c
\& is cast
to an ordinary \c
.B char \(**\c
\&.
.TP
.B \-Wcast\-align
Warn whenever a pointer is cast such that the required alignment of the
target is increased.  For example, warn if a \c
.B char \(**\c
\& is cast to
an \c
.B int \(**\c
\& on machines where integers can only be accessed at
two- or four-byte boundaries.
.TP
.B \-Wwrite\-strings
Give string constants the type \c
.B const char[\c
.I length\c
.B ]\c
\& so that
copying the address of one into a non-\c
.B const\c
\& \c
.B char \(**
pointer will get a warning.  These warnings will help you find at
compile time code that can try to write into a string constant, but
only if you have been very careful about using \c
.B const\c
\& in
declarations and prototypes.  Otherwise, it will just be a nuisance;
this is why we did not make `\|\c
.B \-Wall\c
\&\|' request these warnings.
.TP
.B \-Wconversion
Warn if a prototype causes a type conversion that is different from what
would happen to the same argument in the absence of a prototype.  This
includes conversions of fixed point to floating and vice versa, and
conversions changing the width or signedness of a fixed point argument
except when the same as the default promotion.
.TP
.B \-Waggregate\-return
Warn if any functions that return structures or unions are defined or
called.  (In languages where you can return an array, this also elicits
a warning.)
.TP
.B \-Wstrict\-prototypes
Warn if a function is declared or defined without specifying the
argument types.  (An old-style function definition is permitted without
a warning if preceded by a declaration which specifies the argument
types.)
.TP
.B \-Wmissing\-prototypes
Warn if a global function is defined without a previous prototype
declaration.  This warning is issued even if the definition itself
provides a prototype.  The aim is to detect global functions that fail
to be declared in header files.
.TP
.B \-Wmissing\-declarations
Warn if a global function is defined without a previous declaration.
Do so even if the definition itself provides a prototype.
Use this option to detect global functions that are not declared in
header files.
.TP
.B \-Wredundant-decls
Warn if anything is declared more than once in the same scope, even in
cases where multiple declaration is valid and changes nothing.
.TP
.B \-Wnested-externs
Warn if an \c
.B extern\c
\& declaration is encountered within an function.
.TP
.B \-Wenum\-clash
Warn about conversion between different enumeration types (C++ only).
.TP
.B \-Woverloaded\-virtual
(C++ only.)
In a derived class, the definitions of virtual functions must match
the type signature of a virtual function declared in the base class.
Use this option to request warnings when a derived class declares a
function that may be an erroneous attempt to define a virtual
function: that is, warn when a function with the same name as a
virtual function in the base class, but with a type signature that
doesn't match any virtual functions from the base class.
.TP
.B \-Winline
Warn if a function can not be inlined, and either it was declared as inline,
or else the
.B \-finline\-functions
option was given.
.TP
.B \-Werror
Treat warnings as errors; abort compilation after any warning.
.SH DEBUGGING OPTIONS
GNU CC has various special options that are used for debugging
either your program or GCC:
.TP
.B \-g
Produce debugging information in the operating system's native format
(stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
information.
.Sp
On most systems that use stabs format, `\|\c
.B \-g\c
\&\|' enables use of extra
debugging information that only GDB can use; this extra information
makes debugging work better in GDB but will probably make other debuggers
crash or
refuse to read the program.  If you want to control for certain whether
to generate the extra information, use `\|\c
.B \-gstabs+\c
\&\|', `\|\c
.B \-gstabs\c
\&\|',
`\|\c
.B \-gxcoff+\c
\&\|', `\|\c
.B \-gxcoff\c
\&\|', `\|\c
.B \-gdwarf+\c
\&\|', or `\|\c
.B \-gdwarf\c
\&\|'
(see below).
.Sp
Unlike most other C compilers, GNU CC allows you to use `\|\c
.B \-g\c
\&\|' with
`\|\c
.B \-O\c
\&\|'.  The shortcuts taken by optimized code may occasionally
produce surprising results: some variables you declared may not exist
at all; flow of control may briefly move where you did not expect it;
some statements may not be executed because they compute constant
results or their values were already at hand; some statements may
execute in different places because they were moved out of loops.
.Sp
Nevertheless it proves possible to debug optimized output.  This makes
it reasonable to use the optimizer for programs that might have bugs.
.PP
The following options are useful when GNU CC is generated with the
capability for more than one debugging format.
.TP
.B \-ggdb
Produce debugging information in the native format (if that is supported),
including GDB extensions if at all possible.
.TP
.B \-gstabs
Produce debugging information in stabs format (if that is supported),
without GDB extensions.  This is the format used by DBX on most BSD
systems.
.TP
.B \-gstabs+
Produce debugging information in stabs format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB).  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.
.TP
.B \-gcoff
Produce debugging information in COFF format (if that is supported).
This is the format used by SDB on most System V systems prior to
System V Release 4.
.TP
.B \-gxcoff
Produce debugging information in XCOFF format (if that is supported).
This is the format used by the DBX debugger on IBM RS/6000 systems.
.TP
.B \-gxcoff+
Produce debugging information in XCOFF format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB).  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.
.TP
.B \-gdwarf
Produce debugging information in DWARF format (if that is supported).
This is the format used by SDB on most System V Release 4 systems.
.TP
.B \-gdwarf+
Produce debugging information in DWARF format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB).  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.
.PP
.BI "\-g" "level"
.br
.BI "\-ggdb" "level"
.br
.BI "\-gstabs" "level"
.br
.BI "\-gcoff" "level"
.BI "\-gxcoff" "level"
.TP
.BI "\-gdwarf" "level"
Request debugging information and also use \c
.I level\c
\& to specify how
much information.  The default level is 2.
.Sp
Level 1 produces minimal information, enough for making backtraces in
parts of the program that you don't plan to debug.  This includes
descriptions of functions and external variables, but no information
about local variables and no line numbers.
.Sp
Level 3 includes extra information, such as all the macro definitions
present in the program.  Some debuggers support macro expansion when
you use `\|\c
.B \-g3\c
\&\|'.
.TP
.B \-p
Generate extra code to write profile information suitable for the
analysis program \c
.B prof\c
\&.
.TP
.B \-pg
Generate extra code to write profile information suitable for the
analysis program \c
.B gprof\c
\&.
.TP
.B \-a
Generate extra code to write profile information for basic blocks,
which will record the number of times each basic block is executed.
This data could be analyzed by a program like \c
.B tcov\c
\&.  Note,
however, that the format of the data is not what \c
.B tcov\c
\& expects.
Eventually GNU \c
.B gprof\c
\& should be extended to process this data.
.TP
.B \-ax
Generate extra code to read basic block profiling parameters from 
file `bb.in' and write profiling results to file `bb.out'.
`bb.in' contains a list of functions. Whenever a function on the list
is entered, profiling is turned on. When the outmost function is left,
profiling is turned off. If a function name is prefixed with `-'
the function is excluded from profiling. If a function name is not
unique it can be disambiguated by writing
`/path/filename.d:functionname'. `bb.out' will list some available
filenames.
Four function names have a special meaning:
`__bb_jumps__' will cause jump frequencies to be written to `bb.out'.
`__bb_trace__' will cause the sequence of basic blocks to be piped 
into `gzip' and written to file `bbtrace.gz'.
`__bb_hidecall__' will cause call instructions to be excluded from
the trace.
`__bb_showret__' will cause return instructions to be included in
the trace.
.TP
.BI "\-d" "letters"
Says to make debugging dumps during compilation at times specified by
.I letters\c
\&.  This is used for debugging the compiler.  The file names
for most of the dumps are made by appending a word to the source file
name (e.g.  `\|\c
.B foo.c.rtl\c
\&\|' or `\|\c
.B foo.c.jump\c
\&\|').
.TP
.B \-dM
Dump all macro definitions, at the end of preprocessing, and write no
output.
.TP
.B \-dN
Dump all macro names, at the end of preprocessing.
.TP
.B \-dD
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
.TP
.B \-dy
Dump debugging information during parsing, to standard error.
.TP
.B \-dr
Dump after RTL generation, to `\|\c
.I file\c
.B \&.rtl\c
\&\|'.
.TP
.B \-dx
Just generate RTL for a function instead of compiling it.  Usually used
with `\|\c
.B r\c
\&\|'.
.TP
.B \-dj
Dump after first jump optimization, to `\|\c
.I file\c
.B \&.jump\c
\&\|'.
.TP
.B \-ds
Dump after CSE (including the jump optimization that sometimes
follows CSE), to `\|\c
.I file\c
.B \&.cse\c
\&\|'.
.TP
.B \-dL
Dump after loop optimization, to `\|\c
.I file\c
.B \&.loop\c
\&\|'.
.TP
.B \-dt
Dump after the second CSE pass (including the jump optimization that
sometimes follows CSE), to `\|\c
.I file\c
.B \&.cse2\c
\&\|'.
.TP
.B \-df
Dump after flow analysis, to `\|\c
.I file\c
.B \&.flow\c
\&\|'.
.TP
.B \-dc
Dump after instruction combination, to `\|\c
.I file\c
.B \&.combine\c
\&\|'.
.TP
.B \-dS
Dump after the first instruction scheduling pass, to
`\|\c
.I file\c
.B \&.sched\c
\&\|'.
.TP
.B \-dl
Dump after local register allocation, to `\|\c
.I file\c
.B \&.lreg\c
\&\|'.
.TP
.B \-dg
Dump after global register allocation, to `\|\c
.I file\c
.B \&.greg\c
\&\|'.
.TP
.B \-dR
Dump after the second instruction scheduling pass, to
`\|\c
.I file\c
.B \&.sched2\c
\&\|'.
.TP
.B \-dJ
Dump after last jump optimization, to `\|\c
.I file\c
.B \&.jump2\c
\&\|'.
.TP
.B \-dd
Dump after delayed branch scheduling, to `\|\c
.I file\c
.B \&.dbr\c
\&\|'.
.TP
.B \-dk
Dump after conversion from registers to stack, to `\|\c
.I file\c
.B \&.stack\c
\&\|'.
.TP
.B \-da
Produce all the dumps listed above.
.TP
.B \-dm
Print statistics on memory usage, at the end of the run, to
standard error.
.TP
.B \-dp
Annotate the assembler output with a comment indicating which
pattern and alternative was used.
.TP
.B \-fpretend\-float
When running a cross-compiler, pretend that the target machine uses the
same floating point format as the host machine.  This causes incorrect
output of the actual floating constants, but the actual instruction
sequence will probably be the same as GNU CC would make when running on
the target machine.
.TP
.B \-save\-temps
Store the usual \*(lqtemporary\*(rq intermediate files permanently; place them
in the current directory and name them based on the source file.  Thus,
compiling `\|\c
.B foo.c\c
\&\|' with `\|\c
.B \-c \-save\-temps\c
\&\|' would produce files
`\|\c
.B foo.cpp\c
\&\|' and `\|\c
.B foo.s\c
\&\|', as well as `\|\c
.B foo.o\c
\&\|'.
.TP
.BI "\-print\-file\-name=" "library"
Print the full absolute name of the library file \|\c
.nh
.I library
.hy
\&\| that
would be used when linking\(em\&and do not do anything else.  With this
option, GNU CC does not compile or link anything; it just prints the
file name.
.TP
.B \-print\-libgcc\-file\-name
Same as `\|\c
.B \-print\-file\-name=libgcc.a\c
\&\|'.
.TP
.BI "\-print\-prog\-name=" "program"
Like `\|\c
.B \-print\-file\-name\c
\&\|', but searches for a program such as `\|\c
cpp\c
\&\|'.
.SH OPTIMIZATION OPTIONS
These options control various sorts of optimizations:
.TP
.B \-O
.TP
.B \-O1
Optimize.  Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.
.Sp
Without `\|\c
.B \-O\c
\&\|', the compiler's goal is to reduce the cost of
compilation and to make debugging produce the expected results.
Statements are independent: if you stop the program with a breakpoint
between statements, you can then assign a new value to any variable or
change the program counter to any other statement in the function and
get exactly the results you would expect from the source code.
.Sp
Without `\|\c
.B \-O\c
\&\|', only variables declared \c
.B register\c
\& are
allocated in registers.  The resulting compiled code is a little worse
than produced by PCC without `\|\c
.B \-O\c
\&\|'.
.Sp
With `\|\c
.B \-O\c
\&\|', the compiler tries to reduce code size and execution
time.
.Sp
When you specify `\|\c
.B \-O\c
\&\|', the two options `\|\c
.B \-fthread\-jumps\c
\&\|' and `\|\c
.B \-fdefer\-pop\c
\&\|' are turned on.  On machines that have delay slots, the `\|\c
.B \-fdelayed\-branch\c
\&\|' option is turned on.  For those machines that can support debugging even
without a frame pointer, the `\|\c
.B \-fomit\-frame\-pointer\c
\&\|' option is turned on.  On some machines other flags may also be turned on.
.TP
.B \-O2
Optimize even more.  Nearly all supported optimizations that do not
involve a space-speed tradeoff are performed.  Loop unrolling and function
inlining are not done, for example.  As compared to
.B \-O\c
\&,
this option increases both compilation time and the performance of the
generated code.
.TP
.B \-O3
Optimize yet more. This turns on everything
.B \-O2
does, along with also turning on
.B \-finline\-functions.
.TP
.B \-O0
Do not optimize.
.Sp
If you use multiple
.B \-O
options, with or without level numbers, the last such option is the
one that is effective.
.PP
Options of the form `\|\c
.B \-f\c
.I flag\c
\&\c
\&\|' specify machine-independent
flags.  Most flags have both positive and negative forms; the negative
form of `\|\c
.B \-ffoo\c
\&\|' would be `\|\c
.B \-fno\-foo\c
\&\|'.  The following list shows
only one form\(em\&the one which is not the default.
You can figure out the other form by either removing `\|\c
.B no\-\c
\&\|' or
adding it.
.TP
.B \-ffloat\-store
Do not store floating point variables in registers.  This
prevents undesirable excess precision on machines such as the
68000 where the floating registers (of the 68881) keep more
precision than a \c
.B double\c
\& is supposed to have.
.Sp
For most programs, the excess precision does only good, but a few
programs rely on the precise definition of IEEE floating point.
Use `\|\c
.B \-ffloat\-store\c
\&\|' for such programs.
.TP
.B \-fmemoize\-lookups
.TP
.B \-fsave\-memoized
Use heuristics to compile faster (C++ only).  These heuristics are not
enabled by default, since they are only effective for certain input
files.  Other input files compile more slowly.
.Sp
The first time the compiler must build a call to a member function (or
reference to a data member), it must (1) determine whether the class
implements member functions of that name; (2) resolve which member
function to call (which involves figuring out what sorts of type
conversions need to be made); and (3) check the visibility of the member
function to the caller.  All of this adds up to slower compilation.
Normally, the second time a call is made to that member function (or
reference to that data member), it must go through the same lengthy
process again.  This means that code like this
.Sp
\&  cout << "This " << p << " has " << n << " legs.\en";
.Sp
makes six passes through all three steps.  By using a software cache,
a \*(lqhit\*(rq significantly reduces this cost.  Unfortunately, using the
cache introduces another layer of mechanisms which must be implemented,
and so incurs its own overhead.  `\|\c
.B \-fmemoize\-lookups\c
\&\|' enables
the software cache.
.Sp
Because access privileges (visibility) to members and member functions
may differ from one function context to the next,
.B g++
may need to flush the cache.  With the `\|\c
.B \-fmemoize\-lookups\c
\&\|' flag, the cache is flushed after every
function that is compiled.  The `\|\c
\-fsave\-memoized\c
\&\|' flag enables the same software cache, but when the compiler
determines that the context of the last function compiled would yield
the same access privileges of the next function to compile, it
preserves the cache.
This is most helpful when defining many member functions for the same
class: with the exception of member functions which are friends of
other classes, each member function has exactly the same access
privileges as every other, and the cache need not be flushed.
.TP
.B \-fno\-default\-inline
Don't make member functions inline by default merely because they are
defined inside the class scope (C++ only).
.TP
.B \-fno\-defer\-pop
Always pop the arguments to each function call as soon as that
function returns.  For machines which must pop arguments after a
function call, the compiler normally lets arguments accumulate on the
stack for several function calls and pops them all at once.
.TP
.B \-fforce\-mem
Force memory operands to be copied into registers before doing
arithmetic on them.  This may produce better code by making all
memory references potential common subexpressions.  When they are
not common subexpressions, instruction combination should
eliminate the separate register-load.  I am interested in hearing
about the difference this makes.
.TP
.B \-fforce\-addr
Force memory address constants to be copied into registers before
doing arithmetic on them.  This may produce better code just as
`\|\c
.B \-fforce\-mem\c
\&\|' may.  I am interested in hearing about the
difference this makes.
.TP
.B \-fomit\-frame\-pointer
Don't keep the frame pointer in a register for functions that
don't need one.  This avoids the instructions to save, set up and
restore frame pointers; it also makes an extra register available
in many functions.  \c
.I It also makes debugging impossible on most machines\c
\&.
.Sp
On some machines, such as the Vax, this flag has no effect, because
the standard calling sequence automatically handles the frame pointer
and nothing is saved by pretending it doesn't exist.  The
machine-description macro \c
.B FRAME_POINTER_REQUIRED\c
\& controls
whether a target machine supports this flag.
.TP
.B \-finline\-functions
Integrate all simple functions into their callers.  The compiler
heuristically decides which functions are simple enough to be worth
integrating in this way.
.Sp
If all calls to a given function are integrated, and the function is
declared \c
.B static\c
\&, then GCC normally does not output the function as
assembler code in its own right.
.TP
.B \-fcaller\-saves
Enable values to be allocated in registers that will be clobbered by
function calls, by emitting extra instructions to save and restore the
registers around such calls.  Such allocation is done only when it
seems to result in better code than would otherwise be produced.
.Sp
This option is enabled by default on certain machines, usually those
which have no call-preserved registers to use instead.
.TP
.B \-fkeep\-inline\-functions
Even if all calls to a given function are integrated, and the function
is declared \c
.B static\c
\&, nevertheless output a separate run-time
callable version of the function.
.TP
.B \-fno\-function\-cse
Do not put function addresses in registers; make each instruction that
calls a constant function contain the function's address explicitly.
.Sp
This option results in less efficient code, but some strange hacks
that alter the assembler output may be confused by the optimizations
performed when this option is not used.
.TP
.B \-fno\-peephole
Disable any machine-specific peephole optimizations.
.TP
.B \-ffast-math
This option allows GCC to violate some ANSI or IEEE rules/specifications
in the interest of optimizing code for speed.  For example, it allows
the compiler to assume arguments to the \c
.B sqrt\c
\& function are
non-negative numbers.
.Sp
This option should never be turned on by any `\|\c
.B \-O\c
\&\|' option since
it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ANSI rules/specifications for
math functions.
.PP
The following options control specific optimizations.  The `\|\c
.B \-O2\c
\&\|'
option turns on all of these optimizations except `\|\c
.B \-funroll\-loops\c
\&\|'
and `\|\c
.B \-funroll\-all\-loops\c
\&\|'.
.PP
The `\|\c
.B \-O\c
\&\|' option usually turns on
the `\|\c
.B \-fthread\-jumps\c
\&\|' and `\|\c
.B \-fdelayed\-branch\c
\&\|' options, but
specific machines may change the default optimizations.
.PP
You can use the following flags in the rare cases when \*(lqfine-tuning\*(rq
of optimizations to be performed is desired.
.TP
.B \-fstrength\-reduce
Perform the optimizations of loop strength reduction and
elimination of iteration variables.
.TP
.B \-fthread\-jumps
Perform optimizations where we check to see if a jump branches to a
location where another comparison subsumed by the first is found.  If
so, the first branch is redirected to either the destination of the
second branch or a point immediately following it, depending on whether
the condition is known to be true or false.
.TP
.B \-funroll\-loops
Perform the optimization of loop unrolling.  This is only done for loops
whose number of iterations can be determined at compile time or run time.
.TP
.B \-funroll\-all\-loops
Perform the optimization of loop unrolling.  This is done for all loops.
This usually makes programs run more slowly.
.TP
.B \-fcse\-follow\-jumps
In common subexpression elimination, scan through jump instructions
when the target of the jump is not reached by any other path.  For
example, when CSE encounters an \c
.B if\c
\& statement with an
.B else\c
\& clause, CSE will follow the jump when the condition
tested is false.
.TP
.B \-fcse\-skip\-blocks
This is similar to `\|\c
.B \-fcse\-follow\-jumps\c
\&\|', but causes CSE to
follow jumps which conditionally skip over blocks.  When CSE
encounters a simple \c
.B if\c
\& statement with no else clause,
`\|\c
.B \-fcse\-skip\-blocks\c
\&\|' causes CSE to follow the jump around the
body of the \c
.B if\c
\&.
.TP
.B \-frerun\-cse\-after\-loop
Re-run common subexpression elimination after loop optimizations has been
performed.
.TP
.B \-felide\-constructors
Elide constructors when this seems plausible (C++ only).  With this
flag, GNU C++ initializes \c
.B y\c
\& directly from the call to \c
.B foo
without going through a temporary in the following code:
.Sp
A foo ();
A y = foo ();
.Sp
Without this option, GNU C++ first initializes \c
.B y\c
\& by calling the
appropriate constructor for type \c
.B A\c
\&; then assigns the result of
.B foo\c
\& to a temporary; and, finally, replaces the initial value of
`\|\c
.B y\c
\&\|' with the temporary.
.Sp
The default behavior (`\|\c
.B \-fno\-elide\-constructors\c
\&\|') is specified by
the draft ANSI C++ standard.  If your program's constructors have side
effects, using `\|\c
.B \-felide-constructors\c
\&\|' can make your program act
differently, since some constructor calls may be omitted.
.TP
.B \-fexpensive\-optimizations
Perform a number of minor optimizations that are relatively expensive.
.TP
.B \-fdelayed\-branch
If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.
.TP
.B \-fschedule\-insns
If supported for the target machine, attempt to reorder instructions to
eliminate execution stalls due to required data being unavailable.  This
helps machines that have slow floating point or memory load instructions
by allowing other instructions to be issued until the result of the load
or floating point instruction is required.
.TP
.B \-fschedule\-insns2
Similar to `\|\c
.B \-fschedule\-insns\c
\&\|', but requests an additional pass of
instruction scheduling after register allocation has been done.  This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.
.SH TARGET OPTIONS
By default, GNU CC compiles code for the same type of machine that you
are using.  However, it can also be installed as a cross-compiler, to
compile for some other type of machine.  In fact, several different
configurations of GNU CC, for different target machines, can be
installed side by side.  Then you specify which one to use with the
`\|\c
.B \-b\c
\&\|' option.
.PP
In addition, older and newer versions of GNU CC can be installed side
by side.  One of them (probably the newest) will be the default, but
you may sometimes wish to use another.
.TP
.BI "\-b " "machine"
The argument \c
.I machine\c
\& specifies the target machine for compilation.
This is useful when you have installed GNU CC as a cross-compiler.
.Sp
The value to use for \c
.I machine\c
\& is the same as was specified as the
machine type when configuring GNU CC as a cross-compiler.  For
example, if a cross-compiler was configured with `\|\c
.B configure
i386v\c
\&\|', meaning to compile for an 80386 running System V, then you
would specify `\|\c
.B \-b i386v\c
\&\|' to run that cross compiler.
.Sp
When you do not specify `\|\c
.B \-b\c
\&\|', it normally means to compile for
the same type of machine that you are using.
.TP
.BI "\-V " "version"
The argument \c
.I version\c
\& specifies which version of GNU CC to run.
This is useful when multiple versions are installed.  For example,
.I version\c
\& might be `\|\c
.B 2.0\c
\&\|', meaning to run GNU CC version 2.0.
.Sp
The default version, when you do not specify `\|\c
.B \-V\c
\&\|', is controlled
by the way GNU CC is installed.  Normally, it will be a version that
is recommended for general use.
.SH MACHINE DEPENDENT OPTIONS
Each of the target machine types can have its own special options,
starting with `\|\c
.B \-m\c
\&\|', to choose among various hardware models or
configurations\(em\&for example, 68010 vs 68020, floating coprocessor or
none.  A single installed version of the compiler can compile for any
model or configuration, according to the options specified.
.PP
Some configurations of the compiler also support additional special
options, usually for command-line compatibility with other compilers on
the same platform.
.PP
These are the `\|\c
.B \-m\c
\&\|' options defined for the 68000 series:
.TP
.B \-m68000
.TP
.B \-mc68000
Generate output for a 68000.  This is the default when the compiler is
configured for 68000-based systems.
.TP
.B \-m68020
.TP
.B \-mc68020
Generate output for a 68020 (rather than a 68000).  This is the
default when the compiler is configured for 68020-based systems.
.TP
.B \-m68881
Generate output containing 68881 instructions for floating point.
This is the default for most 68020-based systems unless
.B \-nfp
was specified when the compiler was configured.
.TP
.B \-m68030
Generate output for a 68030.  This is the default when the compiler is
configured for 68030-based systems.
.TP
.B \-m68040
Generate output for a 68040.  This is the default when the compiler is
configured for 68040-based systems.
.TP
.B \-m68020\-40
Generate output for a 68040, without using any of the new instructions.
This results in code which can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.
.TP
.B \-mfpa
Generate output containing Sun FPA instructions for floating point.
.TP
.B \-msoft\-float
Generate output containing library calls for floating point.
.I
WARNING:
the requisite libraries are not part of GNU CC.  Normally the
facilities of the machine's usual C compiler are used, but this can't
be done directly in cross-compilation.  You must make your own
arrangements to provide suitable library functions for cross-compilation.
.TP
.B \-mshort
Consider type \c
.B int\c
\& to be 16 bits wide, like \c
.B short int\c
\&.
.TP
.B \-mnobitfield
Do not use the bit-field instructions.  `\|\c
.B \-m68000\c
\&\|' implies
`\|\c
.B \-mnobitfield\c
\&\|'.
.TP
.B \-mbitfield
Do use the bit-field instructions.  `\|\c
.B \-m68020\c
\&\|' implies
`\|\c
.B \-mbitfield\c
\&\|'.  This is the default if you use the unmodified
sources.
.TP
.B \-mrtd
Use a different function-calling convention, in which functions
that take a fixed number of arguments return with the \c
.B rtd
instruction, which pops their arguments while returning.  This
saves one instruction in the caller since there is no need to pop
the arguments there.
.Sp
This calling convention is incompatible with the one normally
used on Unix, so you cannot use it if you need to call libraries
compiled with the Unix compiler.
.Sp
Also, you must provide function prototypes for all functions that
take variable numbers of arguments (including \c
.B printf\c
\&);
otherwise incorrect code will be generated for calls to those
functions.
.Sp
In addition, seriously incorrect code will result if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)
.Sp
The \c
.B rtd\c
\& instruction is supported by the 68010 and 68020
processors, but not by the 68000.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the Vax:
.TP
.B \-munix
Do not output certain jump instructions (\c
.B aobleq\c
\& and so on)
that the Unix assembler for the Vax cannot handle across long
ranges.
.TP
.B \-mgnu
Do output those jump instructions, on the assumption that you
will assemble with the GNU assembler.
.TP
.B \-mg
Output code for g-format floating point numbers instead of d-format.
.PP
These `\|\c
.B \-m\c
\&\|' switches are supported on the SPARC:
.PP
.B \-mfpu
.TP
.B \-mhard\-float
Generate output containing floating point instructions.  This is the
default.
.PP
.B \-mno\-fpu
.TP
.B \-msoft\-float
Generate output containing library calls for floating point.
.I Warning:
there is no GNU floating-point library for SPARC.
Normally the facilities of the machine's usual C compiler are used, but
this cannot be done directly in cross-compilation.  You must make your
own arrangements to provide suitable library functions for
cross-compilation.
.Sp
.B \-msoft\-float
changes the calling convention in the output file;
therefore, it is only useful if you compile
.I all
of a program with this option.
.PP
.B \-mno\-epilogue
.TP
.B \-mepilogue
With
.B \-mepilogue
(the default), the compiler always emits code for
function exit at the end of each function.  Any function exit in
the middle of the function (such as a return statement in C) will
generate a jump to the exit code at the end of the function.
.Sp
With
.BR \-mno\-epilogue ,
the compiler tries to emit exit code inline at every function exit.
.PP
.B \-mno\-v8
.TP
.B \-mv8
.TP
.B \-msparclite
These three options select variations on the SPARC architecture.
.Sp
By default (unless specifically configured for the Fujitsu SPARClite),
GCC generates code for the v7 variant of the SPARC architecture.
.Sp
.B \-mv8
will give you SPARC v8 code.  The only difference from v7
code is that the compiler emits the integer multiply and integer
divide instructions which exist in SPARC v8 but not in SPARC v7.
.Sp
.B \-msparclite
will give you SPARClite code.  This adds the integer
multiply, integer divide step and scan (ffs) instructions which
exist in SPARClite but not in SPARC v7.
.PP
.B \-mcypress
.TP
.B \-msupersparc
These two options select the processor for which the code is optimised.
.Sp
With
.B \-mcypress
(the default), the compiler optimises code for the Cypress CY7C602 chip, as
used in the SparcStation/SparcServer 3xx series. This is also appropriate for
the older SparcStation 1, 2, IPX etc.
.Sp
With
.B \-msupersparc
the compiler optimises code for the SuperSparc cpu, as used in the SparcStation
10, 1000 and 2000 series. This flag also enables use of the full SPARC v8
instruction set.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the Convex:
.TP
.B \-mc1
Generate output for a C1.  This is the default when the compiler is
configured for a C1.
.TP
.B \-mc2
Generate output for a C2.  This is the default when the compiler is
configured for a C2.
.TP
.B \-margcount
Generate code which puts an argument count in the word preceding each
argument list.  Some nonportable Convex and Vax programs need this word.
(Debuggers don't, except for functions with variable-length argument
lists; this info is in the symbol table.)
.TP
.B \-mnoargcount
Omit the argument count word.  This is the default if you use the
unmodified sources.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the AMD Am29000:
.TP
.B \-mdw
Generate code that assumes the DW bit is set, i.e., that byte and
halfword operations are directly supported by the hardware.  This is the
default.
.TP
.B \-mnodw
Generate code that assumes the DW bit is not set.
.TP
.B \-mbw
Generate code that assumes the system supports byte and halfword write
operations.  This is the default.
.TP
.B \-mnbw
Generate code that assumes the systems does not support byte and
halfword write operations.  This implies `\|\c
.B \-mnodw\c
\&\|'.
.TP
.B \-msmall
Use a small memory model that assumes that all function addresses are
either within a single 256 KB segment or at an absolute address of less
than 256K.  This allows the \c
.B call\c
\& instruction to be used instead
of a \c
.B const\c
\&, \c
.B consth\c
\&, \c
.B calli\c
\& sequence.
.TP
.B \-mlarge
Do not assume that the \c
.B call\c
\& instruction can be used; this is the
default.
.TP
.B \-m29050
Generate code for the Am29050.
.TP
.B \-m29000
Generate code for the Am29000.  This is the default.
.TP
.B \-mkernel\-registers
Generate references to registers \c
.B gr64-gr95\c
\& instead of
.B gr96-gr127\c
\&.  This option can be used when compiling kernel code
that wants a set of global registers disjoint from that used by
user-mode code.
.Sp
Note that when this option is used, register names in `\|\c
.B \-f\c
\&\|' flags
must use the normal, user-mode, names.
.TP
.B \-muser\-registers
Use the normal set of global registers, \c
.B gr96-gr127\c
\&.  This is the
default.
.TP
.B \-mstack\-check
Insert a call to \c
.B _\|_msp_check\c
\& after each stack adjustment.  This
is often used for kernel code.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for Motorola 88K architectures:
.TP
.B \-m88000
Generate code that works well on both the m88100 and the
m88110.
.TP
.B \-m88100
Generate code that works best for the m88100, but that also
runs on the m88110.
.TP
.B \-m88110
Generate code that works best for the m88110, and may not run
on the m88100.
.TP
.B \-midentify\-revision
Include an \c
.B ident\c
\& directive in the assembler output recording the
source file name, compiler name and version, timestamp, and compilation
flags used.
.TP
.B \-mno\-underscores
In assembler output, emit symbol names without adding an underscore
character at the beginning of each name.  The default is to use an
underscore as prefix on each name.
.TP
.B \-mno\-check\-zero\-division
.TP
.B \-mcheck\-zero\-division
Early models of the 88K architecture had problems with division by zero;
in particular, many of them didn't trap.  Use these options to avoid
including (or to include explicitly) additional code to detect division
by zero and signal an exception.  All GCC configurations for the 88K use
`\|\c
.B \-mcheck\-zero\-division\c
\&\|' by default.
.TP
.B \-mocs\-debug\-info
.TP
.B \-mno\-ocs\-debug\-info
Include (or omit) additional debugging information (about
registers used in each stack frame) as specified in the 88Open Object
Compatibility Standard, \*(lqOCS\*(rq.  This extra information is not needed
by GDB.  The default for DG/UX, SVr4, and Delta 88 SVr3.2 is to
include this information; other 88k configurations omit this information
by default.
.TP
.B \-mocs\-frame\-position
.TP
.B \-mno\-ocs\-frame\-position
Force (or do not require) register values to be stored in a particular
place in stack frames, as specified in OCS.  The DG/UX, Delta88 SVr3.2,
and BCS configurations use `\|\c
.B \-mocs\-frame\-position\c
\&\|'; other 88k
configurations have the default `\|\c
.B \-mno\-ocs\-frame\-position\c
\&\|'.
.TP
.B \-moptimize\-arg\-area
.TP
.B \-mno\-optimize\-arg\-area
Control how to store function arguments in stack frames.
`\|\c
.B \-moptimize\-arg\-area\c
\&\|' saves space, but may break some
debuggers (not GDB).  `\|\c
.B \-mno\-optimize\-arg\-area\c
\&\|' conforms better to
standards.   By default GCC does not optimize the argument area.
.TP
.BI "\-mshort\-data\-" "num"
.I num
Generate smaller data references by making them relative to \c
.B r0\c
\&,
which allows loading a value using a single instruction (rather than the
usual two).  You control which data references are affected by
specifying \c
.I num\c
\& with this option.  For example, if you specify
`\|\c
.B \-mshort\-data\-512\c
\&\|', then the data references affected are those
involving displacements of less than 512 bytes.
`\|\c
.B \-mshort\-data\-\c
.I num\c
\&\c
\&\|' is not effective for \c
.I num\c
\& greater
than 64K.
.PP
.B \-mserialize-volatile
.TP
.B \-mno-serialize-volatile
Do, or do not, generate code to guarantee sequential consistency of
volatile memory references.
.Sp
GNU CC always guarantees consistency by default, for the preferred
processor submodel.  How this is done depends on the submodel.
.Sp
The m88100 processor does not reorder memory references and so always
provides sequential consistency.  If you use `\|\c
.B \-m88100\c
\&\|', GNU CC does
not generate any special instructions for sequential consistency.
.Sp
The order of memory references made by the m88110 processor does not
always match the order of the instructions requesting those references.
In particular, a load instruction may execute before a preceding store
instruction.  Such reordering violates sequential consistency of
volatile memory references, when there are multiple processors.  When
you use `\|\c
.B \-m88000\c
\&\|' or `\|\c
.B \-m88110\c
\&\|', GNU CC generates special
instructions when appropriate, to force execution in the proper order.
.Sp
The extra code generated to guarantee consistency may affect the
performance of your application.  If you know that you can safely forgo
this guarantee, you may use the option `\|\c
.B \-mno-serialize-volatile\c
\&\|'.
.Sp
If you use the `\|\c
.B \-m88100\c
\&\|' option but require sequential consistency
when running on the m88110 processor, you should use
`\|\c
.B \-mserialize-volatile\c
\&\|'.
.PP
.B \-msvr4
.TP
.B \-msvr3
Turn on (`\|\c
.B \-msvr4\c
\&\|') or off (`\|\c
.B \-msvr3\c
\&\|') compiler extensions
related to System V release 4 (SVr4).  This controls the following:
.TP
\ \ \ \(bu
Which variant of the assembler syntax to emit (which you can select
independently using `\|\c
.B \-mversion\-03.00\c
\&\|').
.TP
\ \ \ \(bu
`\|\c
.B \-msvr4\c
\&\|' makes the C preprocessor recognize `\|\c
.B #pragma weak\c
\&\|'
.TP
\ \ \ \(bu
`\|\c
.B \-msvr4\c
\&\|' makes GCC issue additional declaration directives used in
SVr4.
.PP
`\|\c
.B \-msvr3\c
\&\|' is the default for all m88K configurations except
the SVr4 configuration.
.TP
.B \-mtrap\-large\-shift
.TP
.B \-mhandle\-large\-shift
Include code to detect bit-shifts of more than 31 bits; respectively,
trap such shifts or emit code to handle them properly.  By default GCC
makes no special provision for large bit shifts.
.TP
.B \-muse\-div\-instruction
Very early models of the 88K architecture didn't have a divide
instruction, so GCC avoids that instruction by default.  Use this option
to specify that it's safe to use the divide instruction.
.TP
.B \-mversion\-03.00
In the DG/UX configuration, there are two flavors of SVr4.  This option
modifies
.B \-msvr4
to select whether the hybrid-COFF or real-ELF
flavor is used.  All other configurations ignore this option.
.TP
.B \-mwarn\-passed\-structs
Warn when a function passes a struct as an argument or result.
Structure-passing conventions have changed during the evolution of the C
language, and are often the source of portability problems.  By default,
GCC issues no such warning.
.PP
These options are defined for the IBM RS6000:
.PP
.B \-mfp\-in\-toc
.TP
.B \-mno\-fp\-in\-toc
Control whether or not floating-point constants go in the Table of
Contents (TOC), a table of all global variable and function addresses.  By
default GCC puts floating-point constants there; if the TOC overflows,
`\|\c
.B \-mno\-fp\-in\-toc\c
\&\|' will reduce the size of the TOC, which may avoid
the overflow.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the IBM RT PC:
.TP
.B \-min\-line\-mul
Use an in-line code sequence for integer multiplies.  This is the
default.
.TP
.B \-mcall\-lib\-mul
Call \c
.B lmul$$\c
\& for integer multiples.
.TP
.B \-mfull\-fp\-blocks
Generate full-size floating point data blocks, including the minimum
amount of scratch space recommended by IBM.  This is the default.
.TP
.B \-mminimum\-fp\-blocks
Do not include extra scratch space in floating point data blocks.  This
results in smaller code, but slower execution, since scratch space must
be allocated dynamically.
.TP
.B \-mfp\-arg\-in\-fpregs
Use a calling sequence incompatible with the IBM calling convention in
which floating point arguments are passed in floating point registers.
Note that \c
.B varargs.h\c
\& and \c
.B stdargs.h\c
\& will not work with
floating point operands if this option is specified.
.TP
.B \-mfp\-arg\-in\-gregs
Use the normal calling convention for floating point arguments.  This is
the default.
.TP
.B \-mhc\-struct\-return
Return structures of more than one word in memory, rather than in a
register.  This provides compatibility with the MetaWare HighC (hc)
compiler.  Use `\|\c
.B \-fpcc\-struct\-return\c
\&\|' for compatibility with the
Portable C Compiler (pcc).
.TP
.B \-mnohc\-struct\-return
Return some structures of more than one word in registers, when
convenient.  This is the default.  For compatibility with the
IBM-supplied compilers, use either `\|\c
.B \-fpcc\-struct\-return\c
\&\|' or
`\|\c
.B \-mhc\-struct\-return\c
\&\|'.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the MIPS family of computers:
.TP
.BI "\-mcpu=" "cpu-type"
Assume the defaults for the machine type
.I cpu-type
when
scheduling instructions.  The default
.I cpu-type
is
.BR default ,
which picks the longest cycles times for any of the machines, in order
that the code run at reasonable rates on all MIPS cpu's.  Other
choices for
.I cpu-type
are
.BR r2000 ,
.BR r3000 ,
.BR r4000 ,
and
.BR r6000 .
While picking a specific
.I cpu-type
will schedule things appropriately for that particular chip, the
compiler will not generate any code that does not meet level 1 of the
MIPS ISA (instruction set architecture) without the
.B \-mips2
or
.B \-mips3
switches being used.
.TP
.B \-mips2
Issue instructions from level 2 of the MIPS ISA (branch likely, square
root instructions).  The
.B \-mcpu=r4000
or
.B \-mcpu=r6000
switch must be used in conjunction with
.BR \-mips2 .
.TP
.B \-mips3
Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
The
.B \-mcpu=r4000
switch must be used in conjunction with
.BR \-mips2 .
.TP
.B \-mint64
.TP
.B \-mlong64
.TP
.B \-mlonglong128
These options don't work at present.
.TP
.B \-mmips\-as
Generate code for the MIPS assembler, and invoke
.B mips\-tfile
to add normal debug information.  This is the default for all
platforms except for the OSF/1 reference platform, using the OSF/rose
object format.  If any of the
.BR \-ggdb ,
.BR \-gstabs ,
or
.B \-gstabs+
switches are used, the
.B mips\-tfile
program will encapsulate the stabs within MIPS ECOFF.
.TP
.B \-mgas
Generate code for the GNU assembler.  This is the default on the OSF/1
reference platform, using the OSF/rose object format.
.TP
.B \-mrnames
.TP
.B \-mno\-rnames
The
.B \-mrnames
switch says to output code using the MIPS software names for the
registers, instead of the hardware names (ie,
.B a0
instead of
.BR $4 ).
The GNU assembler does not support the
.B \-mrnames
switch, and the MIPS assembler will be instructed to run the MIPS C
preprocessor over the source file.  The
.B \-mno\-rnames
switch is default.
.TP
.B \-mgpopt
.TP
.B \-mno\-gpopt
The
.B \-mgpopt
switch says to write all of the data declarations before the
instructions in the text section, to all the MIPS assembler to
generate one word memory references instead of using two words for
short global or static data items.  This is on by default if
optimization is selected.
.TP
.B \-mstats
.TP
.B \-mno\-stats
For each non-inline function processed, the
.B \-mstats
switch causes the compiler to emit one line to the standard error file
to print statistics about the program (number of registers saved,
stack size, etc.).
.TP
.B \-mmemcpy
.TP
.B \-mno\-memcpy
The
.B \-mmemcpy
switch makes all block moves call the appropriate string function
.RB ( memcpy
or
.BR bcopy )
instead of possibly generating inline code.
.TP
.B \-mmips\-tfile
.TP
.B \-mno\-mips\-tfile
The
.B \-mno\-mips\-tfile
switch causes the compiler not postprocess the object file with the
.B mips\-tfile
program, after the MIPS assembler has generated it to add debug
support.  If
.B mips\-tfile
is not run, then no local variables will be available to the debugger.
In addition,
.B stage2
and
.B stage3
objects will have the temporary file names passed to the assembler
embedded in the object file, which means the objects will not compare
the same.
.TP
.B \-msoft\-float
Generate output containing library calls for floating point.
.I
WARNING:
the requisite libraries are not part of GNU CC.  Normally the
facilities of the machine's usual C compiler are used, but this can't
be done directly in cross-compilation.  You must make your own
arrangements to provide suitable library functions for cross-compilation.
.TP
.B \-mhard\-float
Generate output containing floating point instructions.  This is the
default if you use the unmodified sources.
.TP
.B \-mfp64
Assume that the
.B FR
bit in the status word is on, and that there are 32 64-bit floating
point registers, instead of 32 32-bit floating point registers.  You
must also specify the
.B \-mcpu=r4000
and
.B \-mips3
switches.
.TP
.B \-mfp32
Assume that there are 32 32-bit floating point registers.  This is the
default.
.PP
.B \-mabicalls
.TP
.B \-mno\-abicalls
Emit (or do not emit) the
.BR \&.abicalls ,
.BR \&.cpload ,
and
.B \&.cprestore
pseudo operations that some System V.4 ports use for position
independent code.
.TP
.B \-mhalf\-pic
.TP
.B \-mno\-half\-pic
The
.B \-mhalf\-pic
switch says to put pointers to extern references into the data section
and load them up, rather than put the references in the text section.
This option does not work at present.
.B
.BI \-G num
Put global and static items less than or equal to
.I num
bytes into the small data or bss sections instead of the normal data
or bss section.  This allows the assembler to emit one word memory
reference instructions based on the global pointer
.RB ( gp
or
.BR $28 ),
instead of the normal two words used.  By default,
.I num
is 8 when the MIPS assembler is used, and 0 when the GNU
assembler is used.  The
.BI \-G num
switch is also passed to the assembler and linker.  All modules should
be compiled with the same
.BI \-G num
value.
.TP
.B \-nocpp
Tell the MIPS assembler to not run it's preprocessor over user
assembler files (with a `\|\c
.B .s\c
\&\|' suffix) when assembling them.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the Intel 80386 family of computers:
.B \-m486
.TP
.B \-mno\-486
Control whether or not code is optimized for a 486 instead of an
386.  Code generated for a 486 will run on a 386 and vice versa.
.TP
.B \-msoft\-float
Generate output containing library calls for floating point.
.I Warning:
the requisite libraries are not part of GNU CC.
Normally the facilities of the machine's usual C compiler are used, but
this can't be done directly in cross-compilation.  You must make your
own arrangements to provide suitable library functions for
cross-compilation.
.Sp
On machines where a function returns floating point results in the 80387
register stack, some floating point opcodes may be emitted even if
`\|\c
.B \-msoft-float\c
\&\|' is used.
.TP
.B \-mno-fp-ret-in-387
Do not use the FPU registers for return values of functions.
.Sp
The usual calling convention has functions return values of types
.B float\c
\& and \c
.B double\c
\& in an FPU register, even if there
is no FPU.  The idea is that the operating system should emulate
an FPU.
.Sp
The option `\|\c
.B \-mno-fp-ret-in-387\c
\&\|' causes such values to be returned
in ordinary CPU registers instead.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the HPPA family of computers:
.TP
.B \-mpa-risc-1-0
Generate code for a PA 1.0 processor.
.TP
.B \-mpa-risc-1-1
Generate code for a PA 1.1 processor.
.TP
.B \-mkernel
Generate code which is suitable for use in kernels.  Specifically, avoid
.B add\c
\& instructions in which one of the arguments is the DP register;
generate \c
.B addil\c
\& instructions instead.  This avoids a rather serious
bug in the HP-UX linker.
.TP
.B \-mshared-libs
Generate code that can be linked against HP-UX shared libraries.  This option
is not fully function yet, and is not on by default for any PA target.  Using
this option can cause incorrect code to be generated by the compiler.
.TP
.B \-mno-shared-libs
Don't generate code that will be linked against shared libraries.  This is
the default for all PA targets.
.TP
.B \-mlong-calls
Generate code which allows calls to functions greater than 256K away from
the caller when the caller and callee are in the same source file.  Do
not turn this option on unless code refuses to link with \*(lqbranch out of
range errors\*('' from the linker.
.TP
.B \-mdisable-fpregs
Prevent floating point registers from being used in any manner.  This is
necessary for compiling kernels which perform lazy context switching of
floating point registers.  If you use this option and attempt to perform
floating point operations, the compiler will abort.
.TP
.B \-mdisable-indexing
Prevent the compiler from using indexing address modes.  This avoids some
rather obscure problems when compiling MIG generated code under MACH.
.TP
.B \-mtrailing-colon
Add a colon to the end of label definitions (for ELF assemblers).
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the Intel 80960 family of computers:
.TP
.BI "\-m" "cpu-type"
Assume the defaults for the machine type
.I cpu-type
for instruction and addressing-mode availability and alignment.
The default
.I cpu-type
is
.BR kb ;
other choices are
.BR ka ,
.BR mc ,
.BR ca ,
.BR cf ,
.BR sa ,
and
.BR sb .
.TP
.B \-mnumerics
.TP
.B \-msoft\-float
The
.B \-mnumerics
option indicates that the processor does support
floating-point instructions.  The
.B \-msoft\-float
option indicates
that floating-point support should not be assumed.
.TP
.B \-mleaf\-procedures
.TP
.B \-mno\-leaf\-procedures
Do (or do not) attempt to alter leaf procedures to be callable with the
.I bal
instruction as well as
.IR call .
This will result in more
efficient code for explicit calls when the
.I bal
instruction can be
substituted by the assembler or linker, but less efficient code in other
cases, such as calls via function pointers, or using a linker that doesn't
support this optimization.
.TP
.B \-mtail\-call
.TP
.B \-mno\-tail\-call
Do (or do not) make additional attempts (beyond those of the
machine-independent portions of the compiler) to optimize tail-recursive
calls into branches.  You may not want to do this because the detection of
cases where this is not valid is not totally complete.  The default is
.BR \-mno\-tail\-call .
.TP
.B \-mcomplex\-addr
.TP
.B \-mno\-complex\-addr
Assume (or do not assume) that the use of a complex addressing mode is a
win on this implementation of the i960.  Complex addressing modes may not
be worthwhile on the K-series, but they definitely are on the C-series.
The default is currently
.B \-mcomplex\-addr
for all processors except
the CB and CC.
.TP
.B \-mcode\-align
.TP
.B \-mno\-code\-align
Align code to 8-byte boundaries for faster fetching (or don't bother).
Currently turned on by default for C-series implementations only.
.TP
.B \-mic\-compat
.TP
.B \-mic2.0\-compat
.TP
.B \-mic3.0\-compat
Enable compatibility with iC960 v2.0 or v3.0.
.TP
.B \-masm\-compat
.TP
.B \-mintel\-asm
Enable compatibility with the iC960 assembler.
.TP
.B \-mstrict\-align
.TP
.B \-mno\-strict\-align
Do not permit (do permit) unaligned accesses.
.TP
.B \-mold\-align
Enable structure-alignment compatibility with Intel's gcc release version
1.3 (based on gcc 1.37).  Currently this is buggy in that
.B #pragma align 1
is always assumed as well, and cannot be turned off.
.PP
These `\|\c
.B \-m\c
\&\|' options are defined for the DEC Alpha implementations:
.TP
.B \-mno-soft-float
.TP
.B \-msoft-float
Use (do not use) the hardware floating-point instructions for
floating-point operations.  When \c
.B \-msoft-float\c
\& is specified,
functions in `\|\c
.B libgcc1.c\c
\&\|' will be used to perform floating-point
operations.  Unless they are replaced by routines that emulate the
floating-point operations, or compiled in such a way as to call such
emulations routines, these routines will issue floating-point
operations.   If you are compiling for an Alpha without floating-point
operations, you must ensure that the library is built so as not to call
them.
.Sp
Note that Alpha implementations without floating-point operations are
required to have floating-point registers.
.TP
.B \-mfp-reg
.TP
.B \-mno-fp-regs
Generate code that uses (does not use) the floating-point register set.
.B \-mno-fp-regs\c
\& implies \c
.B \-msoft-float\c
\&.  If the floating-point
register set is not used, floating point operands are passed in integer
registers as if they were integers and floating-point results are passed
in $0 instead of $f0.  This is a non-standard calling sequence, so any
function with a floating-point argument or return value called by code
compiled with \c
.B \-mno-fp-regs\c
\& must also be compiled with that
option.
.Sp
A typical use of this option is building a kernel that does not use,
and hence need not save and restore, any floating-point registers.
.PP
These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:
.TP
.B \-G
On SVr4 systems, \c
.B gcc\c
\& accepts the option `\|\c
.B \-G\c
\&\|' (and passes
it to the system linker), for compatibility with other compilers.
However, we suggest you use `\|\c
.B \-symbolic\c
\&\|' or `\|\c
.B \-shared\c
\&\|' as
appropriate, instead of supplying linker options on the \c
.B gcc
command line.
.TP
.B \-Qy
Identify the versions of each tool used by the compiler, in a
.B .ident\c
\& assembler directive in the output.
.TP
.B \-Qn
Refrain from adding \c
.B .ident\c
\& directives to the output file (this is
the default).
.TP
.BI "\-YP," "dirs"
Search the directories \c
.I dirs\c
\&, and no others, for libraries
specified with `\|\c
.B \-l\c
\&\|'.  You can separate directory entries in
.I dirs\c
\& from one another with colons.
.TP
.BI "\-Ym," "dir"
Look in the directory \c
.I dir\c
\& to find the M4 preprocessor.
The assembler uses this option.
.SH CODE GENERATION OPTIONS
These machine-independent options control the interface conventions
used in code generation.
.PP
Most of them begin with `\|\c
\-f\c
\&\|'.  These options have both positive and negative forms; the negative form
of `\|\c
.B \-ffoo\c
\&\|' would be `\|\c
.B \-fno\-foo\c
\&\|'.  In the table below, only
one of the forms is listed\(em\&the one which is not the default.  You
can figure out the other form by either removing `\|\c
.B no\-\c
\&\|' or adding
it.
.TP
.B \-fnonnull\-objects
Assume that objects reached through references are not null
(C++ only).
.Sp
Normally, GNU C++ makes conservative assumptions about objects reached
through references.  For example, the compiler must check that \c
.B a
is not null in code like the following:
.Sp
obj &a = g ();
a.f (2);
.Sp
Checking that references of this sort have non-null values requires
extra code, however, and it is unnecessary for many programs.  You can
use `\|\c
.B \-fnonnull-objects\c
\&\|' to omit the checks for null, if your
program doesn't require checking.
.TP
.B \-fpcc\-struct\-return
Use the same convention for returning \c
.B struct\c
\& and \c
.B union
values that is used by the usual C compiler on your system.  This
convention is less efficient for small structures, and on many
machines it fails to be reentrant; but it has the advantage of
allowing intercallability between GCC-compiled code and PCC-compiled
code.
.TP
.B \-freg\-struct\-return
Use the convention that
.B struct
and
.B union
values are returned in registers when possible.  This is more
efficient for small structures than
.BR \-fpcc\-struct\-return .
.Sp
If you specify neither
.B \-fpcc\-struct\-return
nor
.BR \-freg\-struct\-return ,
GNU CC defaults to whichever convention is standard for the target.
If there is no standard convention, GNU CC defaults to
.BR \-fpcc\-struct\-return .
.TP
.B \-fshort\-enums
Allocate to an \c
.B enum\c
\& type only as many bytes as it needs for the
declared range of possible values.  Specifically, the \c
.B enum\c
\& type
will be equivalent to the smallest integer type which has enough room.
.TP
.B \-fshort\-double
Use the same size for
.B double
as for
.B float
\&.
.TP
.B \-fshared\-data
Requests that the data and non-\c
.B const\c
\& variables of this
compilation be shared data rather than private data.  The distinction
makes sense only on certain operating systems, where shared data is
shared between processes running the same program, while private data
exists in one copy per process.
.TP
.B \-fno\-common
Allocate even uninitialized global variables in the bss section of the
object file, rather than generating them as common blocks.  This has the
effect that if the same variable is declared (without \c
.B extern\c
\&) in
two different compilations, you will get an error when you link them.
The only reason this might be useful is if you wish to verify that the
program will work on other systems which always work this way.
.TP
.B \-fno\-ident
Ignore the `\|\c
.B #ident\c
\&\|' directive.
.TP
.B \-fno\-gnu\-linker
Do not output global initializations (such as C++ constructors and
destructors) in the form used by the GNU linker (on systems where the GNU
linker is the standard method of handling them).  Use this option when
you want to use a non-GNU linker, which also requires using the
.B collect2\c
\& program to make sure the system linker includes
constructors and destructors.  (\c
.B collect2\c
\& is included in the GNU CC
distribution.)  For systems which \c
.I must\c
\& use \c
.B collect2\c
\&, the
compiler driver \c
.B gcc\c
\& is configured to do this automatically.
.TP
.B \-finhibit-size-directive
Don't output a \c
.B .size\c
\& assembler directive, or anything else that
would cause trouble if the function is split in the middle, and the
two halves are placed at locations far apart in memory.  This option is
used when compiling `\|\c
.B crtstuff.c\c
\&\|'; you should not need to use it
for anything else.
.TP
.B \-fverbose-asm
Put extra commentary information in the generated assembly code to
make it more readable.  This option is generally only of use to those
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).
.TP
.B \-fvolatile
Consider all memory references through pointers to be volatile.
.TP
.B \-fvolatile\-global
Consider all memory references to extern and global data items to
be volatile.
.TP
.B \-fpic
If supported for the target machines, generate position-independent code,
suitable for use in a shared library.
.TP
.B \-fPIC
If supported for the target machine, emit position-independent code,
suitable for dynamic linking, even if branches need large displacements.
.TP
.BI "\-ffixed\-" "reg"
Treat the register named \c
.I reg\c
\& as a fixed register; generated code
should never refer to it (except perhaps as a stack pointer, frame
pointer or in some other fixed role).
.Sp
.I reg\c
\& must be the name of a register.  The register names accepted
are machine-specific and are defined in the \c
.B REGISTER_NAMES
macro in the machine description macro file.
.Sp
This flag does not have a negative form, because it specifies a
three-way choice.
.TP
.BI "\-fcall\-used\-" "reg"
Treat the register named \c
.I reg\c
\& as an allocatable register that is
clobbered by function calls.  It may be allocated for temporaries or
variables that do not live across a call.  Functions compiled this way
will not save and restore the register \c
.I reg\c
\&.
.Sp
Use of this flag for a register that has a fixed pervasive role in the
machine's execution model, such as the stack pointer or frame pointer,
will produce disastrous results.
.Sp
This flag does not have a negative form, because it specifies a
three-way choice.
.TP
.BI "\-fcall\-saved\-" "reg"
Treat the register named \c
.I reg\c
\& as an allocatable register saved by
functions.  It may be allocated even for temporaries or variables that
live across a call.  Functions compiled this way will save and restore
the register \c
.I reg\c
\& if they use it.
.Sp
Use of this flag for a register that has a fixed pervasive role in the
machine's execution model, such as the stack pointer or frame pointer,
will produce disastrous results.
.Sp
A different sort of disaster will result from the use of this flag for
a register in which function values may be returned.
.Sp
This flag does not have a negative form, because it specifies a
three-way choice.
.SH PRAGMAS
Two `\|\c
.B #pragma\c
\&\|' directives are supported for GNU C++, to permit using the same
header file for two purposes: as a definition of interfaces to a given
object class, and as the full definition of the contents of that object class.
.TP
.B #pragma interface
(C++ only.)
Use this directive in header files that define object classes, to save
space in most of the object files that use those classes.  Normally,
local copies of certain information (backup copies of inline member
functions, debugging information, and the internal tables that
implement virtual functions) must be kept in each object file that
includes class definitions.  You can use this pragma to avoid such
duplication.  When a header file containing `\|\c
.B #pragma interface\c
\&\|' is included in a compilation, this auxiliary information
will not be generated (unless the main input source file itself uses
`\|\c
.B #pragma implementation\c
\&\|').  Instead, the object files will contain references to be
resolved at link time.
.TP
.B #pragma implementation
.TP
\fB#pragma implementation "\fP\fIobjects\fP\fB.h"\fP
(C++ only.)
Use this pragma in a main input file, when you want full output from
included header files to be generated (and made globally visible).
The included header file, in turn, should use `\|\c
.B #pragma interface\c
\&\|'.
Backup copies of inline member functions, debugging information, and
the internal tables used to implement virtual functions are all
generated in implementation files.
.Sp
If you use `\|\c
.B #pragma implementation\c
\&\|' with no argument, it applies to an include file with the same
basename as your source file; for example, in `\|\c
.B allclass.cc\c
\&\|', `\|\c
.B #pragma implementation\c
\&\|' by itself is equivalent to `\|\c
.B
#pragma implementation "allclass.h"\c
\&\|'.  Use the string argument if you want a single implementation
file to include code from multiple header files.
.Sp
There is no way to split up the contents of a single header file into
multiple implementation files.
.SH FILES
.nf
.ta \w'LIBDIR/g++\-include 'u
file.c	C source file
file.h	C header (preprocessor) file
file.i	preprocessed C source file
file.C	C++ source file
file.cc	C++ source file
file.cxx	C++ source file
file.m	Objective-C source file
file.s	assembly language file
file.o	object file
a.out	link edited output
\fITMPDIR\fR/cc\(**	temporary files
\fILIBDIR\fR/cpp	preprocessor
\fILIBDIR\fR/cc1	compiler for C
\fILIBDIR\fR/cc1plus	compiler for C++
\fILIBDIR\fR/collect	linker front end needed on some machines
\fILIBDIR\fR/libgcc.a	GCC subroutine library
/lib/crt[01n].o	start-up routine
\fILIBDIR\fR/ccrt0	additional start-up routine for C++
/lib/libc.a	standard C library, see
.IR intro (3)
/usr/include	standard directory for \fB#include\fP files
\fILIBDIR\fR/include	standard gcc directory for \fB#include\fP files
\fILIBDIR\fR/g++\-include	additional g++ directory for \fB#include\fP
.Sp
.fi
.I LIBDIR
is usually
.B /usr/local/lib/\c
.IR machine / version .
.br
.I TMPDIR
comes from the environment variable
.B TMPDIR
(default
.B /usr/tmp
if available, else
.B /tmp\c
\&).
.SH "SEE ALSO"
cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
.br
.RB "`\|" gcc "\|', `\|" cpp \|',
.RB "`\|" as "\|', `\|" ld \|',
and
.RB `\| gdb \|'
entries in
.B info\c
\&.
.br
.I
Using and Porting GNU CC (for version 2.0)\c
, Richard M. Stallman;
.I
The C Preprocessor\c
, Richard M. Stallman;
.I
Debugging with GDB: the GNU Source-Level Debugger\c
, Richard M. Stallman and Roland H. Pesch;
.I
Using as: the GNU Assembler\c
, Dean Elsner, Jay Fenlason & friends;
.I
ld: the GNU linker\c
, Steve Chamberlain and Roland Pesch.
.SH BUGS
For instructions on reporting bugs, see the GCC manual.
.SH COPYING
Copyright
.if t \(co
1991, 1992, 1993 Free Software Foundation, Inc.
.PP
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
.PP
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
.PP
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
.SH AUTHORS
See the GNU CC Manual for the contributors to GNU CC.
