@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{-c -S -E -o @var{file} -combine -pipe -pass-exit-codes @gol
-x @var{language} -v -### --help@r{[}=@var{class}@r{]} --target-help @gol
---version @@@var{file}}
+--version -wrapper@@@var{file}}
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
-fvisibility-ms-compat @gol
-Wabi -Wctor-dtor-privacy @gol
-Wnon-virtual-dtor -Wreorder @gol
--Weffc++ -Wno-deprecated -Wstrict-null-sentinel @gol
+-Weffc++ -Wstrict-null-sentinel @gol
-Wno-non-template-friend -Wold-style-cast @gol
-Woverloaded-virtual -Wno-pmf-conversions @gol
-Wsign-promo}
-w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol
-Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol
-Wchar-subscripts -Wclobbered -Wcomment @gol
--Wconversion -Wcoverage-mismatch -Wno-deprecated-declarations @gol
--Wdisabled-optimization -Wno-div-by-zero @gol
+-Wconversion -Wcoverage-mismatch -Wno-deprecated @gol
+-Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero @gol
-Wempty-body -Wno-endif-labels @gol
-Werror -Werror=* @gol
-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
--Wno-format-extra-args -Wformat-nonliteral @gol
--Wformat-security -Wformat-y2k -Wignored-qualifiers @gol
+-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
+-Wformat-security -Wformat-y2k @gol
+-Wframe-larger-than=@var{len} -Wignored-qualifiers @gol
-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol
-Wimport -Wno-import -Winit-self -Winline @gol
-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
--Winvalid-pch -Wlarger-than-@var{len} -Wunsafe-loop-optimizations @gol
+-Winvalid-pch -Wlarger-than=@var{len} -Wunsafe-loop-optimizations @gol
-Wlogical-op -Wlong-long @gol
-Wmain -Wmissing-braces -Wmissing-field-initializers @gol
-Wmissing-format-attribute -Wmissing-include-dirs @gol
--Wmissing-noreturn @gol
+-Wmissing-noreturn -Wno-mudflap @gol
-Wno-multichar -Wnonnull -Wno-overflow @gol
-Woverlength-strings -Wpacked -Wpadded @gol
-Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast @gol
-Wvariadic-macros -Wvla @gol
-Wvolatile-register-var -Wwrite-strings}
-@item C-only Warning Options
+@item C and Objective-C-only Warning Options
@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol
-Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs @gol
-Wold-style-declaration -Wold-style-definition @gol
-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
-fdump-noaddr -fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
--fdump-ipa-all -fdump-ipa-cgraph @gol
+-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
+-fdump-statistics @gol
-fdump-tree-all @gol
-fdump-tree-original@r{[}-@var{n}@r{]} @gol
-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
--fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
-fdump-tree-ch @gol
-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
-fdump-tree-nrv -fdump-tree-vect @gol
-fdump-tree-sink @gol
-fdump-tree-sra@r{[}-@var{n}@r{]} @gol
--fdump-tree-salias @gol
-fdump-tree-fre@r{[}-@var{n}@r{]} @gol
-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
-ftree-vectorizer-verbose=@var{n} @gol
-fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
-fcheck-data-deps -fcprop-registers -fcrossjumping -fcse-follow-jumps @gol
--fcse-skip-blocks -fcx-limited-range -fdata-sections -fdce -fdce @gol
+-fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range @gol
+-fdata-sections -fdce -fdce @gol
-fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol
-fearly-inlining -fexpensive-optimizations -ffast-math @gol
-ffinite-math-only -ffloat-store -fforward-propagate @gol
-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
-fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
-fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol
--fprofile-generate -fprofile-use -fprofile-values -freciprocal-math @gol
--fregmove -frename-registers -freorder-blocks @gol
+-fprofile-dir=@var{path} -fprofile-generate -fprofile-generate=@var{path} @gol
+-fprofile-use -fprofile-use=@var{path} -fprofile-values @gol
+-freciprocal-math -fregmove -frename-registers -freorder-blocks @gol
-freorder-blocks-and-partition -freorder-functions @gol
-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
-frounding-math -frtl-abstract-sequences -fsched2-use-superblocks @gol
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol
-fsplit-wide-types -fstack-protector -fstack-protector-all @gol
-fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer -ftree-ccp @gol
--ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-dce @gol
+-ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-dce -ftree-builtin-dce@gol
-ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im @gol
+-ftree-loop-distribution @gol
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
--ftree-parallelize-loops=@var{n} -ftree-pre -ftree-reassoc -ftree-salias @gol
+-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-reassoc @gol
-ftree-sink -ftree-sra -ftree-store-ccp -ftree-ter @gol
-ftree-vect-loop-version -ftree-vectorize -ftree-vrp -funit-at-a-time @gol
-funroll-all-loops -funroll-loops -funsafe-loop-optimizations @gol
-mno-id-shared-library -mshared-library-id=@var{n} @gol
-mleaf-id-shared-library -mno-leaf-id-shared-library @gol
-msep-data -mno-sep-data -mlong-calls -mno-long-calls @gol
--mfast-fp -minline-plt}
+-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram}
@emph{CRIS Options}
@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol
-mno-wide-multiply -mrtd -malign-double @gol
-mpreferred-stack-boundary=@var{num} -mcx16 -msahf -mrecip @gol
-mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 @gol
+-maes -mpclmul @gol
-msse4a -m3dnow -mpopcnt -mabm -msse5 @gol
-mthreads -mno-align-stringops -minline-all-stringops @gol
-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
-m5-compact -m5-compact-nofpu @gol
-mb -ml -mdalign -mrelax @gol
-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
--mieee -misize -minline-ic_invalidate -mpadstruct -mspace @gol
+-mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace @gol
-mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
-mdivsi3_libfunc=@var{name} @gol
-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
@emph{System V Options}
@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}}
-@emph{TMS320C3x/C4x Options}
-@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}
@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol
-mprolog-function -mno-prolog-function -mspace @gol
@emph{Xtensa Options}
@gccoptlist{-mconst16 -mno-const16 @gol
-mfused-madd -mno-fused-madd @gol
+-mserialize-volatile -mno-serialize-volatile @gol
-mtext-section-literals -mno-text-section-literals @gol
-mtarget-align -mno-target-align @gol
-mlongcalls -mno-longcalls}
@item @var{file}.f
@itemx @var{file}.for
-@itemx @var{file}.FOR
+@itemx @var{file}.ftn
Fixed form Fortran source code which should not be preprocessed.
@item @var{file}.F
+@itemx @var{file}.FOR
@itemx @var{file}.fpp
@itemx @var{file}.FPP
+@itemx @var{file}.FTN
Fixed form Fortran source code which must be preprocessed (with the traditional
preprocessor).
@item @var{file}.f90
@itemx @var{file}.f95
+@itemx @var{file}.f03
+@itemx @var{file}.f08
Free form Fortran source code which should not be preprocessed.
@item @var{file}.F90
@itemx @var{file}.F95
+@itemx @var{file}.F03
+@itemx @var{file}.F08
Free form Fortran source code which must be preprocessed (with the
traditional preprocessor).
generic, or subprogram renaming declaration). Such files are also
called @dfn{specs}.
-@itemx @var{file}.adb
+@item @var{file}.adb
Ada source code file containing a library unit body (a subprogram or
package body). Such files are also called @dfn{bodies}.
ada
f95 f95-cpp-input
java
-treelang
@end smallexample
@item -x none
The sense of a qualifier can be inverted by prefixing it with the
@var{^} character, so for example to display all binary warning
-options (i.e. ones that are either on or off and that do not take an
+options (i.e., ones that are either on or off and that do not take an
argument), which have a description the following can be used:
@smallexample
@opindex version
Display the version number and copyrights of the invoked GCC@.
+@item -wrapper
+@opindex wrapper
+Invoke all subcommands under a wrapper program. It takes a single
+comma separated list as an argument, which will be used to invoke
+the wrapper:
+
+@smallexample
+gcc -c t.c -wrapper gdb,--args
+@end smallexample
+
+This will invoke all subprograms of gcc under "gdb --args",
+thus cc1 invocation will be "gdb --args cc1 ...".
+
@include @value{srcdir}/../libiberty/at-file.texi
@end table
@cindex ISO support
@item -ansi
@opindex ansi
-In C mode, support all ISO C90 programs. In C++ mode,
-remove GNU extensions that conflict with ISO C++.
+In C mode, this is equivalent to @samp{-std=c89}. In C++ mode, it is
+equivalent to @samp{-std=c++98}.
This turns off certain features of GCC that are incompatible with ISO
C90 (when compiling C code), or of standard C++ (when compiling C++ code),
ISO standard doesn't call for; this is to avoid interfering with any
programs that might use these names for other things.
-Functions which would normally be built in but do not have semantics
+Functions that would normally be built in but do not have semantics
defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
-functions with @option{-ansi} is used. @xref{Other Builtins,,Other
+functions when @option{-ansi} is used. @xref{Other Builtins,,Other
built-in functions provided by GCC}, for details of the functions
affected.
@item -std=
@opindex std
-Determine the language standard. This option is currently only
-supported when compiling C or C++. A value for this option must be
-provided; possible values are
+Determine the language standard. @xref{Standards,,Language Standards
+Supported by GCC}, for details of these standard versions. This option
+is currently only supported when compiling C or C++.
+
+The compiler can accept several base standards, such as @samp{c89} or
+@samp{c++98}, and GNU dialects of those standards, such as
+@samp{gnu89} or @samp{gnu++98}. By specifing a base standard, the
+compiler will accept all programs following that standard and those
+using GNU extensions that do not contradict it. For example,
+@samp{-std=c89} turns off certain features of GCC that are
+incompatible with ISO C90, such as the @code{asm} and @code{typeof}
+keywords, but not other GNU extensions that do not have a meaning in
+ISO C90, such as omitting the middle term of a @code{?:}
+expression. On the other hand, by specifing a GNU dialect of a
+standard, all features the compiler support are enabled, even when
+those features change the meaning of the base standard and some
+strict-conforming programs may be rejected. The particular standard
+is used by @option{-pedantic} to identify which features are GNU
+extensions given that version of the standard. For example
+@samp{-std=gnu89 -pedantic} would warn about C++ style @samp{//}
+comments, while @samp{-std=gnu99 -pedantic} would not.
+
+A value for this option must be provided; possible values are
@table @samp
@item c89
@itemx iso9899:1990
-ISO C90 (same as @option{-ansi}).
+Support all ISO C90 programs (certain GNU extensions that conflict
+with ISO C90 are disabled). Same as @option{-ansi} for C code.
@item iso9899:199409
ISO C90 as modified in amendment 1.
names @samp{c9x} and @samp{iso9899:199x} are deprecated.
@item gnu89
-Default, ISO C90 plus GNU extensions (including some C99 features).
+GNU dialect of ISO C90 (including some C99 features). This
+is the default for C code.
@item gnu99
@itemx gnu9x
-ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC,
+GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC,
this will become the default. The name @samp{gnu9x} is deprecated.
@item c++98
-The 1998 ISO C++ standard plus amendments.
+The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for
+C++ code.
@item gnu++98
-The same as @option{-std=c++98} plus GNU extensions. This is the
-default for C++ code.
+GNU dialect of @option{-std=c++98}. This is the default for
+C++ code.
@item c++0x
The working draft of the upcoming ISO C++0x standard. This option
not part of the C++0x standard.
@item gnu++0x
-The same as @option{-std=c++0x} plus GNU extensions. As with
-@option{-std=c++0x}, this option enables experimental features that may
-be removed in future versions of GCC.
+GNU dialect of @option{-std=c++0x}. This option enables
+experimental features that may be removed in future versions of GCC.
@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 @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 C90
-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 -fgnu89-inline
@opindex fgnu89-inline
The option @option{-fgnu89-inline} tells GCC to use the traditional
of the language, you can save some space by using this flag. Note that
exception handling uses the same information, but it will generate it as
needed. The @samp{dynamic_cast} operator can still be used for casts that
-do not require runtime type information, i.e. casts to @code{void *} or to
+do not require runtime type information, i.e.@: casts to @code{void *} or to
unambiguous base classes.
@item -fstats
functions will have linkage like inline functions; they just won't be
inlined by default.
-@item -Wabi @r{(C++ only)}
+@item -Wabi @r{(C++ and Objective-C++ only)}
@opindex Wabi
+@opindex Wno-abi
Warn when G++ generates code that is probably not compatible with the
vendor-neutral C++ ABI@. Although an effort has been made to warn about
all such cases, there are probably some cases that are not warned about,
@end itemize
-@item -Wctor-dtor-privacy @r{(C++ only)}
+@item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
@opindex Wctor-dtor-privacy
+@opindex Wno-ctor-dtor-privacy
Warn when a class seems unusable because all the constructors or
destructors in that class are private, and it has neither friends nor
public static member functions.
-@item -Wnon-virtual-dtor @r{(C++ only)}
+@item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
@opindex Wnon-virtual-dtor
+@opindex Wno-non-virtual-dtor
Warn when a class has virtual functions and accessible non-virtual
destructor, in which case it would be possible but unsafe to delete
an instance of a derived class through a pointer to the base class.
This warning is also enabled if -Weffc++ is specified.
-@item -Wreorder @r{(C++ only)}
+@item -Wreorder @r{(C++ and Objective-C++ only)}
@opindex Wreorder
+@opindex Wno-reorder
@cindex reordering, warning
@cindex warning for reordering of member initializers
Warn when the order of member initializers given in the code does not
The following @option{-W@dots{}} options are not affected by @option{-Wall}.
@table @gcctabopt
-@item -Weffc++ @r{(C++ only)}
+@item -Weffc++ @r{(C++ and Objective-C++ only)}
@opindex Weffc++
+@opindex Wno-effc++
Warn about violations of the following style guidelines from Scott Meyers'
@cite{Effective C++} book:
headers do not obey all of these guidelines; use @samp{grep -v}
to filter out those warnings.
-@item -Wno-deprecated @r{(C++ only)}
-@opindex Wno-deprecated
-Do not warn about usage of deprecated features. @xref{Deprecated Features}.
-
-@item -Wstrict-null-sentinel @r{(C++ only)}
+@item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
@opindex Wstrict-null-sentinel
+@opindex Wno-strict-null-sentinel
Warn also about the use of an uncasted @code{NULL} as sentinel. When
compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
to @code{__null}. Although it is a null pointer constant not a null pointer,
it is guaranteed to of the same size as a pointer. But this use is
not portable across different compilers.
-@item -Wno-non-template-friend @r{(C++ only)}
+@item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
@opindex Wno-non-template-friend
+@opindex Wnon-template-friend
Disable warnings when non-templatized friend functions are declared
within a template. Since the advent of explicit template specification
support in G++, if the name of the friend is an unqualified-id (i.e.,
@option{-Wno-non-template-friend} which keeps the conformant compiler code
but disables the helpful warning.
-@item -Wold-style-cast @r{(C++ only)}
+@item -Wold-style-cast @r{(C++ and Objective-C++ only)}
@opindex Wold-style-cast
+@opindex Wno-old-style-cast
Warn if an old-style (C-style) cast to a non-void type is used within
a C++ program. The new-style casts (@samp{dynamic_cast},
@samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
less vulnerable to unintended effects and much easier to search for.
-@item -Woverloaded-virtual @r{(C++ only)}
+@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
@opindex Woverloaded-virtual
+@opindex Wno-overloaded-virtual
@cindex overloaded virtual fn, warning
@cindex warning for overloaded virtual fn
Warn when a function declaration hides virtual functions from a
will fail to compile.
-@item -Wno-pmf-conversions @r{(C++ only)}
+@item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
@opindex Wno-pmf-conversions
+@opindex Wpmf-conversions
Disable the diagnostic for converting a bound pointer to member function
to a plain pointer.
-@item -Wsign-promo @r{(C++ only)}
+@item -Wsign-promo @r{(C++ and Objective-C++ only)}
@opindex Wsign-promo
+@opindex Wno-sign-promo
Warn when overload resolution chooses a promotion from unsigned or
enumerated type to a signed type, over a conversion to an unsigned type of
the same size. Previous versions of G++ would try to preserve
Dump interface declarations for all classes seen in the source file to a
file named @file{@var{sourcename}.decl}.
-@item -Wassign-intercept
+@item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
@opindex Wassign-intercept
+@opindex Wno-assign-intercept
Warn whenever an Objective-C assignment is being intercepted by the
garbage collector.
-@item -Wno-protocol
+@item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
@opindex Wno-protocol
+@opindex Wprotocol
If a class is declared to implement a protocol, a warning is issued for
every method in the protocol that is not implemented by the class. The
default behavior is to issue a warning for every method not explicitly
methods inherited from the superclass are considered to be implemented,
and no warning is issued for them.
-@item -Wselector
+@item -Wselector @r{(Objective-C and Objective-C++ only)}
@opindex Wselector
+@opindex Wno-selector
Warn if multiple methods of different types for the same selector are
found during compilation. The check is performed on the list of methods
in the final stage of compilation. Additionally, a check is performed
found during compilation, or because the @option{-fsyntax-only} option is
being used.
-@item -Wstrict-selector-match
+@item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
@opindex Wstrict-selector-match
+@opindex Wno-strict-selector-match
Warn if multiple methods with differing argument and/or return types are
found for a given selector when attempting to send a message using this
selector to a receiver of type @code{id} or @code{Class}. When this flag
if any differences found are confined to types which share the same size
and alignment.
-@item -Wundeclared-selector
+@item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
@opindex Wundeclared-selector
+@opindex Wno-undeclared-selector
Warn if a @code{@@selector(@dots{})} expression referring to an
undeclared selector is found. A selector is considered undeclared if no
method with that name has been declared before the
@item -Werror
@opindex Werror
+@opindex Wno-error
Make all warnings into errors.
@item -Werror=
@opindex Werror=
+@opindex Wno-error=
Make the specified warning into an error. The specifier for a warning
is appended, for example @option{-Werror=switch} turns the warnings
controlled by @option{-Wswitch} into errors. This switch takes a
@item -Wfatal-errors
@opindex Wfatal-errors
+@opindex Wno-fatal-errors
This option causes the compiler to abort compilation on the first error
occurred rather than trying to keep going and printing further error
messages.
@item -Wall
@opindex Wall
+@opindex Wno-all
This enables all the 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. This also
-Wsequence-point @gol
-Wsign-compare @r{(only in C++)} @gol
-Wstrict-aliasing @gol
--Wstrict-overflow @gol
+-Wstrict-overflow=1 @gol
-Wswitch @gol
-Wtrigraphs @gol
-Wuninitialized @r{(only with} @option{-O1} @r{and above)} @gol
-Wunused-label @gol
-Wunused-value @gol
-Wunused-variable @gol
+-Wvolatile-register-var @gol
}
Note that some warning flags are not implied by @option{-Wall}. Some of
@item -Wextra
@opindex W
@opindex Wextra
+@opindex Wno-extra
This enables some extra warning flags that are not enabled by
@option{-Wall}. (This option used to be called @option{-W}. The older
name is still supported, but the newer name is more descriptive.)
@item -Wno-import
@opindex Wno-import
+@opindex Wimport
Inhibit warning messages about the use of @samp{#import}.
@item -Wchar-subscripts
@opindex Wchar-subscripts
+@opindex Wno-char-subscripts
Warn if an array subscript has type @code{char}. This is a common cause
of error, as programmers often forget that this type is signed on some
machines.
@item -Wcomment
@opindex Wcomment
+@opindex Wno-comment
Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
This warning is enabled by @option{-Wall}.
@item -Wformat
@opindex Wformat
+@opindex Wno-format
@opindex ffreestanding
@opindex fno-builtin
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
@item -Wformat-y2k
@opindex Wformat-y2k
+@opindex Wno-format-y2k
If @option{-Wformat} is specified, also warn about @code{strftime}
formats which may yield only a two-digit year.
+@item -Wno-format-contains-nul
+@opindex Wno-format-contains-nul
+@opindex Wformat-contains-nul
+If @option{-Wformat} is specified, do not warn about format strings that
+contain NUL bytes.
+
@item -Wno-format-extra-args
@opindex Wno-format-extra-args
+@opindex Wformat-extra-args
If @option{-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.
warning if the unused arguments are all pointers, since the Single
Unix Specification says that such unused arguments are allowed.
-@item -Wno-format-zero-length
+@item -Wno-format-zero-length @r{(C and Objective-C only)}
@opindex Wno-format-zero-length
+@opindex Wformat-zero-length
If @option{-Wformat} is specified, do not warn about zero-length formats.
The C standard specifies that zero-length formats are allowed.
@item -Wformat-nonliteral
@opindex Wformat-nonliteral
+@opindex Wno-format-nonliteral
If @option{-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
@opindex Wformat-security
+@opindex Wno-format-security
If @option{-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
@item -Wformat=2
@opindex Wformat=2
+@opindex Wno-format=2
Enable @option{-Wformat} plus format checks not included in
@option{-Wformat}. Currently equivalent to @samp{-Wformat
-Wformat-nonliteral -Wformat-security -Wformat-y2k}.
-@item -Wnonnull
+@item -Wnonnull @r{(C and Objective-C only)}
@opindex Wnonnull
+@opindex Wno-nonnull
Warn about passing a null pointer for arguments marked as
requiring a non-null value by the @code{nonnull} function attribute.
@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Winit-self
+@opindex Wno-init-self
Warn about uninitialized variables which are initialized with themselves.
Note this option can only be used with the @option{-Wuninitialized} option,
which in turn only works with @option{-O1} and above.
@end group
@end smallexample
-@item -Wimplicit-int
+@item -Wimplicit-int @r{(C and Objective-C only)}
@opindex Wimplicit-int
+@opindex Wno-implicit-int
Warn when a declaration does not specify a type.
This warning is enabled by @option{-Wall}.
-@item -Wimplicit-function-declaration
+@item -Wimplicit-function-declaration @r{(C and Objective-C only)}
@opindex Wimplicit-function-declaration
@opindex Wno-implicit-function-declaration
Give a warning whenever a function is used before being declared. In
@item -Wimplicit
@opindex Wimplicit
+@opindex Wno-implicit
Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
This warning is enabled by @option{-Wall}.
-@item -Wignored-qualifiers
+@item -Wignored-qualifiers @r{(C and C++ only)}
@opindex Wignored-qualifiers
@opindex Wno-ignored-qualifiers
Warn if the return type of a function has a type qualifier
@item -Wmain
@opindex Wmain
+@opindex Wno-main
Warn if the type of @samp{main} is suspicious. @samp{main} should be a
function with external linkage, returning int, taking either zero
arguments, two, or three arguments of appropriate types.
@item -Wmissing-braces
@opindex Wmissing-braces
+@opindex Wno-missing-braces
Warn if an aggregate or union initializer is not fully bracketed. In
the following example, the initializer for @samp{a} is not fully
bracketed, but that for @samp{b} is fully bracketed.
@item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wmissing-include-dirs
+@opindex Wno-missing-include-dirs
Warn if a user-supplied include directory does not exist.
@item -Wparentheses
@opindex Wparentheses
+@opindex Wno-parentheses
Warn if parentheses are omitted in certain contexts, such
as when there is an assignment in a context where a truth value
is expected, or when operators are nested whose precedence people
@item -Wsequence-point
@opindex Wsequence-point
+@opindex Wno-sequence-point
Warn about code that may have undefined semantics because of violations
of sequence point rules in the C and C++ standards.
@item -Wswitch
@opindex Wswitch
+@opindex Wno-switch
Warn whenever a @code{switch} statement has an index of enumerated type
and lacks a @code{case} for one or more of the named codes of that
enumeration. (The presence of a @code{default} label prevents this
This warning is enabled by @option{-Wall}.
@item -Wswitch-default
-@opindex Wswitch-switch
+@opindex Wswitch-default
+@opindex Wno-switch-default
Warn whenever a @code{switch} statement does not have a @code{default}
case.
@item -Wswitch-enum
@opindex Wswitch-enum
+@opindex Wno-switch-enum
Warn whenever a @code{switch} statement has an index of enumerated type
and lacks a @code{case} for one or more of the named codes of that
enumeration. @code{case} labels outside the enumeration range also
@item -Wtrigraphs
@opindex Wtrigraphs
+@opindex Wno-trigraphs
Warn if any trigraphs are encountered that might change the meaning of
the program (trigraphs within comments are not warned about).
This warning is enabled by @option{-Wall}.
@item -Wunused-function
@opindex Wunused-function
+@opindex Wno-unused-function
Warn whenever a static function is declared but not defined or a
non-inline static function is unused.
This warning is enabled by @option{-Wall}.
@item -Wunused-label
@opindex Wunused-label
+@opindex Wno-unused-label
Warn whenever a label is declared but not used.
This warning is enabled by @option{-Wall}.
@item -Wunused-parameter
@opindex Wunused-parameter
+@opindex Wno-unused-parameter
Warn whenever a function parameter is unused aside from its declaration.
To suppress this warning use the @samp{unused} attribute
@item -Wunused-variable
@opindex Wunused-variable
+@opindex Wno-unused-variable
Warn whenever a local variable or non-constant static variable is unused
aside from its declaration.
This warning is enabled by @option{-Wall}.
@item -Wunused-value
@opindex Wunused-value
+@opindex Wno-unused-value
Warn whenever a statement computes a result that is explicitly not
used. To suppress this warning cast the unused expression to
@samp{void}. This includes an expression-statement or the left-hand
@item -Wunused
@opindex Wunused
+@opindex Wno-unused
All the above @option{-Wunused} options combined.
In order to get a warning about an unused function parameter, you must
@item -Wuninitialized
@opindex Wuninitialized
+@opindex Wno-uninitialized
Warn if an automatic variable is used without first being initialized or
if a variable may be clobbered by a @code{setjmp} call.
@item -Wunknown-pragmas
@opindex Wunknown-pragmas
+@opindex Wno-unknown-pragmas
@cindex warning for unknown pragmas
@cindex unknown pragmas, warning
@cindex pragmas, warning of unknown
@item -Wstrict-aliasing
@opindex Wstrict-aliasing
+@opindex Wno-strict-aliasing
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code which might break the strict aliasing rules that the
compiler is using for optimization. The warning does not catch all
@item -Wstrict-aliasing=n
@opindex Wstrict-aliasing=n
+@opindex Wno-strict-aliasing=n
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code which might break the strict aliasing rules that the
compiler is using for optimization.
@item -Wstrict-overflow
@itemx -Wstrict-overflow=@var{n}
@opindex Wstrict-overflow
+@opindex Wno-strict-overflow
This option is only active when @option{-fstrict-overflow} is active.
It warns about cases where the compiler optimizes based on the
assumption that signed overflow does not occur. Note that it does not
@item -Wsystem-headers
@opindex Wsystem-headers
+@opindex Wno-system-headers
@cindex warnings from system headers
@cindex system headers, warnings from
Print warning messages for constructs found in system header files.
@item -Wfloat-equal
@opindex Wfloat-equal
+@opindex Wno-float-equal
Warn if floating point values are used in equality comparisons.
The idea behind this is that sometimes it is convenient (for the
this is done with the relational operators, so equality comparisons are
probably mistaken.
-@item -Wtraditional @r{(C only)}
+@item -Wtraditional @r{(C and Objective-C only)}
@opindex Wtraditional
+@opindex Wno-traditional
Warn about certain constructs that behave differently in traditional and
ISO C@. Also warn about ISO C constructs that have no traditional C
equivalent, and/or problematic constructs which should be avoided.
traditional C compatibility.
@end itemize
-@item -Wtraditional-conversion @r{(C only)}
+@item -Wtraditional-conversion @r{(C and Objective-C only)}
@opindex Wtraditional-conversion
+@opindex Wno-traditional-conversion
Warn if a prototype causes a type conversion that is different from what
would happen to the same argument in the absence of a prototype. This
includes conversions of fixed point to floating and vice versa, and
conversions changing the width or signedness of a fixed point argument
except when the same as the default promotion.
-@item -Wdeclaration-after-statement @r{(C only)}
+@item -Wdeclaration-after-statement @r{(C and Objective-C only)}
@opindex Wdeclaration-after-statement
+@opindex Wno-declaration-after-statement
Warn when a declaration is found after a statement in a block. This
construct, known from C++, was introduced with ISO C99 and is by default
allowed in GCC@. It is not supported by ISO C90 and was not supported by
@item -Wundef
@opindex Wundef
+@opindex Wno-undef
Warn if an undefined identifier is evaluated in an @samp{#if} directive.
@item -Wno-endif-labels
@item -Wshadow
@opindex Wshadow
+@opindex Wno-shadow
Warn whenever a local variable shadows another local variable, parameter or
global variable or whenever a built-in function is shadowed.
-@item -Wlarger-than-@var{len}
-@opindex Wlarger-than
+@item -Wlarger-than=@var{len}
+@opindex Wlarger-than=@var{len}
+@opindex Wlarger-than-@var{len}
Warn whenever an object of larger than @var{len} bytes is defined.
+@item -Wframe-larger-than=@var{len}
+@opindex Wframe-larger-than
+Warn if the size of a function frame is larger than @var{len} bytes.
+The computation done to determine the stack frame size is approximate
+and not conservative.
+The actual requirements may be somewhat greater than @var{len}
+even if you do not get a warning. In addition, any space allocated
+via @code{alloca}, variable-length arrays, or related constructs
+is not included by the compiler when determining
+whether or not to issue a warning.
+
@item -Wunsafe-loop-optimizations
@opindex Wunsafe-loop-optimizations
+@opindex Wno-unsafe-loop-optimizations
Warn if the loop cannot be optimized because the compiler could not
assume anything on the bounds of the loop indices. With
@option{-funsafe-loop-optimizations} warn if the compiler made
@item -Wpointer-arith
@opindex Wpointer-arith
+@opindex Wno-pointer-arith
Warn about anything that depends on the ``size of'' a function type or
of @code{void}. GNU C assigns these types a size of 1, for
convenience in calculations with @code{void *} pointers and pointers
@samp{<} or @samp{>=}. This warning is also enabled by
@option{-Wextra}.
-@item -Wbad-function-cast @r{(C only)}
+@item -Wbad-function-cast @r{(C and Objective-C only)}
@opindex Wbad-function-cast
+@opindex Wno-bad-function-cast
Warn whenever a function call is cast to a non-matching type.
For example, warn if @code{int malloc()} is cast to @code{anything *}.
-@item -Wc++-compat
+@item -Wc++-compat @r{(C and Objective-C only)}
Warn about ISO C constructs that are outside of the common subset of
ISO C and ISO C++, e.g.@: request for implicit conversion from
@code{void *} to a pointer to non-@code{void} type.
@item -Wcast-qual
@opindex Wcast-qual
+@opindex Wno-cast-qual
Warn whenever a pointer is cast so as to remove a type qualifier from
the target type. For example, warn if a @code{const char *} is cast
to an ordinary @code{char *}.
@item -Wcast-align
@opindex Wcast-align
+@opindex Wno-cast-align
Warn whenever a pointer is cast such that the required alignment of the
target is increased. For example, warn if a @code{char *} is cast to
an @code{int *} on machines where integers can only be accessed at
@item -Wwrite-strings
@opindex Wwrite-strings
+@opindex Wno-write-strings
When compiling C, give string constants the type @code{const
char[@var{length}]} so that
copying the address of one into a non-@code{const} @code{char *}
@item -Wclobbered
@opindex Wclobbered
+@opindex Wno-clobbered
Warn for variables that might be changed by @samp{longjmp} or
@samp{vfork}. This warning is also enabled by @option{-Wextra}.
@item -Wempty-body
@opindex Wempty-body
+@opindex Wno-empty-body
Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
while} statement. Additionally, in C++, warn when an empty body occurs
in a @samp{while} or @samp{for} statement with no whitespacing before
@item -Wsign-compare
@opindex Wsign-compare
+@opindex Wno-sign-compare
@cindex warning for comparison of signed and unsigned values
@cindex comparison of signed and unsigned values, warning
@cindex signed and unsigned values, comparison warning
@item -Waggregate-return
@opindex Waggregate-return
+@opindex Wno-aggregate-return
Warn if any functions that return structures or unions are defined or
called. (In languages where you can return an array, this also elicits
a warning.)
etc. This will not stop errors for incorrect use of supported
attributes.
-@item -Wstrict-prototypes @r{(C only)}
+@item -Wstrict-prototypes @r{(C and Objective-C only)}
@opindex Wstrict-prototypes
+@opindex Wno-strict-prototypes
Warn if a function is declared or defined without specifying the
argument types. (An old-style function definition is permitted without
a warning if preceded by a declaration which specifies the argument
types.)
-@item -Wold-style-declaration @r{(C only)}
+@item -Wold-style-declaration @r{(C and Objective-C only)}
@opindex Wold-style-declaration
+@opindex Wno-old-style-declaration
Warn for obsolescent usages, according to the C Standard, in a
declaration. For example, warn if storage-class specifiers like
@code{static} are not the first things in a declaration. This warning
is also enabled by @option{-Wextra}.
-@item -Wold-style-definition @r{(C only)}
+@item -Wold-style-definition @r{(C and Objective-C only)}
@opindex Wold-style-definition
+@opindex Wno-old-style-definition
Warn if an old-style function definition is used. A warning is given
even if there is a previous prototype.
-@item -Wmissing-parameter-type @r{(C only)}
+@item -Wmissing-parameter-type @r{(C and Objective-C only)}
@opindex Wmissing-parameter-type
+@opindex Wno-missing-parameter-type
A function parameter is declared without a type specifier in K&R-style
functions:
This warning is also enabled by @option{-Wextra}.
-@item -Wmissing-prototypes @r{(C only)}
+@item -Wmissing-prototypes @r{(C and Objective-C only)}
@opindex Wmissing-prototypes
+@opindex Wno-missing-prototypes
Warn if a global function is defined without a previous prototype
declaration. This warning is issued even if the definition itself
provides a prototype. The aim is to detect global functions that fail
to be declared in header files.
-@item -Wmissing-declarations @r{(C and C++ only)}
+@item -Wmissing-declarations
@opindex Wmissing-declarations
+@opindex Wno-missing-declarations
Warn if a global function is defined without a previous declaration.
Do so even if the definition itself provides a prototype.
Use this option to detect global functions that are not declared in
@item -Wmissing-field-initializers
@opindex Wmissing-field-initializers
+@opindex Wno-missing-field-initializers
@opindex W
@opindex Wextra
+@opindex Wno-extra
Warn if a structure's initializer has some fields missing. For
example, the following code would cause such a warning, because
@code{x.h} is implicitly zero:
@item -Wmissing-noreturn
@opindex Wmissing-noreturn
+@opindex Wno-missing-noreturn
Warn about functions which might be candidates for attribute @code{noreturn}.
Note these are only possible candidates, not absolute ones. Care should
be taken to manually verify functions actually do not ever return before
@item -Wmissing-format-attribute
@opindex Wmissing-format-attribute
+@opindex Wno-missing-format-attribute
@opindex Wformat
+@opindex Wno-format
Warn about function pointers which might be candidates for @code{format}
attributes. Note these are only possible candidates, not absolute ones.
GCC will guess that function pointers with @code{format} attributes that
implementation-defined values, and should not be used in portable code.
@item -Wnormalized=<none|id|nfc|nfkc>
-@opindex Wnormalized
+@opindex Wnormalized=
@cindex NFC
@cindex NFKC
@cindex character set, input normalization
Unfortunately, there are some characters which ISO C and ISO C++ allow
in identifiers that when turned into NFC aren't allowable as
identifiers. That is, there's no way to use these symbols in portable
-ISO C or C++ and have all your identifiers in NFC.
+ISO C or C++ and have all your identifiers in NFC@.
@option{-Wnormalized=id} suppresses the warning for these characters.
It is hoped that future versions of the standards involved will correct
this, which is why this option is not the default.
useful as a local coding convention if the programming environment is
unable to be fixed to display these characters distinctly.
+@item -Wno-deprecated
+@opindex Wno-deprecated
+@opindex Wdeprecated
+Do not warn about usage of deprecated features. @xref{Deprecated Features}.
+
@item -Wno-deprecated-declarations
@opindex Wno-deprecated-declarations
+@opindex Wdeprecated-declarations
Do not warn about uses of functions (@pxref{Function Attributes}),
variables (@pxref{Variable Attributes}), and types (@pxref{Type
Attributes}) marked as deprecated by using the @code{deprecated}
@item -Wno-overflow
@opindex Wno-overflow
+@opindex Woverflow
Do not warn about compile-time overflow in constant expressions.
-@item -Woverride-init
+@item -Woverride-init @r{(C and Objective-C only)}
@opindex Woverride-init
+@opindex Wno-override-init
@opindex W
@opindex Wextra
+@opindex Wno-extra
Warn if an initialized field without side effects is overridden when
using designated initializers (@pxref{Designated Inits, , Designated
Initializers}).
@item -Wpacked
@opindex Wpacked
+@opindex Wno-packed
Warn if a structure is given the packed attribute, but the packed
attribute has no effect on the layout or size of the structure.
Such structures may be mis-aligned for little benefit. For
@item -Wpadded
@opindex Wpadded
+@opindex Wno-padded
Warn if padding is included in a structure, either to align an element
of the structure or to align the whole structure. Sometimes when this
happens it is possible to rearrange the fields of the structure to
@item -Wredundant-decls
@opindex Wredundant-decls
+@opindex Wno-redundant-decls
Warn if anything is declared more than once in the same scope, even in
cases where multiple declaration is valid and changes nothing.
-@item -Wnested-externs @r{(C only)}
+@item -Wnested-externs @r{(C and Objective-C only)}
@opindex Wnested-externs
+@opindex Wno-nested-externs
Warn if an @code{extern} declaration is encountered within a function.
@item -Wunreachable-code
@opindex Wunreachable-code
+@opindex Wno-unreachable-code
Warn if the compiler detects that code will never be executed.
This option is intended to warn when the compiler detects that at
@item -Winline
@opindex Winline
+@opindex Wno-inline
Warn if a function can not be inlined and it was declared as inline.
Even with this option, the compiler will not warn about failures to
inline functions declared in system headers.
seemingly insignificant changes in the source program can cause the
warnings produced by @option{-Winline} to appear or disappear.
-@item -Wno-invalid-offsetof @r{(C++ only)}
+@item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
@opindex Wno-invalid-offsetof
+@opindex Winvalid-offsetof
Suppress warnings from applying the @samp{offsetof} macro to a non-POD
type. According to the 1998 ISO C++ standard, applying @samp{offsetof}
to a non-POD type is undefined. In existing C++ implementations,
The restrictions on @samp{offsetof} may be relaxed in a future version
of the C++ standard.
-@item -Wno-int-to-pointer-cast @r{(C only)}
+@item -Wno-int-to-pointer-cast @r{(C and Objective-C only)}
@opindex Wno-int-to-pointer-cast
+@opindex Wint-to-pointer-cast
Suppress warnings from casts to pointer type of an integer of a
different size.
-@item -Wno-pointer-to-int-cast @r{(C only)}
+@item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
@opindex Wno-pointer-to-int-cast
+@opindex Wpointer-to-int-cast
Suppress warnings from casts from a pointer to an integer type of a
different size.
@item -Winvalid-pch
@opindex Winvalid-pch
+@opindex Wno-invalid-pch
Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
the search path but can't be used.
@opindex Wno-volatile-register-var
Warn if a register variable is declared volatile. The volatile
modifier does not inhibit all optimizations that may eliminate reads
-and/or writes to register variables.
+and/or writes to register variables. This warning is enabled by
+@option{-Wall}.
@item -Wdisabled-optimization
@opindex Wdisabled-optimization
+@opindex Wno-disabled-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
complex; GCC will refuse to optimize programs when the optimization
itself is likely to take inordinate amounts of time.
-@item -Wpointer-sign
+@item -Wpointer-sign @r{(C and Objective-C only)}
@opindex Wpointer-sign
@opindex Wno-pointer-sign
Warn for pointer argument passing or assignment with different signedness.
@item -Wstack-protector
@opindex Wstack-protector
+@opindex Wno-stack-protector
This option is only active when @option{-fstack-protector} is active. It
warns about functions that will not be protected against stack smashing.
+@item -Wno-mudflap
+@opindex Wno-mudflap
+Suppress warnings about constructs that cannot be instrumented by
+@option{-fmudflap}.
+
@item -Woverlength-strings
@opindex Woverlength-strings
+@opindex Wno-overlength-strings
Warn about string constants which are longer than the ``minimum
maximum'' length specified in the C standard. Modern compilers
generally allow string constants which are much longer than the
and dbg_cnt(tail_call) will return false always.
@item -d@var{letters}
-@item -fdump-rtl-@var{pass}
+@itemx -fdump-rtl-@var{pass}
@opindex d
Says to make debugging dumps during compilation at times specified by
@var{letters}. This is used for debugging the RTL-based passes of the
@opindex dA
Annotate the assembler output with miscellaneous debugging information.
-@item -dB
-@itemx -fdump-rtl-bbro
-@opindex dB
+@item -fdump-rtl-bbro
@opindex fdump-rtl-bbro
Dump after block reordering, to @file{@var{file}.148r.bbro}.
-@item -dc
-@itemx -fdump-rtl-combine
-@opindex dc
+@item -fdump-rtl-combine
@opindex fdump-rtl-combine
Dump after the RTL instruction combination pass, to the file
@file{@var{file}.129r.combine}.
-@item -dC
-@itemx -fdump-rtl-ce1
+@item -fdump-rtl-ce1
@itemx -fdump-rtl-ce2
-@opindex dC
@opindex fdump-rtl-ce1
@opindex fdump-rtl-ce2
-@option{-dC} and @option{-fdump-rtl-ce1} enable dumping after the
-first if conversion, to the file @file{@var{file}.117r.ce1}. @option{-dC}
-and @option{-fdump-rtl-ce2} enable dumping after the second if
+@option{-fdump-rtl-ce1} enable dumping after the
+first if conversion, to the file @file{@var{file}.117r.ce1}.
+@option{-fdump-rtl-ce2} enable dumping after the second if
conversion, to the file @file{@var{file}.130r.ce2}.
-@item -dd
-@itemx -fdump-rtl-btl
+@item -fdump-rtl-btl
@itemx -fdump-rtl-dbr
-@opindex dd
@opindex fdump-rtl-btl
@opindex fdump-rtl-dbr
-@option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch
-target load optimization, to @file{@var{file}.31.btl}. @option{-dd}
-and @option{-fdump-rtl-dbr} enable dumping after delayed branch
+@option{-fdump-rtl-btl} enable dumping after branch
+target load optimization, to @file{@var{file}.31.btl}.
+@option{-fdump-rtl-dbr} enable dumping after delayed branch
scheduling, to @file{@var{file}.36.dbr}.
@item -dD
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
-@item -dE
-@itemx -fdump-rtl-ce3
-@opindex dE
+@item -fdump-rtl-ce3
@opindex fdump-rtl-ce3
Dump after the third if conversion, to @file{@var{file}.146r.ce3}.
-@item -df
-@itemx -fdump-rtl-cfg
+@item -fdump-rtl-cfg
@itemx -fdump-rtl-life
-@opindex df
@opindex fdump-rtl-cfg
@opindex fdump-rtl-life
-@option{-df} and @option{-fdump-rtl-cfg} enable dumping after control
-and data flow analysis, to @file{@var{file}.116r.cfg}. @option{-df}
-and @option{-fdump-rtl-cfg} enable dumping dump after life analysis,
+@option{-fdump-rtl-cfg} enable dumping after control
+and data flow analysis, to @file{@var{file}.116r.cfg}.
+@option{-fdump-rtl-cfg} enable dumping dump after life analysis,
to @file{@var{file}.128r.life1} and @file{@var{file}.135r.life2}.
-@item -dg
-@itemx -fdump-rtl-greg
-@opindex dg
+@item -fdump-rtl-greg
@opindex fdump-rtl-greg
Dump after global register allocation, to @file{@var{file}.139r.greg}.
-@item -dG
-@itemx -fdump-rtl-gcse
+@item -fdump-rtl-gcse
@itemx -fdump-rtl-bypass
-@opindex dG
@opindex fdump-rtl-gcse
@opindex fdump-rtl-bypass
-@option{-dG} and @option{-fdump-rtl-gcse} enable dumping after GCSE, to
-@file{@var{file}.114r.gcse}. @option{-dG} and @option{-fdump-rtl-bypass}
+@option{-fdump-rtl-gcse} enable dumping after GCSE, to
+@file{@var{file}.114r.gcse}. @option{-fdump-rtl-bypass}
enable dumping after jump bypassing and control flow optimizations, to
@file{@var{file}.115r.bypass}.
-@item -dh
-@itemx -fdump-rtl-eh
-@opindex dh
+@item -fdump-rtl-eh
@opindex fdump-rtl-eh
Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
-@item -di
-@itemx -fdump-rtl-sibling
-@opindex di
+@item -fdump-rtl-sibling
@opindex fdump-rtl-sibling
Dump after sibling call optimizations, to @file{@var{file}.106r.sibling}.
-@item -dj
-@itemx -fdump-rtl-jump
-@opindex dj
+@item -fdump-rtl-jump
@opindex fdump-rtl-jump
Dump after the first jump optimization, to @file{@var{file}.112r.jump}.
-@item -dk
-@itemx -fdump-rtl-stack
-@opindex dk
+@item -fdump-rtl-stack
@opindex fdump-rtl-stack
Dump after conversion from GCC's "flat register file" registers to the
x87's stack-like registers, to @file{@var{file}.152r.stack}.
-@item -dl
-@itemx -fdump-rtl-lreg
-@opindex dl
+@item -fdump-rtl-lreg
@opindex fdump-rtl-lreg
Dump after local register allocation, to @file{@var{file}.138r.lreg}.
-@item -dL
-@itemx -fdump-rtl-loop2
-@opindex dL
+@item -fdump-rtl-loop2
@opindex fdump-rtl-loop2
@option{-dL} and @option{-fdump-rtl-loop2} enable dumping after the
loop optimization pass, to @file{@var{file}.119r.loop2},
@file{@var{file}.121r.loop2_invariant}, and
@file{@var{file}.125r.loop2_done}.
-@item -dm
-@itemx -fdump-rtl-sms
-@opindex dm
+@item -fdump-rtl-sms
@opindex fdump-rtl-sms
Dump after modulo scheduling, to @file{@var{file}.136r.sms}.
-@item -dM
-@itemx -fdump-rtl-mach
-@opindex dM
+@item -fdump-rtl-mach
@opindex fdump-rtl-mach
Dump after performing the machine dependent reorganization pass, to
@file{@var{file}.155r.mach} if that pass exists.
-@item -dn
-@itemx -fdump-rtl-rnreg
-@opindex dn
+@item -fdump-rtl-rnreg
@opindex fdump-rtl-rnreg
Dump after register renumbering, to @file{@var{file}.147r.rnreg}.
-@item -dN
-@itemx -fdump-rtl-regmove
-@opindex dN
+@item -fdump-rtl-regmove
@opindex fdump-rtl-regmove
Dump after the register move pass, to @file{@var{file}.132r.regmove}.
-@item -do
-@itemx -fdump-rtl-postreload
-@opindex do
+@item -fdump-rtl-postreload
@opindex fdump-rtl-postreload
Dump after post-reload optimizations, to @file{@var{file}.24.postreload}.
-@item -dr
-@itemx -fdump-rtl-expand
-@opindex dr
+@item -fdump-rtl-expand
@opindex fdump-rtl-expand
Dump after RTL generation, to @file{@var{file}.104r.expand}.
-@item -dR
-@itemx -fdump-rtl-sched2
-@opindex dR
+@item -fdump-rtl-sched2
@opindex fdump-rtl-sched2
Dump after the second scheduling pass, to @file{@var{file}.149r.sched2}.
-@item -ds
-@itemx -fdump-rtl-cse
-@opindex ds
+@item -fdump-rtl-cse
@opindex fdump-rtl-cse
Dump after CSE (including the jump optimization that sometimes follows
CSE), to @file{@var{file}.113r.cse}.
-@item -dS
-@itemx -fdump-rtl-sched1
-@opindex dS
+@item -fdump-rtl-sched1
@opindex fdump-rtl-sched1
Dump after the first scheduling pass, to @file{@var{file}.136r.sched1}.
-@item -dt
-@itemx -fdump-rtl-cse2
-@opindex dt
+@item -fdump-rtl-cse2
@opindex fdump-rtl-cse2
Dump after the second CSE pass (including the jump optimization that
sometimes follows CSE), to @file{@var{file}.127r.cse2}.
-@item -dT
-@itemx -fdump-rtl-tracer
-@opindex dT
+@item -fdump-rtl-tracer
@opindex fdump-rtl-tracer
Dump after running tracer, to @file{@var{file}.118r.tracer}.
-@item -dV
-@itemx -fdump-rtl-vpt
+@item -fdump-rtl-vpt
@itemx -fdump-rtl-vartrack
-@opindex dV
@opindex fdump-rtl-vpt
@opindex fdump-rtl-vartrack
-@option{-dV} and @option{-fdump-rtl-vpt} enable dumping after the value
-profile transformations, to @file{@var{file}.10.vpt}. @option{-dV}
-and @option{-fdump-rtl-vartrack} enable dumping after variable tracking,
+@option{-fdump-rtl-vpt} enable dumping after the value
+profile transformations, to @file{@var{file}.10.vpt}.
+@option{-fdump-rtl-vartrack} enable dumping after variable tracking,
to @file{@var{file}.154r.vartrack}.
-@item -dw
-@itemx -fdump-rtl-flow2
-@opindex dw
+@item -fdump-rtl-flow2
@opindex fdump-rtl-flow2
Dump after the second flow pass, to @file{@var{file}.142r.flow2}.
-@item -dz
-@itemx -fdump-rtl-peephole2
-@opindex dz
+@item -fdump-rtl-peephole2
@opindex fdump-rtl-peephole2
Dump after the peephole pass, to @file{@var{file}.145r.peephole2}.
-@item -dZ
-@itemx -fdump-rtl-web
-@opindex dZ
+@item -fdump-rtl-web
@opindex fdump-rtl-web
Dump after live range splitting, to @file{@var{file}.126r.web}.
-@item -da
-@itemx -fdump-rtl-all
-@opindex da
+@item -fdump-rtl-all
@opindex fdump-rtl-all
Produce all the dumps listed above.
@table @samp
@item all
-Enables all inter-procedural analysis dumps; currently the only produced
-dump is the @samp{cgraph} dump.
+Enables all inter-procedural analysis dumps.
@item cgraph
Dumps information about call-graph optimization, unused function removal,
and inlining decisions.
+
+@item inline
+Dump after function inlining.
+
@end table
+@item -fdump-statistics-@var{option}
+@opindex -fdump-statistics
+Enable and control dumping of pass statistics in a separate file. The
+file name is generated by appending a suffix ending in @samp{.statistics}
+to the source file name. If the @samp{-@var{option}} form is used,
+@samp{-stats} will cause counters to be summed over the whole compilation unit
+while @samp{-details} will dump every event as the passes generate them.
+The default with no option is to sum counters for each function compiled.
+
@item -fdump-tree-@var{switch}
@itemx -fdump-tree-@var{switch}-@var{options}
@opindex fdump-tree
Enable showing line numbers for statements.
@item uid
Enable showing the unique ID (@code{DECL_UID}) for each variable.
+@item verbose
+Enable showing the tree dump for each statement.
@item all
-Turn on all options, except @option{raw}, @option{slim} and @option{lineno}.
+Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
+and @option{lineno}.
@end table
The following tree dumps are possible:
@item optimized
Dump after all tree based optimization, to @file{@var{file}.optimized}.
-@item inlined
-Dump after function inlining, to @file{@var{file}.inlined}.
-
@item gimple
@opindex fdump-tree-gimple
Dump each function before and after the gimplification pass to a file. The
Dump SSA related information to a file. The file name is made by appending
@file{.ssa} to the source file name.
-@item salias
-@opindex fdump-tree-salias
-Dump structure aliasing variable information to a file. This file name
-is made by appending @file{.salias} to the source file name.
-
@item alias
@opindex fdump-tree-alias
Dump aliasing information for each function. The file name is made by
@item storeccp
@opindex fdump-tree-storeccp
-Dump each function after STORE-CCP. The file name is made by appending
+Dump each function after STORE-CCP@. The file name is made by appending
@file{.storeccp} to the source file name.
@item pre
If @var{n}=1 the vectorizer reports each loop that got vectorized,
and the total number of loops that got vectorized.
If @var{n}=2 the vectorizer also reports non-vectorized loops that passed
-the first analysis phase (vect_analyze_loop_form) - i.e. countable,
+the first analysis phase (vect_analyze_loop_form) - i.e.@: countable,
inner-most, single-bb, single-entry/exit loops. This is the same verbosity
level that @option{-fdump-tree-vect-stats} uses.
Higher verbosity levels mean either more information dumped for each
reported loop, or same amount of information reported for more loops:
If @var{n}=3, alignment related information is added to the reports.
-If @var{n}=4, data-references related information (e.g. memory dependences,
+If @var{n}=4, data-references related information (e.g.@: memory dependences,
memory access-patterns) is added to the reports.
If @var{n}=5, the vectorizer reports also non-vectorized inner-most loops
-that did not pass the first analysis phase (i.e. may not be countable, or
+that did not pass the first analysis phase (i.e., may not be countable, or
may have complicated control-flow).
If @var{n}=6, the vectorizer reports also non-vectorized nested loops.
For @var{n}=7, all the information the vectorizer generates during its
(if the debugging information format supports this information).
It is enabled by default when compiling with optimization (@option{-Os},
-@option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and
+@option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
the debug info format supports it.
@item -print-file-name=@var{library}
-ftree-ch @gol
-ftree-copyrename @gol
-ftree-dce @gol
+-ftree-builtin-dce @gol
-ftree-dominator-opts @gol
-ftree-dse @gol
-ftree-fre @gol
@opindex O3
Optimize yet more. @option{-O3} turns on all optimizations specified by
@option{-O2} and also turns on the @option{-finline-functions},
-@option{-funswitch-loops}, @option{-fpredictive-commoning} and
-@option{-fgcse-after-reload} options.
+@option{-funswitch-loops}, @option{-fpredictive-commoning},
+@option{-fgcse-after-reload} and @option{-ftree-vectorize} options.
@item -O0
@opindex O0
@item -fforward-propagate
@opindex fforward-propagate
-Perform a forward propagation pass on RTL. The pass tries to combine two
+Perform a forward propagation pass on RTL@. The pass tries to combine two
instructions and checks if the result can be simplified. If loop unrolling
is active, two passes are performed and the second is scheduled after
loop unrolling.
@item -finline-limit=@var{n}
@opindex finline-limit
By default, GCC limits the size of functions that can be inlined. This flag
-allows the control of this limit for functions that are explicitly marked as
-inline (i.e., marked with the inline keyword or defined within the class
-definition in c++). @var{n} is the size of functions that can be inlined in
-number of pseudo instructions (not counting parameter handling). The default
-value of @var{n} is 600.
-Increasing this value can result in more inlined code at
-the cost of compilation time and memory consumption. Decreasing usually makes
-the compilation faster and less code will be inlined (which presumably
-means slower programs). This option is particularly useful for programs that
-use inlining heavily such as those based on recursive templates with C++.
+allows coarse control of this limit. @var{n} is the size of functions that
+can be inlined in number of pseudo instructions.
Inlining is actually controlled by a number of parameters, which may be
specified individually by using @option{--param @var{name}=@var{value}}.
is set to @var{n}/2.
@item max-inline-insns-auto
is set to @var{n}/2.
-@item min-inline-insns
- is set to 130 or @var{n}/4, whichever is smaller.
-@item max-inline-insns-rtl
- is set to @var{n}.
@end table
See below for a documentation of the individual
-parameters controlling inlining.
+parameters controlling inlining and for the defaults of these parameters.
+
+@emph{Note:} there may be no value to @option{-finline-limit} that results
+in default behavior.
@emph{Note:} pseudo instruction represents, in this particular context, an
abstract measurement of function's size. In no way does it represent a count
@item -fdce
@opindex fdce
-Perform dead code elimination (DCE) on RTL.
+Perform dead code elimination (DCE) on RTL@.
Enabled by default at @option{-O} and higher.
@item -fdse
@opindex fdse
-Perform dead store elimination (DSE) on RTL.
+Perform dead store elimination (DSE) on RTL@.
Enabled by default at @option{-O} and higher.
@item -fif-conversion
copy operations. This flag is enabled by default at @option{-O} and
higher.
-@item -ftree-salias
-@opindex ftree-salias
-Perform structural alias analysis on trees. This flag
-is enabled by default at @option{-O} and higher.
-
@item -fipa-pure-const
@opindex fipa-pure-const
Discover which functions are pure or constant.
Perform dead code elimination (DCE) on trees. This flag is enabled by
default at @option{-O} and higher.
+@item -ftree-builtin-dce
+@opindex ftree-builtin-dce
+Perform conditional dead code elimination (DCE) for calls to builtin functions
+that may set errno but are otherwise side-effect free. This flag is enabled by
+default at @option{-O2} and higher.
+
@item -ftree-dominator-opts
@opindex ftree-dominator-opts
Perform a variety of simple scalar cleanups (constant/copy
Compare the results of several data dependence analyzers. This option
is used for debugging the data dependence analyzers.
+@item -ftree-loop-distribution
+Perform loop distribution. This flag can improve cache performance on
+big loop bodies and allow further loop optimizations, like
+parallelization or vectorization, to take place. For example, the loop
+@smallexample
+DO I = 1, N
+ A(I) = B(I) + C
+ D(I) = E(I) * F
+ENDDO
+@end smallexample
+is transformed to
+@smallexample
+DO I = 1, N
+ A(I) = B(I) + C
+ENDDO
+DO I = 1, N
+ D(I) = E(I) * F
+ENDDO
+@end smallexample
+
@item -ftree-loop-im
@opindex ftree-loop-im
Perform loop invariant motion on trees. This pass moves only invariants that
This is only possible for loops whose iterations are independent
and can be arbitrarily reordered. The optimization is only
profitable on multiprocessor machines, for loops that are CPU-intensive,
-rather than constrained e.g. by memory bandwidth. This option
+rather than constrained e.g.@: by memory bandwidth. This option
implies @option{-pthread}, and thus is only supported on targets
that have support for @option{-pthread}.
@item -ftree-vectorize
@opindex ftree-vectorize
-Perform loop vectorization on trees.
+Perform loop vectorization on trees. This flag is enabled by default at
+@option{-O3}.
@item -ftree-vect-loop-version
@opindex ftree-vect-loop-version
attempt to determine whether an operation on signed numbers will
overflow must be written carefully to not actually involve overflow.
+This option also allows the compiler to assume strict pointer
+semantics: given a pointer to an object, if adding an offset to that
+pointer does not produce a pointer to the same object, the addition is
+undefined. This permits the compiler to conclude that @code{p + u >
+p} is always true for a pointer @code{p} and unsigned integer
+@code{u}. This assumption is only valid because pointer wraparound is
+undefined, as the expression is false if @code{p + u} overflows using
+twos complement arithmetic.
+
See also the @option{-fwrapv} option. Using @option{-fwrapv} means
-that signed overflow is fully defined: it wraps. When
+that integer signed overflow is fully defined: it wraps. When
@option{-fwrapv} is used, there is no difference between
-@option{-fstrict-overflow} and @option{-fno-strict-overflow}. With
-@option{-fwrapv} certain types of overflow are permitted. For
-example, if the compiler gets an overflow when doing arithmetic on
-constants, the overflowed value can still be used with
+@option{-fstrict-overflow} and @option{-fno-strict-overflow} for
+integers. With @option{-fwrapv} certain types of overflow are
+permitted. For example, if the compiler gets an overflow when doing
+arithmetic on constants, the overflowed value can still be used with
@option{-fwrapv}, but not otherwise.
The @option{-fstrict-overflow} option is enabled at levels
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
+@item -fprofile-dir=@var{path}
+@opindex fprofile-dir
+
+Set the directory to search the profile data files in to @var{path}.
+This option affects only the profile data generated by
+@option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
+and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
+and its related options.
+By default, GCC will use the current directory as @var{path}
+thus the profile data file will appear in the same directory as the object file.
+
@item -fprofile-generate
+@itemx -fprofile-generate=@var{path}
@opindex fprofile-generate
Enable options usually used for instrumenting application to produce
The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
+If @var{path} is specified, GCC will look at the @var{path} to find
+the profile feeedback data files. See @option{-fprofile-dir}.
+
@item -fprofile-use
+@itemx -fprofile-use=@var{path}
@opindex fprofile-use
Enable profile feedback directed optimizations, and optimizations
generally profitable only with profile feedback available.
match the source code. This error can be turned into a warning by using
@option{-Wcoverage-mismatch}. Note this may result in poorly optimized
code.
+
+If @var{path} is specified, GCC will look at the @var{path} to find
+the profile feedback data files. See @option{-fprofile-dir}.
@end table
The following options control compiler behavior regarding floating
@item -fcx-limited-range
@opindex fcx-limited-range
When enabled, this option states that a range reduction step is not
-needed when performing complex division. The default is
-@option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}.
+needed when performing complex division. Also, there is no checking
+whether the result of a complex multiplication or division is @code{NaN
++ I*NaN}, with an attempt to rescue the situation in that case. The
+default is @option{-fno-cx-limited-range}, but is enabled by
+@option{-ffast-math}.
This option controls the default setting of the ISO C99
@code{CX_LIMITED_RANGE} pragma. Nevertheless, the option applies to
all languages.
+@item -fcx-fortran-rules
+@opindex fcx-fortran-rules
+Complex multiplication and division follow Fortran rules. Range
+reduction is done as part of complex division, but there is no checking
+whether the result of a complex multiplication or division is @code{NaN
++ I*NaN}, with an attempt to rescue the situation in that case.
+
+The default is @option{-fno-cx-fortran-rules}.
+
@end table
The following options control optimizations that may improve
@var{name} are given in the following table:
@table @gcctabopt
-@item salias-max-implicit-fields
-The maximum number of fields in a variable without direct
-structure accesses for which structure aliasing will consider trying
-to track each field. The default is 5
-
-@item salias-max-array-elements
-The maximum number of elements an array can have and its elements
-still be tracked individually by structure aliasing. The default is 4
-
@item sra-max-structure-size
The maximum structure size, in bytes, at which the scalar replacement
of aggregates (SRA) optimization will perform block copies. The
For small units this might be too tight (consider unit consisting of function A
that is inline and B that just calls A three time. If B is small relative to
A, the growth of unit is 300\% and yet such inlining is very sane. For very
-large units consisting of small inlininable functions however the overall unit
+large units consisting of small inlineable functions however the overall unit
growth limit is needed to avoid exponential explosion of code size. Thus for
smaller units, the size is increased to @option{--param large-unit-insns}
before applying @option{--param inline-unit-growth}. The default is 10000
Increasing values mean more aggressive optimization, making the compile time
increase with probably slightly better performance. The default value is 500.
-@item max-flow-memory-locations
-Similar as @option{max-cselib-memory-locations} but for dataflow liveness.
-The default value is 100.
-
@item reorder-blocks-duplicate
@itemx reorder-blocks-duplicate-feedback
@item integer-share-limit
Small integer constants can use a shared data structure, reducing the
compiler's memory usage and increasing its speed. This sets the maximum
-value of a shared integer constant's. The default value is 256.
+value of a shared integer constant. The default value is 256.
@item min-virtual-mappings
Specifies the minimum number of virtual mappings in the incremental
ratio is 3.
@item ssp-buffer-size
-The minimum size of buffers (i.e. arrays) that will receive stack smashing
+The minimum size of buffers (i.e.@: arrays) that will receive stack smashing
protection when @option{-fstack-protection} is used.
@item max-jump-thread-duplication-stmts
* SPARC Options::
* SPU Options::
* System V Options::
-* TMS320C3x/C4x Options::
* V850 Options::
* VAX Options::
* VxWorks Options::
@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
@samp{arm1156t2-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
-@samp{cortex-a8}, @samp{cortex-r4}, @samp{cortex-m3},
+@samp{cortex-a8}, @samp{cortex-r4}, @samp{cortex-m3}, @samp{cortex-m1},
@samp{xscale}, @samp{iwmmxt}, @samp{ep9312}.
-@itemx -mtune=@var{name}
+@item -mtune=@var{name}
@opindex mtune
This option is very similar to the @option{-mcpu=} option, except that
instead of specifying the actual target processor type, and hence
of the @option{-mcpu=} option. Permissible names are: @samp{armv2},
@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
@samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
-@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv7}, @samp{armv7-a},
-@samp{armv7-r}, @samp{armv7-m}, @samp{iwmmxt}, @samp{ep9312}.
+@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
+@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
+@samp{iwmmxt}, @samp{ep9312}.
@item -mfpu=@var{name}
@itemx -mfpe=@var{number}
@item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
@opindex mcpu=
Specifies the name of the target Blackfin processor. Currently, @var{cpu}
-can be one of @samp{bf522}, @samp{bf525}, @samp{bf527},
+can be one of @samp{bf522}, @samp{bf523}, @samp{bf524},
+@samp{bf525}, @samp{bf526}, @samp{bf527},
@samp{bf531}, @samp{bf532}, @samp{bf533}, @samp{bf534},
@samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
-@samp{bf542}, @samp{bf544}, @samp{bf548}, @samp{bf549},
+@samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
@samp{bf561}.
The optional @var{sirevision} specifies the silicon revision of the target
Blackfin processor. Any workarounds available for the targeted silicon revision
@opindex minline-plt
Enable inlining of PLT entries in function calls to functions that are
not known to bind locally. It has no effect without @option{-mfdpic}.
-@end table
+@item -mmulticore
+@opindex mmulticore
+Build standalone application for multicore Blackfin processor. Proper
+start files and link scripts will be used to support multicore.
+This option defines @code{__BFIN_MULTICORE}. It can only be used with
+@option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. It can be used with
+@option{-mcorea} or @option{-mcoreb}. If it's used without
+@option{-mcorea} or @option{-mcoreb}, single application/dual core
+programming model is used. In this model, the main function of Core B
+should be named as coreb_main. If it's used with @option{-mcorea} or
+@option{-mcoreb}, one application per core programming model is used.
+If this option is not used, single core application programming
+model is used.
+
+@item -mcorea
+@opindex mcorea
+Build standalone application for Core A of BF561 when using
+one application per core programming model. Proper start files
+and link scripts will be used to support Core A. This option
+defines @code{__BFIN_COREA}. It must be used with @option{-mmulticore}.
+
+@item -mcoreb
+@opindex mcoreb
+Build standalone application for Core B of BF561 when using
+one application per core programming model. Proper start files
+and link scripts will be used to support Core B. This option
+defines @code{__BFIN_COREB}. When this option is used, coreb_main
+should be used instead of main. It must be used with
+@option{-mmulticore}.
+
+@item -msdram
+@opindex msdram
+Build standalone application for SDRAM. Proper start files and
+link scripts will be used to put the application into SDRAM.
+Loader should initialize SDRAM before loading the application
+into SDRAM. This option defines @code{__BFIN_SDRAM}.
+@end table
+
@node CRIS Options
@subsection CRIS Options
@cindex CRIS Options
@itemx -unexported_symbols_list
@itemx -weak_reference_mismatches
@itemx -whatsloaded
-
@opindex allowable_client
@opindex client_name
@opindex compatibility_version
@opindex unexported_symbols_list
@opindex weak_reference_mismatches
@opindex whatsloaded
-
These options are passed to the Darwin linker. The Darwin linker man page
describes them in detail.
@end table
@option{--with-ld} configure option, GCC's program search path, and
finally by the user's @env{PATH}. The linker used by GCC can be printed
using @samp{which `gcc -print-prog-name=ld`}. This option is only available
-on the 64 bit HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.
+on the 64 bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
@item -mhp-ld
@opindex hp-ld
configure option, GCC's program search path, and finally by the user's
@env{PATH}. The linker used by GCC can be printed using @samp{which
`gcc -print-prog-name=ld`}. This option is only available on the 64 bit
-HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.
+HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
@item -mlong-calls
@opindex mno-long-calls
@item k6
AMD K6 CPU with MMX instruction set support.
@item k6-2, k6-3
-Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
+Improved versions of AMD K6 CPU with MMX and 3dNOW!@: instruction set support.
@item athlon, athlon-tbird
-AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
+AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW!@: and SSE prefetch instructions
support.
@item athlon-4, athlon-xp, athlon-mp
-Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
+Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW!@: and full SSE
instruction set support.
@item k8, opteron, athlon64, athlon-fx
AMD K8 core based CPUs with x86-64 instruction set support. (This supersets
-MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
+MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW!@: and 64-bit instruction set extensions.)
@item k8-sse3, opteron-sse3, athlon64-sse3
Improved versions of k8, opteron and athlon64 with SSE3 instruction set support.
@item amdfam10, barcelona
IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
set support.
@item winchip2
-IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
+IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!@:
instruction set support.
@item c3
-Via C3 CPU with MMX and 3dNOW! instruction set support. (No scheduling is
+Via C3 CPU with MMX and 3dNOW!@: instruction set support. (No scheduling is
implemented for this chip.)
@item c3-2
Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is
@item -mmmx
@itemx -mno-mmx
-@item -msse
+@itemx -msse
@itemx -mno-sse
-@item -msse2
+@itemx -msse2
@itemx -mno-sse2
-@item -msse3
+@itemx -msse3
@itemx -mno-sse3
-@item -mssse3
+@itemx -mssse3
@itemx -mno-ssse3
-@item -msse4.1
+@itemx -msse4.1
@itemx -mno-sse4.1
-@item -msse4.2
+@itemx -msse4.2
@itemx -mno-sse4.2
-@item -msse4
+@itemx -msse4
@itemx -mno-sse4
-@item -msse4a
-@item -mno-sse4a
-@item -msse5
+@itemx -maes
+@itemx -mno-aes
+@itemx -mpclmul
+@itemx -mno-pclmul
+@itemx -msse4a
+@itemx -mno-sse4a
+@itemx -msse5
@itemx -mno-sse5
-@item -m3dnow
+@itemx -m3dnow
@itemx -mno-3dnow
-@item -mpopcnt
+@itemx -mpopcnt
@itemx -mno-popcnt
-@item -mabm
+@itemx -mabm
@itemx -mno-abm
@opindex mmmx
@opindex mno-mmx
@opindex m3dnow
@opindex mno-3dnow
These switches enable or disable the use of instructions in the MMX,
-SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4A, SSE5, ABM or 3DNow! extended
-instruction sets.
+SSE, SSE2, SSE3, SSSE3, SSE4.1, AES, PCLMUL, SSE4A, SSE5, ABM or
+3DNow!@: extended instruction sets.
These extensions are also available as built-in functions: see
@ref{X86 Built-in Functions}, for details of the functions enabled and
disabled by these switches.
@item -mveclibabi=@var{type}
@opindex mveclibabi
Specifies the ABI type to use for vectorizing intrinsics using an
-external library. Supported types are @code{acml} for the AMD
-math core library style of interfacing. GCC will currently emit
-calls to @code{__vrd2_sin}, @code{__vrd2_cos}, @code{__vrd2_exp},
-@code{__vrd2_log}, @code{__vrd2_log2}, @code{__vrd2_log10},
-@code{__vrs4_sinf}, @code{__vrs4_cosf}, @code{__vrs4_expf},
-@code{__vrs4_logf}, @code{__vrs4_log2f}, @code{__vrs4_log10f}
-and @code{__vrs4_powf} when using this type and @option{-ftree-vectorize}
-is enabled. A ACML ABI compatible library will have to be specified
-at link time.
+external library. Supported types are @code{svml} for the Intel short
+vector math library and @code{acml} for the AMD math core library style
+of interfacing. GCC will currently emit calls to @code{vmldExp2},
+@code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
+@code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
+@code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
+@code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
+@code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
+@code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
+@code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
+@code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
+@code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
+function type when @option{-mveclibabi=svml} is used and @code{__vrd2_sin},
+@code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
+@code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
+@code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
+@code{__vrs4_log10f} and @code{__vrs4_powf} for corresponding function type
+when @option{-mveclibabi=acml} is used. Both @option{-ftree-vectorize} and
+@option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI
+compatible library will have to be specified at link time.
@item -mpush-args
@itemx -mno-push-args
@opindex mno-sched-control-spec
@opindex msched-control-spec
(Dis/En)able control speculative scheduling. This feature is
-available only during region scheduling (i.e. before reload).
+available only during region scheduling (i.e.@: before reload).
This will result in generation of the ld.s instructions and
the corresponding check instructions chk.s .
The default is 'disable'.
@opindex msim
Specifies that the program will be run on the simulator. This causes
an alternate runtime library to be linked in which supports, for
-example, file I/O. You must not use this option when generating
+example, file I/O@. You must not use this option when generating
programs that will run on real hardware; you must provide your own
runtime library for whatever I/O functions are needed.
@item -m5200
@opindex m5200
-Generate output for a 520X ColdFire CPU. This is the default
+Generate output for a 520X ColdFire CPU@. This is the default
when the compiler is configured for 520X-based systems.
It is equivalent to @option{-mcpu=5206}, and is now deprecated
in favor of that option.
@item -m5206e
@opindex m5206e
-Generate output for a 5206e ColdFire CPU. The option is now
+Generate output for a 5206e ColdFire CPU@. The option is now
deprecated in favor of the equivalent @option{-mcpu=5206e}.
@item -m528x
@item -m5307
@opindex m5307
-Generate output for a ColdFire 5307 CPU. The option is now deprecated
+Generate output for a ColdFire 5307 CPU@. The option is now deprecated
in favor of the equivalent @option{-mcpu=5307}.
@item -m5407
@opindex m5407
-Generate output for a ColdFire 5407 CPU. The option is now deprecated
+Generate output for a ColdFire 5407 CPU@. The option is now deprecated
in favor of the equivalent @option{-mcpu=5407}.
@item -mcfv4e
@opindex mhard-float
@opindex m68881
Generate floating-point instructions. This is the default for 68020
-and above, and for ColdFire devices that have an FPU. It defines the
+and above, and for ColdFire devices that have an FPU@. It defines the
macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
on ColdFire targets.
@itemx -mno-dsp
@opindex mdsp
@opindex mno-dsp
-Use (do not use) revision 1 of the MIPS DSP ASE.
+Use (do not use) revision 1 of the MIPS DSP ASE@.
@xref{MIPS DSP Built-in Functions}. This option defines the
preprocessor macro @samp{__mips_dsp}. It also defines
@samp{__mips_dsp_rev} to 1.
@itemx -mno-dspr2
@opindex mdspr2
@opindex mno-dspr2
-Use (do not use) revision 2 of the MIPS DSP ASE.
+Use (do not use) revision 2 of the MIPS DSP ASE@.
@xref{MIPS DSP Built-in Functions}. This option defines the
preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
It also defines @samp{__mips_dsp_rev} to 2.
@opindex mlocal-sdata
@opindex mno-local-sdata
Extend (do not extend) the @option{-G} behavior to local data too,
-such as to static variables in C. @option{-mlocal-sdata} is the
+such as to static variables in C@. @option{-mlocal-sdata} is the
default for all configurations.
If the linker complains that an application is using too much small data,
@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
-@samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3},
-@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
-@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
-@samp{power6x}, @samp{common}, @samp{powerpc}, @samp{powerpc64},
-@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
+@samp{860}, @samp{970}, @samp{8540}, @samp{e300c2}, @samp{e300c3},
+@samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5}, @samp{power},
+@samp{power2}, @samp{power3}, @samp{power4}, @samp{power5},
+@samp{power5+}, @samp{power6}, @samp{power6x}, @samp{common},
+@samp{powerpc}, @samp{powerpc64}, @samp{rios}, @samp{rios1},
+@samp{rios2}, @samp{rsc}, and @samp{rs64}.
@option{-mcpu=common} selects a completely generic processor. Code
generated under this option will run on any POWER or PowerPC processor.
enhancements.
@item -mvrsave
-@item -mno-vrsave
+@itemx -mno-vrsave
@opindex mvrsave
@opindex mno-vrsave
Generate VRSAVE instructions when generating AltiVec code.
@opindex mxl-compat
@opindex mno-xl-compat
Produce code that conforms more closely to IBM XL compiler semantics
-when using AIX-compatible ABI. Pass floating-point arguments to
+when using AIX-compatible ABI@. Pass floating-point arguments to
prototyped functions beyond the register save area (RSA) on the stack
in addition to argument FPRs. Do not assume that most significant
double in 128-bit long double value is properly rounded when comparing
@opindex msim
On embedded PowerPC systems, assume that the startup module is called
@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
-@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}.
+@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}
configurations.
@item -mmvme
The default is to not maintain the backchain.
@item -mpacked-stack
-@item -mno-packed-stack
+@itemx -mno-packed-stack
@opindex mpacked-stack
@opindex mno-packed-stack
Use (do not use) the packed stack layout. When @option{-mno-packed-stack} is
sized arrays. This is generally a bad idea with a limited stack size.
@item -mstack-guard=@var{stack-guard}
-@item -mstack-size=@var{stack-size}
+@itemx -mstack-size=@var{stack-size}
@opindex mstack-guard
@opindex mstack-size
If these options are provided the s390 back end emits additional instructions in
Use 32-bit offsets in @code{switch} tables. The default is to use
16-bit offsets.
+@item -mbitops
+@opindex mbitops
+Enable the use of bit manipulation instructions on SH2A.
+
@item -mfmovd
@opindex mfmovd
Enable the use of the instruction @code{fmovd}.
@c the generic assembler that comes with Solaris takes just -Ym.
@end table
-@node TMS320C3x/C4x Options
-@subsection TMS320C3x/C4x Options
-@cindex TMS320C3x/C4x Options
-
-These @samp{-m} options are defined for TMS320C3x/C4x implementations:
-
-@table @gcctabopt
-
-@item -mcpu=@var{cpu_type}
-@opindex mcpu
-Set the instruction set, register set, and instruction scheduling
-parameters for machine type @var{cpu_type}. Supported values for
-@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
-@samp{c44}. The default is @samp{c40} to generate code for the
-TMS320C40.
-
-@item -mbig-memory
-@itemx -mbig
-@itemx -msmall-memory
-@itemx -msmall
-@opindex mbig-memory
-@opindex mbig
-@opindex msmall-memory
-@opindex msmall
-Generates code for the big or small memory model. The small memory
-model assumed that all data fits into one 64K word page. At run-time
-the data page (DP) register must be set to point to the 64K page
-containing the .bss and .data program sections. The big memory model is
-the default and requires reloading of the DP register for every direct
-memory access.
-
-@item -mbk
-@itemx -mno-bk
-@opindex mbk
-@opindex mno-bk
-Allow (disallow) allocation of general integer operands into the block
-count register BK@.
-
-@item -mdb
-@itemx -mno-db
-@opindex mdb
-@opindex mno-db
-Enable (disable) generation of code using decrement and branch,
-DBcond(D), instructions. This is enabled by default for the C4x. To be
-on the safe side, this is disabled for the C3x, since the maximum
-iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
-@math{2^{23}} times on the C3x?). Note that GCC will try to reverse a loop so
-that it can utilize the decrement and branch instruction, but will give
-up if there is more than one memory reference in the loop. Thus a loop
-where the loop counter is decremented can generate slightly more
-efficient code, in cases where the RPTB instruction cannot be utilized.
-
-@item -mdp-isr-reload
-@itemx -mparanoid
-@opindex mdp-isr-reload
-@opindex mparanoid
-Force the DP register to be saved on entry to an interrupt service
-routine (ISR), reloaded to point to the data section, and restored on
-exit from the ISR@. This should not be required unless someone has
-violated the small memory model by modifying the DP register, say within
-an object library.
-
-@item -mmpyi
-@itemx -mno-mpyi
-@opindex mmpyi
-@opindex mno-mpyi
-For the C3x use the 24-bit MPYI instruction for integer multiplies
-instead of a library call to guarantee 32-bit results. Note that if one
-of the operands is a constant, then the multiplication will be performed
-using shifts and adds. If the @option{-mmpyi} option is not specified for the C3x,
-then squaring operations are performed inline instead of a library call.
-
-@item -mfast-fix
-@itemx -mno-fast-fix
-@opindex mfast-fix
-@opindex mno-fast-fix
-The C3x/C4x FIX instruction to convert a floating point value to an
-integer value chooses the nearest integer less than or equal to the
-floating point value rather than to the nearest integer. Thus if the
-floating point number is negative, the result will be incorrectly
-truncated an additional code is necessary to detect and correct this
-case. This option can be used to disable generation of the additional
-code required to correct the result.
-
-@item -mrptb
-@itemx -mno-rptb
-@opindex mrptb
-@opindex mno-rptb
-Enable (disable) generation of repeat block sequences using the RPTB
-instruction for zero overhead looping. The RPTB construct is only used
-for innermost loops that do not call functions or jump across the loop
-boundaries. There is no advantage having nested RPTB loops due to the
-overhead required to save and restore the RC, RS, and RE registers.
-This is enabled by default with @option{-O2}.
-
-@item -mrpts=@var{count}
-@itemx -mno-rpts
-@opindex mrpts
-@opindex mno-rpts
-Enable (disable) the use of the single instruction repeat instruction
-RPTS@. If a repeat block contains a single instruction, and the loop
-count can be guaranteed to be less than the value @var{count}, GCC will
-emit a RPTS instruction instead of a RPTB@. If no value is specified,
-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 operands. However, since interrupts are blocked by this
-instruction, it is disabled by default.
-
-@item -mloop-unsigned
-@itemx -mno-loop-unsigned
-@opindex mloop-unsigned
-@opindex mno-loop-unsigned
-The maximum iteration count when using RPTS and RPTB (and DB on the C40)
-is @math{2^{31} + 1} since these instructions test if the iteration count is
-negative to terminate the loop. If the iteration count is unsigned
-there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
-exceeded. This switch allows an unsigned iteration count.
-
-@item -mti
-@opindex mti
-Try to emit an assembler syntax that the TI assembler (asm30) is happy
-with. This also enforces compatibility with the API employed by the TI
-C3x C compiler. For example, long doubles are passed as structures
-rather than in floating point registers.
-
-@item -mregparm
-@itemx -mmemparm
-@opindex mregparm
-@opindex mmemparm
-Generate code that uses registers (stack) for passing arguments to functions.
-By default, arguments are passed in registers where possible rather
-than by pushing arguments on to the stack.
-
-@item -mparallel-insns
-@itemx -mno-parallel-insns
-@opindex mparallel-insns
-@opindex mno-parallel-insns
-Allow the generation of parallel instructions. This is enabled by
-default with @option{-O2}.
-
-@item -mparallel-mpy
-@itemx -mno-parallel-mpy
-@opindex mparallel-mpy
-@opindex mno-parallel-mpy
-Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
-provided @option{-mparallel-insns} is also specified. These instructions have
-tight register constraints which can pessimize the code generation
-of large functions.
-
-@end table
-
@node V850 Options
@subsection V850 Options
@cindex V850 Options
sensitive to the compiler's ability to combine multiply and add/subtract
operations.
+@item -mserialize-volatile
+@itemx -mno-serialize-volatile
+@opindex mserialize-volatile
+@opindex mno-serialize-volatile
+When this option is enabled, GCC inserts @code{MEMW} instructions before
+@code{volatile} memory references to guarantee sequential consistency.
+The default is @option{-mserialize-volatile}. Use
+@option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
+
@item -mtext-section-literals
@itemx -mno-text-section-literals
@opindex mtext-section-literals