-@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
+@ignore
+@c man begin COPYRIGHT
+Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
+1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be included in translations
+approved by the Free Software Foundation instead of in the original
+English.
+@c man end
+@c Set file name and title for the man page.
+@setfilename gcc
+@settitle GNU project C and C++ compiler
+@c man begin SYNOPSIS
+gcc [@samp{-c}|@samp{-S}|@samp{-E}] [@samp{-std=}@var{standard}]
+ [@samp{-g}] [@samp{-pg}] [@samp{-O}@var{level}]
+ [@samp{-W}@var{warn}...] [@samp{-pedantic}]
+ [@samp{-I}@var{dir}...] [@samp{-L}@var{dir}...]
+ [@samp{-D}@var{macro}[=@var{defn}]...] [@samp{-U}@var{macro}]
+ [@samp{-f}@var{option}...] [@samp{-m}@var{machine-option}...]
+ [@samp{-o} @var{outfile}] @var{infile}...
+
+Only the most useful options are listed here; see below for the
+remainder. @samp{g++} accepts mostly the same options as @samp{gcc}.
+@c man end
+@c man begin SEEALSO
+cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
+and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
+@file{ld}, @file{binutils} and @file{gdb}.
+@c man end
+@c man begin BUGS
+For instructions on reporting bugs, see
+@w{@uref{http://gcc.gnu.org/bugs.html}}. Use of the @command{gccbug}
+script to report bugs is recommended.
+@c man end
+@c man begin AUTHOR
+See the Info entry for @file{gcc}, or
+@w{@uref{http://gcc.gnu.org/thanks.html}}, for contributors to GCC.
+@c man end
+@end ignore
+
@node Invoking GCC
@chapter GCC Command Options
@cindex GCC command options
@cindex command options
@cindex options, GCC command
+@c man begin DESCRIPTION
+
When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking. The ``overall options'' allow you to stop this
process at an intermediate stage. For example, the @samp{-c} option
@cindex grouping options
@cindex options, grouping
-The @code{gcc} program accepts options and file names as operands. Many
-options have multiletter names; therefore multiple single-letter options
+The @command{gcc} program accepts options and file names as operands. Many
+options have multi-letter names; therefore multiple single-letter options
may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
-r}}.
@samp{-ffoo} would be @samp{-fno-foo}. This manual documents
only one of these two forms, whichever one is not the default.
+@c man end
+
@menu
* Option Summary:: Brief list of all options, without explanations.
* Overall Options:: Controlling the kind of output:
* Invoking G++:: Compiling C++ programs.
* C Dialect Options:: Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
+* Language Independent Options:: Controlling how diagnostics should be
+ formatted.
* Warning Options:: How picky should the compiler be?
* Debugging Options:: Symbol tables, measurements, and debugging dumps.
* Optimize Options:: How much optimization?
* Running Protoize:: Automatically adding or removing function prototypes.
@end menu
+@c man begin OPTIONS
+
@node Option Summary
@section Option Summary
@table @emph
@item Overall Options
@xref{Overall Options,,Options Controlling the Kind of Output}.
-@smallexample
--c -S -E -o @var{file} -pipe -pass-exit-codes -v --help -x @var{language}
-@end smallexample
+@gccoptlist{
+-c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol
+-v --target-help --help}
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
-@smallexample
--ansi -fstd -fallow-single-precision -fcond-mismatch -fno-asm
--fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char
--funsigned-bitfields -funsigned-char -fwritable-strings
--traditional -traditional-cpp -trigraphs
-@end smallexample
+@gccoptlist{
+-ansi -std=@var{standard} -fno-asm -fno-builtin @gol
+-fhosted -ffreestanding @gol
+-trigraphs -traditional -traditional-cpp @gol
+-fallow-single-precision -fcond-mismatch @gol
+-fsigned-bitfields -fsigned-char @gol
+-funsigned-bitfields -funsigned-char @gol
+-fwritable-strings -fshort-wchar}
@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
-@smallexample
--fno-access-control -fcheck-new -fconserve-space -fdollars-in-identifiers
--fno-elide-constructors -fexternal-templates -ffor-scope
--fno-for-scope -fno-gnu-keywords -fguiding-decls
--fhonor-std -fhuge-objects -fno-implicit-templates -finit-priority
--fno-implement-inlines -fname-mangling-version-@var{n} -fno-default-inline
--foperator-names -fno-optional-diags -fpermissive -frepo -fstrict-prototype
--fsquangle -ftemplate-depth-@var{n} -fuse-cxa-atexit -fvtable-thunks
--nostdinc++ -Wctor-dtor-privacy -Wno-deprecated -Weffc++
--Wno-non-template-friend
--Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual
--Wno-pmf-conversions -Wreorder -Wsign-promo -Wsynth
-@end smallexample
+@gccoptlist{
+-fno-access-control -fcheck-new -fconserve-space @gol
+-fdollars-in-identifiers -fno-elide-constructors @gol
+-fno-enforce-eh-specs -fexternal-templates @gol
+-falt-external-templates @gol
+-ffor-scope -fno-for-scope -fno-gnu-keywords -fhonor-std @gol
+-fhuge-objects -fno-implicit-templates @gol
+-fno-implicit-inline-templates @gol
+-fno-implement-inlines -fms-extensions @gol
+-fname-mangling-version-@var{n} -fno-operator-names @gol
+-fno-optional-diags -fpermissive @gol
+-frepo -fno-rtti -fsquangle -ftemplate-depth-@var{n} @gol
+-fuse-cxa-atexit -fvtable-thunks -nostdinc++ @gol
+-fno-default-inline -Wctor-dtor-privacy @gol
+-Wnon-virtual-dtor -Wreorder @gol
+-Weffc++ -Wno-deprecated @gol
+-Wno-non-template-friend -Wold-style-cast @gol
+-Woverloaded-virtual -Wno-pmf-conversions @gol
+-Wsign-promo -Wsynth}
+
+@item Language Independent Options
+@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
+@gccoptlist{
+-fmessage-length=@var{n} @gol
+-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
-@smallexample
--fsyntax-only -pedantic -pedantic-errors
--w -W -Wall -Waggregate-return
--Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
--Wconversion -Werror -Wformat
--Wid-clash-@var{len} -Wimplicit -Wimplicit-int
--Wimplicit-function-declaration -Wimport
--Werror-implicit-function-declaration -Wfloat-equal -Winline
--Wlarger-than-@var{len} -Wlong-long
--Wmain -Wmissing-declarations -Wmissing-noreturn
--Wmultichar -Wno-import -Wpacked -Wpadded
--Wparentheses -Wpointer-arith -Wredundant-decls
--Wreturn-type -Wshadow -Wsign-compare -Wswitch
--Wtrigraphs -Wundef -Wuninitialized -Wunknown-pragmas -Wunreachable-code
--Wunused -Wwrite-strings
-@end smallexample
+@gccoptlist{
+-fsyntax-only -pedantic -pedantic-errors @gol
+-w -W -Wall -Waggregate-return @gol
+-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol
+-Wconversion -Wdisabled-optimization -Werror @gol
+-Wfloat-equal -Wformat -Wformat=2 @gol
+-Wformat-nonliteral -Wformat-security @gol
+-Wid-clash-@var{len} -Wimplicit -Wimplicit-int @gol
+-Wimplicit-function-declaration @gol
+-Werror-implicit-function-declaration @gol
+-Wimport -Winline @gol
+-Wlarger-than-@var{len} -Wlong-long @gol
+-Wmain -Wmissing-declarations @gol
+-Wmissing-format-attribute -Wmissing-noreturn @gol
+-Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol
+-Wno-import -Wpacked -Wpadded @gol
+-Wparentheses -Wpointer-arith -Wredundant-decls @gol
+-Wreturn-type -Wsequence-point -Wshadow @gol
+-Wsign-compare -Wswitch -Wsystem-headers @gol
+-Wtrigraphs -Wundef -Wuninitialized @gol
+-Wunknown-pragmas -Wunreachable-code @gol
+-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
+-Wunused-value -Wunused-variable -Wwrite-strings}
@item C-only Warning Options
-@smallexample
--Wbad-function-cast -Wmissing-prototypes -Wnested-externs
--Wstrict-prototypes -Wtraditional
-@end smallexample
+@gccoptlist{
+-Wbad-function-cast -Wmissing-prototypes -Wnested-externs @gol
+-Wstrict-prototypes -Wtraditional}
@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
-@smallexample
--a -ax -d@var{letters} -fdump-unnumbered -fdump-translation-unit-@var{file}
--fpretend-float -fprofile-arcs -ftest-coverage
--g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
--ggdb -gstabs -gstabs+ -gxcoff -gxcoff+
--p -pg -print-file-name=@var{library} -print-libgcc-file-name
--print-prog-name=@var{program} -print-search-dirs -save-temps -time
-@end smallexample
+@gccoptlist{
+-a -ax -d@var{letters} -fdump-unnumbered -fdump-translation-unit-@var{file} @gol
+-fpretend-float -fprofile-arcs -ftest-coverage @gol
+-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol
+-ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ @gol
+-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
+-print-prog-name=@var{program} -print-search-dirs -Q @gol
+-save-temps -time}
@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
-@smallexample
--falign-functions=@var{n} -falign-labels=@var{n} -falign-loops=@var{n}
--falign-jumps=@var{n} -fbranch-probabilities
--fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
--fdelayed-branch -fdelete-null-pointer-checks -fexpensive-optimizations
--ffast-math -ffloat-store -fforce-addr -fforce-mem -fno-math-errno
--fdata-sections -ffunction-sections -fgcse
--finline-functions -finline-limit=@var{n} -fkeep-inline-functions
--fmove-all-movables -fno-default-inline -fno-defer-pop
--fno-function-cse -fno-inline -fno-peephole
--fomit-frame-pointer -foptimize-register-moves -foptimize-sibling-calls
--fregmove -frerun-cse-after-loop -frerun-loop-opt -freduce-all-givs
--fschedule-insns -fschedule-insns2 -fstrength-reduce
--fstrict-aliasing -fthread-jumps -funroll-all-loops
--funroll-loops
--O -O0 -O1 -O2 -O3 -Os
-@end smallexample
+@gccoptlist{
+-falign-functions=@var{n} -falign-jumps=@var{n} @gol
+-falign-labels=@var{n} -falign-loops=@var{n} @gol
+-fbranch-probabilities -fcaller-saves @gol
+-fcse-follow-jumps -fcse-skip-blocks -fdata-sections -fdce @gol
+-fdelayed-branch -fdelete-null-pointer-checks @gol
+-fexpensive-optimizations -ffast-math -ffloat-store @gol
+-fforce-addr -fforce-mem -ffunction-sections -fgcse @gol
+-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
+-fkeep-static-consts -fmove-all-movables @gol
+-fno-default-inline -fno-defer-pop @gol
+-fno-function-cse -fno-guess-branch-probability
+-fno-inline -fno-math-errno -fno-peephole @gol
+-fomit-frame-pointer -foptimize-register-move @gol
+-foptimize-sibling-calls -freduce-all-givs @gol
+-fregmove -frename-registers @gol
+-frerun-cse-after-loop -frerun-loop-opt @gol
+-fschedule-insns -fschedule-insns2 @gol
+-fsingle-precision-constant -fssa @gol
+-fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv @gol
+-funroll-all-loops -funroll-loops @gol
+-O -O0 -O1 -O2 -O3 -Os}
@item Preprocessor Options
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
-@smallexample
--A@var{question}(@var{answer}) -C -dD -dM -dN
--D@var{macro}@r{[}=@var{defn}@r{]} -E -H
--idirafter @var{dir}
--include @var{file} -imacros @var{file}
--iprefix @var{file} -iwithprefix @var{dir}
--iwithprefixbefore @var{dir} -isystem @var{dir} -isystem-c++ @var{dir}
--M -MD -MM -MMD -MG -nostdinc -P -trigraphs
--undef -U@var{macro} -Wp,@var{option}
-@end smallexample
+@gccoptlist{
+-$ -A@var{question}=@var{answer} -A-@var{question}@r{[}=@var{answer}@r{]} @gol
+-C -dD -dI -dM -dN @gol
+-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol
+-idirafter @var{dir} @gol
+-include @var{file} -imacros @var{file} @gol
+-iprefix @var{file} -iwithprefix @var{dir} @gol
+-iwithprefixbefore @var{dir} -isystem @var{dir} -isystem-c++ @var{dir} @gol
+-M -MM -MF -MG -MP -MQ -MT -nostdinc -P -remap @gol
+-trigraphs -undef -U@var{macro} -Wp,@var{option}}
@item Assembler Option
@xref{Assembler Options,,Passing Options to the Assembler}.
-@smallexample
--Wa,@var{option}
-@end smallexample
+@gccoptlist{
+-Wa,@var{option}}
@item Linker Options
@xref{Link Options,,Options for Linking}.
-@smallexample
-@var{object-file-name} -l@var{library}
--nostartfiles -nodefaultlibs -nostdlib
--s -static -shared -symbolic
--Wl,@var{option} -Xlinker @var{option}
--u @var{symbol}
-@end smallexample
+@gccoptlist{
+@var{object-file-name} -l@var{library} @gol
+-nostartfiles -nodefaultlibs -nostdlib @gol
+-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol
+-Wl,@var{option} -Xlinker @var{option} @gol
+-u @var{symbol}}
@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
-@smallexample
--B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}
-@end smallexample
+@gccoptlist{
+-B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}}
@item Target Options
@c I wrote this xref this way to avoid overfull hbox. -- rms
@xref{Target Options}.
-@smallexample
--b @var{machine} -V @var{version}
-@end smallexample
+@gccoptlist{
+-b @var{machine} -V @var{version}}
@item Machine Dependent Options
@xref{Submodel Options,,Hardware Models and Configurations}.
-@smallexample
@emph{M680x0 Options}
--m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040
--m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020
--mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel
--malign-int -mstrict-align
+@gccoptlist{
+-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol
+-m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol
+-mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol
+-malign-int -mstrict-align}
+
+@emph{M68hc1x Options}
+@gccoptlist{
+-m6811 -m6812 -m68hc11 -m68hc12 @gol
+-mauto-incdec -mshort -msoft-reg-count=@var{count}}
@emph{VAX Options}
--mg -mgnu -munix
+@gccoptlist{
+-mg -mgnu -munix}
@emph{SPARC Options}
--mcpu=@var{cpu type}
--mtune=@var{cpu type}
--mcmodel=@var{code model}
--m32 -m64
--mapp-regs -mbroken-saverestore -mcypress
--mepilogue -mfaster-structs -mflat
--mfpu -mhard-float -mhard-quad-float
--mimpure-text -mlive-g0 -mno-app-regs
--mno-epilogue -mno-faster-structs -mno-flat -mno-fpu
--mno-impure-text -mno-stack-bias -mno-unaligned-doubles
--msoft-float -msoft-quad-float -msparclite -mstack-bias
--msupersparc -munaligned-doubles -mv8
+@gccoptlist{
+-mcpu=@var{cpu type} @gol
+-mtune=@var{cpu type} @gol
+-mcmodel=@var{code model} @gol
+-m32 -m64 @gol
+-mapp-regs -mbroken-saverestore -mcypress @gol
+-mepilogue -mfaster-structs -mflat @gol
+-mfpu -mhard-float -mhard-quad-float @gol
+-mimpure-text -mlive-g0 -mno-app-regs @gol
+-mno-epilogue -mno-faster-structs -mno-flat -mno-fpu @gol
+-mno-impure-text -mno-stack-bias -mno-unaligned-doubles @gol
+-msoft-float -msoft-quad-float -msparclite -mstack-bias @gol
+-msupersparc -munaligned-doubles -mv8}
@emph{Convex Options}
--mc1 -mc2 -mc32 -mc34 -mc38
--margcount -mnoargcount
--mlong32 -mlong64
--mvolatile-cache -mvolatile-nocache
+@gccoptlist{
+-mc1 -mc2 -mc32 -mc34 -mc38 @gol
+-margcount -mnoargcount @gol
+-mlong32 -mlong64 @gol
+-mvolatile-cache -mvolatile-nocache}
@emph{AMD29K Options}
--m29000 -m29050 -mbw -mnbw -mdw -mndw
--mlarge -mnormal -msmall
--mkernel-registers -mno-reuse-arg-regs
--mno-stack-check -mno-storem-bug
--mreuse-arg-regs -msoft-float -mstack-check
--mstorem-bug -muser-registers
+@gccoptlist{
+-m29000 -m29050 -mbw -mnbw -mdw -mndw @gol
+-mlarge -mnormal -msmall @gol
+-mkernel-registers -mno-reuse-arg-regs @gol
+-mno-stack-check -mno-storem-bug @gol
+-mreuse-arg-regs -msoft-float -mstack-check @gol
+-mstorem-bug -muser-registers}
@emph{ARM Options}
--mapcs-frame -mno-apcs-frame
--mapcs-26 -mapcs-32
--mapcs-stack-check -mno-apcs-stack-check
--mapcs-float -mno-apcs-float
--mapcs-reentrant -mno-apcs-reentrant
--msched-prolog -mno-sched-prolog
--mlittle-endian -mbig-endian -mwords-little-endian
--malignment-traps -mno-alignment-traps
--msoft-float -mhard-float -mfpe
--mthumb-interwork -mno-thumb-interwork
--mcpu= -march= -mfpe=
--mstructure-size-boundary=
--mbsd -mxopen -mno-symrename
--mabort-on-noreturn
--mlong-calls -mno-long-calls
--mnop-fun-dllimport -mno-nop-fun-dllimport
--msingle-pic-base -mno-single-pic-base
--mpic-register=
+@gccoptlist{
+-mapcs-frame -mno-apcs-frame @gol
+-mapcs-26 -mapcs-32 @gol
+-mapcs-stack-check -mno-apcs-stack-check @gol
+-mapcs-float -mno-apcs-float @gol
+-mapcs-reentrant -mno-apcs-reentrant @gol
+-msched-prolog -mno-sched-prolog @gol
+-mlittle-endian -mbig-endian -mwords-little-endian @gol
+-malignment-traps -mno-alignment-traps @gol
+-msoft-float -mhard-float -mfpe @gol
+-mthumb-interwork -mno-thumb-interwork @gol
+-mcpu= -march= -mfpe= @gol
+-mstructure-size-boundary= @gol
+-mbsd -mxopen -mno-symrename @gol
+-mabort-on-noreturn @gol
+-mlong-calls -mno-long-calls @gol
+-mnop-fun-dllimport -mno-nop-fun-dllimport @gol
+-msingle-pic-base -mno-single-pic-base @gol
+-mpic-register=}
@emph{Thumb Options}
--mtpcs-frame -mno-tpcs-frame
--mtpcs-leaf-frame -mno-tpcs-leaf-frame
--mlittle-endian -mbig-endian
--mthumb-interwork -mno-thumb-interwork
--mstructure-size-boundary=
--mnop-fun-dllimport -mno-nop-fun-dllimport
--mcallee-super-interworking -mno-callee-super-interworking
--mcaller-super-interworking -mno-caller-super-interworking
--msingle-pic-base -mno-single-pic-base
--mpic-register=
+@gccoptlist{
+-mtpcs-frame -mno-tpcs-frame @gol
+-mtpcs-leaf-frame -mno-tpcs-leaf-frame @gol
+-mlittle-endian -mbig-endian @gol
+-mthumb-interwork -mno-thumb-interwork @gol
+-mstructure-size-boundary= @gol
+-mnop-fun-dllimport -mno-nop-fun-dllimport @gol
+-mcallee-super-interworking -mno-callee-super-interworking @gol
+-mcaller-super-interworking -mno-caller-super-interworking @gol
+-msingle-pic-base -mno-single-pic-base @gol
+-mpic-register=}
@emph{MN10200 Options}
--mrelax
+@gccoptlist{
+-mrelax}
@emph{MN10300 Options}
--mmult-bug
--mno-mult-bug
--mam33
--mno-am33
--mrelax
+@gccoptlist{
+-mmult-bug @gol
+-mno-mult-bug @gol
+-mam33 @gol
+-mno-am33 @gol
+-mrelax}
@emph{M32R/D Options}
--mcode-model=@var{model type} -msdata=@var{sdata type}
--G @var{num}
+@gccoptlist{
+-mcode-model=@var{model type} -msdata=@var{sdata type} @gol
+-G @var{num}}
@emph{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-@var{num} -msvr3
--msvr4 -mtrap-large-shift -muse-div-instruction
--mversion-03.00 -mwarn-passed-structs
+@gccoptlist{
+-m88000 -m88100 -m88110 -mbig-pic @gol
+-mcheck-zero-division -mhandle-large-shift @gol
+-midentify-revision -mno-check-zero-division @gol
+-mno-ocs-debug-info -mno-ocs-frame-position @gol
+-mno-optimize-arg-area -mno-serialize-volatile @gol
+-mno-underscores -mocs-debug-info @gol
+-mocs-frame-position -moptimize-arg-area @gol
+-mserialize-volatile -mshort-data-@var{num} -msvr3 @gol
+-msvr4 -mtrap-large-shift -muse-div-instruction @gol
+-mversion-03.00 -mwarn-passed-structs}
@emph{RS/6000 and PowerPC Options}
--mcpu=@var{cpu type}
--mtune=@var{cpu type}
--mpower -mno-power -mpower2 -mno-power2
--mpowerpc -mpowerpc64 -mno-powerpc
--mpowerpc-gpopt -mno-powerpc-gpopt
--mpowerpc-gfxopt -mno-powerpc-gfxopt
--mnew-mnemonics -mold-mnemonics
--mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc
--m64 -m32 -mxl-call -mno-xl-call -mthreads -mpe
--msoft-float -mhard-float -mmultiple -mno-multiple
--mstring -mno-string -mupdate -mno-update
--mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
--mstrict-align -mno-strict-align -mrelocatable
--mno-relocatable -mrelocatable-lib -mno-relocatable-lib
--mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian
--mcall-aix -mcall-sysv -mprototype -mno-prototype
--msim -mmvme -mads -myellowknife -memb -msdata
--msdata=@var{opt} -G @var{num}
+@gccoptlist{
+-mcpu=@var{cpu type} @gol
+-mtune=@var{cpu type} @gol
+-mpower -mno-power -mpower2 -mno-power2 @gol
+-mpowerpc -mpowerpc64 -mno-powerpc @gol
+-mpowerpc-gpopt -mno-powerpc-gpopt @gol
+-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol
+-mnew-mnemonics -mold-mnemonics @gol
+-mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc @gol
+-m64 -m32 -mxl-call -mno-xl-call -mthreads -mpe @gol
+-msoft-float -mhard-float -mmultiple -mno-multiple @gol
+-mstring -mno-string -mupdate -mno-update @gol
+-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol
+-mstrict-align -mno-strict-align -mrelocatable @gol
+-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
+-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
+-mcall-aix -mcall-sysv -mprototype -mno-prototype @gol
+-msim -mmvme -mads -myellowknife -memb -msdata @gol
+-msdata=@var{opt} -mvxworks -G @var{num}}
@emph{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
+@gccoptlist{
+-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs @gol
+-mfull-fp-blocks -mhc-struct-return -min-line-mul @gol
+-mminimum-fp-blocks -mnohc-struct-return}
@emph{MIPS Options}
--mabicalls -mcpu=@var{cpu type} -membedded-data -muninit-const-in-rodata
--membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
--mgpopt -mhalf-pic -mhard-float -mint64 -mips1
--mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy
--mmips-as -mmips-tfile -mno-abicalls
--mno-embedded-data -mno-uninit-const-in-rodata -mno-embedded-pic
--mno-gpopt -mno-long-calls
--mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
--mrnames -msoft-float
--m4650 -msingle-float -mmad
--mstats -EL -EB -G @var{num} -nocpp
--mabi=32 -mabi=n32 -mabi=64 -mabi=eabi
--mfix7000 -mno-crt0
+@gccoptlist{
+-mabicalls -mcpu=@var{cpu type}
+-membedded-data -muninit-const-in-rodata @gol
+-membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64 @gol
+-mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol
+-mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol
+-mmips-as -mmips-tfile -mno-abicalls @gol
+-mno-embedded-data -mno-uninit-const-in-rodata -mno-embedded-pic @gol
+-mno-gpopt -mno-long-calls @gol
+-mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats @gol
+-mrnames -msoft-float @gol
+-m4650 -msingle-float -mmad @gol
+-mstats -EL -EB -G @var{num} -nocpp @gol
+-mabi=32 -mabi=n32 -mabi=64 -mabi=eabi @gol
+-mfix7000 -mno-crt0}
@emph{i386 Options}
--mcpu=@var{cpu type}
--march=@var{cpu type}
--mieee-fp -mno-fancy-math-387
--mno-fp-ret-in-387 -msoft-float -msvr3-shlib
--mno-wide-multiply -mrtd -malign-double
--mreg-alloc=@var{list} -mregparm=@var{num}
--malign-jumps=@var{num} -malign-loops=@var{num}
--malign-functions=@var{num} -mpreferred-stack-boundary=@var{num}
--mthreads -mno-align-stringops -minline-all-stringops
+@gccoptlist{
+-mcpu=@var{cpu type} -march=@var{cpu type} @gol
+-mintel-syntax -mieee-fp -mno-fancy-math-387 @gol
+-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
+-mno-wide-multiply -mrtd -malign-double @gol
+-mreg-alloc=@var{list} -mregparm=@var{num} @gol
+-malign-jumps=@var{num} -malign-loops=@var{num} @gol
+-malign-functions=@var{num} -mpreferred-stack-boundary=@var{num} @gol
+-mthreads -mno-align-stringops -minline-all-stringops @gol
+-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
+-m96bit-long-double}
@emph{HPPA Options}
--march=@var{architecture type}
--mbig-switch -mdisable-fpregs -mdisable-indexing
--mfast-indirect-calls -mgas -mjump-in-delay
--mlong-load-store -mno-big-switch -mno-disable-fpregs
--mno-disable-indexing -mno-fast-indirect-calls -mno-gas
--mno-jump-in-delay -mno-long-load-store
--mno-portable-runtime -mno-soft-float
--mno-space-regs -msoft-float -mpa-risc-1-0
--mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
--mschedule=@var{cpu type} -mspace-regs
+@gccoptlist{
+-march=@var{architecture type} @gol
+-mbig-switch -mdisable-fpregs -mdisable-indexing @gol
+-mfast-indirect-calls -mgas -mjump-in-delay @gol
+-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol
+-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol
+-mno-jump-in-delay -mno-long-load-store @gol
+-mno-portable-runtime -mno-soft-float @gol
+-mno-space-regs -msoft-float -mpa-risc-1-0 @gol
+-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol
+-mschedule=@var{cpu type} -mspace-regs}
@emph{Intel 960 Options}
--m@var{cpu type} -masm-compat -mclean-linkage
--mcode-align -mcomplex-addr -mleaf-procedures
--mic-compat -mic2.0-compat -mic3.0-compat
--mintel-asm -mno-clean-linkage -mno-code-align
--mno-complex-addr -mno-leaf-procedures
--mno-old-align -mno-strict-align -mno-tail-call
--mnumerics -mold-align -msoft-float -mstrict-align
--mtail-call
+@gccoptlist{
+-m@var{cpu type} -masm-compat -mclean-linkage @gol
+-mcode-align -mcomplex-addr -mleaf-procedures @gol
+-mic-compat -mic2.0-compat -mic3.0-compat @gol
+-mintel-asm -mno-clean-linkage -mno-code-align @gol
+-mno-complex-addr -mno-leaf-procedures @gol
+-mno-old-align -mno-strict-align -mno-tail-call @gol
+-mnumerics -mold-align -msoft-float -mstrict-align @gol
+-mtail-call}
@emph{DEC Alpha Options}
--mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
--malpha-as -mgas
--mieee -mieee-with-inexact -mieee-conformant
--mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode}
--mtrap-precision=@var{mode} -mbuild-constants
--mcpu=@var{cpu type}
--mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
--mmemory-latency=@var{time}
+@gccoptlist{
+-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float @gol
+-malpha-as -mgas @gol
+-mieee -mieee-with-inexact -mieee-conformant @gol
+-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol
+-mtrap-precision=@var{mode} -mbuild-constants @gol
+-mcpu=@var{cpu type} @gol
+-mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @gol
+-mmemory-latency=@var{time}}
@emph{Clipper Options}
--mc300 -mc400
+@gccoptlist{
+-mc300 -mc400}
@emph{H8/300 Options}
--mrelax -mh -ms -mint32 -malign-300
+@gccoptlist{
+-mrelax -mh -ms -mint32 -malign-300}
@emph{SH Options}
--m1 -m2 -m3 -m3e -mb -ml -mdalign -mrelax
+@gccoptlist{
+-m1 -m2 -m3 -m3e @gol
+-m4-nofpu -m4-single-only -m4-single -m4 @gol
+-mb -ml -mdalign -mrelax @gol
+-mbigtable -mfmovd -mhitachi -mnomacsave @gol
+-misize -mpadstruct -mspace @gol
+-mprefergot
+-musermode}
@emph{System V Options}
--Qy -Qn -YP,@var{paths} -Ym,@var{dir}
+@gccoptlist{
+-Qy -Qn -YP,@var{paths} -Ym,@var{dir}}
@emph{ARC Options}
--EB -EL
--mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text section}
--mdata=@var{data section} -mrodata=@var{readonly data section}
+@gccoptlist{
+-EB -EL @gol
+-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text section} @gol
+-mdata=@var{data section} -mrodata=@var{readonly data section}}
@emph{TMS320C3x/C4x Options}
--mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm
--mfast-fix -mmpyi -mbk -mti -mdp-isr-reload
--mrpts=@var{count} -mrptb -mdb -mloop-unsigned
--mparallel-insns -mparallel-mpy -mpreserve-float
+@gccoptlist{
+-mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol
+-mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol
+-mrpts=@var{count} -mrptb -mdb -mloop-unsigned @gol
+-mparallel-insns -mparallel-mpy -mpreserve-float}
@emph{V850 Options}
--mlong-calls -mno-long-calls -mep -mno-ep
--mprolog-function -mno-prolog-function -mspace
--mtda=@var{n} -msda=@var{n} -mzda=@var{n}
--mv850 -mbig-switch
+@gccoptlist{
+-mlong-calls -mno-long-calls -mep -mno-ep @gol
+-mprolog-function -mno-prolog-function -mspace @gol
+-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol
+-mv850 -mbig-switch}
@emph{NS32K Options}
--m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add
--msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb
--mbitfield -mnobitfield -mhimem -mnohimem
+@gccoptlist{
+-m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add @gol
+-msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb @gol
+-mbitfield -mnobitfield -mhimem -mnohimem}
@emph{AVR Options}
--mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts
--mcall-prologues
+@gccoptlist{
+-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol
+-mcall-prologues -mno-tablejump -mtiny-stack}
@emph{MCore Options}
--mhardlit, -mno-hardlit -mdiv -mno-div -mrelax-immediates
--mno-relax-immediates -mwide-bitfields -mno-wide-bitfields
--m4byte-functions -mno-4byte-functions -mcallgraph-data
--mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim
--mlittle-endian -mbig-endian -m210 -m340 -mstack-increment
-@end smallexample
+@gccoptlist{
+-mhardlit, -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol
+-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol
+-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol
+-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol
+-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment}
+
+@emph{IA-64 Options}
+@gccoptlist{
+-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
+-mvolatile-asm-stop -mb-step -mregister-names -mno-sdata @gol
+-mconstant-gp -mauto-pic -minline-divide-min-latency @gol
+-minline-divide-max-throughput -mno-dwarf2-asm @gol
+-mfixed-range=@var{register range}}
@item Code Generation Options
@xref{Code Gen Options,,Options for Code Generation Conventions}.
-@smallexample
--fcall-saved-@var{reg} -fcall-used-@var{reg}
--fexceptions -funwind-tables -ffixed-@var{reg} -finhibit-size-directive
--fcheck-memory-usage -fprefix-function-name
--fno-common -fno-ident -fno-gnu-linker
--fpcc-struct-return -fpic -fPIC
--freg-struct-return -fshared-data -fshort-enums
--fshort-double -fvolatile -fvolatile-global -fvolatile-static
--fverbose-asm -fpack-struct -fstack-check
--fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym}
--fargument-alias -fargument-noalias
--fargument-noalias-global
--fleading-underscore
-@end smallexample
+@gccoptlist{
+-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol
+-fexceptions -funwind-tables -ffixed-@var{reg} @gol
+-finhibit-size-directive -finstrument-functions @gol
+-fcheck-memory-usage -fprefix-function-name @gol
+-fno-common -fno-ident -fno-gnu-linker @gol
+-fpcc-struct-return -fpic -fPIC @gol
+-freg-struct-return -fshared-data -fshort-enums @gol
+-fshort-double -fvolatile -fvolatile-global -fvolatile-static @gol
+-fverbose-asm -fpack-struct -fstack-check @gol
+-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
+-fargument-alias -fargument-noalias @gol
+-fargument-noalias-global @gol
+-fleading-underscore}
@end table
@menu
or preprocessed source.
* C Dialect Options:: Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
+* Language Independent Options:: Controlling how diagnostics should be
+ formatted.
* Warning Options:: How picky should the compiler be?
* Debugging Options:: Symbol tables, measurements, and debugging dumps.
* Optimize Options:: How much optimization?
For any given input file, the file name suffix determines what kind of
compilation is done:
-@table @code
+@table @gcctabopt
@item @var{file}.c
C source code which must be preprocessed.
Objective-C source code. Note that you must link with the library
@file{libobjc.a} to make an Objective-C program work.
+@item @var{file}.mi
+Objective-C source code which should not be preprocessed.
+
@item @var{file}.h
C header file (not to be compiled or linked).
@item @var{file}.cc
+@itemx @var{file}.cp
@itemx @var{file}.cxx
@itemx @var{file}.cpp
+@itemx @var{file}.c++
@itemx @var{file}.C
C++ source code which must be preprocessed. Note that in @samp{.cxx},
the last two letters must both be literally @samp{x}. Likewise,
@samp{.C} refers to a literal capital C.
+@item @var{file}.f
+@itemx @var{file}.for
+@itemx @var{file}.FOR
+Fortran source code which should not be preprocessed.
+
+@item @var{file}.F
+@itemx @var{file}.fpp
+@itemx @var{file}.FPP
+Fortran source code which must be preprocessed (with the traditional
+preprocessor).
+
+@item @var{file}.r
+Fortran source code which must be preprocessed with a RATFOR
+preprocessor (not included with GCC).
+
+@xref{Overall Options,,Options Controlling the Kind of Output, g77,
+Using and Porting GNU Fortran}, for more details of the handling of
+Fortran input files.
+
+@c FIXME: Descriptions of Java file types.
+@c @var{file}.java
+@c @var{file}.class
+@c @var{file}.zip
+@c @var{file}.jar
+
+@c GCC also knows about some suffixes for languages not yet included:
+@c Ada:
+@c @var{file}.ads
+@c @var{file}.adb
+@c @var{file}.ada
+@c Pascal:
+@c @var{file}.p
+@c @var{file}.pas
+
+@item @var{file}.ch
+@itemx @var{file}.chi
+CHILL source code (preprocessed with the traditional preprocessor).
+
@item @var{file}.s
Assembler code.
You can specify the input language explicitly with the @samp{-x} option:
-@table @code
+@table @gcctabopt
@item -x @var{language}
Specify explicitly the @var{language} for the following input files
(rather than letting the compiler choose a default based on the file
name suffix). This option applies to all following input files until
the next @samp{-x} option. Possible values for @var{language} are:
@example
-c objective-c c++
-c-header cpp-output c++-cpp-output
+c c-header cpp-output
+c++ c++-cpp-output
+objective-c objc-cpp-output
assembler assembler-with-cpp
+f77 f77-cpp-input ratfor
+java chill
@end example
+@c Also f77-version, for internal use only.
@item -x none
Turn off any specification of a language, so that subsequent files are
has not been used at all).
@item -pass-exit-codes
-Normally the @code{gcc} program will exit with the code of 1 if any
+Normally the @command{gcc} program will exit with the code of 1 if any
phase of the compiler returns a non-success return code. If you specify
-@samp{-pass-exit-codes}, the @code{gcc} program will instead return with
+@samp{-pass-exit-codes}, the @command{gcc} program will instead return with
numerically highest error produced by any phase that returned an error
indication.
@end table
If you only want some of the stages of compilation, you can use
-@samp{-x} (or filename suffixes) to tell @code{gcc} where to start, and
+@samp{-x} (or filename suffixes) to tell @command{gcc} where to start, and
one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
-@code{gcc} is to stop. Note that some combinations (for example,
-@samp{-x cpp-output -E} instruct @code{gcc} to do nothing at all.
+@command{gcc} is to stop. Note that some combinations (for example,
+@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
-@table @code
+@table @gcctabopt
@item -c
Compile or assemble the source files, but do not link. The linking
stage simply is not done. The ultimate output is in the form of an
@item --help
Print (on the standard output) a description of the command line options
-understood by @code{gcc}. If the @code{-v} option is also specified
-then @code{--help} will also be passed on to the various processes
-invoked by @code{gcc}, so that they can display the command line options
-they accept. If the @code{-W} option is also specified then command
+understood by @command{gcc}. If the @option{-v} option is also specified
+then @option{--help} will also be passed on to the various processes
+invoked by @command{gcc}, so that they can display the command line options
+they accept. If the @option{-W} option is also specified then command
line options which have no documentation associated with them will also
be displayed.
+
+@item --target-help
+Print (on the standard output) a description of target specific command
+line options for each tool.
@end table
@node Invoking G++
preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes
files with these names and compiles them as C++ programs even if you
call the compiler the same way as for compiling C programs (usually with
-the name @code{gcc}).
+the name @command{gcc}).
@findex g++
@findex c++
compiler that understands the C++ language---and under some
circumstances, you might want to compile programs from standard input,
or otherwise without a suffix that flags them as C++ programs.
-@code{g++} is a program that calls GCC with the default language
+@command{g++} is a program that calls GCC with the default language
set to C++, and automatically specifies linking against the C++
-library. On many systems, the script @code{g++} is also
-installed with the name @code{c++}.
+library. On many systems, @command{g++} is also
+installed with the name @command{c++}.
-@cindex invoking @code{g++}
+@cindex invoking @command{g++}
When you compile C++ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
The following options control the dialect of C (or languages derived
from C, such as C++ and Objective C) that the compiler accepts:
-@table @code
+@table @gcctabopt
@cindex ANSI support
+@cindex ISO support
@item -ansi
-In C mode, support all ANSI standard C programs. In C++ mode,
-remove GNU extensions that conflict with ANSI C++.
-@c shouldn't we be saying "ISO"?
+In C mode, support all ISO C89 programs. In C++ mode,
+remove GNU extensions that conflict with ISO C++.
-This turns off certain features of GCC that are incompatible with ANSI
-C (when compiling C code), or of ANSI standard C++ (when compiling C++ code),
+This turns off certain features of GCC that are incompatible with ISO
+C (when compiling C code), or of standard C++ (when compiling C++ code),
such as the @code{asm} and @code{typeof} keywords, and
predefined macros such as @code{unix} and @code{vax} that identify the
type of system you are using. It also enables the undesirable and
-rarely used ANSI trigraph feature. For the C compiler,
+rarely used ISO trigraph feature. For the C compiler,
it disables recognition of C++ style @samp{//} comments as well as
-the @code{inline} keyword. For the C++ compiler,
-@samp{-foperator-names} is enabled as well.
-
+the @code{inline} keyword.
The alternate keywords @code{__asm__}, @code{__extension__},
@code{__inline__} and @code{__typeof__} continue to work despite
-@samp{-ansi}. You would not want to use them in an ANSI C program, of
+@samp{-ansi}. You would not want to use them in an ISO C program, of
course, but it is useful to put them in header files that might be included
in compilations done with @samp{-ansi}. Alternate predefined macros
such as @code{__unix__} and @code{__vax__} are also available, with or
without @samp{-ansi}.
-The @samp{-ansi} option does not cause non-ANSI programs to be
+The @samp{-ansi} option does not cause non-ISO programs to be
rejected gratuitously. For that, @samp{-pedantic} is required in
addition to @samp{-ansi}. @xref{Warning Options}.
The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
option is used. 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
+ISO standard doesn't call for; this is to avoid interfering with any
programs that might use these names for other things.
-The functions @code{alloca}, @code{abort}, @code{exit}, and
-@code{_exit} are not builtin functions when @samp{-ansi} is used.
+Functions which would normally be builtin but do not have semantics
+defined by ISO C (such as @code{alloca} and @code{ffs}) are not builtin
+functions with @samp{-ansi} is used. @xref{Other Builtins,,Other
+built-in functions provided by GNU CC}, for details of the functions
+affected.
-@item -fstd=
+@item -std=
Determine the language standard. A value for this option must be provided;
possible values are
-@itemize @minus
+@table @samp
@item iso9899:1990
-Same as -ansi
+Same as @option{-ansi}
@item iso9899:199409
ISO C as modified in amend. 1
-@item iso9899:199x
-ISO C 9x
+@item iso9899:1999
+ISO C99. Note that this standard is not yet fully supported; see
+@w{@uref{http://gcc.gnu.org/c99status.html}} for more information.
@item c89
-same as -std=iso9899:1990
+same as @option{-std=iso9899:1990}
-@item c9x
-same as -std=iso9899:199x
+@item c99
+same as @option{-std=iso9899:1999}
@item gnu89
default, iso9899:1990 + gnu extensions
+@item gnu99
+iso9899:1999 + gnu extensions
+
+@item iso9899:199x
+same as @option{-std=iso9899:1999}, deprecated
+
+@item c9x
+same as @option{-std=iso9899:1999}, deprecated
+
@item gnu9x
-iso9899:199x + gnu extensions
-@end itemize
+same as @option{-std=gnu99}, deprecated
+
+@end table
Even when this option is not specified, you can still use some of the
features of newer standards in so far as they do not conflict with
previous C standards. For example, you may use @code{__restrict__} even
-when -fstd=c9x is not specified.
+when @option{-std=c99} is not specified.
+
+The @option{-std} options specifying some version of ISO C have the same
+effects as @option{-ansi}, except that features that were not in ISO C89
+but are in the specified version (for example, @samp{//} comments and
+the @code{inline} keyword in ISO C99) are not disabled.
+
+@xref{Standards,,Language Standards Supported by GCC}, for details of
+these standard versions.
@item -fno-asm
Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
In C++, this switch only affects the @code{typeof} keyword, since
@code{asm} and @code{inline} are standard keywords. You may want to
-use the @samp{-fno-gnu-keywords} flag instead, as it also disables the
-other, C++-specific, extension keywords such as @code{headof}.
+use the @samp{-fno-gnu-keywords} flag instead, which has the same
+effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
+switch only affects the @code{asm} and @code{typeof} keywords, since
+@code{inline} is a standard keyword in ISO C99.
@item -fno-builtin
@cindex builtin functions
-@findex abort
-@findex abs
-@findex alloca
-@findex cos
-@findex cosf
-@findex cosl
-@findex exit
-@findex _exit
-@findex fabs
-@findex fabsf
-@findex fabsl
-@findex ffs
-@findex labs
-@findex memcmp
-@findex memcpy
-@findex memset
-@findex sin
-@findex sinf
-@findex sinl
-@findex sqrt
-@findex sqrtf
-@findex sqrtl
-@findex strcmp
-@findex strcpy
-@findex strlen
-Don't recognize builtin functions that do not begin with @samp{__builtin_}
-as prefix. Currently, the functions affected include @code{abort},
-@code{abs}, @code{alloca}, @code{cos}, @code{cosf}, @code{cosl},
-@code{exit}, @code{_exit}, @code{fabs}, @code{fabsf}, @code{fabsl},
-@code{ffs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{memset},
-@code{sin}, @code{sinf}, @code{sinl}, @code{sqrt}, @code{sqrtf},
-@code{sqrtl}, @code{strcmp}, @code{strcpy}, and @code{strlen}.
+Don't recognize builtin functions that do not begin with
+@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in
+functions provided by GNU CC}, for details of the functions affected,
+including those which are not builtin functions when @option{-ansi} or
+@option{-std} options for strict ISO C conformance are used because they
+do not have an ISO standard meaning.
GCC normally generates special code to handle certain builtin functions
more efficiently; for instance, calls to @code{alloca} may become single
cannot set a breakpoint on those calls, nor can you change the behavior
of the functions by linking with a different library.
-The @samp{-ansi} option prevents @code{alloca}, @code{ffs} and @code{_exit}
-from being builtin functions, since these functions do not have an ANSI
-standard meaning.
-
@item -fhosted
@cindex hosted environment
not necessarily be at @code{main}. The most obvious example is an OS kernel.
This is equivalent to @samp{-fno-hosted}.
+@xref{Standards,,Language Standards Supported by GCC}, for details of
+freestanding and hosted environments.
+
@item -trigraphs
-Support ANSI C trigraphs. You don't want to know about this
-brain-damage. The @samp{-ansi} option implies @samp{-trigraphs}.
+Support ISO C trigraphs. You don't want to know about this
+brain-damage. The @option{-ansi} option (and @option{-std} options for
+strict ISO C conformance) implies @option{-trigraphs}.
@cindex traditional C language
@cindex C language, traditional
Out-of-range floating point literals are not an error.
@item
-Certain constructs which ANSI regards as a single invalid preprocessing
+Certain constructs which ISO regards as a single invalid preprocessing
number, such as @samp{0xe-0xd}, are treated as expressions instead.
@item
@cindex @code{longjmp} and automatic variables
@item
All automatic variables not declared @code{register} are preserved by
-@code{longjmp}. Ordinarily, GNU C follows ANSI C: automatic variables
+@code{longjmp}. Ordinarily, GNU C follows ISO C: automatic variables
not declared @code{volatile} may be clobbered.
@item
other purposes of its own.
You cannot use @samp{-traditional} if you include any header files that
-rely on ANSI C features. Some vendors are starting to ship systems with
-ANSI C header files and you cannot use @samp{-traditional} on such
+rely on ISO C features. Some vendors are starting to ship systems with
+ISO C header files and you cannot use @samp{-traditional} on such
systems to compile files that include any system headers.
The @samp{-traditional} option also enables @samp{-traditional-cpp},
@samp{-traditional}). If you need to write header files that work
differently depending on whether @samp{-traditional} is in use, by
testing both of these predefined macros you can distinguish four
-situations: GNU C, traditional GNU C, other ANSI C compilers, and other
+situations: GNU C, traditional GNU C, other ISO C compilers, and other
old C compilers. The predefined macro @code{__STDC_VERSION__} is also
not defined when you use @samp{-traditional}. @xref{Standard
Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
@item -fcond-mismatch
Allow conditional expressions with mismatched types in the second and
-third arguments. The value of such an expression is void.
+third arguments. The value of such an expression is void. This option
+is not supported for C++.
@item -funsigned-char
Let the type @code{char} be unsigned, like @code{unsigned char}.
other purposes of its own.
You cannot use @samp{-traditional} if you include any header files that
-rely on ANSI C features. Some vendors are starting to ship systems with
-ANSI C header files and you cannot use @samp{-traditional} on such
+rely on ISO C features. Some vendors are starting to ship systems with
+ISO C header files and you cannot use @samp{-traditional} on such
systems to compile files that include any system headers.
@item -fsigned-bitfields
than double precision. If you must use @samp{-traditional}, but want
to use single precision operations when the operands are single
precision, use this option. This option has no effect when compiling
-with ANSI or GNU C conventions (the default).
+with ISO or GNU C conventions (the default).
@item -fshort-wchar
Override the underlying type for @samp{wchar_t} to be @samp{short
Here is a list of options that are @emph{only} for compiling C++ programs:
-@table @code
+@table @gcctabopt
@item -fno-access-control
Turn off all access checking. This switch is mainly useful for working
around bugs in the access control code.
@samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows
@samp{$} by default on most target systems, but there are a few exceptions.)
Traditional C allowed the character @samp{$} to form part of
-identifiers. However, ANSI C and C++ forbid @samp{$} in identifiers.
+identifiers. However, ISO C and C++ forbid @samp{$} in identifiers.
@item -fno-elide-constructors
The C++ standard allows an implementation to omit creating a temporary
@itemx -fno-for-scope
If -ffor-scope is specified, the scope of variables declared in
a @i{for-init-statement} is limited to the @samp{for} loop itself,
-as specified by the draft C++ standard.
+as specified by the C++ standard.
If -fno-for-scope is specified, the scope of variables declared in
a @i{for-init-statement} extends to the end of the enclosing scope,
as was the case in old versions of gcc, and other (traditional)
otherwise be invalid, or have different behavior.
@item -fno-gnu-keywords
-Do not recognize @code{classof}, @code{headof}, or @code{typeof} as a
-keyword, so that code can use these words as identifiers. You can use
-the keywords @code{__classof__}, @code{__headof__}, and
-@code{__typeof__} instead. @samp{-ansi} implies
-@samp{-fno-gnu-keywords}.
-
-@item -fguiding-decls
-Treat a function declaration with the same type as a potential function
-template instantiation as though it declares that instantiation, not a
-normal function. If a definition is given for the function later in the
-translation unit (or another translation unit if the target supports
-weak symbols), that definition will be used; otherwise the template will
-be instantiated. This behavior reflects the C++ language prior to
-September 1996, when guiding declarations were removed.
-
-This option implies @samp{-fname-mangling-version-0}, and will not work
-with other name mangling versions. Like all options that change the
-ABI, all C++ code, @emph{including libgcc.a} must be built with the same
-setting of this option.
+Do not recognize @code{typeof} as a keyword, so that code can use this
+word as an identifier. You can use the keyword @code{__typeof__} instead.
+@samp{-ansi} implies @samp{-fno-gnu-keywords}.
@item -fhonor-std
Treat the @code{namespace std} as a namespace, instead of ignoring
Like all options that change the ABI, all C++ code, @emph{including
libgcc} must be built with the same setting of this option.
-@item -fmessage-length=@var{n}
-Try to format error messages so that they fit on lines of about @var{n}
-characters. The default is 72 characters. If @var{n} is zero, then no
-line-wrapping will be done; each error message will appear on a single
-line.
-
@item -fno-implicit-templates
Never emit code for non-inline templates which are instantiated
implicitly (i.e. by use); only emit code for explicit instantiations.
The default is to handle inlines differently so that compiles with and
without optimization will need the same set of explicit instantiations.
-@item -finit-priority
-Support @samp{__attribute__ ((init_priority (n)))} for controlling the
-order of initialization of file-scope objects. On ELF targets, this
-requires GNU ld 2.10 or later.
-
@item -fno-implement-inlines
To save space, do not emit out-of-line copies of inline functions
controlled by @samp{#pragma implementation}. This will cause linker
errors if these functions are not inlined everywhere they are called.
@item -fms-extensions
-Disable pedwarns about constructs used in MFC, such as implicit int and
-getting a pointer to member function via non-standard syntax.
+Disable pedantic warnings about constructs used in MFC, such as implicit
+int and getting a pointer to member function via non-standard syntax.
@item -fname-mangling-version-@var{n}
Control the way in which names are mangled. Version 0 is compatible
Like all options that change the ABI, all C++ code, @emph{including
libgcc} must be built with the same setting of this option.
-@item -foperator-names
-Recognize the operator name keywords @code{and}, @code{bitand},
+@item -fno-operator-names
+Do not treat the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
-synonyms for the symbols they refer to. @samp{-ansi} implies
-@samp{-foperator-names}.
+synonyms as keywords.
@item -fno-optional-diags
Disable diagnostics that the standard says a compiler does not need to
exception handling uses the same information, but it will generate it as
needed.
-@item -fstrict-prototype
-Within an @samp{extern "C"} linkage specification, treat a function
-declaration with no arguments, such as @samp{int foo ();}, as declaring
-the function to take no arguments. Normally, such a declaration means
-that the function @code{foo} can take any combination of arguments, as
-in C. @samp{-pedantic} implies @samp{-fstrict-prototype} unless
-overridden with @samp{-fno-strict-prototype}.
-
-Specifying this option will also suppress implicit declarations of
-functions.
-
-This flag no longer affects declarations with C++ linkage.
-
@item -fsquangle
@itemx -fno-squangle
@samp{-fsquangle} will enable a compressed form of name mangling for
In addition, these optimization, warning, and code generation options
have meanings only for C++ programs:
-@table @code
+@table @gcctabopt
@item -fno-default-inline
Do not assume @samp{inline} for functions defined inside a class scope.
@xref{Optimize Options,,Options That Control Optimization}. Note that these
The following @samp{-W@dots{}} options are not affected by @samp{-Wall}.
-@table @code
+@table @gcctabopt
@item -Weffc++ (C++ only)
Warn about violations of various style guidelines from Scott Meyers'
@cite{Effective C++} books. If you use this option, you should be aware
function. Because this non-conforming behavior is no longer the default
behavior for g++, @samp{-Wnon-template-friend} allows the compiler to
check existing code for potential trouble spots, and is on by default.
-This new compiler behavior can also be turned off with the flag
-@samp{-fguiding-decls}, which activates the older, non-specification
-compiler code, or with @samp{-Wno-non-template-friend} which keeps the
-conformant compiler code but disables the helpful warning.
+This new compiler behavior can be turned off with
+@samp{-Wno-non-template-friend} which keeps the conformant compiler code
+but disables the helpful warning.
@item -Wold-style-cast (C++ only)
Warn if an old-style (C-style) cast is used within a C++ program. The
(const A&);}, while cfront will use the user-defined @samp{operator =}.
@end table
+@node Language Independent Options
+@section Options to Control Diagnostic Messages Formatting
+@cindex options to control diagnostics formatting
+@cindex diagnostic messages
+@cindex message formatting
+
+Traditionally, diagnostic messages have been formatted irrespective of
+the output device's aspect (e.g. its width, ...). The options described
+below can be used to control the diagnostic messages formatting
+algorithm, e.g. how many characters per line, how often source location
+information should be reported. Right now, only the C++ front-end can
+honor these options. However it is expected, in the near future, that
+the remaining front-ends would be able to digest them correctly.
+
+@table @gcctabopt
+@item -fmessage-length=@var{n}
+Try to format error messages so that they fit on lines of about @var{n}
+characters. The default is 72 characters for g++ and 0 for the rest of
+the front-ends supported by GCC. If @var{n} is zero, then no
+line-wrapping will be done; each error message will appear on a single
+line.
+
+@item -fdiagnostics-show-location=once
+Only meaningful in line-wrapping mode. Instructs the diagnostic messages
+reporter to emit @emph{once} source location information; that is, in
+case the message is too long to fit on a single physical line and has to
+be wrapped, the source location won't be emitted (as prefix) again,
+over and over, in subsequent continuation lines. This is the default
+behaviour.
+
+@item -fdiagnostics-show-location=every-line
+Only meaningful in line-wrapping mode. Instructs the diagnostic
+messages reporter to emit the same source location information (as
+prefix) for physical lines that result from the process of breaking a
+a message which is too long to fit on a single line.
+
+@end table
+
@node Warning Options
@section Options to Request or Suppress Warnings
@cindex options to control warnings
These options control the amount and kinds of warnings produced by GCC:
-@table @code
+@table @gcctabopt
@cindex syntax checking
@item -fsyntax-only
Check the code for syntax errors, but don't do anything beyond that.
@item -pedantic
-Issue all the warnings demanded by strict ANSI C and ISO C++;
-reject all programs that use forbidden extensions.
-
-Valid ANSI C and ISO C++ programs should compile properly with or without
-this option (though a rare few will require @samp{-ansi}). However,
+Issue all the warnings demanded by strict ISO C and ISO C++;
+reject all programs that use forbidden extensions, and some other
+programs that do not follow ISO C and ISO C++. For ISO C, follows the
+version of the ISO C standard specified by any @samp{-std} option used.
+
+Valid ISO C and ISO C++ programs should compile properly with or without
+this option (though a rare few will require @option{-ansi} or a
+@option{-std} option specifying the required version of ISO C). However,
without this option, certain GNU extensions and traditional C and C++
features are supported as well. With this option, they are rejected.
these escape routes; application programs should avoid them.
@xref{Alternate Keywords}.
-This option is not intended to be @i{useful}; it exists only to satisfy
-pedants who would otherwise claim that GCC fails to support the ANSI
-standard.
-
-Some users try to use @samp{-pedantic} to check programs for strict ANSI
+Some users try to use @samp{-pedantic} to check programs for strict ISO
C conformance. They soon find that it does not do quite what they want:
-it finds some non-ANSI practices, but not all---only those for which
-ANSI C @emph{requires} a diagnostic.
+it finds some non-ISO practices, but not all---only those for which
+ISO C @emph{requires} a diagnostic, and some others for which
+diagnostics have been added.
-A feature to report any failure to conform to ANSI C might be useful in
+A feature to report any failure to conform to ISO C might be useful in
some instances, but would require considerable additional work and would
be quite different from @samp{-pedantic}. We don't have plans to
support such a feature in the near future.
@item -Wformat
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
the arguments supplied have types appropriate to the format string
-specified.
+specified, and that the conversions specified in the format string make
+sense. This includes standard functions, and others specified by format
+attributes (@pxref{Function Attributes}), in the @code{printf},
+@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
+not in the C standard) families.
+
+The formats are checked against the format features supported by GNU
+libc version 2.2. These include all ISO C89 and C99 features, as well
+as features from the Single Unix Specification and some BSD and GNU
+extensions. Other library implementations may not support all these
+features; GCC does not support warning about features that go beyond a
+particular library's limitations. However, if @samp{-pedantic} is used
+with @samp{-Wformat}, warnings will be given about format features not
+in the selected standard version (but not for @code{strfmon} formats,
+since those are not in any version of the C standard). @xref{C Dialect
+Options,,Options Controlling C Dialect}.
+
+@samp{-Wformat} is included in @samp{-Wall}. For more control over some
+aspects of format checking, the options @samp{-Wno-format-y2k},
+@samp{-Wno-format-extra-args}, @samp{-Wformat-nonliteral},
+@samp{-Wformat-security} and @samp{-Wformat=2} are available, but are
+not included in @samp{-Wall}.
+
+@item -Wno-format-y2k
+If @samp{-Wformat} is specified, do not warn about @code{strftime}
+formats which may yield only a two-digit year.
+
+@item -Wno-format-extra-args
+If @samp{-Wformat} is specified, do not warn about excess arguments to a
+@code{printf} or @code{scanf} format function. The C standard specifies
+that such arguments are ignored.
+
+@item -Wformat-nonliteral
+If @samp{-Wformat} is specified, also warn if the format string is not a
+string literal and so cannot be checked, unless the format function
+takes its format arguments as a @code{va_list}.
+
+@item -Wformat-security
+If @samp{-Wformat} is specified, also warn about uses of format
+functions that represent possible security problems. At present, this
+warns about calls to @code{printf} and @code{scanf} functions where the
+format string is not a string literal and there are no format arguments,
+as in @code{printf (foo);}. This may be a security hole if the format
+string came from untrusted input and contains @samp{%n}. (This is
+currently a subset of what @samp{-Wformat-nonliteral} warns about, but
+in future warnings may be added to @samp{-Wformat-security} that are not
+included in @samp{-Wformat-nonliteral}.)
+
+@item -Wformat=2
+Enable @samp{-Wformat} plus format checks not included in
+@samp{-Wformat}. Currently equivalent to @samp{-Wformat
+-Wformat-nonliteral -Wformat-security}.
@item -Wimplicit-int
Warn when a declaration does not specify a type.
@}
@end smallexample
+@item -Wsequence-point
+Warn about code that may have undefined semantics because of violations
+of sequence point rules in the C standard.
+
+The C standard defines the order in which expressions in a C program are
+evaluated in terms of @dfn{sequence points}, which represent a partial
+ordering between the execution of parts of the program: those executed
+before the sequence point, and those executed after it. These occur
+after the evaluation of a full expression (one which is not part of a
+larger expression), after the evaluation of the first operand of a
+@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
+function is called (but after the evaluation of its arguments and the
+expression denoting the called function), and in certain other places.
+Other than as expressed by the sequence point rules, the order of
+evaluation of subexpressions of an expression is not specified. All
+these rules describe only a partial order rather than a total order,
+since, for example, if two functions are called within one expression
+with no sequence point between them, the order in which the functions
+are called is not specified. However, the standards committee have
+ruled that function calls do not overlap.
+
+It is not specified when between sequence points modifications to the
+values of objects take effect. Programs whose behavior depends on this
+have undefined behavior; the C standard specifies that ``Between the
+previous and next sequence point an object shall have its stored value
+modified at most once by the evaluation of an expression. Furthermore,
+the prior value shall be read only to determine the value to be
+stored.''. If a program breaks these rules, the results on any
+particular implementation are entirely unpredictable.
+
+Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
+= b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not
+diagnosed by this option, and it may give an occasional false positive
+result, but in general it has been found fairly effective at detecting
+this sort of problem in programs.
+
+The present implementation of this option only works for C programs. A
+future implementation may also work for C++ programs.
+
+There is some controversy over the precise meaning of the sequence point
+rules in subtle cases. Alternative formal definitions may be found in
+Clive Feather's ``Annex S''
+@w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n925.htm}} and in
+Michael Norrish's thesis
+@w{@uref{http://www.cl.cam.ac.uk/users/mn200/PhD/thesis-report.ps.gz}}.
+Other discussions are by Raymond Mak
+@w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n926.htm}} and
+D. Hugh Redelmeier
+@w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n927.htm}}.
+
@item -Wreturn-type
-Warn whenever a function is defined with a return-type that defaults
-to @code{int}. Also warn about any @code{return} statement with no
-return-value in a function whose return-type is not @code{void}.
+Warn whenever a function is defined with a return-type that defaults to
+@code{int}. Also warn about any @code{return} statement with no
+return-value in a function whose return-type is not @code{void}.
+
+For C++, a function without return type always produces a diagnostic
+message, even when @samp{-Wno-return-type} is specified. The only
+exceptions are @samp{main} and functions defined in system headers.
@item -Wswitch
Warn whenever a @code{switch} statement has an index of enumeral type
provoke warnings when this option is used.
@item -Wtrigraphs
-Warn if any trigraphs are encountered (assuming they are enabled).
+Warn if any trigraphs are encountered that might change the meaning of
+the program (trigraphs within comments are not warned about).
-@item -Wunused
-Warn whenever a variable is unused aside from its declaration,
-whenever a function is declared static but never defined, whenever a
-label is declared but not used, and whenever a statement computes a
-result that is explicitly not used.
+@item -Wunused-function
+Warn whenever a static function is declared but not defined or a
+non\-inline static function is unused.
-In order to get a warning about an unused function parameter, you must
-specify both @samp{-W} and @samp{-Wunused}.
+@item -Wunused-label
+Warn whenever a label is declared but not used.
-To suppress this warning for an expression, simply cast it to void. For
-unused variables, parameters and labels, use the @samp{unused} attribute
+To suppress this warning use the @samp{unused} attribute
(@pxref{Variable Attributes}).
+@item -Wunused-parameter
+Warn whenever a function parameter is unused aside from its declaration.
+
+To suppress this warning use the @samp{unused} attribute
+(@pxref{Variable Attributes}).
+
+@item -Wunused-variable
+Warn whenever a local variable or non-constant static variable is unused
+aside from its declaration
+
+To suppress this warning use the @samp{unused} attribute
+(@pxref{Variable Attributes}).
+
+@item -Wunused-value
+Warn whenever a statement computes a result that is explicitly not used.
+
+To suppress this warning cast the expression to @samp{void}.
+
+@item -Wunused
+All all the above @samp{-Wunused} options combined.
+
+In order to get a warning about an unused function parameter, you must
+either specify @samp{-W -Wunused} or separately specify
+@samp{-Wunused-parameter}.
+
@item -Wuninitialized
Warn if an automatic variable is used without first being initialized or
if a variable may be clobbered by a @code{setjmp} call.
This has no bug because @code{save_y} is used only if it is set.
@cindex @code{longjmp} warnings
-This option also warns when a nonvolatile automatic variable might be
+This option also warns when a non-volatile automatic variable might be
changed by a call to @code{longjmp}. These warnings as well are possible
only in optimizing compilation.
warnings about constructions that some users consider questionable, and
that are easy to avoid (or modify to prevent the warning), even in
conjunction with macros.
+
+@item -Wsystem-headers
+@cindex warnings from system headers
+@cindex system headers, warnings from
+Print warning messages for constructs found in system header files.
+Warnings from system headers are normally suppressed, on the assumption
+that they usually do not indicate real problems and would only make the
+compiler output harder to read. Using this command line option tells
+GCC to emit warnings from system headers as if they occurred in user
+code. However, note that using @samp{-Wall} in conjunction with this
+option will @emph{not} warn about unknown pragmas in system
+headers---for that, @samp{-Wunknown-pragmas} must also be used.
@end table
The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
in some cases, and there is no simple way to modify the code to suppress
the warning.
-@table @code
+@table @gcctabopt
@item -W
Print extra warning messages for these events:
Storage-class specifiers like @code{static} are not the first things in
a declaration. According to the C Standard, this usage is obsolescent.
+@item
+The return type of a function has a type qualifier such as @code{const}.
+Such a type qualifier has no effect, since the value returned by a
+function is not an lvalue. (But don't warn about the GNU extension of
+@code{volatile void} return types. That extension will be warned about
+if @samp{-pedantic} is specified.)
+
@item
If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
arguments.
@item -Wtraditional (C only)
Warn about certain constructs that behave differently in traditional and
-ANSI C.
+ISO C.
@itemize @bullet
@item
Macro arguments occurring within string constants in the macro body.
These would substitute the argument in traditional C, but are part of
-the constant in ANSI C.
+the constant in ISO C.
@item
A function declared external in one block and then used after the end of
This construct is not accepted by some traditional C compilers.
@item
-The ANSI type of an integer constant has a different width or
+The ISO type of an integer constant has a different width or
signedness from its traditional type. This warning is only issued if
the base of the constant is ten. I.e. hexadecimal or octal values, which
typically represent bit patterns, are not warned about.
@item
-Usage of ANSI string concatenation is detected.
+Usage of ISO string concatenation is detected.
+
+@item
+A function macro appears without arguments.
+
+@item
+The unary plus operator.
+
+@item
+Initialization of automatic aggregates.
+
+@item
+Identifier conflicts with labels. Traditional C lacks a separate
+namespace for labels.
+
+@item
+Initialization of unions. If the initializer is zero, the warning is
+omitted. This is done under the assumption that the zero initializer in
+user code appears conditioned on e.g. @code{__STDC__} to avoid missing
+initializer warnings and relies on default initialization to zero in the
+traditional C case.
+
+@item
+The `U' integer constant suffix, or the `F' or `L' floating point
+constant suffixes. (Traditonal C does support the `L' suffix on integer
+constants.) Note, these suffixes appear in macros defined in the system
+headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
+Use of these macros can lead to spurious warnings as they do not
+necessarily reflect whether the code in question is any less portable to
+traditional C given that suitable backup definitions are provided.
@end itemize
@item -Wundef
Note these are only possible candidates, not absolute ones. Care should
be taken to manually verify functions actually do not ever return before
adding the @code{noreturn} attribute, otherwise subtle code generation
-bugs could be introduced.
+bugs could be introduced. You will not get a warning for @code{main} in
+hosted C environments.
+
+@item -Wmissing-format-attribute
+If @samp{-Wformat} is enabled, also warn about functions which might be
+candidates for @code{format} attributes. Note these are only possible
+candidates, not absolute ones. GCC will guess that @code{format}
+attributes might be appropriate for any function that calls a function
+like @code{vprintf} or @code{vscanf}, but this might not always be the
+case, and some functions for which @code{format} attributes are
+appropriate may not be detected. This option has no effect unless
+@samp{-Wformat} is enabled (possibly by @samp{-Wall}).
@item -Wpacked
Warn if a structure is given the packed attribute, but the packed
@samp{-Wlong-long} and @samp{-Wno-long-long} are taken into account
only when @samp{-pedantic} flag is used.
+@item -Wdisabled-optimization
+Warn if a requested optimization pass is disabled. This warning does
+not generally indicate that there is anything wrong with your code; it
+merely indicates that GCC's optimizers were unable to handle the code
+effectively. Often, the problem is that your code is too big or too
+complex; GCC will refuse to optimize programs when the optimization
+itself is likely to take inordinate amounts of time.
+
@item -Werror
Make all warnings into errors.
@end table
GCC has various special options that are used for debugging
either your program or GCC:
-@table @code
+@table @gcctabopt
@item -g
Produce debugging information in the operating system's native format
(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
@item __bb_trace__
Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
The file will be compressed using the program @samp{gzip}, which must
-exist in your @code{PATH}. On systems without the @samp{popen}
+exist in your @env{PATH}. On systems without the @samp{popen}
function, the file will be named @file{bbtrace} and will not be
compressed. @strong{Profiling for even a few seconds on these systems
will produce a very large file.} Note: @code{__bb_hidecall__} and
(@pxref{Gcov,, @code{gcov}: a GCC Test Coverage Program}).
The data file names begin with the name of your source file:
-@table @code
+@table @gcctabopt
@item @var{sourcename}.bb
A mapping from basic blocks to line numbers, which @code{gcov} uses to
associate basic block execution counts with line numbers.
Says to make debugging dumps during compilation at times specified by
@var{letters}. This is used for debugging the compiler. The file names
for most of the dumps are made by appending a pass number and a word to
-the source file name (e.g. @file{foo.c.00.rtl} or @file{foo.c.01.jump}).
+the source file name (e.g. @file{foo.c.00.rtl} or @file{foo.c.01.sibling}).
Here are the possible letters for use in @var{letters}, and their meanings:
@table @samp
@item A
Annotate the assembler output with miscellaneous debugging information.
@item b
-Dump after computing branch probabilities, to @file{@var{file}.07.bp}.
+Dump after computing branch probabilities, to @file{@var{file}.11.bp}.
+@item B
+Dump after block reordering, to @file{@var{file}.26.bbro}.
@item c
-Dump after instruction combination, to the file @file{@var{file}.09.combine}.
+Dump after instruction combination, to the file @file{@var{file}.14.combine}.
+@item C
+Dump after the first if conversion, to the file @file{@var{file}.15.ce}.
@item d
-Dump after delayed branch scheduling, to @file{@var{file}.19.dbr}.
+Dump after delayed branch scheduling, to @file{@var{file}.29.dbr}.
@item D
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
-@item F
-Dump after purging ADDRESSOF, to @file{@var{file}.03.addressof}.
+@item e
+Dump after SSA optimizations, to @file{@var{file}.05.ssa} and
+@file{@var{file}.06.ussa}.
+@item E
+Dump after the second if conversion, to @file{@var{file}.24.ce2}.
@item f
-Dump after flow analysis, to @file{@var{file}.08.flow}.
+Dump after life analysis, to @file{@var{file}.13.life}.
+@item F
+Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.04.addressof}.
@item g
-Dump after global register allocation, to @file{@var{file}.13.greg}.
+Dump after global register allocation, to @file{@var{file}.19.greg}.
+@item o
+Dump after post-reload CSE and other optimizations, to @file{@var{file}.20.postreload}.
@item G
-Dump after GCSE, to @file{@var{file}.04.gcse}.
+Dump after GCSE, to @file{@var{file}.08.gcse}.
+@item i
+Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
@item j
-Dump after first jump optimization, to @file{@var{file}.01.jump}.
+Dump after the first jump optimization, to @file{@var{file}.02.jump}.
@item J
-Dump after last jump optimization, to @file{@var{file}.17.jump2}.
+Dump after the last jump optimization, to @file{@var{file}.27.jump2}.
@item k
-Dump after conversion from registers to stack, to @file{@var{file}.20.stack}.
+Dump after conversion from registers to stack, to @file{@var{file}.29.stack}.
@item l
-Dump after local register allocation, to @file{@var{file}.12.lreg}.
+Dump after local register allocation, to @file{@var{file}.18.lreg}.
@item L
-Dump after loop optimization, to @file{@var{file}.05.loop}.
+Dump after loop optimization, to @file{@var{file}.09.loop}.
@item M
Dump after performing the machine dependent reorganisation pass, to
-@file{@var{file}.18.mach}.
+@file{@var{file}.28.mach}.
+@item n
+Dump after register renumbering, to @file{@var{file}.23.rnreg}.
@item N
-Dump after the register move pass, to @file{@var{file}.10.regmove}.
+Dump after the register move pass, to @file{@var{file}.16.regmove}.
@item r
Dump after RTL generation, to @file{@var{file}.00.rtl}.
@item R
Dump after the second instruction scheduling pass, to
-@file{@var{file}.16.sched2}.
+@file{@var{file}.25.sched2}.
@item s
Dump after CSE (including the jump optimization that sometimes follows
-CSE), to @file{@var{file}.02.cse}.
+CSE), to @file{@var{file}.03.cse}.
@item S
Dump after the first instruction scheduling pass, to
-@file{@var{file}.11.sched}.
+@file{@var{file}.17.sched}.
@item t
Dump after the second CSE pass (including the jump optimization that
-sometimes follows CSE), to @file{@var{file}.06.cse2}.
+sometimes follows CSE), to @file{@var{file}.10.cse2}.
+@item w
+Dump after the second flow pass, to @file{@var{file}.21.flow2}.
+@item X
+Dump after dead code elimination, to @file{@var{file}.06.dce}.
+@item z
+Dump after the peephole pass, to @file{@var{file}.22.peephole2}.
@item a
Produce all the dumps listed above.
@item m
Annotate the assembler output with a comment indicating which
pattern and alternative was used. The length of each instruction is
also printed.
+@item P
+Dump the RTL in the assembler output as a comment before each instruction.
+Also turns on @samp{-dp} annotation.
@item v
For each of the other indicated dump files (except for
@file{@var{file}.00.rtl}), dump a representation of the control flow graph
-suitible for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
-@item w
-Dump after the second flow pass to @file{@var{file}.14.flow2}.
+suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
@item x
Just generate RTL for a function instead of compiling it. Usually used
with @samp{r}.
@item y
Dump debugging information during parsing, to standard error.
-@item z
-Dump after the peephole2 pass to @file{@var{file}.15.peephole2}.
@end table
@item -fdump-unnumbered
When doing debugging dumps (see -d option above), suppress instruction
numbers and line number note output. This makes it more feasible to
-use diff on debugging dumps for compiler invokations with different
+use diff on debugging dumps for compiler invocations with different
options, in particular with and without -g.
-@item -fdump-translation-unit-@var{file} (C++ only)
+@item -fdump-translation-unit-@var{file} (C and C++ only)
Dump a representation of the tree structure for the entire translation
unit to @var{file}.
Store the usual ``temporary'' intermediate files permanently; place them
in the current directory and name them based on the source file. Thus,
compiling @file{foo.c} with @samp{-c -save-temps} would produce files
-@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.
+@file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a
+preprocessed @file{foo.i} output file even though the compiler now
+normally uses an integrated preprocessor.
@item -time
Report the CPU time taken by each subprocess in the compilation
-sequence. For C source files, this is the preprocessor, compiler
-proper, and assembler. The output looks like this:
+sequence. For C source files, this is the compiler proper and assembler
+(plus the linker if linking is done). The output looks like this:
@smallexample
-# cpp 0.04 0.04
# cc1 0.12 0.01
# as 0.00 0.01
@end smallexample
program and library directories gcc will search---and don't do anything else.
This is useful when gcc prints the error message
-@samp{installation problem, cannot exec cpp: No such file or directory}.
-To resolve this you either need to put @file{cpp} and the other compiler
+@samp{installation problem, cannot exec cpp0: No such file or directory}.
+To resolve this you either need to put @file{cpp0} and the other compiler
components where gcc expects to find them, or you can set the environment
-variable @code{GCC_EXEC_PREFIX} to the directory where you installed them.
+variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
Don't forget the trailing '/'.
@xref{Environment Variables}.
@end table
These options control various sorts of optimizations:
-@table @code
+@table @gcctabopt
@item -O
@itemx -O1
Optimize. Optimizing compilation takes somewhat more time, and a lot
As compared to @samp{-O}, this option increases both compilation time
and the performance of the generated code.
-@samp{-O2} turns on all optional optimizations except for loop unrolling
-and function inlining. It also turns on the @samp{-fforce-mem} option
-on all machines and frame pointer elimination on machines where doing so
-does not interfere with debugging.
+@samp{-O2} turns on all optional optimizations except for loop unrolling,
+function inlining, and register renaming. It also turns on the
+@samp{-fforce-mem} option on all machines and frame pointer elimination
+on machines where doing so does not interfere with debugging.
@item -O3
Optimize yet more. @samp{-O3} turns on all optimizations specified by
-@samp{-O2} and also turns on the @samp{inline-functions} option.
+@samp{-O2} and also turns on the @samp{-finline-functions} and
+@samp{-frename-registers} options.
@item -O0
Do not optimize.
You can figure out the other form by either removing @samp{no-} or
adding it.
-@table @code
+@table @gcctabopt
@item -ffloat-store
Do not store floating point variables in registers, and inhibit other
options that might change whether a floating point value is taken from a
in many functions. @strong{It also makes debugging impossible on
some machines.}
-@item -foptimize-sibling-calls
-Optimize sibling and tail recursive calls.
-
@ifset INTERNALS
On some machines, such as the Vax, this flag has no effect, because
the standard calling sequence automatically handles the frame pointer
Usage, gcc.info, Using and Porting GCC}.@refill
@end ifclear
+@item -foptimize-sibling-calls
+Optimize sibling and tail recursive calls.
+
+@item -ftrapv
+This option generates traps for signed overflow on addition, subtraction,
+multiplication operations.
+
@item -fno-inline
Don't pay attention to the @code{inline} keyword. Normally this option
is used to keep the compiler from expanding any functions inline.
performed when this option is not used.
@item -ffast-math
-This option allows GCC to violate some ANSI or IEEE rules and/or
+This option allows GCC to violate some ISO or IEEE rules and/or
specifications in the interest of optimizing code for speed. For
example, it allows the compiler to assume arguments to the @code{sqrt}
function are non-negative numbers and that no floating-point values
This option should never be turned on by any @samp{-O} option since
it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ANSI rules/specifications for
+an exact implementation of IEEE or ISO rules/specifications for
math functions.
@item -fno-math-errno
You can use the following flags in the rare cases when ``fine-tuning''
of optimizations to be performed is desired.
-@table @code
+@table @gcctabopt
@item -fstrength-reduce
Perform the optimizations of loop strength reduction and
elimination of iteration variables.
-fno-delete-null-pointer-checks to disable this optimizing for programs
which depend on that behavior.
-
@item -fexpensive-optimizations
Perform a number of minor optimizations that are relatively expensive.
-@item -foptimize-register-moves
+@item -foptimize-register-move
@itemx -fregmove
Attempt to reassign register numbers in move instructions and as
operands of other simple instructions in order to maximize the amount of
instructions. GCC enables this optimization by default with @samp{-O2}
or higher.
-Note @code{-fregmove} and @code{-foptimize-register-moves} are the same
+Note @option{-fregmove} and @option{-foptimize-register-move} are the same
optimization.
@item -fdelayed-branch
they have helped determine the efficacy of various
approaches to improving loop optimizations.
-Please let us (@code{gcc@@gcc.gnu.org} and @code{fortran@@gnu.org})
+Please let us (@w{@email{gcc@@gcc.gnu.org}} and @w{@email{fortran@@gnu.org}})
know how use of these options affects
the performance of your production code.
We're very interested in code that runs @emph{slower}
@item -fbranch-probabilities
After running a program compiled with @samp{-fprofile-arcs}
(@pxref{Debugging Options,, Options for Debugging Your Program or
-@code{gcc}}), you can compile it a second time using
+@command{gcc}}), you can compile it a second time using
@samp{-fbranch-probabilities}, to improve optimizations based on
guessing the path a branch might take.
exactly determine which path is taken more often.
@end ifset
+@item -fno-guess-branch-probability
+Sometimes gcc will opt to guess branch probabilities when none are
+available from either profile directed feedback (@samp{-fprofile-arcs})
+or @samp{__builtin_expect}. In a hard real-time system, people don't
+want different runs of the compiler to produce code that has different
+behavior; minimizing non-determinism is of paramount import. This
+switch allows users to reduce non-determinism, possibly at the expense
+of inferior optimization.
+
@item -fstrict-aliasing
Allows the compiler to assume the strictest aliasing rules applicable to
the language being compiled. For C (and C++), this activates
If @var{n} is not specified, use a machine-dependent default.
+@item -fssa
+Perform optimizations in static single assignment form. Each function's
+flow graph is translated into SSA form, optimizations are performed, and
+the flow graph is translated back from SSA form. User's should not
+specify this option, since it is not yet ready for production use.
+
+@item -fdce
+Perform dead-code elimination in SSA form. Requires @samp{-fssa}. Like
+@samp{-fssa}, this is an experimental feature.
+
+@item -fsingle-precision-constant
+Treat floating point constant as single precision constant instead of
+implicitly converting it to double precision constant.
+
+@item -frename-registers
+Attempt to avoid false dependancies in scheduled code by making use
+of registers left over after register allocation. This optimization
+will most benefit processors with lots of registers. It can, however,
+make debugging impossible, since variables will no longer stay in
+a ``home register''.
@end table
@node Preprocessor Options
they cause the preprocessor output to be unsuitable for actual
compilation.
-@table @code
+@table @gcctabopt
@item -include @var{file}
Process @var{file} as input before processing the regular input file.
In effect, the contents of @var{file} are compiled first. Any @samp{-D}
processing the regular input file. Because the output generated from
@var{file} is discarded, the only effect of @samp{-imacros @var{file}}
is to make the macros defined in @var{file} available for use in the
-main input.
-
-Any @samp{-D} and @samp{-U} options on the command line are always
-processed before @samp{-imacros @var{file}}, regardless of the order in
-which they are written. All the @samp{-include} and @samp{-imacros}
-options are processed in the order in which they are written.
+main input. All the @samp{-include} and @samp{-imacros} options are
+processed in the order in which they are written.
@item -idirafter @var{dir}
@cindex second include path
By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
search path to only those directories you specify explicitly.
+@item -remap
+@findex -remap
+When searching for a header file in a directory, remap file names if a
+file named @file{header.gcc} exists in that directory. This can be used
+to work around limitations of file systems with file name restrictions.
+The @file{header.gcc} file should contain a series of lines with two
+tokens on each line: the first token is the name to map, and the second
+token is the actual name to use.
+
@item -undef
Do not predefine any nonstandard macros. (Including architecture flags).
@cindex make
@cindex dependencies, make
@item -M
-Tell the preprocessor to output a rule suitable for @code{make}
-describing the dependencies of each object file. For each source file,
-the preprocessor outputs one @code{make}-rule whose target is the object
-file name for that source file and whose dependencies are all the
-@code{#include} header files it uses. This rule may be a single line or
-may be continued with @samp{\}-newline if it is long. The list of rules
-is printed on standard output instead of the preprocessed C program.
+@findex -M
+Instead of outputting the result of preprocessing, output a rule
+suitable for @code{make} describing the dependencies of the main source
+file. The preprocessor outputs one @code{make} rule containing the
+object file name for that source file, a colon, and the names of all the
+included files. If there are many included files then the rule is split
+into several lines using @samp{\}-newline.
@samp{-M} implies @samp{-E}.
-Another way to specify output of a @code{make} rule is by setting
-the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
-Variables}).
-
@item -MM
-Like @samp{-M} but the output mentions only the user header files
-included with @samp{#include "@var{file}"}. System header files
-included with @samp{#include <@var{file}>} are omitted.
+@findex -MM
+Like @samp{-M}, but mention only the files included with @samp{#include
+"@var{file}"}. System header files included with @samp{#include
+<@var{file}>} are omitted.
@item -MD
-Like @samp{-M} but the dependency information is written to a file made by
-replacing ".c" with ".d" at the end of the input file names.
-This is in addition to compiling the file as specified---@samp{-MD} does
-not inhibit ordinary compilation the way @samp{-M} does.
+@findex -MD
+Like @samp{-M} but the dependency information is written to a file
+rather than stdout. @code{gcc} will use the same file name and
+directory as the object file, but with the suffix ".d" instead.
+
+This is in addition to compiling the main file as specified ---
+@samp{-MD} does not inhibit ordinary compilation the way @samp{-M} does,
+unless you also specify @samp{-MG}.
-In Mach, you can use the utility @code{md} to merge multiple dependency
-files into a single dependency file suitable for using with the @samp{make}
-command.
+With Mach, you can use the utility @code{md} to merge multiple
+dependency files into a single dependency file suitable for using with
+the @samp{make} command.
@item -MMD
+@findex -MMD
Like @samp{-MD} except mention only user header files, not system
-header files.
+-header files.
+
+@item -MF @var{file}
+@findex -MF
+When used with @samp{-M} or @samp{-MM}, specifies a file to write the
+dependencies to. This allows the preprocessor to write the preprocessed
+file to stdout normally. If no @samp{-MF} switch is given, CPP sends
+the rules to stdout and suppresses normal preprocessed output.
+
+Another way to specify output of a @code{make} rule is by setting
+the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment
+Variables}).
@item -MG
-Treat missing header files as generated files and assume they live in the
-same directory as the source file. If you specify @samp{-MG}, you
-must also specify either @samp{-M} or @samp{-MM}. @samp{-MG} is not
-supported with @samp{-MD} or @samp{-MMD}.
+@findex -MG
+When used with @samp{-M} or @samp{-MM}, @samp{-MG} says to treat missing
+header files as generated files and assume they live in the same
+directory as the source file. It suppresses preprocessed output, as a
+missing header file is ordinarily an error.
+
+This feature is used in automatic updating of makefiles.
+
+@item -MP
+@findex -MP
+This option instructs CPP to add a phony target for each dependency
+other than the main file, causing each to depend on nothing. These
+dummy rules work around errors @code{make} gives if you remove header
+files without updating the @code{Makefile} to match.
+
+This is typical output:-
+
+@smallexample
+/tmp/test.o: /tmp/test.c /tmp/test.h
+
+/tmp/test.h:
+@end smallexample
+
+@item -MQ @var{target}
+@item -MT @var{target}
+@findex -MQ
+@findex -MT
+By default CPP uses the main file name, including any path, and appends
+the object suffix, normally ``.o'', to it to obtain the name of the
+target for dependency generation. With @samp{-MT} you can specify a
+target yourself, overriding the default one.
+
+If you want multiple targets, you can specify them as a single argument
+to @samp{-MT}, or use multiple @samp{-MT} options.
+
+The targets you specify are output in the order they appear on the
+command line. @samp{-MQ} is identical to @samp{-MT}, except that the
+target name is quoted for Make, but with @samp{-MT} it isn't. For
+example, -MT '$(objpfx)foo.o' gives
+
+@smallexample
+$(objpfx)foo.o: /tmp/foo.c
+@end smallexample
+
+but -MQ '$(objpfx)foo.o' gives
+
+@smallexample
+$$(objpfx)foo.o: /tmp/foo.c
+@end smallexample
+
+The default target is automatically quoted, as if it were given with
+@samp{-MQ}.
@item -H
Print the name of each header file used, in addition to other normal
Define macro @var{macro} as @var{defn}. All instances of @samp{-D} on
the command line are processed before any @samp{-U} options.
+Any @samp{-D} and @samp{-U} options on the command line are processed in
+order, and always before @samp{-imacros @var{file}}, regardless of the
+order in which they are written.
+
@item -U@var{macro}
Undefine macro @var{macro}. @samp{-U} options are evaluated after all
@samp{-D} options, but before any @samp{-include} and @samp{-imacros}
options.
+Any @samp{-D} and @samp{-U} options on the command line are processed in
+order, and always before @samp{-imacros @var{file}}, regardless of the
+order in which they are written.
+
@item -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 @samp{-E}
Like @samp{-dD} except that the macro arguments and contents are omitted.
Only @samp{#define @var{name}} is included in the output.
+@item -dI
+@findex -dI
+Output @samp{#include} directives in addition to the result of
+preprocessing.
+
@item -trigraphs
-Support ANSI C trigraphs. The @samp{-ansi} option also has this effect.
+@findex -trigraphs
+Process ISO standard trigraph sequences. These are three-character
+sequences, all starting with @samp{??}, that are defined by ISO C to
+stand for single characters. For example, @samp{??/} stands for
+@samp{\}, so @samp{'??/n'} is a character constant for a newline. By
+default, GCC ignores trigraphs, but in standard-conforming modes it
+converts them. See the @samp{-std} and @samp{-ansi} options.
+
+The nine trigraph sequences are
+@table @samp
+@item ??(
+-> @samp{[}
+
+@item ??)
+-> @samp{]}
+
+@item ??<
+-> @samp{@{}
+
+@item ??>
+-> @samp{@}}
+
+@item ??=
+-> @samp{#}
+
+@item ??/
+-> @samp{\}
+
+@item ??'
+-> @samp{^}
+
+@item ??!
+-> @samp{|}
+
+@item ??-
+-> @samp{~}
+
+@end table
+
+Trigraph support is not popular, so many compilers do not implement it
+properly. Portable code should not rely on trigraphs being either
+converted or ignored.
@item -Wp,@var{option}
Pass @var{option} as an option to the preprocessor. If @var{option}
@c prevent bad page break with this line
You can pass options to the assembler.
-@table @code
+@table @gcctabopt
@item -Wa,@var{option}
Pass @var{option} as an option to the assembler. If @var{option}
contains commas, it is split into multiple options at the commas.
an executable output file. They are meaningless if the compiler is
not doing a link step.
-@table @code
+@table @gcctabopt
@cindex file names
@item @var{object-file-name}
A file name that does not end in a special recognized suffix is
@item -nostartfiles
Do not use the standard system startup files when linking.
-The standard system libraries are used normally, unless @code{-nostdlib}
-or @code{-nodefaultlibs} is used.
+The standard system libraries are used normally, unless @option{-nostdlib}
+or @option{-nodefaultlibs} is used.
@item -nodefaultlibs
Do not use the standard system libraries when linking.
Only the libraries you specify will be passed to the linker.
-The standard startup files are used normally, unless @code{-nostartfiles}
+The standard startup files are used normally, unless @option{-nostartfiles}
is used. The compiler may generate calls to memcmp, memset, and memcpy
-for System V (and ANSI C) environments or to bcopy and bzero for
+for System V (and ISO C) environments or to bcopy and bzero for
BSD environments. These entries are usually resolved by entries in
libc. These entry points should be supplied through some other
mechanism when this option is specified.
Do not use the standard system startup files or libraries when linking.
No startup files and only the libraries you specify will be passed to
the linker. The compiler may generate calls to memcmp, memset, and memcpy
-for System V (and ANSI C) environments or to bcopy and bzero for
+for System V (and ISO C) environments or to bcopy and bzero for
BSD environments. These entries are usually resolved by entries in
libc. These entry points should be supplied through some other
mechanism when this option is specified.
or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
This ensures that you have no unresolved references to internal GCC
library subroutines. (For example, @samp{__main}, used to ensure C++
-constructors will be called; @pxref{Collect2,,@code{collect2}}.)
+constructors will be called; @pxref{Collect2,,@command{collect2}}.)
@item -s
Remove all symbol table and relocation information from the executable.
@item -shared
Produce a shared object which can then be linked with other objects to
-form an executable. Not all systems support this option. You must
-also specify @samp{-fpic} or @samp{-fPIC} on some systems when
-you specify this option.
+form an executable. Not all systems support this option. For predictable
+results, you must also specify the same set of options that were used to
+generate code (@samp{-fpic}, @samp{-fPIC}, or model suboptions)
+when you specify this option.@footnote{On some systems, @samp{gcc -shared}
+needs to build supplementary stub code for constructors to work. On
+multi-libbed systems, @samp{gcc -shared} must select the correct support
+libraries to link against. Failing to supply the correct flags may lead
+to subtle defects. Supplying them in cases where they are not necessary
+is innocuous.}
+
+@item -shared-libgcc
+@itemx -static-libgcc
+On systems that provide @file{libgcc} as a shared library, these options
+force the use of either the shared or static version respectively.
+If no shared version of @file{libgcc} was built when the compiler was
+configured, these options have no effect.
+
+There are several situations in which an application should use the
+shared @file{libgcc} instead of the static version. The most common
+of these is when the application wishes to throw and catch exceptions
+across different shared libraries. In that case, each of the libraries
+as well as the application itself should use the shared @file{libgcc}.
+
+At present the GCC driver makes no attempt to recognize the situations
+in which the shared @file{libgcc} should be used, and defaults to using
+the static @file{libgcc} always. This will likely change in the future,
+at which time @samp{-static-libgcc} becomes useful as a means for
+overriding GCC's choice.
@item -symbolic
Bind references to global symbols when building a shared object. Warn
These options specify directories to search for header files, for
libraries and for parts of the compiler:
-@table @code
+@table @gcctabopt
@item -I@var{dir}
Add the directory @var{dir} to the head of the list of directories to be
searched for header files. This can be used to override a system header
@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}. If neither of
those results in a file name that is found, the unmodified program
name is searched for using the directories specified in your
-@samp{PATH} environment variable.
+@env{PATH} environment variable.
@samp{-B} prefixes that effectively specify directory names also apply
to libraries in the linker, because the compiler translates these
out of the link if it is not found by those means.
Another way to specify a prefix much like the @samp{-B} prefix is to use
-the environment variable @code{GCC_EXEC_PREFIX}. @xref{Environment
+the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment
Variables}.
@item -specs=@var{file}
are processed in order, from left to right.
@end table
+@c man end
+
@node Spec Files
@section Specifying subprocesses and the switches to pass to them
@cindex Spec Files
-@code{GCC} is a driver program. It performs its job by invoking a
+@command{gcc} is a driver program. It performs its job by invoking a
sequence of other programs to do the work of compiling, assembling and
linking. GCC interprets its command-line parameters and uses these to
deduce which programs it should invoke, and which command-line options
@table @code
@item @@@var{language}
This says that the suffix is an alias for a known @var{language}. This is
-similar to using the @code{-x} command-line switch to GCC to specify a
+similar to using the @option{-x} command-line switch to GCC to specify a
language explicitly. For example:
@smallexample
@item %P
Like @samp{%p}, but puts @samp{__} before and after the name of each
predefined macro, except for macros that start with @samp{__} or with
-@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ANSI
+@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO
C.
@item %I
argument. Thus %@{^o*@} would only generate one argument, not two.
@item %@{<@code{S}@}
-Remove all occurences of @code{S} from the command line. Note - this
+Remove all occurrences of @code{-S} from the command line. Note - this
command is position dependent. @samp{%} commands in the spec string
-before this option will see @code{S}, @samp{%} commands in the spec
+before this option will see @code{-S}, @samp{%} commands in the spec
string after this option will not.
@item %@{@code{S}*:@code{X}@}
treated as compiler output files, and passed to the linker in their
proper position among the other output files.
+@c man begin OPTIONS
+
@node Target Options
@section Specifying Target Machine and Compiler Version
@cindex target options
by side. One of them (probably the newest) will be the default, but
you may sometimes wish to use another.
-@table @code
+@table @gcctabopt
@item -b @var{machine}
The argument @var{machine} specifies the target machine for compilation.
This is useful when you have installed GCC as a cross-compiler.
80386} becomes an alias for @samp{-b i386v}.
In one respect, the @samp{-b} or @samp{-V} do not completely change
-to a different compiler: the top-level driver program @code{gcc}
+to a different compiler: the top-level driver program @command{gcc}
that you originally invoked continues to run and invoke the other
executables (preprocessor, compiler per se, assembler and linker)
that do the real work. However, since no real work is done in the
driver program, it usually does not matter that the driver program
-in use is not the one for the specified target and version.
+in use is not the one for the specified target. It is common for the
+interface to the other executables to change incompatibly between
+compiler versions, so unless the version specified is very close to that
+of the driver (for example, @samp{-V 3.0} with a driver program from GCC
+version 3.0.1), use of @samp{-V} may not work; for example, using
+@samp{-V 2.95.2} will not work with a driver program from GCC 3.0.
The only way that the driver program depends on the target machine is
in the parsing and handling of special machine-specific options.
However, this is controlled by a file which is found, along with the
other executables, in the directory for the specified version and
target machine. As a result, a single installed driver program adapts
-to any specified target machine and compiler version.
+to any specified target machine, and sufficiently similar compiler
+versions.
The driver program executable does control one significant thing,
however: the default version and target machine. Therefore, you can
install different instances of the driver program, compiled for
different targets or versions, under different names.
-For example, if the driver for version 2.0 is installed as @code{ogcc}
-and that for version 2.1 is installed as @code{gcc}, then the command
-@code{gcc} will use version 2.1 by default, while @code{ogcc} will use
+For example, if the driver for version 2.0 is installed as @command{ogcc}
+and that for version 2.1 is installed as @command{gcc}, then the command
+@command{gcc} will use version 2.1 by default, while @command{ogcc} will use
2.0 by default. However, you can choose either version with either
command with the @samp{-V} option.
@menu
* M680x0 Options::
+* M68hc1x Options::
* VAX Options::
* SPARC Options::
* Convex Options::
* NS32K Options::
* AVR Options::
* MCore Options::
+* IA-64 Options::
+* D30V Options::
@end menu
@node M680x0 Options
the compiler was configured; the defaults for the most common choices are
given below.
-@table @code
+@table @gcctabopt
@item -m68000
@itemx -mc68000
Generate output for a 68000. This is the default
@end table
+@node M68hc1x Options
+@subsection M68hc1x Options
+@cindex M68hc1x options
+
+These are the @samp{-m} options defined for the 68hc11 and 68hc12
+microcontrollers. The default values for these options depends on
+which style of microcontroller was selected when the compiler was configured;
+the defaults for the most common choices are given below.
+
+@table @gcctabopt
+@item -m6811
+@itemx -m68hc11
+Generate output for a 68HC11. This is the default
+when the compiler is configured for 68HC11-based systems.
+
+@item -m6812
+@itemx -m68hc12
+Generate output for a 68HC12. This is the default
+when the compiler is configured for 68HC12-based systems.
+
+@item -mauto-incdec
+Enable the use of 68HC12 pre and post auto-increment and auto-decrement
+addressing modes.
+
+@item -mshort
+Consider type @code{int} to be 16 bits wide, like @code{short int}.
+
+@item -msoft-reg-count=@var{count}
+Specify the number of pseudo-soft registers which are used for the
+code generation. The maximum number is 32. Using more pseudo-soft
+register may or may not result in better code depending on the program.
+The default is 4 for 68HC11 and 2 for 68HC12.
+
+@end table
+
@node VAX Options
@subsection VAX Options
@cindex VAX options
These @samp{-m} options are defined for the Vax:
-@table @code
+@table @gcctabopt
@item -munix
Do not output certain jump instructions (@code{aobleq} and so on)
that the Unix assembler for the Vax cannot handle across long
These @samp{-m} switches are supported on the SPARC:
-@table @code
+@table @gcctabopt
@item -mno-app-regs
@itemx -mapp-regs
Specify @samp{-mapp-regs} to generate output using the global registers
These @samp{-m} switches are supported in addition to the above
on the SPARCLET processor.
-@table @code
+@table @gcctabopt
@item -mlittle-endian
Generate code for a processor running in little-endian mode.
These @samp{-m} switches are supported in addition to the above
on SPARC V9 processors in 64 bit environments.
-@table @code
+@table @gcctabopt
@item -mlittle-endian
Generate code for a processor running in little-endian mode.
These @samp{-m} options are defined for Convex:
-@table @code
+@table @gcctabopt
@item -mc1
Generate output for C1. The code will run on any Convex machine.
The preprocessor symbol @code{__convex__c1__} is defined.
These @samp{-m} options are defined for the AMD Am29000:
-@table @code
+@table @gcctabopt
@item -mdw
@kindex -mdw
@cindex DW bit (29k)
These @samp{-m} options are defined for Advanced RISC Machines (ARM)
architectures:
-@table @code
+@table @gcctabopt
@item -mapcs-frame
@kindex -mapcs-frame
Generate a stack frame that is compliant with the ARM Procedure Call
@item -mshort-load-bytes
@kindex -mshort-load-bytes
-This is a depreciated alias for @samp{-malignment-traps}.
+This is a deprecated alias for @samp{-malignment-traps}.
@item -mno-short-load-bytes
@kindex -mno-short-load-bytes
-This is a depreciated alias for @samp{-mno-alignment-traps}.
+This is a deprecated alias for @samp{-mno-alignment-traps}.
@item -mshort-load-words
@kindex -mshort-load-words
-This is a depreciated alias for @samp{-mno-alignment-traps}.
+This is a deprecated alias for @samp{-mno-alignment-traps}.
@item -mno-short-load-words
@kindex -mno-short-load-words
-This is a depreciated alias for @samp{-malignment-traps}.
+This is a deprecated alias for @samp{-malignment-traps}.
@item -mbsd
@kindex -mbsd
@itemx -mfp=<number>
@kindex -mfpe=
@kindex -mfp=
-This specifes the version of the floating point emulation available on
+This specifies the version of the floating point emulation available on
the target. Permissible values are 2 and 3. @samp{-mfp=} is a synonym
for @samp{-mfpe=} to support older versions of GCC.
the scope of a @samp{#pragma no_long_calls} directive and functions whose
definitions have already been compiled within the current compilation
unit, will not be turned into long calls. The exception to this rule is
-that weak function defintions, functions with the @samp{long-call}
+that weak function definitions, functions with the @samp{long-call}
attribute or the @samp{section} attribute, and functions that are within
the scope of a @samp{#pragma long_calls} directive, will always be
turned into long calls.
@subsection Thumb Options
@cindex Thumb Options
-@table @code
+@table @gcctabopt
@item -mthumb-interwork
@kindex -mthumb-interwork
@subsection MN10200 Options
@cindex MN10200 options
These @samp{-m} options are defined for Matsushita MN10200 architectures:
-@table @code
+@table @gcctabopt
@item -mrelax
Indicate to the linker that it should perform a relaxation optimization pass
@cindex MN10300 options
These @samp{-m} options are defined for Matsushita MN10300 architectures:
-@table @code
+@table @gcctabopt
@item -mmult-bug
Generate code to avoid bugs in the multiply instructions for the MN10300
processors. This is the default.
These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
-@table @code
+@table @gcctabopt
@item -mcode-model=small
Assume all objects live in the lower 16MB of memory (so that their addresses
can be loaded with the @code{ld24} instruction), and assume all subroutines
These @samp{-m} options are defined for Motorola 88k architectures:
-@table @code
+@table @gcctabopt
@item -m88000
@kindex -m88000
Generate code that works well on both the m88100 and the
@cindex IBM RS/6000 and PowerPC Options
These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
-@table @code
+@table @gcctabopt
@item -mpower
@itemx -mno-power
@itemx -mpower2
uses extremely little TOC space. You may wish to use this option
only on files that contain less frequently executed code. @refill
-@item -m64
-@itemx -m32
-@kindex -m64
-@kindex -m32
-Enable 64-bit PowerPC ABI and calling convention: 64-bit pointers, 64-bit
+@item -maix64
+@itemx -maix32
+@kindex -maix64
+@kindex -maix32
+Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
@code{long} type, and the infrastructure needed to support them.
-Specifying @samp{-m64} implies @samp{-mpowerpc64} and
-@samp{-mpowerpc}, while @samp{-m32} disables the 64-bit ABI and
-implies @samp{-mno-powerpc64}. GCC defaults to @samp{-m32}.
+Specifying @samp{-maix64} implies @samp{-mpowerpc64} and
+@samp{-mpowerpc}, while @samp{-maix32} disables the 64-bit ABI and
+implies @samp{-mno-powerpc64}. GCC defaults to @samp{-maix32}.
@item -mxl-call
@itemx -mno-xl-call
@file{crt0.o} and the standard C libraries are @file{libyk.a} and
@file{libc.a}.
+@item -mvxworks
+On System V.4 and embedded PowerPC systems, specify that you are
+compiling for a VxWorks system.
+
@item -memb
On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
header to indicate that @samp{eabi} extended relocations are used.
@itemx -mno-eabi
On System V.4 and embedded PowerPC systems do (do not) adhere to the
Embedded Applications Binary Interface (eabi) which is a set of
-modifications to the System V.4 specifications. Selecting @code{-meabi}
+modifications to the System V.4 specifications. Selecting @option{-meabi}
means that the stack is aligned to an 8 byte boundary, a function
@code{__eabi} is called to from @code{main} to set up the eabi
environment, and the @samp{-msdata} option can use both @code{r2} and
@code{r13} to point to two separate small data areas. Selecting
-@code{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
+@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
do not call an initialization function from @code{main}, and the
@samp{-msdata} option will only use @code{r13} to point to a single
small data area. The @samp{-meabi} option is on by default if you
These @samp{-m} options are defined for the IBM RT PC:
-@table @code
+@table @gcctabopt
@item -min-line-mul
Use an in-line code sequence for integer multiplies. This is the
default.
These @samp{-m} options are defined for the MIPS family of computers:
-@table @code
+@table @gcctabopt
@item -mcpu=@var{cpu type}
Assume the defaults for the machine type @var{cpu type} when scheduling
instructions. The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
Force long, int, and pointer types to be 32 bits wide.
If none of @samp{-mlong32}, @samp{-mlong64}, or @samp{-mint64} are set,
-the size of ints, longs, and pointers depends on the ABI and ISA choosen.
+the size of ints, longs, and pointers depends on the ABI and ISA chosen.
For @samp{-mabi=32}, and @samp{-mabi=n32}, ints and longs are 32 bits
wide. For @samp{-mabi=64}, ints are 32 bits, and longs are 64 bits wide.
For @samp{-mabi=eabi} and either @samp{-mips1} or @samp{-mips2}, ints
These @samp{-m} options are defined for the i386 family of computers:
-@table @code
+@table @gcctabopt
@item -mcpu=@var{cpu type}
Assume the defaults for the machine type @var{cpu type} when scheduling
-instructions. The choices for @var{cpu type} are:
-
-@multitable @columnfractions .20 .20 .20 .20
-@item @samp{i386} @tab @samp{i486} @tab @samp{i586} @tab @samp{i686}
-@item @samp{pentium} @tab @samp{pentiumpro} @tab @samp{k6}
-@end multitable
+instructions. The choices for @var{cpu type} are @samp{i386},
+@samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium},
+@samp{pentiumpro}, @samp{k6}, and @samp{athlon}
While picking a specific @var{cpu type} will schedule things appropriately
for that particular chip, the compiler will not generate any code that
Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
respectively. These synonyms are deprecated.
+@item -mintel-syntax
+Emit assembly using Intel syntax opcodes instead of AT&T syntax.
+
@item -mieee-fp
@itemx -mno-ieee-fp
Control whether or not the compiler uses IEEE floating point
produce code that runs somewhat faster on a @samp{Pentium} at the
expense of more memory.
-@strong{Warning:} if you use the @samp{-malign-double} switch,
-structures containing the above types will be aligned differently than
-the published application binary interface specifications for the 386.
+@item -m128bit-long-double
+@itemx -m128bit-long-double
+Control the size of @code{long double} type. i386 application binary interface
+specify the size to be 12 bytes, while modern architectures (Pentium and newer)
+preffer @code{long double} aligned to 8 or 16 byte boundary. This is
+impossible to reach with 12 byte long doubles in the array accesses.
+
+@strong{Warning:} if you use the @samp{-m128bit-long-double} switch, the
+structures and arrays containing @code{long double} will change their size as
+well as function calling convention for function taking @code{long double}
+will be modified.
+
+@item -m96bit-long-double
+@itemx -m96bit-long-double
+Set the size of @code{long double} to 96 bits as required by the i386
+application binary interface. This is the default.
@item -msvr3-shlib
@itemx -mno-svr3-shlib
and PentiumPro, @code{double} and @code{long double} values should be
aligned to an 8 byte boundary (see @samp{-malign-double}) or suffer
significant run time performance penalties. On Pentium III, the
-Streaming SIMD Extention (SSE) data type @code{__m128} suffers similar
+Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
penalties if it is not 16 byte aligned.
To ensure proper alignment of this values on the stack, the stack boundary
may want to reduce the preferred alignment to
@samp{-mpreferred-stack-boundary=2}.
+@item -mpush-args
+@kindex -mpush-args
+Use PUSH operations to store outgoing parameters. This method is shorter
+and usually equally fast as method using SUB/MOV operations and is enabled
+by default. In some cases disabling it may improve performance because of
+improved scheduling and reduced dependencies.
+
+@item -maccumulate-outgoing-args
+@kindex -maccumulate-outgoing-args
+If enabled, the maximum amount of space required for outgoing arguments will be
+computed in the function prologue. This in faster on most modern CPUs
+because of reduced dependencies, improved scheduling and reduced stack usage
+when preferred stack boundary is not equal to 2. The drawback is a notable
+increase in code size. This switch implies -mno-push-args.
+
@item -mthreads
@kindex -mthreads
Support thread-safe exception handling on @samp{Mingw32}. Code that relies
These @samp{-m} options are defined for the HPPA family of computers:
-@table @code
+@table @gcctabopt
@item -march=@var{architecture type}
Generate code for the specified architecture. The choices for
@var{architecture type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
Generate code that assumes calls never cross space boundaries. This
allows GCC to emit code which performs faster indirect calls.
-This option will not work in the presense of shared libraries or nested
+This option will not work in the presence of shared libraries or nested
functions.
@item -mlong-load-store
These @samp{-m} options are defined for the Intel 960 implementations:
-@table @code
+@table @gcctabopt
@item -m@var{cpu type}
Assume the defaults for the machine type @var{cpu type} for some of
the other options, including instruction scheduling, floating point
These @samp{-m} options are defined for the DEC Alpha implementations:
-@table @code
+@table @gcctabopt
@item -mno-soft-float
@itemx -msoft-float
Use (do not use) the hardware floating-point instructions for
-floating-point operations. When @code{-msoft-float} is specified,
+floating-point operations. When @option{-msoft-float} is specified,
functions in @file{libgcc1.c} will be used to perform floating-point
operations. Unless they are replaced by routines that emulate the
floating-point operations, or compiled in such a way as to call such
@item -mfp-reg
@itemx -mno-fp-regs
Generate code that uses (does not use) the floating-point register set.
-@code{-mno-fp-regs} implies @code{-msoft-float}. If the floating-point
+@option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point
register set is not used, floating point operands are passed in integer
registers as if they were integers and floating-point results are passed
in $0 instead of $f0. This is a non-standard calling sequence, so any
function with a floating-point argument or return value called by code
-compiled with @code{-mno-fp-regs} must also be compiled with that
+compiled with @option{-mno-fp-regs} must also be compiled with that
option.
A typical use of this option is building a kernel that does not use,
code is less efficient but is able to correctly support denormalized
numbers and exceptional IEEE values such as not-a-number and plus/minus
infinity. Other Alpha compilers call this option
-@code{-ieee_with_no_inexact}.
+@option{-ieee_with_no_inexact}.
@item -mieee-with-inexact
@c overfull hbox here --bob 22 jul96
@item -mmemory-latency=@var{time}
Sets the latency the scheduler should assume for typical memory
references as seen by the application. This number is highly
-dependant on the memory access patterns used by the application
+dependent on the memory access patterns used by the application
and the size of the external cache on the machine.
Valid options for @var{time} are
These @samp{-m} options are defined for the Clipper implementations:
-@table @code
+@table @gcctabopt
@item -mc300
Produce code for a C300 Clipper processor. This is the default.
These @samp{-m} options are defined for the H8/300 implementations:
-@table @code
+@table @gcctabopt
@item -mrelax
Shorten some address references at link time, when possible; uses the
linker option @samp{-relax}. @xref{H8/300,, @code{ld} and the H8/300,
@item -ms
Generate code for the H8/S.
+@item -ms2600
+Generate code for the H8/S2600. This switch must be used with -ms.
+
@item -mint32
Make @code{int} data 32 bits by default.
@item -malign-300
-On the h8/300h, use the same alignment rules as for the h8/300.
-The default for the h8/300h is to align longs and floats on 4 byte boundaries.
+On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
+The default for the H8/300H and H8/S is to align longs and floats on 4
+byte boundaries.
@samp{-malign-300} causes them to be aligned on 2 byte boundaries.
-This option has no effect on the h8/300.
+This option has no effect on the H8/300.
@end table
@node SH Options
These @samp{-m} options are defined for the SH implementations:
-@table @code
+@table @gcctabopt
@item -m1
Generate code for the SH1.
@item -m3e
Generate code for the SH3e.
+@item -m4-nofpu
+Generate code for the SH4 without a floating-point unit.
+
+@item -m4-single-only
+Generate code for the SH4 with a floating-point unit that only
+supports single-precision arithmentic.
+
+@item -m4-single
+Generate code for the SH4 assuming the floating-point unit is in
+single-precision mode by default.
+
+@item -m4
+Generate code for the SH4.
+
@item -mb
Compile code for the processor in big endian mode.
@item -mrelax
Shorten some address references at link time, when possible; uses the
linker option @samp{-relax}.
+
+@item -mbigtable
+Use 32-bit offsets in @code{switch} tables. The default is to use
+16-bit offsets.
+
+@item -mfmovd
+Enable the use of the instruction @code{fmovd}.
+
+@item -mhitachi
+Comply with the calling conventions defined by Hitachi.
+
+@item -mnomacsave
+Mark the @code{MAC} register as call-clobbered, even if
+@option{-mhitachi} is given.
+
+@item -misize
+Dump instruction size and location in the assembly code.
+
+@item -mpadstruct
+This option is deprecated. It pads structures to multiple of 4 bytes,
+which is incompatible with the SH ABI.
+
+@item -mspace
+Optimize for space instead of speed. Implied by @option{-Os}.
+
+@item -mprefergot
+When generating position-independent code, emit function calls using
+the Global Offset Table instead of the Procedure Linkage Table.
+
+@item -musermode
+Generate a library function call to invalidate instruction cache
+entries, after fixing up a trampoline. This library function call
+doesn't assume it can write to the whole memory address space. This
+is the default when the target is @code{sh-*-linux*}.
@end table
@node System V Options
These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:
-@table @code
+@table @gcctabopt
@item -G
Create a shared object.
It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
These @samp{-m} options are defined for TMS320C3x/C4x implementations:
-@table @code
+@table @gcctabopt
@item -mcpu=@var{cpu_type}
Set the instruction set, register set, and instruction scheduling
then a RPTS will be emitted even if the loop count cannot be determined
at compile time. Note that the repeated instruction following RPTS does
not have to be reloaded from memory each iteration, thus freeing up the
-CPU buses for oeprands. However, since interrupts are blocked by this
+CPU buses for operands. However, since interrupts are blocked by this
instruction, it is disabled by default.
@item -mloop-unsigned
These @samp{-m} options are defined for V850 implementations:
-@table @code
+@table @gcctabopt
@item -mlong-calls
@itemx -mno-long-calls
Treat all calls as being far away (near). If calls are assumed to be
These options are defined for ARC implementations:
-@table @code
+@table @gcctabopt
@item -EL
Compile code for little endian mode. This is the default.
the compiler was configured; the defaults for the most common choices are
given below.
-@table @code
+@table @gcctabopt
@item -m32032
@itemx -m32032
Generate output for a 32032. This is the default
These options are defined for AVR implementations:
-@table @code
+@table @gcctabopt
@item -mmcu=@var{mcu}
-Specify ATMEL AVR mcu (at90s23xx,attiny22,at90s44xx,at90s85xx,atmega603,
-atmega103).
+Specify ATMEL AVR instruction set or MCU type.
+
+Instruction set avr1 is for the minimal AVR core, not supported by the C
+compiler, only for assembler programs (MCU types: at90s1200, attiny10,
+attiny11, attiny12, attiny15, attiny28).
+
+Instruction set avr2 (default) is for the classic AVR core with up to
+8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
+at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
+at90c8534, at90s8535).
+
+Instruction set avr3 is for the classic AVR core with up to 128K program
+memory space (MCU types: atmega103, atmega603).
+
+Instruction set avr4 is for the enhanced AVR core with up to 8K program
+memory space (MCU types: atmega83, atmega85).
+
+Instruction set avr5 is for the enhanced AVR core with up to 128K program
+memory space (MCU types: atmega161, atmega163, atmega32, at94k).
@item -msize
-Output instruction size's to the asm file
+Output instruction sizes to the asm file.
@item -minit-stack=@var{N}
-Specify the initial stack address
+Specify the initial stack address, which may be a symbol or numeric value,
+__stack is the default.
@item -mno-interrupts
Generated code is not compatible with hardware interrupts.
@item -mcall-prologues
Functions prologues/epilogues expanded as call to appropriate
subroutines. Code size will be smaller.
+
+@item -mno-tablejump
+Do not generate tablejump insns which sometimes increase code size.
+
+@item -mtiny-stack
+Change only the low 8 bits of the stack pointer.
@end table
@node MCore Options
These are the @samp{-m} options defined for the Motorola M*Core
processors.
-@table @code
+@table @gcctabopt
@item -mhardlit
@itemx -mhardlit
@item -mrelax-immediate
@itemx -mrelax-immediate
@itemx -mno-relax-immediate
-Allow arbitary sized immediated in bit operations.
+Allow arbitrary sized immediates in bit operations.
@item -mwide-bitfields
@itemx -mwide-bitfields
@item -m4byte-functions
@itemx -m4byte-functions
@itemx -mno-4byte-functions
-Force all functions to be aligfned to a four byte boundary.
+Force all functions to be aligned to a four byte boundary.
@item -mcallgraph-data
@itemx -mcallgraph-data
@item -mlittle-endian
@itemx -mlittle-endian
@itemx -mbig-endian
-Genreate code for a little endian target.
+Generate code for a little endian target.
@item -m210
@itemx -m210
@itemx -m340
Generate code for the 210 processor.
+@end table
+
+@node IA-64 Options
+@subsection IA-64 Options
+@cindex IA-64 Options
+
+These are the @samp{-m} options defined for the Intel IA-64 architecture.
+@table @gcctabopt
+@item -mbig-endian
+Generate code for a big endian target. This is the default for HPUX.
+
+@item -mlittle-endian
+Generate code for a little endian target. This is the default for AIX5
+and Linux.
+
+@item -mgnu-as
+@itemx -mno-gnu-as
+Generate (or don't) code for the GNU assembler. This is the default.
+@c Also, this is the default if the configure option @samp{--with-gnu-as}
+@c is used.
+
+@item -mgnu-ld
+@itemx -mno-gnu-ld
+Generate (or don't) code for the GNU linker. This is the default.
+@c Also, this is the default if the configure option @samp{--with-gnu-ld}
+@c is used.
+
+@item -mno-pic
+Generate code that does not use a global pointer register. The result
+is not position independent code, and violates the IA-64 ABI.
+
+@item -mvolatile-asm-stop
+@itemx -mno-volatile-asm-stop
+Generate (or don't) a stop bit immediately before and after volatile asm
+statements.
+
+@item -mb-step
+Generate code that works around Itanium B step errata.
+
+@item -mregister-names
+@itemx -mno-register-names
+Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
+the stacked registers. This may make assembler output more readable.
+
+@item -mno-sdata
+@itemx -msdata
+Disable (or enable) optimizations that use the small data section. This may
+be useful for working around optimizer bugs.
+
+@item -mconstant-gp
+Generate code that uses a single constant global pointer value. This is
+useful when compiling kernel code.
+
+@item -mauto-pic
+Generate code that is self-relocatable. This implies @samp{-mconstant-gp}.
+This is useful when compiling firmware code.
+
+@item -minline-divide-min-latency
+Generate code for inline divides using the minimum latency algorithm.
+
+@item -minline-divide-max-throughput
+Generate code for inline divides using the maximum throughput algorithm.
+
+@item -mno-dwarf2-asm
+@itemx -mdwarf2-asm
+Don't (or do) generate assembler code for the DWARF2 line number debugging
+info. This may be useful when not using the GNU assembler.
+
+@item -mfixed-range=@var{register range}
+Generate code treating the given register range as fixed registers.
+A fixed register is one that the register allocator can not use. This is
+useful when compiling kernel code. A register range is specified as
+two registers separated by a dash. Multiple register ranges can be
+specified separated by a comma.
@end table
+@node D30V Options
+@subsection D30V Options
+@cindex D30V Options
+
+These @samp{-m} options are defined for D30V implementations:
+
+@table @gcctabopt
+@item -mextmem
+Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings},
+@samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external
+memory, which starts at location @code{0x80000000}.
+
+@item -mextmemory
+Same as the @samp{-mextmem} switch.
+
+@item -monchip
+Link the @samp{.text} section into onchip text memory, which starts at
+location @code{0x0}. Also link @samp{.data}, @samp{.bss},
+@samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections
+into onchip data memory, which starts at location @code{0x20000000}.
+
+@item -mno-asm-optimize
+@itemx -masm-optimize
+Disable (enable) passing @samp{-O} to the assembler when optimizing.
+The assembler uses the @samp{-O} option to automatically parallelize
+adjacent short instructions where possible.
+
+@item -mbranch-cost=@var{n}
+Increase the internal costs of branches to @var{n}. Higher costs means
+that the compiler will issue more instructions to avoid doing a branch.
+The default is 2.
+
+@item -mcond-exec=@var{n}
+Specify the maximum number of conditionally executed instructions that
+replace a branch. The default is 4.
+@end table
@node Code Gen Options
@section Options for Code Generation Conventions
can figure out the other form by either removing @samp{no-} or adding
it.
-@table @code
+@table @gcctabopt
@item -fexceptions
Enable exception handling. Generates extra code needed to propagate
exceptions. For some targets, this implies GNU CC will generate frame
use exception handling.
@item -funwind-tables
-Similar to @code{-fexceptions}, except that it will just generate any needed
+Similar to @option{-fexceptions}, except that it will just generate any needed
static data, but will not affect the generated code in any other way.
You will normally not enable this option; instead, a language processor
that needs this handling would enable it on your behalf.
destructors) in the form used by the GNU linker (on systems where the GNU
linker is the standard method of handling them). Use this option when
you want to use a non-GNU linker, which also requires using the
-@code{collect2} program to make sure the system linker includes
-constructors and destructors. (@code{collect2} is included in the GCC
-distribution.) For systems which @emph{must} use @code{collect2}, the
-compiler driver @code{gcc} is configured to do this automatically.
+@command{collect2} program to make sure the system linker includes
+constructors and destructors. (@command{collect2} is included in the GCC
+distribution.) For systems which @emph{must} use @command{collect2}, the
+compiler driver @command{gcc} is configured to do this automatically.
@item -finhibit-size-directive
Don't output a @code{.size} assembler directive, or anything else that
@code{__asm__} keywords in functions with memory checking enabled. GNU
CC cannot understand what the @code{asm} statement may do, and therefore
cannot generate the appropriate code, so it will reject it. However, if
-you specify the function attribute @code{no_check_memory_usage} (see
-@pxref{Function Attributes}, GNU CC will disable memory checking within a
+you specify the function attribute @code{no_check_memory_usage}
+(@pxref{Function Attributes}), GNU CC will disable memory checking within a
function; you may use @code{asm} statements inside such functions. You
may have an inline expansion of a non-checked function within a checked
function; in that case GNU CC will not generate checks for the inlined
option, and that not all targets provide complete support for it.
@end table
+@c man end
+
@node Environment Variables
@section Environment Variables Affecting GCC
@cindex environment variables
+@c man begin ENVIRONMENT
+
This section describes several environment variables that affect how GCC
operates. Some of them work by specifying directories or prefixes to use
when searching for various kinds of files. Some are used to specify other
@xref{Driver}.
@end ifset
-@table @code
+@table @env
@item LANG
@itemx LC_CTYPE
@c @itemx LC_COLLATE
These environment variables control the way that GCC uses
localization information that allow GCC to work with different
national conventions. GCC inspects the locale categories
-@code{LC_CTYPE} and @code{LC_MESSAGES} if it has been configured to do
+@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
so. These locale categories can be set to any value supported by your
installation. A typical value is @samp{en_UK} for English in the United
Kingdom.
-The @code{LC_CTYPE} environment variable specifies character
+The @env{LC_CTYPE} environment variable specifies character
classification. GCC uses it to determine the character boundaries in
a string; this is needed for some multibyte encodings that contain quote
and escape characters that would otherwise be interpreted as a string
end or escape.
-The @code{LC_MESSAGES} environment variable specifies the language to
+The @env{LC_MESSAGES} environment variable specifies the language to
use in diagnostic messages.
-If the @code{LC_ALL} environment variable is set, it overrides the value
-of @code{LC_CTYPE} and @code{LC_MESSAGES}; otherwise, @code{LC_CTYPE}
-and @code{LC_MESSAGES} default to the value of the @code{LANG}
+If the @env{LC_ALL} environment variable is set, it overrides the value
+of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
+and @env{LC_MESSAGES} default to the value of the @env{LANG}
environment variable. If none of these variables are set, GCC
defaults to traditional C English behavior.
@item TMPDIR
@findex TMPDIR
-If @code{TMPDIR} is set, it specifies the directory to use for temporary
+If @env{TMPDIR} is set, it specifies the directory to use for temporary
files. GCC uses temporary files to hold the output of one stage of
compilation which is to be used as input to the next stage: for example,
the output of the preprocessor, which is the input to the compiler
@item GCC_EXEC_PREFIX
@findex GCC_EXEC_PREFIX
-If @code{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
+If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
names of the subprograms executed by the compiler. No slash is added
when this prefix is combined with the name of a subprogram, but you can
specify a prefix that ends with a slash if you wish.
-If @code{GCC_EXEC_PREFIX} is not set, GNU CC will attempt to figure out
+If @env{GCC_EXEC_PREFIX} is not set, GNU CC will attempt to figure out
an appropriate prefix to use based on the pathname it was invoked with.
If GCC cannot find the subprogram using the specified prefix, it
tries looking in the usual places for the subprogram.
-The default value of @code{GCC_EXEC_PREFIX} is
+The default value of @env{GCC_EXEC_PREFIX} is
@file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
of @code{prefix} when you ran the @file{configure} script.
In addition, the prefix is used in an unusual way in finding the
directories to search for header files. For each of the standard
directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
-(more precisely, with the value of @code{GCC_INCLUDE_DIR}), GCC tries
+(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
replacing that beginning with the specified prefix to produce an
alternate directory name. Thus, with @samp{-Bfoo/}, GCC will search
@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
@item COMPILER_PATH
@findex COMPILER_PATH
-The value of @code{COMPILER_PATH} is a colon-separated list of
-directories, much like @code{PATH}. GCC tries the directories thus
+The value of @env{COMPILER_PATH} is a colon-separated list of
+directories, much like @env{PATH}. GCC tries the directories thus
specified when searching for subprograms, if it can't find the
-subprograms using @code{GCC_EXEC_PREFIX}.
+subprograms using @env{GCC_EXEC_PREFIX}.
@item LIBRARY_PATH
@findex LIBRARY_PATH
-The value of @code{LIBRARY_PATH} is a colon-separated list of
-directories, much like @code{PATH}. When configured as a native compiler,
+The value of @env{LIBRARY_PATH} is a colon-separated list of
+directories, much like @env{PATH}. When configured as a native compiler,
GCC tries the directories thus specified when searching for special
-linker files, if it can't find them using @code{GCC_EXEC_PREFIX}. Linking
+linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking
using GCC also uses these directories when searching for ordinary
libraries for the @samp{-l} option (but directories specified with
@samp{-L} come first).
@c @itemx OBJCPLUS_INCLUDE_PATH
These environment variables pertain to particular languages. Each
variable's value is a colon-separated list of directories, much like
-@code{PATH}. When GCC searches for header files, it tries the
+@env{PATH}. When GCC searches for header files, it tries the
directories listed in the variable for the language you are using, after
the directories specified with @samp{-I} but before the standard header
file directories.
(@pxref{Preprocessor Options}), but it goes to a separate file, and is
in addition to the usual results of compilation.
-The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
+The value of @env{DEPENDENCIES_OUTPUT} can be just a file name, in
which case the Make rules are written to that file, guessing the target
name from the source file name. Or the value can have the form
@samp{@var{file} @var{target}}, in which case the rules are written to
which this information is used is to determine the character set to be used
when character literals, string literals and comments are parsed in C and C++.
When the compiler is configured to allow multibyte characters,
-the following values for @code{LANG} are recognized:
+the following values for @env{LANG} are recognized:
-@table @code
+@table @samp
@item C-JIS
Recognize JIS characters.
@item C-SJIS
Recognize EUCJP characters.
@end table
-If @code{LANG} is not defined, or if it has some other value, then the
+If @env{LANG} is not defined, or if it has some other value, then the
compiler will use mblen and mbtowc as defined by the default locale to
recognize and translate multibyte characters.
@end table
+@c man end
+
@node Running Protoize
@section Running Protoize
The program @code{protoize} is an optional part of GNU C. You can use
-it to add prototypes to a program, thus converting the program to ANSI
+it to add prototypes to a program, thus converting the program to ISO
C in one respect. The companion program @code{unprotoize} does the
reverse: it removes argument types from any prototypes that are found.
Basic conversion with @code{unprotoize} consists of rewriting most
function declarations to remove any argument types, and rewriting
-function definitions to the old-style pre-ANSI form.
+function definitions to the old-style pre-ISO form.
Both conversion programs print a warning for any function declaration or
definition that they can't convert. You can suppress these warnings