GCC(1)

GCC(1)

efix Home Page User Commands Index egrep


NAME
       gcc, g++ - GNU project C and C++ Compiler (egcs-1.0.2)

SYNOPSIS
       gcc [ option | filename ]...
       g++ [ option | filename ]...

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.

       This  man  page  is not kept up to date except when volun-
       teers 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.

       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.

       For  complete and current documentation, refer to the Info
       file `gcc' or the manual Using and  Porting  GNU  CC  (for
       version  2.0).  Both are made from the Texinfo source file
       gcc.texinfo.

DESCRIPTION
       The C and C++  compilers  are  integrated.   Both  process
       input  files  through  one or more of four stages: prepro-
       cessing, compilation, assembly, and linking.  Source file-
       name suffixes identify the source language, but which name
       you use for the compiler governs default assumptions:

       gcc    assumes preprocessed (.i) files are C and assumes C
              style linking.

       g++    assumes preprocessed (.i) files are C++ and assumes
              C++ style linking.

       Suffixes of source file names indicate  the  language  and
       kind of processing to be done:

       .c    C source; preprocess, compile, assemble
       .C    C++ source; preprocess, compile, assemble
       .cc   C++ source; preprocess, compile, assemble
       .cxx  C++ source; preprocess, compile, assemble
       .m    Objective-C source; preprocess, compile, assemble
       .i    preprocessed C; compile, assemble
       .ii   preprocessed C++; compile, assemble

       .s    Assembler source; assemble
       .S    Assembler source; preprocess, assemble
       .h    Preprocessor file; not usually named on command line

       Files  with other suffixes are passed to the linker.  Com-
       mon cases include:

       .o    Object file
       .a    Archive file

       Linking is always the last stage unless you use one of the
       -c,  -S,  or -E options to avoid it (or unless compilation
       errors stop the whole process).  For the link  stage,  all
       .o  files  corresponding  to  source  files, -l libraries,
       unrecognized filenames (including named  .o  object  files
       and  .a archives) are passed to the linker in command-line
       order.

OPTIONS
       Options must be separate: `-dr' is  quite  different  from
       `-d -r '.

       Most `-f' and `-W' options have two contrary forms: -fname
       and -fno-name (or -Wname and -Wno-name).   Only  the  non-
       default forms are shown here.

       Here  is  a  summary  of all the options, grouped by type.
       Explanations are in the following sections.

       Overall Options
              -c -S -E -o file -pipe -v -x language

       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

       Warning Options
              -fsyntax-only -pedantic -pedantic-errors -w -W
              -Wall -Waggregate-return -Wcast-align -Wcast-qual
              -Wchar-subscript -Wcomment -Wconversion
              -Wenum-clash -Werror -Wformat -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

       Debugging Options
              -a -dletters -fpretend-float -g -glevel -gcoff
              -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
              -ggdb -p -pg -save-temps -print-file-name=library
              -print-libgcc-file-name -print-prog-name=program

       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

       Preprocessor Options
              -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
              -idirafter dir -include file -imacros file -iprefix
              file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
              -Umacro -undef

       Assembler Option
              -Wa,option

       Linker Options
              -llibrary -nostartfiles -nostdlib -static -shared
              -symbolic -Xlinker option -Wl,option -u symbol

       Directory Options
              -Bprefix -Idir -I- -Ldir

       Target Options
              -b  machine -V version

       Configuration Dependent Options
              M680x0 Options
              -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
              -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
              -mrtd -mshort -msoft-float
              VAX Options
              -mg -mgnu -munix
              SPARC Options
              -mepilogue -mfpu -mhard-float -mno-fpu
              -mno-epilogue -msoft-float -msparclite -mv8
              -msupersparc -mcypress
              Convex Options
              -margcount -mc1 -mc2 -mnoargcount
              AMD29K Options
              -m29000 -m29050 -mbw -mdw -mkernel-registers
              -mlarge -mnbw -mnodw -msmall -mstack-check
              -muser-registers
              M88K Options
              -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 -mshort-data-num -msvr3 -msvr4
              -mtrap-large-shift -muse-div-instruction
              -mversion-03.00 -mwarn-passed-structs
              RS6000 Options
              -mfp-in-toc -mno-fop-in-toc
              RT Options
              -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
              MIPS Options
              -mcpu=cpu type -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 num -nocpp
              i386 Options
              -m486 -mno-486 -msoft-float -mno-fp-ret-in-387
              HPPA Options
              -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
              -mno-shared-libs -mlong-calls -mdisable-fpregs
              -mdisable-indexing -mtrailing-colon
              i960 Options
              -mcpu-type -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
              DEC Alpha Options
              -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
              System V Options
              -G -Qy -Qn -YP,paths -Ym,dir

       Code Generation Options
              -fcall-saved-reg -fcall-used-reg -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

OVERALL OPTIONS
       -x language
              Specify explicitly the language 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 `-x' op-
              tion.   Possible  values  of  language   are   `c',
              `objective-c',   `c-header',  `c++',  `cpp-output',
              `assembler', and `assembler-with-cpp'.

       -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  `-x'  has  not
              been used at all).

       If you want only some of the four stages (preprocess, com-
       pile, assemble, link), you can use `-x' (or filename  suf-
       fixes)  to tell gcc where to start, and one of the options
       `-c', `-S', or `-E' to say where gcc  is  to  stop.   Note
       that  some  combinations (for example, `-x cpp-output -E')
       instruct gcc to do nothing at all.

       -c     Compile or assemble the source files,  but  do  not
              link.  The compiler output is an object file corre-
              sponding to each source file.
              By default, GCC makes the object file  name  for  a
              source  file  by  replacing  the suffix `.c', `.i',
              `.s', etc., with `.o'.  Use -o  to  select  another
              name.
              GCC  ignores  any  unrecognized  input files (those
              that do not require compilation or  assembly)  with
              the -c option.

       -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.
              By default, GCC makes the assembler file name for a
              source file by replacing  the  suffix  `.c',  `.i',
              etc., with `.s'.  Use -o to select another name.
              GCC ignores any input files that don't require com-
              pilation.

       -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.
              GCC ignores input files which don't require prepro-
              cessing.

       -o file
              Place output in file file.  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.
              Since only one output file  can  be  specified,  it
              does not make sense to use `-o' when compiling more
              than one input file, unless you  are  producing  an
              executable file as output.
              If  you  do not specify `-o', the default is to put
              an executable file in `a.out', the object file  for
              `source.suffix'  in  `source.o', its assembler file
              in `source.s', and all  preprocessed  C  source  on
              standard output.

       -v     Print  (on standard error output) the commands exe-
              cuted to run the stages of compilation.  Also print
              the  version  number of the compiler driver program
              and of the preprocessor and the compiler proper.

       -pipe  Use pipes rather than temporary files for  communi-
              cation  between  the various stages of compilation.
              This fails to work on some systems where the assem-
              bler cannot read from a pipe; but the GNU assembler
              has no trouble.

LANGUAGE OPTIONS
       The following options control the dialect of  C  that  the
       compiler accepts:

       -ansi  Support all ANSI standard C programs.
              This  turns  off certain features of GNU C that are
              incompatible with ANSI C, such as the  asm,  inline
              and  typeof keywords, and predefined macros such as
              unix and vax that identify the type of  system  you
              are  using.   It  also  enables the undesirable and
              rarely used ANSI trigraph  feature,  and  disallows
              `$' as part of identifiers.
              The   alternate  keywords  __asm__,  __extension__,
              __inline__ and __typeof__ continue to work  despite
              `-ansi'.  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 compila-
              tions  done  with  `-ansi'.   Alternate  predefined
              macros such as __unix__ and __vax__ are also avail-
              able, with or without `-ansi'.
              The `-ansi' option does not cause non-ANSI programs
              to be rejected gratuitously.  For that, `-pedantic'
              is required in addition to `-ansi'.
              The preprocessor predefines a macro __STRICT_ANSI__
              when you use the `-ansi' 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.

       -fno-asm
              Do not recognize asm, inline or typeof  as  a  key-
              word.  These words may then be used as identifiers.
              You can use __asm__, __inline__ and __typeof__  in-
              stead.  `-ansi' implies `-fno-asm'.

       -fno-builtin
              Don't  recognize built-in functions that do not be-
              gin with two leading underscores.   Currently,  the
              functions affected include _exit, abort, abs, allo-
              ca, cos, exit, fabs,  labs,  memcmp,  memcpy,  sin,
              sqrt, strcmp, strcpy, and strlen.
              The  `-ansi'  option prevents alloca and _exit from
              being builtin functions.

       -fhosted
              Compile for a hosted environment; this implies  the
              `-fbuiltin'  option,  and  implies  that suspicious
              declarations of main should be warned about.

       -ffreestanding
              Compile for a freestanding  environment;  this  im-
              plies  the  `-fno-builtin' option, and implies that
              main has no special requirements.

       -fno-strict-prototype
              Treat a function  declaration  with  no  arguments,
              such as `int foo ();', as C would treat it--as say-
              ing nothing about the number of arguments or  their
              types  (C++ only).  Normally, such a declaration in
              C++ means that the function foo takes no arguments.

       -trigraphs
              Support  ANSI  C trigraphs.  The `-ansi' option im-
              plies `-trigraphs'.

       -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.
              But  one  note  about  C++  programs  only (not C).
              `-traditional' has one additional effect  for  C++:
              assignment  to this is permitted.  This is the same
              as the effect of `-fthis-is-variable'.

       -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 `-traditional'.

       -fdollars-in-identifiers
              Permit  the  use  of `$' in identifiers (C++ only).
              You can also use  `-fno-dollars-in-identifiers'  to
              explicitly  prohibit  use  of `$'.  (GNU C++ allows
              `$' by default on some target systems but not  oth-
              ers.)

       -fenum-int-equiv
              Permit  implicit  conversion  of int to enumeration
              types (C++ only).  Normally GNU C++ allows  conver-
              sion  of enum to int, but not the other way around.

       -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  `#pragma
              implementation'   (the   definition)   or  `#pragma
              interface' (declarations).
              When     your     code     is     compiled     with
              `-fexternal-templates', all template instantiations
              are external.  You must arrange for  all  necessary
              instantiations  to  appear  in  the  implementation
              file; you can do this with a  typedef  that  refer-
              ences  each instantiation needed.  Conversely, when
              you    compile    using    the    default    option
              `-fno-external-templates',  all template instantia-
              tions are explicitly internal.

       -fall-virtual
              Treat all possible member functions as virtual, im-
              plicitly.   All  member  functions (except for con-
              structor functions and new or delete member  opera-
              tors) are treated as virtual functions of the class
              where they appear.
              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.

       -fcond-mismatch
              Allow conditional expressions with mismatched types
              in the second and third arguments.   The  value  of
              such an expression is void.

       -fthis-is-variable
              Permit assignment to this (C++ only).  The incorpo-
              ration of user-defined free store  management  into
              C++  has  made assignment to `this' an anachronism.
              Therefore, by default it is invalid  to  assign  to
              this  within a class member function.  However, for
              backwards compatibility, you can make it valid with
              `-fthis-is-variable'.

       -funsigned-char
              Let  the type char be unsigned, like unsigned char.
              Each kind of machine has a default  for  what  char
              should  be.  It is either like unsigned char by de-
              fault or like signed char by default.
              Ideally,  a  portable  program  should  always  use
              signed char or unsigned char when it depends on the
              signedness of an object.  But  many  programs  have
              been  written to use plain char 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.
              The  type  char is always a distinct type from each
              of signed char and unsigned char, even  though  its
              behavior is always just like one of those two.

       -fsigned-char
              Let the type char be signed, like signed char.
              Note     that     this     is     equivalent     to
              `-fno-unsigned-char', which is the negative form of
              `-funsigned-char'.  Likewise, `-fno-signed-char' is
              equivalent to `-funsigned-char'.

       -fsigned-bitfields

       -funsigned-bitfields

       -fno-signed-bitfields

       -fno-unsigned-bitfields
              These options control whether a bitfield is  signed
              or   unsigned,   when  declared  with  no  explicit
              `signed' or `unsigned' qualifier.  By default, such
              a  bitfield  is signed, because this is consistent:
              the basic integer types  such  as  int  are  signed
              types.
              However, when you specify `-traditional', bitfields
              are all unsigned no matter what.

       -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.  `-traditional' also has this ef-
              fect.
              Writing into string constants is a very  bad  idea;
              "constants" should be constant.

PREPROCESSOR OPTIONS
       These  options control the C preprocessor, which is run on
       each C source file before actual compilation.

       If you use the `-E' option, GCC does nothing  except  pre-
       processing.  Some of these options make sense only togeth-
       er with `-E' because they cause the preprocessor output to
       be unsuitable for actual compilation.

       -include file
              Process file as input before processing the regular
              input file.  In effect, the contents  of  file  are
              compiled  first.   Any `-D' and `-U' options on the
              command line are always processed before  `-include
              file',  regardless  of  the order in which they are
              written.  All the `-include' and `-imacros' options
              are  processed in the order in which they are writ-
              ten.

       -imacros file
              Process file as  input,  discarding  the  resulting
              output,  before  processing the regular input file.
              Because the output generated from file is  discard-
              ed,  the  only effect of `-imacros file' is to make
              the macros defined in file available for use in the
              main  input.   The  preprocessor evaluates any `-D'
              and `-U' options on the command  line  before  pro-
              cessing  `-imacrosfile', regardless of the order in
              which they are written.   All  the  `-include'  and
              `-imacros'  options  are  processed in the order in
              which they are written.

       -idirafter dir
              Add the directory dir 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 `-I' adds to).

       -iprefix prefix
              Specify  prefix  as  the  prefix   for   subsequent
              `-iwithprefix' options.

       -iwithprefix dir
              Add  a  directory  to the second include path.  The
              directory's name is made  by  concatenating  prefix
              and dir, where prefix was specified previously with
              `-iprefix'.

       -nostdinc
              Do not search the standard system  directories  for
              header files.  Only the directories you have speci-
              fied with `-I' options (and the current  directory,
              if appropriate) are searched.
              By  using both `-nostdinc' and `-I-', you can limit
              the include-file search file to only those directo-
              ries you specify explicitly.

       -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 `libg++'.)

       -undef Do not predefine any nonstandard macros.   (Includ-
              ing architecture flags).

       -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.

       -C     Tell  the  preprocessor  not  to  discard comments.
              Used with the `-E' option.

       -P     Tell the preprocessor not to generate `#line'  com-
              mands.  Used with the `-E' option.

       -M  [ -MG ]
              Tell the preprocessor to output a rule suitable for
              make describing the  dependencies  of  each  object
              file.   For each source file, the preprocessor out-
              puts one make-rule whose target is the object  file
              name  for  that  source file and whose dependencies
              are all the files `#include'd in it.  This rule may
              be  a single line or may be continued with `\'-new-
              line if it is long.  The list of rules  is  printed
              on  standard  output  instead of the preprocessed C
              program.
              `-M' implies `-E'.
              `-MG' says to treat missing header files as  gener-
              ated  files and assume they live in the same direc-
              tory as the source file.  It must be  specified  in
              addition to `-M'.

       -MM  [ -MG ]
              Like  `-M'  but  the  output mentions only the user
              header files included with `#include file"'.   Sys-
              tem  header  files  included with `#include <<file>'
              are omitted.

       -MD    Like `-M' but the dependency information is written
              to  files  with  names  made by replacing `.o' with
              `.d' at the end of the output file names.  This  is
              in    addition    to    compiling   the   file   as
              specified--`-MD' does not inhibit ordinary compila-
              tion the way `-M' does.
              The Mach utility `md' can be used to merge the `.d'
              files into a single dependency  file  suitable  for
              using with the `make' command.

       -MMD   Like  `-MD'  except mention only user header files,
              not system header files.

       -H     Print the name of each header file used,  in  addi-
              tion to other normal activities.

       -Aquestion(answer)
              Assert  the  answer answer for question, in case it
              is tested with a preprocessor conditional  such  as
              `#if  #question(answer)'.  `-A-' disables the stan-
              dard assertions that normally describe  the  target
              machine.

       -Aquestion
              (answer)  Assert the answer answer for question, in
              case it is tested with a  preprocessor  conditional
              such  as  `#if  #question(answer)'.  `-A-' disables
              the standard assertions that normally describe  the
              target machine.

       -Dmacro
              Define macro macro with the string `1' as its defi-
              nition.

       -Dmacro=defn
              Define macro macro as  defn.     All  instances  of
              `-D'  on  the command line are processed before any
              `-U' options.

       -Umacro
              Undefine macro macro.  `-U' options  are  evaluated
              after  all  `-D' options, but before any `-include'
              and `-imacros' options.

       -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 `-E' option.

       -dD    Tell the preprocessor to pass all macro definitions
              into  the  output,  in their proper sequence in the
              rest of the output.

       -dN    Like `-dD' except that the macro arguments and con-
              tents are omitted.  Only `#define name' is included
              in the output.

ASSEMBLER OPTION
       -Wa,option
              Pass option as an option to the assembler.  If  op-
              tion contains commas, it is split into multiple op-
              tions at the commas.

LINKER OPTIONS
       These options come into play when the compiler  links  ob-
       ject files into an executable output file.  They are mean-
       ingless if the compiler is not doing a link step.

       object-file-name
              A file name that does not end in a  special  recog-
              nized  suffix  is considered to name an object file
              or library.  (Object files are  distinguished  from
              libraries  by the linker according to the file con-
              tents.)  If GCC does  a  link  step,  these  object
              files are used as input to the linker.

       -llibrary
              Use the library named library when linking.
              The  linker searches a standard list of directories
              for the library, which is  actually  a  file  named
              `liblibrary.a'.   The linker then uses this file as
              if it had been specified precisely by name.
              The directories searched include  several  standard
              system  directories  plus any that you specify with
              `-L'.
              Normally the  files  found  this  way  are  library
              files--archive   files  whose  members  are  object
              files.  The linker handles an archive file by scan-
              ning  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 `-l' option and specifying a  file
              name  is that `-l' surrounds library with `lib' and
              `.a' and searches several directories.

       -lobjc You need this special case of the -l option in  or-
              der to link an Objective C program.

       -nostartfiles
              Do  not  use the standard system startup files when
              linking.  The standard libraries are used normally.

       -nostdlib
              Don't use the standard system libraries and startup
              files when linking.  Only  the  files  you  specify
              will be passed to the linker.

       -static
              On  systems that support dynamic linking, this pre-
              vents linking with the shared libraries.  On  other
              systems, this option has no effect.

       -shared
              Produce  a  shared  object which can then be linked
              with other objects to form an executable.   Only  a
              few systems support this option.

       -symbolic
              Bind  references  to global symbols when building a
              shared object.  Warn about  any  unresolved  refer-
              ences  (unless overridden by the link editor option
              `-Xlinker -z -Xlinker defs').  Only a  few  systems
              support this option.

       -Xlinker option
              Pass  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.
              If  you  want to pass an option that takes an argu-
              ment, you must use `-Xlinker' twice, once  for  the
              option  and once for the argument.  For example, to
              pass `-assert definitions', you must write `-Xlink-
              er -assert -Xlinker definitions'.  It does not work
              to write `-Xlinker "-assert definitions"',  because
              this passes the entire string as a single argument,
              which is not what the linker expects.

       -Wl,option
              Pass option as an option to the linker.  If  option
              contains  commas, it is split into multiple options
              at the commas.

       -u symbol
              Pretend the symbol symbol is  undefined,  to  force
              linking  of  library modules to define it.  You can
              use `-u' multiple times with different  symbols  to
              force loading of additional library modules.

DIRECTORY OPTIONS
       These  options  specify  directories  to search for header
       files, for libraries and for parts of the compiler:

       -Idir  Append directory dir to  the  list  of  directories
              searched for include files.

       -I-    Any  directories  you specify with `-I' options be-
              fore the `-I-' option are  searched  only  for  the
              case  of  `#include  "file"'; they are not searched
              for `#include <<file>'.
              If additional directories are specified  with  `-I'
              options  after  the  `-I-',  these  directories are
              searched for all `#include' directives.  (Ordinari-
              ly all `-I' directories are used this way.)
              In  addition,  the `-I-' option inhibits the use of
              the current directory (where the current input file
              came  from) as the first search directory for `#in-
              clude "file"'.  There is no way  to  override  this
              effect  of  `-I-'.   With  `-I.'  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.
              `-I-' does not inhibit the use of the standard sys-
              tem directories for header files.  Thus, `-I-'  and
              `-nostdinc' are independent.

       -Ldir  Add  directory dir to the list of directories to be
              searched for `-l'.

       -Bprefix
              This option specifies where to  find  the  executa-
              bles,  libraries and data files of the compiler it-
              self.
              The compiler driver program runs one or more of the
              subprograms  `cpp', `cc1' (or, for C++, `cc1plus'),
              `as' and `ld'.  It tries prefix  as  a  prefix  for
              each program it tries to run, both with and without
              `machine/version/'.
              For each subprogram to be run, the compiler  driver
              first  tries the `-B' prefix, if any.  If that name
              is not found, or if `-B'  was  not  specified,  the
              driver  tries  two  standard  prefixes,  which  are
              `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'.   If
              neither  of  those  results  in a file name that is
              found, the compiler driver searches for the unmodi-
              fied  program name, using the directories specified
              in your `PATH' environment variable.
              The  run-time  support  file  `libgcc.a'  is   also
              searched  for using the `-B' 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, `libgcc.a' is
              not actually necessary.
              You can get a similar result from  the  environment
              variable  GCC_EXEC_PREFIX;  if  it  is defined, its
              value is used as a prefix in the same way.  If both
              the  `-B'  option  and the GCC_EXEC_PREFIX variable
              are present, the `-B' option is used first and  the
              environment variable value second.

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.

       These  options  control  the  amount and kinds of warnings
       produced by GNU CC:

       -fsyntax-only
              Check the code for syntax errors,  but  don't  emit
              any output.

       -w     Inhibit all warning messages.

       -Wno-import
              Inhibit  warning messages about the use of #import.

       -pedantic
              Issue all the  warnings  demanded  by  strict  ANSI
              standard  C; reject all programs that use forbidden
              extensions.
              Valid ANSI standard C programs should compile prop-
              erly with or without this option (though a rare few
              will require `-ansi').  However, without  this  op-
              tion, certain GNU extensions and traditional C fea-
              tures are supported as  well.   With  this  option,
              they  are rejected.  There is no reason to use this
              option; it exists only to satisfy pedants.
              `-pedantic' does not cause warning messages for use
              of the alternate keywords whose names begin and end
              with `__'.  Pedantic warnings are also disabled  in
              the  expression that follows __extension__.  Howev-
              er, only system header files should use  these  es-
              cape  routes;  application  programs  should  avoid
              them.

       -pedantic-errors
              Like `-pedantic', except that errors  are  produced
              rather than warnings.

       -W     Print extra warning messages for these events:

          +o   A  nonvolatile  automatic variable might be changed
              by a call to longjmp.  These warnings are  possible
              only in optimizing compilation.
              The  compiler  sees  only  the calls to setjmp.  It
              cannot know where longjmp 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 longjmp cannot
              in fact be called at the place which would cause  a
              problem.

          +o   A function can return either with or without a val-
              ue.  (Falling off the end of the function  body  is
              considered  returning  without a value.)  For exam-
              ple, this function would evoke such a warning:
              foo (a)
              {
                if (a > 0)
                  return a;
              }
              Spurious warnings can occur because GNU CC does not
              realize that certain functions (including abort and
              longjmp) will never return.

          +o   An expression-statement or the left-hand side of  a
              comma expression contains no side effects.  To sup-
              press the warning, cast the  unused  expression  to
              void.   For example, an expression such as `x[i,j]'
              will cause a warning, but `x[(void)i,j]' will  not.

          +o   An unsigned value is compared against zero with `>>'
              or `<<='.

       -Wimplicit
              Warn whenever a function or parameter is implicitly
              declared.

       -Wmain Warn  if  the  main function is declared or defined
              with a suspicious type.  Typically, it is  a  func-
              tion with external linkage, returning int, and tak-
              ing zero or two arguments.

       -Wreturn-type
              Warn whenever a function is defined with a  return-
              type that defaults to int.  Also warn about any re-
              turn statement with no return-value in  a  function
              whose return-type is not void.

       -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.

       -Wswitch
              Warn whenever a switch statement has  an  index  of
              enumeral  type  and lacks a case for one or more of
              the named codes of that enumeration.  (The presence
              of  a  default  label prevents this warning.)  case
              labels outside the enumeration range  also  provoke
              warnings when this option is used.

       -Wcomment
              Warn whenever a comment-start sequence `/*' appears
              in a comment.

       -Wtrigraphs
              Warn if any  trigraphs  are  encountered  (assuming
              they are enabled).

       -Wformat
              Check calls to printf and scanf, etc., to make sure
              that the arguments supplied have types  appropriate
              to the format string specified.

       -Wchar-subscripts
              Warn  if an array subscript has type char.  This is
              a common cause of error, as programmers often  for-
              get that this type is signed on some machines.

       -Wuninitialized
              An  automatic  variable is used without first being
              initialized.
              These warnings are possible only in optimizing com-
              pilation,  because  they require data flow informa-
              tion that is computed only when optimizing.  If you
              don't  specify  `-O',  you  simply  won't get these
              warnings.
              These warnings occur only for  variables  that  are
              candidates  for  register  allocation.   Therefore,
              they do not occur for a variable that  is  declared
              volatile,  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.
              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 delet-
              ed  by  data  flow analysis before the warnings are
              printed.
              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:
              {
                int x;
                switch (y)
                  {
                  case 1: x = 1;
                    break;
                  case 2: x = 4;
                    break;
                  case 3: x = 5;
                  }
                foo (x);
              }
              If the value of y is always 1, 2 or 3,  then  x  is
              always  initialized,  but GNU CC doesn't know this.
              Here is another common case:
              {
                int save_y;
                if (change_y) save_y = y, y = new_y;
                ...
                if (change_y) y = save_y;
              }
              This has no bug because save_y is used only  if  it
              is set.
              Some  spurious  warnings  can be avoided if you de-
              clare as volatile all the functions  you  use  that
              never return.

       -Wparentheses
              Warn  if  parentheses  are  omitted in certain con-
              texts.

       -Wtemplate-debugging
              When using templates in a C++ program, warn if  de-
              bugging is not yet fully available (C++ only).

       -Wall  All  of the above `-W' options combined.  These are
              all the options which pertain to usage that we rec-
              ommend  avoiding  and  that  we  believe is easy to
              avoid, even in conjunction with macros.

       The remaining `-W...' options are not implied  by  `-Wall'
       because  they  warn  about  constructions that we consider
       reasonable to use, on occasion, in clean programs.

       -Wtraditional
              Warn about certain constructs that  behave  differ-
              ently in traditional and ANSI C.

          +o   Macro  arguments  occurring within string constants
              in the macro body.  These would substitute the  ar-
              gument  in  traditional C, but are part of the con-
              stant in ANSI C.

          +o   A function declared external in one block and  then
              used after the end of the block.

          +o   A switch statement has an operand of type long.

       -Wshadow
              Warn  whenever a local variable shadows another lo-
              cal variable.

       -Wid-clash-len
              Warn whenever two distinct identifiers match in the
              first  len characters.  This may help you prepare a
              program that will compile  with  certain  obsolete,
              brain-damaged compilers.

       -Wpointer-arith
              Warn about anything that depends on the "size of" a
              function type or of  void.   GNU  C  assigns  these
              types  a size of 1, for convenience in calculations
              with void * pointers and pointers to functions.

       -Wcast-qual
              Warn whenever a pointer is cast so as to  remove  a
              type  qualifier from the target type.  For example,
              warn if a const char * is cast to an ordinary  char
              *.

       -Wcast-align
              Warn  whenever  a pointer is cast such that the re-
              quired alignment of the target is  increased.   For
              example,  warn  if  a char * is cast to an int * on
              machines where integers can  only  be  accessed  at
              two- or four-byte boundaries.

       -Wwrite-strings
              Give  string  constants the type const char[length]
              so that copying the address of one into a non-const
              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  const  in
              declarations  and  prototypes.   Otherwise, it will
              just be a nuisance; this is why  we  did  not  make
              `-Wall' request these warnings.

       -Wconversion
              Warn  if  a prototype causes a type conversion that
              is different from what would happen to the same ar-
              gument  in  the  absence  of a prototype.  This in-
              cludes 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.

       -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 warn-
              ing.)

       -Wstrict-prototypes
              Warn if a function is declared or  defined  without
              specifying the argument types.  (An old-style func-
              tion definition is permitted without a  warning  if
              preceded by a declaration which specifies the argu-
              ment types.)

       -Wmissing-prototypes
              Warn if a global function is defined without a pre-
              vious  prototype  declaration.  This warning is is-
              sued even if the definition itself provides a  pro-
              totype.  The aim is to detect global functions that
              fail to be declared in header files.

       -Wmissing-declarations
              Warn if a global function is defined without a pre-
              vious  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.

       -Wredundant-decls
              Warn if anything is declared more than once in  the
              same  scope,  even in cases where multiple declara-
              tion is valid and changes nothing.

       -Wnested-externs
              Warn if an extern declaration is encountered within
              an function.

       -Wenum-clash
              Warn about conversion between different enumeration
              types (C++ only).

       -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 signa-
              ture that doesn't match any virtual functions  from
              the base class.

       -Winline
              Warn  if  a function can not be inlined, and either
              it was  declared  as  inline,  or  else  the  -fin-
              line-functions option was given.

       -Werror
              Treat  warnings  as errors; abort compilation after
              any warning.

DEBUGGING OPTIONS
       GNU CC has various special options that are used  for  de-
       bugging either your program or GCC:

       -g     Produce debugging information in the operating sys-
              tem's native format (stabs, COFF, XCOFF, or DWARF).
              GDB can work with this debugging information.
              On most systems that use stabs format, `-g' 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 de-
              buggers  crash  or  refuse to read the program.  If
              you want to control for certain whether to generate
              the  extra  information, use `-gstabs+', `-gstabs',
              `-gxcoff+',  `-gxcoff',  `-gdwarf+',  or  `-gdwarf'
              (see below).
              Unlike most other C compilers, GNU CC allows you to
              use `-g' with `-O'.  The shortcuts taken  by  opti-
              mized  code may occasionally produce surprising re-
              sults: 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 val-
              ues were already at hand; some statements may  exe-
              cute  in  different  places because they were moved
              out of loops.
              Nevertheless it proves possible to debug  optimized
              output.   This makes it reasonable to use the opti-
              mizer for programs that might have bugs.

       The following options are useful when GNU CC is  generated
       with the capability for more than one debugging format.

       -ggdb  Produce  debugging information in the native format
              (if that is supported), including GDB extensions if
              at all possible.

       -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.

       -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.

       -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.

       -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.

       -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.

       -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.

       -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.

       -glevel
       -ggdblevel
       -gstabslevel
       -gcofflevel -gxcofflevel

       -gdwarflevel
              Request debugging information and also use level to
              specify how much information.  The default level is
              2.
              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 informa-
              tion about local variables and no line numbers.
              Level 3 includes extra information, such as all the
              macro definitions present in the program.  Some de-
              buggers support macro expansion when you use `-g3'.

       -p     Generate  extra  code  to write profile information
              suitable for the analysis program prof.

       -pg    Generate extra code to  write  profile  information
              suitable for the analysis program gprof.

       -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  tcov.   Note,
              however,  that  the  format of the data is not what
              tcov expects.  Eventually GNU gprof should  be  ex-
              tended to process this data.

       -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.

       -dletters
              Says  to make debugging dumps during compilation at
              times specified by letters.  This is used  for  de-
              bugging  the  compiler.  The file names for most of
              the dumps are made  by  appending  a  word  to  the
              source    file    name    (e.g.    `foo.c.rtl'   or
              `foo.c.jump').

       -dM    Dump all macro definitions, at the end  of  prepro-
              cessing, and write no output.

       -dN    Dump  all macro names, at the end of preprocessing.

       -dD    Dump all macro definitions, at the end  of  prepro-
              cessing, in addition to normal output.

       -dy    Dump debugging information during parsing, to stan-
              dard error.

       -dr    Dump after RTL generation, to `file.rtl'.

       -dx    Just generate RTL for a function instead of compil-
              ing it.  Usually used with `r'.

       -dj    Dump after first jump optimization, to `file.jump'.

       -ds    Dump after CSE  (including  the  jump  optimization
              that sometimes follows CSE), to `file.cse'.

       -dL    Dump after loop optimization, to `file.loop'.

       -dt    Dump  after the second CSE pass (including the jump
              optimization  that  sometimes  follows   CSE),   to
              `file.cse2'.

       -df    Dump after flow analysis, to `file.flow'.

       -dc    Dump     after    instruction    combination,    to
              `file.combine'.

       -dS    Dump after the first instruction  scheduling  pass,
              to `file.sched'.

       -dl    Dump    after   local   register   allocation,   to
              `file.lreg'.

       -dg    Dump   after   global   register   allocation,   to
              `file.greg'.

       -dR    Dump  after the second instruction scheduling pass,
              to `file.sched2'.

       -dJ    Dump after last jump optimization, to `file.jump2'.

       -dd    Dump    after   delayed   branch   scheduling,   to
              `file.dbr'.

       -dk    Dump after conversion from registers to  stack,  to
              `file.stack'.

       -da    Produce all the dumps listed above.

       -dm    Print statistics on memory usage, at the end of the
              run, to standard error.

       -dp    Annotate the assembler output with a comment  indi-
              cating which pattern and alternative was used.

       -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  ma-
              chine.

       -save-temps
              Store the usual "temporary" intermediate files per-
              manently; place them in the current  directory  and
              name  them based on the source file.  Thus, compil-
              ing `foo.c' with  `-c  -save-temps'  would  produce
              files `foo.cpp' and `foo.s', as well as `foo.o'.

       -print-file-name=library
              Print  the  full  absolute name of the library file
              library  that would be used  when  linking--and  do
              not  do  anything  else.   With this option, GNU CC
              does not compile or link anything; it  just  prints
              the file name.

       -print-libgcc-file-name
              Same as `-print-file-name=libgcc.a'.

       -print-prog-name=program
              Like `-print-file-name', but searches for a program
              such as `cpp'.

OPTIMIZATION OPTIONS
       These options control various sorts of optimizations:

       -O

       -O1    Optimize.  Optimizing  compilation  takes  somewhat
              more  time, and a lot more memory for a large func-
              tion.
              Without `-O', 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  re-
              sults you would expect from the source code.
              Without  `-O', only variables declared register are
              allocated in  registers.   The  resulting  compiled
              code is a little worse than produced by PCC without
              `-O'.
              With `-O', the compiler tries to reduce  code  size
              and execution time.
              When    you   specify   `-O',   the   two   options
              `-fthread-jumps' and `-fdefer-pop' are  turned  on.
              On    machines   that   have   delay   slots,   the
              `-fdelayed-branch' option is turned on.  For  those
              machines  that can support debugging even without a
              frame pointer, the `-fomit-frame-pointer' option is
              turned  on.   On some machines other flags may also
              be turned on.

       -O2    Optimize even more.  Nearly all supported optimiza-
              tions  that  do  not involve a space-speed tradeoff
              are performed.  Loop unrolling and function  inlin-
              ing  are not done, for example.  As compared to -O,
              this option increases both compilation time and the
              performance of the generated code.

       -O3    Optimize  yet  more.  This  turns on everything -O2
              does, along with  also  turning  on  -finline-func-
              tions.

       -O0    Do not optimize.
              If  you  use  multiple  -O options, with or without
              level numbers, the last such option is the one that
              is effective.

       Options  of  the form `-fflag' specify machine-independent
       flags.  Most flags have both positive and negative  forms;

       the  negative  form  of  `-ffoo' would be `-fno-foo'.  The
       following list shows only one form--the one which  is  not
       the  default.  You can figure out the other form by either
       removing `no-' or adding it.

       -ffloat-store
              Do not store floating point variables in registers.
              This  prevents  undesirable excess precision on ma-
              chines such as the 68000 where the floating  regis-
              ters (of the 68881) keep more precision than a dou-
              ble is supposed to have.
              For most programs, the excess precision  does  only
              good,  but a few programs rely on the precise defi-
              nition of IEEE floating point.  Use `-ffloat-store'
              for such programs.

       -fmemoize-lookups

       -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.
              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
                cout << "This " << p  <<  "  has  "  <<  n  <<  "
              legs.\n";
              makes six passes through all three steps.  By using
              a software cache,  a  "hit"  significantly  reduces
              this  cost.   Unfortunately, using the cache intro-
              duces another layer of mechanisms which must be im-
              plemented,   and   so   incurs  its  own  overhead.
              `-fmemoize-lookups' enables the software cache.
              Because access privileges (visibility)  to  members
              and  member  functions may differ from one function
              context to the next, g++  may  need  to  flush  the
              cache.   With  the  `-fmemoize-lookups'  flag,  the
              cache is flushed after every function that is  com-
              piled.  The `-fsave-memoized' 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 privi-
              leges as every other, and the  cache  need  not  be
              flushed.

       -fno-default-inline
              Don't make member functions inline by default mere-
              ly because they are defined inside the class  scope
              (C++ only).

       -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 com-
              piler normally lets  arguments  accumulate  on  the
              stack  for several function calls and pops them all
              at once.

       -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  poten-
              tial common subexpressions.  When they are not com-
              mon subexpressions, instruction combination  should
              eliminate  the separate register-load.  I am inter-
              ested in hearing about the difference this makes.

       -fforce-addr
              Force memory address constants to  be  copied  into
              registers  before  doing  arithmetic on them.  This
              may produce better code just as `-fforce-mem'  may.
              I  am  interested  in  hearing about the difference
              this makes.

       -fomit-frame-pointer
              Don't keep the frame  pointer  in  a  register  for
              functions that don't need one.  This avoids the in-
              structions to save, set up and restore frame point-
              ers;  it  also makes an extra register available in
              many functions.  It also makes debugging impossible
              on most machines.
              On some machines, such as the Vax, this flag has no
              effect, because the standard calling sequence auto-
              matically  handles the frame pointer and nothing is
              saved by pretending it doesn't exist.  The machine-
              description  macro  FRAME_POINTER_REQUIRED controls
              whether a target machine supports this flag.

       -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.
              If  all  calls  to a given function are integrated,
              and the function is declared static, then GCC  nor-
              mally  does  not  output  the function as assembler
              code in its own right.

       -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  regis-
              ters  around  such  calls.  Such allocation is done
              only when it seems to result in  better  code  than
              would otherwise be produced.
              This  option  is  enabled by default on certain ma-
              chines, usually those which have no  call-preserved
              registers to use instead.

       -fkeep-inline-functions
              Even if all calls to a given function are integrat-
              ed, and the function is declared static,  neverthe-
              less output a separate run-time callable version of
              the function.

       -fno-function-cse
              Do not put function addresses  in  registers;  make
              each  instruction  that  calls  a constant function
              contain the function's address explicitly.
              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.

       -fno-peephole
              Disable  any  machine-specific  peephole  optimiza-
              tions.

       -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 compil-
              er  to  assume  arguments  to the sqrt function are
              non-negative numbers.
              This option should never be turned on by  any  `-O'
              option  since it can result in incorrect output for
              programs which depend on an exact implementation of
              IEEE  or  ANSI  rules/specifications for math func-
              tions.

       The following options control specific optimizations.  The
       `-O2'  option  turns  on all of these optimizations except
       `-funroll-loops' and `-funroll-all-loops'.

       The `-O' option usually turns on the `-fthread-jumps'  and
       `-fdelayed-branch'  options,  but  specific  machines  may
       change the default optimizations.

       You can use the following flags in  the  rare  cases  when
       "fine-tuning" of optimizations to be performed is desired.

       -fstrength-reduce
              Perform the optimizations of loop  strength  reduc-
              tion and elimination of iteration variables.

       -fthread-jumps
              Perform  optimizations  where  we check to see if a
              jump branches to a location where another  compari-
              son  subsumed  by  the  first is found.  If so, the
              first branch is redirected to either  the  destina-
              tion  of  the  second branch or a point immediately
              following it, depending on whether the condition is
              known to be true or false.

       -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.

       -funroll-all-loops
              Perform  the  optimization of loop unrolling.  This
              is done for all loops.  This usually makes programs
              run more slowly.

       -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 if statement with an else clause,
              CSE  will follow the jump when the condition tested
              is false.

       -fcse-skip-blocks
              This is similar to `-fcse-follow-jumps', but causes
              CSE  to  follow jumps which conditionally skip over
              blocks.  When CSE encounters a simple if  statement
              with no else clause, `-fcse-skip-blocks' causes CSE
              to follow the jump around the body of the if.

       -frerun-cse-after-loop
              Re-run common subexpression elimination after  loop
              optimizations has been performed.

       -felide-constructors
              Elide  constructors  when this seems plausible (C++
              only).  With this flag, GNU C++ initializes  y  di-
              rectly from the call to foo without going through a
              temporary in the following code:
              A foo (); A y = foo ();
              Without this option, GNU C++ first initializes y by
              calling  the  appropriate  constructor  for type A;
              then assigns the result of foo to a temporary; and,
              finally, replaces the initial value of `y' with the
              temporary.
              The default behavior (`-fno-elide-constructors') is
              specified  by the draft ANSI C++ standard.  If your
              program's constructors  have  side  effects,  using
              `-felide-constructors'  can  make  your program act
              differently, since some constructor  calls  may  be
              omitted.

       -fexpensive-optimizations
              Perform  a  number  of minor optimizations that are
              relatively expensive.

       -fdelayed-branch
              If supported for the target machine, attempt to re-
              order  instructions  to  exploit  instruction slots
              available after delayed branch instructions.

       -fschedule-insns
              If supported for the target machine, attempt to re-
              order  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.

       -fschedule-insns2
              Similar to `-fschedule-insns', but requests an  ad-
              ditional  pass of instruction scheduling after reg-
              ister 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.

TARGET OPTIONS
       By  default, GNU CC compiles code for the same type of ma-
       chine that you are using.  However, it  can  also  be  in-

       stalled  as  a  cross-compiler,  to compile for some other
       type of machine.  In fact,  several  different  configura-
       tions of GNU CC, for different target machines, can be in-
       stalled side by side.  Then you specify which one  to  use
       with the `-b' option.

       In addition, older and newer versions of GNU CC can be in-
       stalled side by side.  One of them (probably  the  newest)
       will be the default, but you may sometimes wish to use an-
       other.

       -b machine
              The argument machine specifies the  target  machine
              for  compilation.  This is useful when you have in-
              stalled GNU CC as a cross-compiler.
              The value to use for machine 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  `configure i386v',
              meaning to compile for an 80386 running  System  V,
              then you would specify `-b i386v' to run that cross
              compiler.
              When you do not specify `-b', it normally means  to
              compile  for  the same type of machine that you are
              using.

       -V version
              The argument version specifies which version of GNU
              CC  to  run.  This is useful when multiple versions
              are  installed.   For  example,  version  might  be
              `2.0', meaning to run GNU CC version 2.0.
              The  default version, when you do not specify `-V',
              is controlled by the way GNU CC is installed.  Nor-
              mally, it will be a version that is recommended for
              general use.

MACHINE DEPENDENT OPTIONS
       Each of the target machine types can have its own  special
       options, starting with `-m', to choose among various hard-
       ware  models  or  configurations--for  example,  68010  vs
       68020,  floating  coprocessor or none.  A single installed
       version of the compiler can compile for any model or  con-
       figuration, according to the options specified.

       Some configurations of the compiler also support addition-
       al special options, usually for command-line compatibility
       with other compilers on the same platform.

       These are the `-m' options defined for the 68000 series:

       -m68000

       -mc68000
              Generate  output  for a 68000.  This is the default
              when the compiler  is  configured  for  68000-based
              systems.

       -m68020

       -mc68020
              Generate  output for a 68020 (rather than a 68000).
              This is the default when the compiler is configured
              for 68020-based systems.

       -m68881
              Generate  output  containing 68881 instructions for
              floating point.   This  is  the  default  for  most
              68020-based  systems unless -nfp was specified when
              the compiler was configured.

       -m68030
              Generate output for a 68030.  This is  the  default
              when  the  compiler  is  configured for 68030-based
              systems.

       -m68040
              Generate output for a 68040.  This is  the  default
              when  the  compiler  is  configured for 68040-based
              systems.

       -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.

       -mfpa  Generate output containing Sun FPA instructions for
              floating point.

       -msoft-float
              Generate output containing library calls for float-
              ing  point.   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 li-
              brary functions for cross-compilation.

       -mshort
              Consider type int to be 16 bits  wide,  like  short
              int.

       -mnobitfield
              Do  not  use the bit-field instructions.  `-m68000'
              implies `-mnobitfield'.

       -mbitfield
              Do use the bit-field instructions.   `-m68020'  im-
              plies `-mbitfield'.  This is the default if you use
              the unmodified sources.

       -mrtd  Use a  different  function-calling  convention,  in
              which  functions  that take a fixed number of argu-
              ments return with the 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.
              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.
              Also, you must provide function prototypes for  all
              functions  that  take variable numbers of arguments
              (including printf); otherwise incorrect  code  will
              be generated for calls to those functions.
              In  addition,  seriously incorrect code will result
              if you call a function  with  too  many  arguments.
              (Normally, extra arguments are harmlessly ignored.)
              The rtd instruction is supported by the  68010  and
              68020 processors, but not by the 68000.

       These `-m' options are defined for the Vax:

       -munix Do not output certain jump instructions (aobleq and
              so on) that the Unix assembler for the  Vax  cannot
              handle across long ranges.

       -mgnu  Do  output  those jump instructions, on the assump-
              tion that you will assemble with the GNU assembler.

       -mg    Output code for g-format floating point numbers in-
              stead of d-format.

       These `-m' switches are supported on the SPARC:

       -mfpu

       -mhard-float
              Generate output containing floating point  instruc-
              tions.  This is the default.

       -mno-fpu

       -msoft-float
              Generate output containing library calls for float-
              ing point.  Warning: there is no GNU floating-point
              library  for SPARC.  Normally the facilities of the
              machine's usual C compiler are used, but this  can-
              not  be  done  directly  in cross-compilation.  You
              must make your own arrangements to provide suitable
              library functions for cross-compilation.
              -msoft-float  changes the calling convention in the
              output file; therefore, it is only  useful  if  you
              compile all of a program with this option.

       -mno-epilogue

       -mepilogue
              With  -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.
              With -mno-epilogue, the compiler tries to emit exit
              code inline at every function exit.

       -mno-v8

       -mv8

       -msparclite
              These  three options select variations on the SPARC
              architecture.
              By default (unless specifically configured for  the
              Fujitsu  SPARClite),  GCC generates code for the v7
              variant of the SPARC architecture.
              -mv8 will give you SPARC v8 code.  The only differ-
              ence  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.
              -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.

       -mcypress

       -msupersparc
              These two options select the  processor  for  which
              the code is optimised.
              With -mcypress (the default), the compiler optimis-
              es 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.
              With  -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.

       These `-m' options are defined for the Convex:

       -mc1   Generate output for a C1.  This is the default when
              the compiler is configured for a C1.

       -mc2   Generate output for a C2.  This is the default when
              the compiler is configured for a C2.

       -margcount
              Generate code which puts an argument count  in  the
              word  preceding  each  argument  list.   Some  non-
              portable Convex and Vax programs  need  this  word.
              (Debuggers  don't,  except for functions with vari-
              able-length argument lists; this  info  is  in  the
              symbol table.)

       -mnoargcount
              Omit  the argument count word.  This is the default
              if you use the unmodified sources.

       These `-m' options are defined for the AMD Am29000:

       -mdw   Generate code that assumes the DW bit is set, i.e.,
              that byte and halfword operations are directly sup-
              ported by the hardware.  This is the default.

       -mnodw Generate code that assumes the DW bit is not set.

       -mbw   Generate code that assumes the system supports byte
              and  halfword  write  operations.   This is the de-
              fault.

       -mnbw  Generate code that assumes  the  systems  does  not
              support  byte  and halfword write operations.  This
              implies `-mnodw'.

       -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 call instruction to be used
              instead of a const, consth, calli sequence.

       -mlarge
              Do not assume that  the  call  instruction  can  be
              used; this is the default.

       -m29050
              Generate code for the Am29050.

       -m29000
              Generate  code  for  the  Am29000.  This is the de-
              fault.

       -mkernel-registers
              Generate references to registers gr64-gr95  instead
              of  gr96-gr127.   This option can be used when com-
              piling kernel code that wants a set of global  reg-
              isters disjoint from that used by user-mode code.
              Note  that when this option is used, register names
              in `-f'  flags  must  use  the  normal,  user-mode,
              names.

       -muser-registers
              Use the normal set of global registers, gr96-gr127.
              This is the default.

       -mstack-check
              Insert a call to __msp_check after each  stack  ad-
              justment.  This is often used for kernel code.

       These  `-m' options are defined for Motorola 88K architec-
       tures:

       -m88000
              Generate code that works well on  both  the  m88100
              and the m88110.

       -m88100
              Generate  code  that works best for the m88100, but
              that also runs on the m88110.

       -m88110
              Generate code that works best for the  m88110,  and
              may not run on the m88100.

       -midentify-revision
              Include  an ident directive in the assembler output
              recording the source file name, compiler  name  and
              version, timestamp, and compilation flags used.

       -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.

       -mno-check-zero-division

       -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 de-
              tect division by zero and signal an exception.  All
              GCC     configurations     for    the    88K    use
              `-mcheck-zero-division' by default.

       -mocs-debug-info

       -mno-ocs-debug-info
              Include (or omit) additional debugging  information
              (about registers used in each stack frame) as spec-
              ified in the 88Open Object Compatibility  Standard,
              "OCS".   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.

       -mocs-frame-position

       -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 `-mocs-frame-position'; oth-
              er   88k   configurations    have    the    default
              `-mno-ocs-frame-position'.

       -moptimize-arg-area

       -mno-optimize-arg-area
              Control  how  to  store function arguments in stack
              frames.  `-moptimize-arg-area' saves space, but may
              break      some      debuggers      (not      GDB).
              `-mno-optimize-arg-area' conforms better  to  stan-
              dards.   By default GCC does not optimize the argu-
              ment area.

       -mshort-data-num
              num Generate smaller data references by making them
              relative  to r0, which allows loading a value using
              a single instruction (rather than the  usual  two).
              You  control  which data references are affected by
              specifying num with this option.  For  example,  if
              you  specify `-mshort-data-512', then the data ref-
              erences affected are those involving  displacements
              of  less than 512 bytes.  `-mshort-data-num' is not
              effective for num greater than 64K.

       -mserialize-volatile

       -mno-serialize-volatile
              Do, or do not, generate code to  guarantee  sequen-
              tial consistency of volatile memory references.
              GNU  CC  always  guarantees consistency by default,
              for the preferred processor submodel.  How this  is
              done depends on the submodel.
              The m88100 processor does not reorder memory refer-
              ences and so always provides sequential  cons