@c Copyright (C) 1988-2021 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 INCLUDE
@include gcc-vers.texi
@c man end

@c man begin COPYRIGHT
Copyright @copyright{} 1988-2021 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``GNU General Public License'' and ``Funding
Free Software'', the Front-Cover texts being (a) (see below), and with
the Back-Cover Texts being (b) (see below).  A copy of the license is
included in the gfdl(7) man page.

(a) The FSF's Front-Cover Text is:

     A GNU Manual

(b) The FSF's Back-Cover Text is:

     You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development.
@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 [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
    [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
    [@option{-W}@var{warn}@dots{}] [@option{-Wpedantic}]
    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
    [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
    [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}

Only the most useful options are listed here; see below for the
remainder.  @command{g++} accepts mostly the same options as @command{gcc}.
@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7),
cpp(1), gcov(1), as(1), ld(1), gdb(1), dbx(1)
and the Info entries for @file{gcc}, @file{cpp}, @file{as},
@file{ld}, @file{binutils} and @file{gdb}.
@c man end
@c man begin BUGS
For instructions on reporting bugs, see
@w{@value{BUGURL}}.
@c man end
@c man begin AUTHOR
See the Info entry for @command{gcc}, or
@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.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 @option{-c} option
says not to run the linker.  Then the output consists of object files
output by the assembler.
@xref{Overall Options,,Options Controlling the Kind of Output}.

Other options are passed on to one or more stages of processing.  Some options
control the preprocessor and others the compiler itself.  Yet other
options control the assembler and linker; most of these are not
documented here, since you rarely need to use any of them.

@cindex C compilation options
Most of the command-line options that you can use with GCC are useful
for C programs; when an option is only useful with another language
(usually C++), the explanation says so explicitly.  If the description
for a particular option does not mention a source language, you can use
that option with all supported languages.

@cindex cross compiling
@cindex specifying machine version
@cindex specifying compiler version and target machine
@cindex compiler version, specifying
@cindex target machine, specifying
The usual way to run GCC is to run the executable called @command{gcc}, or
@command{@var{machine}-gcc} when cross-compiling, or
@command{@var{machine}-gcc-@var{version}} to run a specific version of GCC.
When you compile C++ programs, you should invoke GCC as @command{g++} 
instead.  @xref{Invoking G++,,Compiling C++ Programs}, 
for information about the differences in behavior between @command{gcc} 
and @command{g++} when compiling C++ programs.

@cindex grouping options
@cindex options, grouping
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: @option{-dv} is very different from @w{@samp{-d
-v}}.

@cindex order of options
@cindex options, order
You can mix options and other arguments.  For the most part, the order
you use doesn't matter.  Order does matter when you use several
options of the same kind; for example, if you specify @option{-L} more
than once, the directories are searched in the order specified.  Also,
the placement of the @option{-l} option is significant.

Many options have long names starting with @samp{-f} or with
@samp{-W}---for example,
@option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
these have both positive and negative forms; the negative form of
@option{-ffoo} is @option{-fno-foo}.  This manual documents
only one of these two forms, whichever one is not the default.

Some options take one or more arguments typically separated either
by a space or by the equals sign (@samp{=}) from the option name.
Unless documented otherwise, an argument can be either numeric or
a string.  Numeric arguments must typically be small unsigned decimal
or hexadecimal integers.  Hexadecimal arguments must begin with
the @samp{0x} prefix.  Arguments to options that specify a size
threshold of some sort may be arbitrarily large decimal or hexadecimal
integers followed by a byte size suffix designating a multiple of bytes
such as @code{kB} and @code{KiB} for kilobyte and kibibyte, respectively,
@code{MB} and @code{MiB} for megabyte and mebibyte, @code{GB} and
@code{GiB} for gigabyte and gigibyte, and so on.  Such arguments are
designated by @var{byte-size} in the following text.  Refer to the NIST,
IEC, and other relevant national and international standards for the full
listing and explanation of the binary and decimal byte size prefixes.

@c man end

@xref{Option Index}, for an index to GCC's options.

@menu
* Option Summary::      Brief list of all options, without explanations.
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Invoking G++::        Compiling C++ programs.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
                        and Objective-C++.
* Diagnostic Message Formatting Options:: Controlling how diagnostics should
                        be formatted.
* Warning Options::     How picky should the compiler be?
* Static Analyzer Options:: More expensive warnings.
* Debugging Options::   Producing debuggable code.
* Optimize Options::    How much optimization?
* Instrumentation Options:: Enabling profiling and extra run-time error checking.
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
* Developer Options::   Printing GCC configuration info, statistics, and
                        debugging dumps.
* Submodel Options::    Target-specific options, such as compiling for a
                        specific processor variant.
* Spec Files::          How to pass switches to sub-processes.
* Environment Variables:: Env vars that affect GCC.
* Precompiled Headers:: Compiling a header once, and using it many times.
* C++ Modules::		Experimental C++20 module system.
@end menu

@c man begin OPTIONS

@node Option Summary
@section Option Summary

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

@table @emph
@item Overall Options
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{-c  -S  -E  -o @var{file} @gol
-dumpbase @var{dumpbase}  -dumpbase-ext @var{auxdropsuf} @gol
-dumpdir @var{dumppfx}  -x @var{language}  @gol
-v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  --version @gol
-pass-exit-codes  -pipe  -specs=@var{file}  -wrapper  @gol
@@@var{file}  -ffile-prefix-map=@var{old}=@var{new}  @gol
-fplugin=@var{file}  -fplugin-arg-@var{name}=@var{arg}  @gol
-fdump-ada-spec@r{[}-slim@r{]}  -fada-spec-parent=@var{unit}  -fdump-go-spec=@var{file}}

@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@gccoptlist{-ansi  -std=@var{standard}  -aux-info @var{filename} @gol
-fallow-parameterless-variadic-functions  -fno-asm  @gol
-fno-builtin  -fno-builtin-@var{function}  -fcond-mismatch @gol
-ffreestanding  -fgimple  -fgnu-tm  -fgnu89-inline  -fhosted @gol
-flax-vector-conversions  -fms-extensions @gol
-foffload=@var{arg}  -foffload-options=@var{arg} @gol
-fopenacc  -fopenacc-dim=@var{geom} @gol
-fopenmp  -fopenmp-simd @gol
-fpermitted-flt-eval-methods=@var{standard} @gol
-fplan9-extensions  -fsigned-bitfields  -funsigned-bitfields @gol
-fsigned-char  -funsigned-char  -fsso-struct=@var{endianness}}

@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@gccoptlist{-fabi-version=@var{n}  -fno-access-control @gol
-faligned-new=@var{n}  -fargs-in-order=@var{n}  -fchar8_t  -fcheck-new @gol
-fconstexpr-depth=@var{n}  -fconstexpr-cache-depth=@var{n} @gol
-fconstexpr-loop-limit=@var{n}  -fconstexpr-ops-limit=@var{n} @gol
-fno-elide-constructors @gol
-fno-enforce-eh-specs @gol
-fno-gnu-keywords @gol
-fno-implicit-templates @gol
-fno-implicit-inline-templates @gol
-fno-implement-inlines  @gol
-fmodule-header@r{[}=@var{kind}@r{]} -fmodule-only -fmodules-ts @gol
-fmodule-implicit-inline @gol
-fno-module-lazy @gol
-fmodule-mapper=@var{specification} @gol
-fmodule-version-ignore @gol
-fms-extensions @gol
-fnew-inheriting-ctors @gol
-fnew-ttp-matching @gol
-fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
-fno-optional-diags  -fpermissive @gol
-fno-pretty-templates @gol
-fno-rtti  -fsized-deallocation @gol
-ftemplate-backtrace-limit=@var{n} @gol
-ftemplate-depth=@var{n} @gol
-fno-threadsafe-statics  -fuse-cxa-atexit @gol
-fno-weak  -nostdinc++ @gol
-fvisibility-inlines-hidden @gol
-fvisibility-ms-compat @gol
-fext-numeric-literals @gol
-flang-info-include-translate@r{[}=@var{header}@r{]} @gol
-flang-info-include-translate-not @gol
-flang-info-module-cmi@r{[}=@var{module}@r{]} @gol
-stdlib=@var{libstdc++,libc++} @gol
-Wabi-tag  -Wcatch-value  -Wcatch-value=@var{n} @gol
-Wno-class-conversion  -Wclass-memaccess @gol
-Wcomma-subscript  -Wconditionally-supported @gol
-Wno-conversion-null  -Wctad-maybe-unsupported @gol
-Wctor-dtor-privacy  -Wno-delete-incomplete @gol
-Wdelete-non-virtual-dtor  -Wno-deprecated-array-compare @gol
-Wdeprecated-copy -Wdeprecated-copy-dtor @gol
-Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion @gol
-Weffc++  -Wno-exceptions -Wextra-semi  -Wno-inaccessible-base @gol
-Wno-inherited-variadic-ctor  -Wno-init-list-lifetime @gol
-Winvalid-imported-macros @gol
-Wno-invalid-offsetof  -Wno-literal-suffix @gol
-Wmismatched-new-delete -Wmismatched-tags @gol
-Wmultiple-inheritance  -Wnamespaces  -Wnarrowing @gol
-Wnoexcept  -Wnoexcept-type  -Wnon-virtual-dtor @gol
-Wpessimizing-move  -Wno-placement-new  -Wplacement-new=@var{n} @gol
-Wrange-loop-construct -Wredundant-move -Wredundant-tags @gol
-Wreorder  -Wregister @gol
-Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates @gol
-Wno-non-template-friend  -Wold-style-cast @gol
-Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo @gol
-Wsized-deallocation  -Wsuggest-final-methods @gol
-Wsuggest-final-types  -Wsuggest-override  @gol
-Wno-terminate  -Wuseless-cast  -Wno-vexing-parse  @gol
-Wvirtual-inheritance  @gol
-Wno-virtual-move-assign  -Wvolatile  -Wzero-as-null-pointer-constant}

@item Objective-C and Objective-C++ Language Options
@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
Objective-C and Objective-C++ Dialects}.
@gccoptlist{-fconstant-string-class=@var{class-name} @gol
-fgnu-runtime  -fnext-runtime @gol
-fno-nil-receivers @gol
-fobjc-abi-version=@var{n} @gol
-fobjc-call-cxx-cdtors @gol
-fobjc-direct-dispatch @gol
-fobjc-exceptions @gol
-fobjc-gc @gol
-fobjc-nilcheck @gol
-fobjc-std=objc1 @gol
-fno-local-ivars @gol
-fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]} @gol
-freplace-objc-classes @gol
-fzero-link @gol
-gen-decls @gol
-Wassign-intercept  -Wno-property-assign-default @gol
-Wno-protocol -Wobjc-root-class -Wselector @gol
-Wstrict-selector-match @gol
-Wundeclared-selector}

@item Diagnostic Message Formatting Options
@xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}.
@gccoptlist{-fmessage-length=@var{n}  @gol
-fdiagnostics-plain-output @gol
-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
-fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
-fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
-fdiagnostics-format=@r{[}text@r{|}json@r{]}  @gol
-fno-diagnostics-show-option  -fno-diagnostics-show-caret @gol
-fno-diagnostics-show-labels  -fno-diagnostics-show-line-numbers @gol
-fno-diagnostics-show-cwe  @gol
-fdiagnostics-minimum-margin-width=@var{width} @gol
-fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch @gol
-fdiagnostics-show-template-tree  -fno-elide-type @gol
-fdiagnostics-path-format=@r{[}none@r{|}separate-events@r{|}inline-events@r{]} @gol
-fdiagnostics-show-path-depths @gol
-fno-show-column @gol
-fdiagnostics-column-unit=@r{[}display@r{|}byte@r{]} @gol
-fdiagnostics-column-origin=@var{origin}}

@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
-pedantic-errors @gol
-w  -Wextra  -Wall  -Wabi=@var{n} @gol
-Waddress  -Wno-address-of-packed-member  -Waggregate-return @gol
-Walloc-size-larger-than=@var{byte-size}  -Walloc-zero @gol
-Walloca  -Walloca-larger-than=@var{byte-size} @gol
-Wno-aggressive-loop-optimizations @gol
-Warith-conversion @gol
-Warray-bounds  -Warray-bounds=@var{n}  -Warray-compare @gol
-Wno-attributes  -Wattribute-alias=@var{n} -Wno-attribute-alias @gol
-Wno-attribute-warning  -Wbool-compare  -Wbool-operation @gol
-Wno-builtin-declaration-mismatch @gol
-Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat @gol
-Wc11-c2x-compat @gol
-Wc++-compat  -Wc++11-compat  -Wc++14-compat  -Wc++17-compat  @gol
-Wc++20-compat   @gol
-Wno-c++11-extensions  -Wno-c++14-extensions -Wno-c++17-extensions  @gol
-Wno-c++20-extensions  -Wno-c++23-extensions  @gol
-Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual  @gol
-Wchar-subscripts @gol
-Wclobbered  -Wcomment @gol
-Wconversion  -Wno-coverage-mismatch  -Wno-cpp @gol
-Wdangling-else  -Wdate-time @gol
-Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init @gol
-Wdisabled-optimization @gol
-Wno-discarded-array-qualifiers  -Wno-discarded-qualifiers @gol
-Wno-div-by-zero  -Wdouble-promotion @gol
-Wduplicated-branches  -Wduplicated-cond @gol
-Wempty-body  -Wno-endif-labels  -Wenum-compare  -Wenum-conversion @gol
-Werror  -Werror=*  -Wexpansion-to-defined  -Wfatal-errors @gol
-Wfloat-conversion  -Wfloat-equal  -Wformat  -Wformat=2 @gol
-Wno-format-contains-nul  -Wno-format-extra-args  @gol
-Wformat-nonliteral  -Wformat-overflow=@var{n} @gol
-Wformat-security  -Wformat-signedness  -Wformat-truncation=@var{n} @gol
-Wformat-y2k  -Wframe-address @gol
-Wframe-larger-than=@var{byte-size}  -Wno-free-nonheap-object @gol
-Wno-if-not-aligned  -Wno-ignored-attributes @gol
-Wignored-qualifiers  -Wno-incompatible-pointer-types @gol
-Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=@var{n} @gol
-Wno-implicit-function-declaration  -Wno-implicit-int @gol
-Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context @gol
-Wno-int-to-pointer-cast  -Wno-invalid-memory-model @gol
-Winvalid-pch  -Wjump-misses-init  -Wlarger-than=@var{byte-size} @gol
-Wlogical-not-parentheses  -Wlogical-op  -Wlong-long @gol
-Wno-lto-type-mismatch -Wmain  -Wmaybe-uninitialized @gol
-Wmemset-elt-size  -Wmemset-transposed-args @gol
-Wmisleading-indentation  -Wmissing-attributes  -Wmissing-braces @gol
-Wmissing-field-initializers  -Wmissing-format-attribute @gol
-Wmissing-include-dirs  -Wmissing-noreturn  -Wno-missing-profile @gol
-Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare @gol
-Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol
-Wnull-dereference  -Wno-odr  @gol
-Wopenacc-parallelism  @gol
-Wopenmp-simd  @gol
-Wno-overflow  -Woverlength-strings  -Wno-override-init-side-effects @gol
-Wpacked  -Wno-packed-bitfield-compat  -Wpacked-not-aligned  -Wpadded @gol
-Wparentheses  -Wno-pedantic-ms-format @gol
-Wpointer-arith  -Wno-pointer-compare  -Wno-pointer-to-int-cast @gol
-Wno-pragmas  -Wno-prio-ctor-dtor  -Wredundant-decls @gol
-Wrestrict  -Wno-return-local-addr  -Wreturn-type @gol
-Wno-scalar-storage-order  -Wsequence-point @gol
-Wshadow  -Wshadow=global  -Wshadow=local  -Wshadow=compatible-local @gol
-Wno-shadow-ivar @gol
-Wno-shift-count-negative  -Wno-shift-count-overflow  -Wshift-negative-value @gol
-Wno-shift-overflow  -Wshift-overflow=@var{n} @gol
-Wsign-compare  -Wsign-conversion @gol
-Wno-sizeof-array-argument @gol
-Wsizeof-array-div @gol
-Wsizeof-pointer-div  -Wsizeof-pointer-memaccess @gol
-Wstack-protector  -Wstack-usage=@var{byte-size}  -Wstrict-aliasing @gol
-Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=@var{n} @gol
-Wstring-compare @gol
-Wno-stringop-overflow -Wno-stringop-overread @gol
-Wno-stringop-truncation @gol
-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}malloc@r{]} @gol
-Wswitch  -Wno-switch-bool  -Wswitch-default  -Wswitch-enum @gol
-Wno-switch-outside-range  -Wno-switch-unreachable  -Wsync-nand @gol
-Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs @gol
-Wtsan -Wtype-limits  -Wundef @gol
-Wuninitialized  -Wunknown-pragmas @gol
-Wunsuffixed-float-constants  -Wunused @gol
-Wunused-but-set-parameter  -Wunused-but-set-variable @gol
-Wunused-const-variable  -Wunused-const-variable=@var{n} @gol
-Wunused-function  -Wunused-label  -Wunused-local-typedefs @gol
-Wunused-macros @gol
-Wunused-parameter  -Wno-unused-result @gol
-Wunused-value  -Wunused-variable @gol
-Wno-varargs  -Wvariadic-macros @gol
-Wvector-operation-performance @gol
-Wvla  -Wvla-larger-than=@var{byte-size}  -Wno-vla-larger-than @gol
-Wvolatile-register-var  -Wwrite-strings @gol
-Wzero-length-bounds}

@item Static Analyzer Options
@gccoptlist{
-fanalyzer @gol
-fanalyzer-call-summaries @gol
-fanalyzer-checker=@var{name} @gol
-fno-analyzer-feasibility @gol
-fanalyzer-fine-grained @gol
-fanalyzer-state-merge @gol
-fanalyzer-state-purge @gol
-fanalyzer-transitivity @gol
-fanalyzer-verbose-edges @gol
-fanalyzer-verbose-state-changes @gol
-fanalyzer-verbosity=@var{level} @gol
-fdump-analyzer @gol
-fdump-analyzer-stderr @gol
-fdump-analyzer-callgraph @gol
-fdump-analyzer-exploded-graph @gol
-fdump-analyzer-exploded-nodes @gol
-fdump-analyzer-exploded-nodes-2 @gol
-fdump-analyzer-exploded-nodes-3 @gol
-fdump-analyzer-exploded-paths @gol
-fdump-analyzer-feasibility @gol
-fdump-analyzer-json @gol
-fdump-analyzer-state-purge @gol
-fdump-analyzer-supergraph @gol
-Wno-analyzer-double-fclose @gol
-Wno-analyzer-double-free @gol
-Wno-analyzer-exposure-through-output-file @gol
-Wno-analyzer-file-leak @gol
-Wno-analyzer-free-of-non-heap @gol
-Wno-analyzer-malloc-leak @gol
-Wno-analyzer-mismatching-deallocation @gol
-Wno-analyzer-null-argument @gol
-Wno-analyzer-null-dereference @gol
-Wno-analyzer-possible-null-argument @gol
-Wno-analyzer-possible-null-dereference @gol
-Wno-analyzer-shift-count-negative @gol
-Wno-analyzer-shift-count-overflow @gol
-Wno-analyzer-stale-setjmp-buffer @gol
-Wno-analyzer-tainted-array-index @gol
-Wanalyzer-too-complex @gol
-Wno-analyzer-unsafe-call-within-signal-handler @gol
-Wno-analyzer-use-after-free @gol
-Wno-analyzer-use-of-pointer-in-stale-stack-frame @gol
-Wno-analyzer-use-of-uninitialized-value @gol
-Wno-analyzer-write-to-const @gol
-Wno-analyzer-write-to-string-literal @gol
}

@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
-Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
-Wdeclaration-after-statement  -Wpointer-sign}

@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program}.
@gccoptlist{-g  -g@var{level}  -gdwarf  -gdwarf-@var{version} @gol
-gbtf -gctf  -gctf@var{level} @gol
-ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
-gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
-gas-loc-support  -gno-as-loc-support @gol
-gas-locview-support  -gno-as-locview-support @gol
-gcolumn-info  -gno-column-info  -gdwarf32  -gdwarf64 @gol
-gstatement-frontiers  -gno-statement-frontiers @gol
-gvariable-location-views  -gno-variable-location-views @gol
-ginternal-reset-location-views  -gno-internal-reset-location-views @gol
-ginline-points  -gno-inline-points @gol
-gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
-gsplit-dwarf  -gdescribe-dies  -gno-describe-dies @gol
-fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
-fno-eliminate-unused-debug-types @gol
-femit-struct-debug-baseonly  -femit-struct-debug-reduced @gol
-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
-fno-eliminate-unused-debug-symbols  -femit-class-debug-always @gol
-fno-merge-debug-strings  -fno-dwarf2-cfi-asm @gol
-fvar-tracking  -fvar-tracking-assignments}

@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
@gccoptlist{-faggressive-loop-optimizations @gol
-falign-functions[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol
-falign-jumps[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol
-falign-labels[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol
-falign-loops[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol
-fno-allocation-dce -fallow-store-data-races @gol
-fassociative-math  -fauto-profile  -fauto-profile[=@var{path}] @gol
-fauto-inc-dec  -fbranch-probabilities @gol
-fcaller-saves @gol
-fcombine-stack-adjustments  -fconserve-stack @gol
-fcompare-elim  -fcprop-registers  -fcrossjumping @gol
-fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules @gol
-fcx-limited-range @gol
-fdata-sections  -fdce  -fdelayed-branch @gol
-fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively @gol
-fdevirtualize-at-ltrans  -fdse @gol
-fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects @gol
-ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=@var{style} @gol
-ffinite-loops @gol
-fforward-propagate  -ffp-contract=@var{style}  -ffunction-sections @gol
-fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity @gol
-fgcse-sm  -fhoist-adjacent-loads  -fif-conversion @gol
-fif-conversion2  -findirect-inlining @gol
-finline-functions  -finline-functions-called-once  -finline-limit=@var{n} @gol
-finline-small-functions -fipa-modref -fipa-cp  -fipa-cp-clone @gol
-fipa-bit-cp  -fipa-vrp  -fipa-pta  -fipa-profile  -fipa-pure-const @gol
-fipa-reference  -fipa-reference-addressable @gol
-fipa-stack-alignment  -fipa-icf  -fira-algorithm=@var{algorithm} @gol
-flive-patching=@var{level} @gol
-fira-region=@var{region}  -fira-hoist-pressure @gol
-fira-loop-pressure  -fno-ira-share-save-slots @gol
-fno-ira-share-spill-slots @gol
-fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute @gol
-fivopts  -fkeep-inline-functions  -fkeep-static-functions @gol
-fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage @gol
-floop-block  -floop-interchange  -floop-strip-mine @gol
-floop-unroll-and-jam  -floop-nest-optimize @gol
-floop-parallelize-all  -flra-remat  -flto  -flto-compression-level @gol
-flto-partition=@var{alg}  -fmerge-all-constants @gol
-fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves @gol
-fmove-loop-invariants  -fmove-loop-stores  -fno-branch-count-reg @gol
-fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse @gol
-fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole @gol
-fno-peephole2  -fno-printf-return-value  -fno-sched-interblock @gol
-fno-sched-spec  -fno-signed-zeros @gol
-fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss @gol
-fomit-frame-pointer  -foptimize-sibling-calls @gol
-fpartial-inlining  -fpeel-loops  -fpredictive-commoning @gol
-fprefetch-loop-arrays @gol
-fprofile-correction @gol
-fprofile-use  -fprofile-use=@var{path} -fprofile-partial-training @gol
-fprofile-values -fprofile-reorder-functions @gol
-freciprocal-math  -free  -frename-registers  -freorder-blocks @gol
-freorder-blocks-algorithm=@var{algorithm} @gol
-freorder-blocks-and-partition  -freorder-functions @gol
-frerun-cse-after-loop  -freschedule-modulo-scheduled-loops @gol
-frounding-math  -fsave-optimization-record @gol
-fsched2-use-superblocks  -fsched-pressure @gol
-fsched-spec-load  -fsched-spec-load-dangerous @gol
-fsched-stalled-insns-dep[=@var{n}]  -fsched-stalled-insns[=@var{n}] @gol
-fsched-group-heuristic  -fsched-critical-path-heuristic @gol
-fsched-spec-insn-heuristic  -fsched-rank-heuristic @gol
-fsched-last-insn-heuristic  -fsched-dep-count-heuristic @gol
-fschedule-fusion @gol
-fschedule-insns  -fschedule-insns2  -fsection-anchors @gol
-fselective-scheduling  -fselective-scheduling2 @gol
-fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops @gol
-fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate @gol
-fsignaling-nans @gol
-fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops@gol
-fsplit-paths @gol
-fsplit-wide-types  -fsplit-wide-types-early  -fssa-backprop  -fssa-phiopt @gol
-fstdarg-opt  -fstore-merging  -fstrict-aliasing @gol
-fthread-jumps  -ftracer  -ftree-bit-ccp @gol
-ftree-builtin-call-dce  -ftree-ccp  -ftree-ch @gol
-ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts @gol
-ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting @gol
-ftree-loop-if-convert  -ftree-loop-im @gol
-ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns @gol
-ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize @gol
-ftree-loop-vectorize @gol
-ftree-parallelize-loops=@var{n}  -ftree-pre  -ftree-partial-pre  -ftree-pta @gol
-ftree-reassoc  -ftree-scev-cprop  -ftree-sink  -ftree-slsr  -ftree-sra @gol
-ftree-switch-conversion  -ftree-tail-merge @gol
-ftree-ter  -ftree-vectorize  -ftree-vrp  -ftrivial-auto-var-init @gol
-funconstrained-commons -funit-at-a-time  -funroll-all-loops @gol
-funroll-loops -funsafe-math-optimizations  -funswitch-loops @gol
-fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt @gol
-fweb  -fwhole-program  -fwpa  -fuse-linker-plugin -fzero-call-used-regs @gol
--param @var{name}=@var{value}
-O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og}

@item Program Instrumentation Options
@xref{Instrumentation Options,,Program Instrumentation Options}.
@gccoptlist{-p  -pg  -fprofile-arcs  --coverage  -ftest-coverage @gol
-fprofile-abs-path @gol
-fprofile-dir=@var{path}  -fprofile-generate  -fprofile-generate=@var{path} @gol
-fprofile-info-section  -fprofile-info-section=@var{name} @gol
-fprofile-note=@var{path} -fprofile-prefix-path=@var{path} @gol
-fprofile-update=@var{method} -fprofile-filter-files=@var{regex} @gol
-fprofile-exclude-files=@var{regex} @gol
-fprofile-reproducible=@r{[}multithreaded@r{|}parallel-runs@r{|}serial@r{]} @gol
-fsanitize=@var{style}  -fsanitize-recover  -fsanitize-recover=@var{style} @gol
-fasan-shadow-offset=@var{number}  -fsanitize-sections=@var{s1},@var{s2},... @gol
-fsanitize-undefined-trap-on-error  -fbounds-check @gol
-fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{|}check@r{]} @gol
-fstack-protector  -fstack-protector-all  -fstack-protector-strong @gol
-fstack-protector-explicit  -fstack-check @gol
-fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
-fno-stack-limit  -fsplit-stack @gol
-fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol
-fvtv-counts  -fvtv-debug @gol
-finstrument-functions @gol
-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}}

@item Preprocessor Options
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
@gccoptlist{-A@var{question}=@var{answer} @gol
-A-@var{question}@r{[}=@var{answer}@r{]} @gol
-C  -CC  -D@var{macro}@r{[}=@var{defn}@r{]} @gol
-dD  -dI  -dM  -dN  -dU @gol
-fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers  @gol
-fexec-charset=@var{charset}  -fextended-identifiers  @gol
-finput-charset=@var{charset}  -flarge-source-files  @gol
-fmacro-prefix-map=@var{old}=@var{new} -fmax-include-depth=@var{depth} @gol
-fno-canonical-system-headers  -fpch-deps  -fpch-preprocess  @gol
-fpreprocessed  -ftabstop=@var{width}  -ftrack-macro-expansion  @gol
-fwide-exec-charset=@var{charset}  -fworking-directory @gol
-H  -imacros @var{file}  -include @var{file} @gol
-M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT -Mno-modules @gol
-no-integrated-cpp  -P  -pthread  -remap @gol
-traditional  -traditional-cpp  -trigraphs @gol
-U@var{macro}  -undef  @gol
-Wp,@var{option}  -Xpreprocessor @var{option}}

@item Assembler Options
@xref{Assembler Options,,Passing Options to the Assembler}.
@gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}

@item Linker Options
@xref{Link Options,,Options for Linking}.
@gccoptlist{@var{object-file-name}  -fuse-ld=@var{linker}  -l@var{library} @gol
-nostartfiles  -nodefaultlibs  -nolibc  -nostdlib @gol
-e @var{entry}  --entry=@var{entry} @gol
-pie  -pthread  -r  -rdynamic @gol
-s  -static  -static-pie  -static-libgcc  -static-libstdc++ @gol
-static-libasan  -static-libtsan  -static-liblsan  -static-libubsan @gol
-shared  -shared-libgcc  -symbolic @gol
-T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
-u @var{symbol}  -z @var{keyword}}

@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
@gccoptlist{-B@var{prefix}  -I@var{dir}  -I- @gol
-idirafter @var{dir} @gol
-imacros @var{file}  -imultilib @var{dir} @gol
-iplugindir=@var{dir}  -iprefix @var{file} @gol
-iquote @var{dir}  -isysroot @var{dir}  -isystem @var{dir} @gol
-iwithprefix @var{dir}  -iwithprefixbefore @var{dir}  @gol
-L@var{dir}  -no-canonical-prefixes  --no-sysroot-suffix @gol
-nostdinc  -nostdinc++  --sysroot=@var{dir}}

@item Code Generation Options
@xref{Code Gen Options,,Options for Code Generation Conventions}.
@gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
-ffixed-@var{reg}  -fexceptions @gol
-fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
-fasynchronous-unwind-tables @gol
-fno-gnu-unique @gol
-finhibit-size-directive  -fcommon  -fno-ident @gol
-fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt @gol
-fno-jump-tables -fno-bit-tests @gol
-frecord-gcc-switches @gol
-freg-struct-return  -fshort-enums  -fshort-wchar @gol
-fverbose-asm  -fpack-struct[=@var{n}]  @gol
-fleading-underscore  -ftls-model=@var{model} @gol
-fstack-reuse=@var{reuse_level} @gol
-ftrampolines  -ftrapv  -fwrapv @gol
-fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @gol
-fstrict-volatile-bitfields  -fsync-libcalls}

@item Developer Options
@xref{Developer Options,,GCC Developer Options}.
@gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
-dumpfullversion  -fcallgraph-info@r{[}=su,da@r{]}
-fchecking  -fchecking=@var{n}
-fdbg-cnt-list @gol  -fdbg-cnt=@var{counter-value-list} @gol
-fdisable-ipa-@var{pass_name} @gol
-fdisable-rtl-@var{pass_name} @gol
-fdisable-rtl-@var{pass-name}=@var{range-list} @gol
-fdisable-tree-@var{pass_name} @gol
-fdisable-tree-@var{pass-name}=@var{range-list} @gol
-fdump-debug  -fdump-earlydebug @gol
-fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links @gol
-fdump-final-insns@r{[}=@var{file}@r{]} @gol
-fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline @gol
-fdump-lang-all @gol
-fdump-lang-@var{switch} @gol
-fdump-lang-@var{switch}-@var{options} @gol
-fdump-lang-@var{switch}-@var{options}=@var{filename} @gol
-fdump-passes @gol
-fdump-rtl-@var{pass}  -fdump-rtl-@var{pass}=@var{filename} @gol
-fdump-statistics @gol
-fdump-tree-all @gol
-fdump-tree-@var{switch} @gol
-fdump-tree-@var{switch}-@var{options} @gol
-fdump-tree-@var{switch}-@var{options}=@var{filename} @gol
-fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
-fenable-@var{kind}-@var{pass} @gol
-fenable-@var{kind}-@var{pass}=@var{range-list} @gol
-fira-verbose=@var{n} @gol
-flto-report  -flto-report-wpa  -fmem-report-wpa @gol
-fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report @gol
-fopt-info  -fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol
-fprofile-report @gol
-frandom-seed=@var{string}  -fsched-verbose=@var{n} @gol
-fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose @gol
-fstats  -fstack-usage  -ftime-report  -ftime-report-details @gol
-fvar-tracking-assignments-toggle  -gtoggle @gol
-print-file-name=@var{library}  -print-libgcc-file-name @gol
-print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
-print-prog-name=@var{program}  -print-search-dirs  -Q @gol
-print-sysroot  -print-sysroot-headers-suffix @gol
-save-temps  -save-temps=cwd  -save-temps=obj  -time@r{[}=@var{file}@r{]}}

@item Machine-Dependent Options
@xref{Submodel Options,,Machine-Dependent Options}.
@c This list is ordered alphanumerically by subsection name.
@c Try and put the significant identifier (CPU or system) first,
@c so users have a clue at guessing where the ones they want will be.

@emph{AArch64 Options}
@gccoptlist{-mabi=@var{name}  -mbig-endian  -mlittle-endian @gol
-mgeneral-regs-only @gol
-mcmodel=tiny  -mcmodel=small  -mcmodel=large @gol
-mstrict-align  -mno-strict-align @gol
-momit-leaf-frame-pointer @gol
-mtls-dialect=desc  -mtls-dialect=traditional @gol
-mtls-size=@var{size} @gol
-mfix-cortex-a53-835769  -mfix-cortex-a53-843419 @gol
-mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div @gol
-mpc-relative-literal-loads @gol
-msign-return-address=@var{scope} @gol
-mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}
+@var{b-key}]|@var{bti} @gol
-mharden-sls=@var{opts} @gol
-march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}  @gol
-moverride=@var{string}  -mverbose-cost-dump @gol
-mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{sysreg} @gol
-mstack-protector-guard-offset=@var{offset} -mtrack-speculation @gol
-moutline-atomics }

@emph{Adapteva Epiphany Options}
@gccoptlist{-mhalf-reg-file  -mprefer-short-insn-regs @gol
-mbranch-cost=@var{num}  -mcmove  -mnops=@var{num}  -msoft-cmpsf @gol
-msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=@var{num} @gol
-mround-nearest  -mlong-calls  -mshort-calls  -msmall16 @gol
-mfp-mode=@var{mode}  -mvect-double  -max-vect-align=@var{num} @gol
-msplit-vecmove-early  -m1reg-@var{reg}}

@emph{AMD GCN Options}
@gccoptlist{-march=@var{gpu} -mtune=@var{gpu} -mstack-size=@var{bytes}}

@emph{ARC Options}
@gccoptlist{-mbarrel-shifter  -mjli-always @gol
-mcpu=@var{cpu}  -mA6  -mARC600  -mA7  -mARC700 @gol
-mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr @gol
-mea  -mno-mpy  -mmul32x16  -mmul64  -matomic @gol
-mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap @gol
-mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape @gol
-mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof @gol
-mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved @gol
-mrgf-banked-regs  -mlpc-width=@var{width}  -G @var{num} @gol
-mvolatile-cache  -mtp-regno=@var{regno} @gol
-malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc @gol
-mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi @gol
-mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none @gol
-mlra-priority-compact mlra-priority-noncompact  -mmillicode @gol
-mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=@var{level} @gol
-mtune=@var{cpu}  -mmultcost=@var{num}  -mcode-density-frame @gol
-munalign-prob-threshold=@var{probability}  -mmpy-option=@var{multo} @gol
-mdiv-rem  -mcode-density  -mll64  -mfpu=@var{fpu}  -mrf16  -mbranch-index}

@emph{ARM Options}
@gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
-mabi=@var{name} @gol
-mapcs-stack-check  -mno-apcs-stack-check @gol
-mapcs-reentrant  -mno-apcs-reentrant @gol
-mgeneral-regs-only @gol
-msched-prolog  -mno-sched-prolog @gol
-mlittle-endian  -mbig-endian @gol
-mbe8  -mbe32 @gol
-mfloat-abi=@var{name} @gol
-mfp16-format=@var{name}
-mthumb-interwork  -mno-thumb-interwork @gol
-mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
-mtune=@var{name}  -mprint-tune-info @gol
-mstructure-size-boundary=@var{n} @gol
-mabort-on-noreturn @gol
-mlong-calls  -mno-long-calls @gol
-msingle-pic-base  -mno-single-pic-base @gol
-mpic-register=@var{reg} @gol
-mnop-fun-dllimport @gol
-mpoke-function-name @gol
-mthumb  -marm  -mflip-thumb @gol
-mtpcs-frame  -mtpcs-leaf-frame @gol
-mcaller-super-interworking  -mcallee-super-interworking @gol
-mtp=@var{name}  -mtls-dialect=@var{dialect} @gol
-mword-relocations @gol
-mfix-cortex-m3-ldrd @gol
-munaligned-access @gol
-mneon-for-64bits @gol
-mslow-flash-data @gol
-masm-syntax-unified @gol
-mrestrict-it @gol
-mverbose-cost-dump @gol
-mpure-code @gol
-mcmse @gol
-mfix-cmse-cve-2021-35465 @gol
-mfdpic}

@emph{AVR Options}
@gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args @gol
-mbranch-cost=@var{cost} @gol
-mcall-prologues  -mgas-isr-prologues  -mint8 @gol
-mdouble=@var{bits} -mlong-double=@var{bits} @gol
-mn_flash=@var{size}  -mno-interrupts @gol
-mmain-is-OS_task  -mrelax  -mrmw  -mstrict-X  -mtiny-stack @gol
-mfract-convert-truncate @gol
-mshort-calls  -nodevicelib  -nodevicespecs @gol
-Waddr-space-convert  -Wmisspelled-isr}

@emph{Blackfin Options}
@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
-msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
-mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
-mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library @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  -mmulticore  -mcorea  -mcoreb  -msdram @gol
-micplb}

@emph{C6X Options}
@gccoptlist{-mbig-endian  -mlittle-endian  -march=@var{cpu} @gol
-msim  -msdata=@var{sdata-type}}

@emph{CRIS Options}
@gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
-mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
-metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
-mstack-align  -mdata-align  -mconst-align @gol
-m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
-melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
-mmul-bug-workaround  -mno-mul-bug-workaround}

@emph{CR16 Options}
@gccoptlist{-mmac @gol
-mcr16cplus  -mcr16c @gol
-msim  -mint32  -mbit-ops
-mdata-model=@var{model}}

@emph{C-SKY Options}
@gccoptlist{-march=@var{arch}  -mcpu=@var{cpu} @gol
-mbig-endian  -EB  -mlittle-endian  -EL @gol
-mhard-float  -msoft-float  -mfpu=@var{fpu}  -mdouble-float  -mfdivdu @gol
-mfloat-abi=@var{name} @gol
-melrw  -mistack  -mmp  -mcp  -mcache  -msecurity  -mtrust @gol
-mdsp  -medsp  -mvdsp @gol
-mdiv  -msmart  -mhigh-registers  -manchor @gol
-mpushpop  -mmultiple-stld  -mconstpool  -mstack-size  -mccrt @gol
-mbranch-cost=@var{n}  -mcse-cc  -msched-prolog -msim}

@emph{Darwin Options}
@gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
-arch_only  -bind_at_load  -bundle  -bundle_loader @gol
-client_name  -compatibility_version  -current_version @gol
-dead_strip @gol
-dependency-file  -dylib_file  -dylinker_install_name @gol
-dynamic  -dynamiclib  -exported_symbols_list @gol
-filelist  -flat_namespace  -force_cpusubtype_ALL @gol
-force_flat_namespace  -headerpad_max_install_names @gol
-iframework @gol
-image_base  -init  -install_name  -keep_private_externs @gol
-multi_module  -multiply_defined  -multiply_defined_unused @gol
-noall_load   -no_dead_strip_inits_and_terms @gol
-nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit @gol
-pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
-private_bundle  -read_only_relocs  -sectalign @gol
-sectobjectsymbols  -whyload  -seg1addr @gol
-sectcreate  -sectobjectsymbols  -sectorder @gol
-segaddr  -segs_read_only_addr  -segs_read_write_addr @gol
-seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
-segprot  -segs_read_only_addr  -segs_read_write_addr @gol
-single_module  -static  -sub_library  -sub_umbrella @gol
-twolevel_namespace  -umbrella  -undefined @gol
-unexported_symbols_list  -weak_reference_mismatches @gol
-whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=@var{version} @gol
-mkernel  -mone-byte-bool}

@emph{DEC Alpha Options}
@gccoptlist{-mno-fp-regs  -msoft-float @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}  -mtune=@var{cpu-type} @gol
-mbwx  -mmax  -mfix  -mcix @gol
-mfloat-vax  -mfloat-ieee @gol
-mexplicit-relocs  -msmall-data  -mlarge-data @gol
-msmall-text  -mlarge-text @gol
-mmemory-latency=@var{time}}

@emph{eBPF Options}
@gccoptlist{-mbig-endian -mlittle-endian -mkernel=@var{version}
-mframe-limit=@var{bytes} -mxbpf -mco-re -mno-co-re
-mjmpext -mjmp32 -malu32 -mcpu=@var{version}}

@emph{FR30 Options}
@gccoptlist{-msmall-model  -mno-lsim}

@emph{FT32 Options}
@gccoptlist{-msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm}

@emph{FRV Options}
@gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
-mhard-float  -msoft-float @gol
-malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
-mdouble  -mno-double @gol
-mmedia  -mno-media  -mmuladd  -mno-muladd @gol
-mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic @gol
-mlinked-fp  -mlong-calls  -malign-labels @gol
-mlibrary-pic  -macc-4  -macc-8 @gol
-mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
-moptimize-membar  -mno-optimize-membar @gol
-mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
-mvliw-branch  -mno-vliw-branch @gol
-mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
-mno-nested-cond-exec  -mtomcat-stats @gol
-mTLS  -mtls @gol
-mcpu=@var{cpu}}

@emph{GNU/Linux Options}
@gccoptlist{-mglibc  -muclibc  -mmusl  -mbionic  -mandroid @gol
-tno-android-cc  -tno-android-ld}

@emph{H8/300 Options}
@gccoptlist{-mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300}

@emph{HPPA Options}
@gccoptlist{-march=@var{architecture-type} @gol
-mcaller-copies  -mdisable-fpregs  -mdisable-indexing @gol
-mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
-mfixed-range=@var{register-range} @gol
-mjump-in-delay  -mlinker-opt  -mlong-calls @gol
-mlong-load-store  -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  -msio  -mwsio @gol
-munix=@var{unix-std}  -nolibdld  -static  -threads}

@emph{IA-64 Options}
@gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
-mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata @gol
-mconstant-gp  -mauto-pic  -mfused-madd @gol
-minline-float-divide-min-latency @gol
-minline-float-divide-max-throughput @gol
-mno-inline-float-divide @gol
-minline-int-divide-min-latency @gol
-minline-int-divide-max-throughput  @gol
-mno-inline-int-divide @gol
-minline-sqrt-min-latency  -minline-sqrt-max-throughput @gol
-mno-inline-sqrt @gol
-mdwarf2-asm  -mearly-stop-bits @gol
-mfixed-range=@var{register-range}  -mtls-size=@var{tls-size} @gol
-mtune=@var{cpu-type}  -milp32  -mlp64 @gol
-msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec @gol
-msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec @gol
-msched-spec-ldc  -msched-spec-control-ldc @gol
-msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns @gol
-msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path @gol
-msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost @gol
-msched-max-memory-insns-hard-limit  -msched-max-memory-insns=@var{max-insns}}

@emph{LM32 Options}
@gccoptlist{-mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled @gol
-msign-extend-enabled  -muser-enabled}

@emph{M32R/D Options}
@gccoptlist{-m32r2  -m32rx  -m32r @gol
-mdebug @gol
-malign-loops  -mno-align-loops @gol
-missue-rate=@var{number} @gol
-mbranch-cost=@var{number} @gol
-mmodel=@var{code-size-model-type} @gol
-msdata=@var{sdata-type} @gol
-mno-flush-func  -mflush-func=@var{name} @gol
-mno-flush-trap  -mflush-trap=@var{number} @gol
-G @var{num}}

@emph{M32C Options}
@gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}

@emph{M680x0 Options}
@gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune} @gol
-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
-m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
-mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
-mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
-mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
-malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
-mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
-mxgot  -mno-xgot  -mlong-jump-table-offsets}

@emph{MCore Options}
@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{MeP Options}
@gccoptlist{-mabsdiff  -mall-opts  -maverage  -mbased=@var{n}  -mbitops @gol
-mc=@var{n}  -mclip  -mconfig=@var{name}  -mcop  -mcop32  -mcop64  -mivc2 @gol
-mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax @gol
-mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf @gol
-mtiny=@var{n}}

@emph{MicroBlaze Options}
@gccoptlist{-msoft-float  -mhard-float  -msmall-divides  -mcpu=@var{cpu} @gol
-mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift @gol
-mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss @gol
-mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt @gol
-mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-@var{app-model} @gol
-mpic-data-is-text-relative}

@emph{MIPS Options}
@gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
-mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 @gol
-mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 @gol
-mips16  -mno-mips16  -mflip-mips16 @gol
-minterlink-compressed  -mno-interlink-compressed @gol
-minterlink-mips16  -mno-interlink-mips16 @gol
-mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
-mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
-mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float @gol
-mno-float  -msingle-float  -mdouble-float @gol
-modd-spreg  -mno-odd-spreg @gol
-mabs=@var{mode}  -mnan=@var{encoding} @gol
-mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
-mmcu  -mmno-mcu @gol
-meva  -mno-eva @gol
-mvirt  -mno-virt @gol
-mxpa  -mno-xpa @gol
-mcrc  -mno-crc @gol
-mginv  -mno-ginv @gol
-mmicromips  -mno-micromips @gol
-mmsa  -mno-msa @gol
-mloongson-mmi  -mno-loongson-mmi @gol
-mloongson-ext  -mno-loongson-ext @gol
-mloongson-ext2  -mno-loongson-ext2 @gol
-mfpu=@var{fpu-type} @gol
-msmartmips  -mno-smartmips @gol
-mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
-mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
-mlong64  -mlong32  -msym32  -mno-sym32 @gol
-G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
-mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
-membedded-data  -mno-embedded-data @gol
-muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
-mcode-readable=@var{setting} @gol
-msplit-addresses  -mno-split-addresses @gol
-mexplicit-relocs  -mno-explicit-relocs @gol
-mcheck-zero-division  -mno-check-zero-division @gol
-mdivide-traps  -mdivide-breaks @gol
-mload-store-pairs  -mno-load-store-pairs @gol
-mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
-mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp @gol
-mfix-24k  -mno-fix-24k @gol
-mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
-mfix-r5900  -mno-fix-r5900 @gol
-mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000 @gol
-mfix-vr4120  -mno-fix-vr4120 @gol
-mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
-mflush-func=@var{func}  -mno-flush-func @gol
-mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
-mcompact-branches=@var{policy} @gol
-mfp-exceptions  -mno-fp-exceptions @gol
-mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci @gol
-mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4 @gol
-mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address @gol
-mframe-header-opt  -mno-frame-header-opt}

@emph{MMIX Options}
@gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
-mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
-melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
-mno-base-addresses  -msingle-exit  -mno-single-exit}

@emph{MN10300 Options}
@gccoptlist{-mmult-bug  -mno-mult-bug @gol
-mno-am33  -mam33  -mam33-2  -mam34 @gol
-mtune=@var{cpu-type} @gol
-mreturn-pointer-on-d0 @gol
-mno-crt0  -mrelax  -mliw  -msetlb}

@emph{Moxie Options}
@gccoptlist{-meb  -mel  -mmul.x  -mno-crt0}

@emph{MSP430 Options}
@gccoptlist{-msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax @gol
-mwarn-mcu @gol
-mcode-region=  -mdata-region= @gol
-msilicon-errata=  -msilicon-errata-warn= @gol
-mhwmult=  -minrt  -mtiny-printf  -mmax-inline-shift=}

@emph{NDS32 Options}
@gccoptlist{-mbig-endian  -mlittle-endian @gol
-mreduced-regs  -mfull-regs @gol
-mcmov  -mno-cmov @gol
-mext-perf  -mno-ext-perf @gol
-mext-perf2  -mno-ext-perf2 @gol
-mext-string  -mno-ext-string @gol
-mv3push  -mno-v3push @gol
-m16bit  -mno-16bit @gol
-misr-vector-size=@var{num} @gol
-mcache-block-size=@var{num} @gol
-march=@var{arch} @gol
-mcmodel=@var{code-model} @gol
-mctor-dtor  -mrelax}

@emph{Nios II Options}
@gccoptlist{-G @var{num}  -mgpopt=@var{option}  -mgpopt  -mno-gpopt @gol
-mgprel-sec=@var{regexp}  -mr0rel-sec=@var{regexp} @gol
-mel  -meb @gol
-mno-bypass-cache  -mbypass-cache @gol
-mno-cache-volatile  -mcache-volatile @gol
-mno-fast-sw-div  -mfast-sw-div @gol
-mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div @gol
-mcustom-@var{insn}=@var{N}  -mno-custom-@var{insn} @gol
-mcustom-fpu-cfg=@var{name} @gol
-mhal  -msmallc  -msys-crt0=@var{name}  -msys-lib=@var{name} @gol
-march=@var{arch}  -mbmx  -mno-bmx  -mcdx  -mno-cdx}

@emph{Nvidia PTX Options}
@gccoptlist{-m64  -mmainkernel  -moptimize}

@emph{OpenRISC Options}
@gccoptlist{-mboard=@var{name}  -mnewlib  -mhard-mul  -mhard-div @gol
-msoft-mul  -msoft-div @gol
-msoft-float  -mhard-float  -mdouble-float -munordered-float @gol
-mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm @gol
-mcmodel=@var{code-model}}

@emph{PDP-11 Options}
@gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
-mint32  -mno-int16  -mint16  -mno-int32 @gol
-msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra}

@emph{picoChip Options}
@gccoptlist{-mae=@var{ae_type}  -mvliw-lookahead=@var{N} @gol
-msymbol-as-address  -mno-inefficient-warnings}

@emph{PowerPC Options}
See RS/6000 and PowerPC Options.

@emph{PRU Options}
@gccoptlist{-mmcu=@var{mcu}  -minrt  -mno-relax  -mloop @gol
-mabi=@var{variant} @gol}

@emph{RISC-V Options}
@gccoptlist{-mbranch-cost=@var{N-instruction} @gol
-mplt  -mno-plt @gol
-mabi=@var{ABI-string} @gol
-mfdiv  -mno-fdiv @gol
-mdiv  -mno-div @gol
-march=@var{ISA-string} @gol
-mtune=@var{processor-string} @gol
-mpreferred-stack-boundary=@var{num} @gol
-msmall-data-limit=@var{N-bytes} @gol
-msave-restore  -mno-save-restore @gol
-mshorten-memrefs  -mno-shorten-memrefs @gol
-mstrict-align  -mno-strict-align @gol
-mcmodel=medlow  -mcmodel=medany @gol
-mexplicit-relocs  -mno-explicit-relocs @gol
-mrelax  -mno-relax @gol
-mriscv-attribute  -mmo-riscv-attribute @gol
-malign-data=@var{type} @gol
-mbig-endian  -mlittle-endian @gol
-mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
-mstack-protector-guard-offset=@var{offset}}

@emph{RL78 Options}
@gccoptlist{-msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs @gol
-mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14 @gol
-m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts}

@emph{RS/6000 and PowerPC Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mcmodel=@var{code-model} @gol
-mpowerpc64 @gol
-maltivec  -mno-altivec @gol
-mpowerpc-gpopt  -mno-powerpc-gpopt @gol
-mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
-mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd @gol
-mfprnd  -mno-fprnd @gol
-mcmpb  -mno-cmpb  -mhard-dfp  -mno-hard-dfp @gol
-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
-m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
-malign-power  -malign-natural @gol
-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
-mupdate  -mno-update @gol
-mavoid-indexed-addresses  -mno-avoid-indexed-addresses @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
-mdynamic-no-pic  -mswdiv  -msingle-pic-base @gol
-mprioritize-restricted-insns=@var{priority} @gol
-msched-costly-dep=@var{dependence_type} @gol
-minsert-sched-nops=@var{scheme} @gol
-mcall-aixdesc  -mcall-eabi  -mcall-freebsd  @gol
-mcall-linux  -mcall-netbsd  -mcall-openbsd  @gol
-mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi @gol
-mtraceback=@var{traceback_type} @gol
-maix-struct-return  -msvr4-struct-return @gol
-mabi=@var{abi-type}  -msecure-plt  -mbss-plt @gol
-mlongcall  -mno-longcall  -mpltseq  -mno-pltseq  @gol
-mblock-move-inline-limit=@var{num} @gol
-mblock-compare-inline-limit=@var{num} @gol
-mblock-compare-inline-loop-limit=@var{num} @gol
-mno-block-ops-unaligned-vsx @gol
-mstring-compare-inline-limit=@var{num} @gol
-misel  -mno-isel @gol
-mvrsave  -mno-vrsave @gol
-mmulhw  -mno-mulhw @gol
-mdlmzb  -mno-dlmzb @gol
-mprototype  -mno-prototype @gol
-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
-msdata=@var{opt}  -mreadonly-in-sdata  -mvxworks  -G @var{num} @gol
-mrecip  -mrecip=@var{opt}  -mno-recip  -mrecip-precision @gol
-mno-recip-precision @gol
-mveclibabi=@var{type}  -mfriz  -mno-friz @gol
-mpointers-to-nested-functions  -mno-pointers-to-nested-functions @gol
-msave-toc-indirect  -mno-save-toc-indirect @gol
-mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector @gol
-mcrypto  -mno-crypto  -mhtm  -mno-htm @gol
-mquad-memory  -mno-quad-memory @gol
-mquad-memory-atomic  -mno-quad-memory-atomic @gol
-mcompat-align-parm  -mno-compat-align-parm @gol
-mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware @gol
-mgnu-attribute  -mno-gnu-attribute @gol
-mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol
-mstack-protector-guard-offset=@var{offset} -mprefixed -mno-prefixed @gol
-mpcrel -mno-pcrel -mmma -mno-mmma -mrop-protect -mno-rop-protect @gol
-mprivileged -mno-privileged}

@emph{RX Options}
@gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
-mcpu=@gol
-mbig-endian-data  -mlittle-endian-data @gol
-msmall-data @gol
-msim  -mno-sim@gol
-mas100-syntax  -mno-as100-syntax@gol
-mrelax@gol
-mmax-constant-size=@gol
-mint-register=@gol
-mpid@gol
-mallow-string-insns  -mno-allow-string-insns@gol
-mjsr@gol
-mno-warn-multiple-fast-interrupts@gol
-msave-acc-in-interrupts}

@emph{S/390 and zSeries Options}
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
-mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp @gol
-mlong-double-64  -mlong-double-128 @gol
-mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack @gol
-msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle @gol
-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
-mhtm  -mvx  -mzvector @gol
-mtpf-trace  -mno-tpf-trace  -mtpf-trace-skip  -mno-tpf-trace-skip @gol
-mfused-madd  -mno-fused-madd @gol
-mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard @gol
-mhotpatch=@var{halfwords},@var{halfwords}}

@emph{Score Options}
@gccoptlist{-meb  -mel @gol
-mnhwloop @gol
-muls @gol
-mmac @gol
-mscore5  -mscore5u  -mscore7  -mscore7d}

@emph{SH Options}
@gccoptlist{-m1  -m2  -m2e @gol
-m2a-nofpu  -m2a-single-only  -m2a-single  -m2a @gol
-m3  -m3e @gol
-m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
-m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al @gol
-mb  -ml  -mdalign  -mrelax @gol
-mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave @gol
-mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct @gol
-mprefergot  -musermode  -multcost=@var{number}  -mdiv=@var{strategy} @gol
-mdivsi3_libfunc=@var{name}  -mfixed-range=@var{register-range} @gol
-maccumulate-outgoing-args @gol
-matomic-model=@var{atomic-model} @gol
-mbranch-cost=@var{num}  -mzdcbranch  -mno-zdcbranch @gol
-mcbranch-force-delay-slot @gol
-mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra @gol
-mpretend-cmove  -mtas}

@emph{Solaris 2 Options}
@gccoptlist{-mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text @gol
-pthreads}

@emph{SPARC Options}
@gccoptlist{-mcpu=@var{cpu-type} @gol
-mtune=@var{cpu-type} @gol
-mcmodel=@var{code-model} @gol
-mmemory-model=@var{mem-model} @gol
-m32  -m64  -mapp-regs  -mno-app-regs @gol
-mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
-mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
-mhard-quad-float  -msoft-quad-float @gol
-mstack-bias  -mno-stack-bias @gol
-mstd-struct-return  -mno-std-struct-return @gol
-munaligned-doubles  -mno-unaligned-doubles @gol
-muser-mode  -mno-user-mode @gol
-mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
-mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
-mvis4  -mno-vis4  -mvis4b  -mno-vis4b @gol
-mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld  @gol
-mpopc  -mno-popc  -msubxc  -mno-subxc @gol
-mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc @gol
-mlra  -mno-lra}

@emph{System V Options}
@gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}

@emph{TILE-Gx Options}
@gccoptlist{-mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian @gol
-mcmodel=@var{code-model}}

@emph{TILEPro Options}
@gccoptlist{-mcpu=@var{cpu}  -m32}

@emph{V850 Options}
@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
-mapp-regs  -mno-app-regs @gol
-mdisable-callt  -mno-disable-callt @gol
-mv850e2v3  -mv850e2  -mv850e1  -mv850es @gol
-mv850e  -mv850  -mv850e3v5 @gol
-mloop @gol
-mrelax @gol
-mlong-jumps @gol
-msoft-float @gol
-mhard-float @gol
-mgcc-abi @gol
-mrh850-abi @gol
-mbig-switch}

@emph{VAX Options}
@gccoptlist{-mg  -mgnu  -munix}

@emph{Visium Options}
@gccoptlist{-mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
-mcpu=@var{cpu-type}  -mtune=@var{cpu-type}  -msv-mode  -muser-mode}

@emph{VMS Options}
@gccoptlist{-mvms-return-codes  -mdebug-main=@var{prefix}  -mmalloc64 @gol
-mpointer-size=@var{size}}

@emph{VxWorks Options}
@gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
-Xbind-lazy  -Xbind-now}

@emph{x86 Options}
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
-mtune-ctrl=@var{feature-list}  -mdump-tune-features  -mno-default @gol
-mfpmath=@var{unit} @gol
-masm=@var{dialect}  -mno-fancy-math-387 @gol
-mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float @gol
-mno-wide-multiply  -mrtd  -malign-double @gol
-mpreferred-stack-boundary=@var{num} @gol
-mincoming-stack-boundary=@var{num} @gol
-mcld  -mcx16  -msahf  -mmovbe  -mcrc32 -mmwait @gol
-mrecip  -mrecip=@var{opt} @gol
-mvzeroupper  -mprefer-avx128  -mprefer-vector-width=@var{opt} @gol
-mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx @gol
-mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl @gol
-mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes @gol
-mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd  @gol
-mptwrite  -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves @gol
-msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop @gol
-madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mhle  -mlwp @gol
-mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes  -mwaitpkg @gol
-mshstk -mmanual-endbr -mforce-indirect-call  -mavx512vbmi2 -mavx512bf16 -menqcmd @gol
-mvpclmulqdq  -mavx512bitalg  -mmovdiri  -mmovdir64b  -mavx512vpopcntdq @gol
-mavx5124fmaps  -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid @gol
-mrdseed  -msgx -mavx512vp2intersect -mserialize -mtsxldtrk@gol
-mamx-tile  -mamx-int8  -mamx-bf16 -muintr -mhreset -mavxvnni@gol
-mavx512fp16 @gol
-mcldemote  -mms-bitfields  -mno-align-stringops  -minline-all-stringops @gol
-minline-stringops-dynamically  -mstringop-strategy=@var{alg} @gol
-mkl -mwidekl @gol
-mmemcpy-strategy=@var{strategy}  -mmemset-strategy=@var{strategy} @gol
-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
-m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128 @gol
-mregparm=@var{num}  -msseregparm @gol
-mveclibabi=@var{type}  -mvect8-ret-in-mem @gol
-mpc32  -mpc64  -mpc80  -mstackrealign @gol
-momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs @gol
-mcmodel=@var{code-model}  -mabi=@var{name}  -maddress-mode=@var{mode} @gol
-m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=@var{num} @gol
-msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv @gol
-minstrument-return=@var{type} -mfentry-name=@var{name} -mfentry-section=@var{name} @gol
-mavx256-split-unaligned-load  -mavx256-split-unaligned-store @gol
-malign-data=@var{type}  -mstack-protector-guard=@var{guard} @gol
-mstack-protector-guard-reg=@var{reg} @gol
-mstack-protector-guard-offset=@var{offset} @gol
-mstack-protector-guard-symbol=@var{symbol} @gol
-mgeneral-regs-only  -mcall-ms2sysv-xlogues @gol
-mindirect-branch=@var{choice}  -mfunction-return=@var{choice} @gol
-mindirect-branch-register -mneeded}

@emph{x86 Windows Options}
@gccoptlist{-mconsole  -mcygwin  -mno-cygwin  -mdll @gol
-mnop-fun-dllimport  -mthread @gol
-municode  -mwin32  -mwindows  -fno-set-stack-executable}

@emph{Xstormy16 Options}
@gccoptlist{-msim}

@emph{Xtensa Options}
@gccoptlist{-mconst16  -mno-const16 @gol
-mfused-madd  -mno-fused-madd @gol
-mforce-no-pic @gol
-mserialize-volatile  -mno-serialize-volatile @gol
-mtext-section-literals  -mno-text-section-literals @gol
-mauto-litpools  -mno-auto-litpools @gol
-mtarget-align  -mno-target-align @gol
-mlongcalls  -mno-longcalls @gol
-mabi=@var{abi-type}}

@emph{zSeries Options}
See S/390 and zSeries Options.
@end table


@node Overall Options
@section Options Controlling the Kind of Output

Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order.  GCC is capable of
preprocessing and compiling several files either into several
assembler input files, or into one assembler input file; then each
assembler input file produces an object file, and linking combines all
the object files (those newly compiled, and those specified as input)
into an executable file.

@cindex file name suffix
For any given input file, the file name suffix determines what kind of
compilation is done:

@table @gcctabopt
@item @var{file}.c
C source code that must be preprocessed.

@item @var{file}.i
C source code that should not be preprocessed.

@item @var{file}.ii
C++ source code that should not be preprocessed.

@item @var{file}.m
Objective-C source code.  Note that you must link with the @file{libobjc}
library to make an Objective-C program work.

@item @var{file}.mi
Objective-C source code that should not be preprocessed.

@item @var{file}.mm
@itemx @var{file}.M
Objective-C++ source code.  Note that you must link with the @file{libobjc}
library to make an Objective-C++ program work.  Note that @samp{.M} refers
to a literal capital M@.

@item @var{file}.mii
Objective-C++ source code that should not be preprocessed.

@item @var{file}.h
C, C++, Objective-C or Objective-C++ header file to be turned into a
precompiled header (default), or C, C++ header file to be turned into an
Ada spec (via the @option{-fdump-ada-spec} switch).

@item @var{file}.cc
@itemx @var{file}.cp
@itemx @var{file}.cxx
@itemx @var{file}.cpp
@itemx @var{file}.CPP
@itemx @var{file}.c++
@itemx @var{file}.C
C++ source code that 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}.mm
@itemx @var{file}.M
Objective-C++ source code that must be preprocessed.

@item @var{file}.mii
Objective-C++ source code that should not be preprocessed.

@item @var{file}.hh
@itemx @var{file}.H
@itemx @var{file}.hp
@itemx @var{file}.hxx
@itemx @var{file}.hpp
@itemx @var{file}.HPP
@itemx @var{file}.h++
@itemx @var{file}.tcc
C++ header file to be turned into a precompiled header or Ada spec.

@item @var{file}.f
@itemx @var{file}.for
@itemx @var{file}.ftn
Fixed form Fortran source code that 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 that 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 that 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 that must be preprocessed (with the
traditional preprocessor).

@item @var{file}.go
Go source code.

@item @var{file}.d
D source code.

@item @var{file}.di
D interface file.

@item @var{file}.dd
D documentation code (Ddoc).

@item @var{file}.ads
Ada source code file that contains a library unit declaration (a
declaration of a package, subprogram, or generic, or a generic
instantiation), or a library unit renaming declaration (a package,
generic, or subprogram renaming declaration).  Such files are also
called @dfn{specs}.

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

@c GCC also knows about some suffixes for languages not yet included:
@c Ratfor:
@c @var{file}.r

@item @var{file}.s
Assembler code.

@item @var{file}.S
@itemx @var{file}.sx
Assembler code that must be preprocessed.

@item @var{other}
An object file to be fed straight into linking.
Any file name with no recognized suffix is treated this way.
@end table

@opindex x
You can specify the input language explicitly with the @option{-x} option:

@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 @option{-x} option.  Possible values for @var{language} are:
@smallexample
c  c-header  cpp-output
c++  c++-header  c++-system-header c++-user-header c++-cpp-output
objective-c  objective-c-header  objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler  assembler-with-cpp
ada
d
f77  f77-cpp-input f95  f95-cpp-input
go
@end smallexample

@item -x none
Turn off any specification of a language, so that subsequent files are
handled according to their file name suffixes (as they are if @option{-x}
has not been used at all).
@end table

If you only want some of the stages of compilation, you can use
@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
one of the options @option{-c}, @option{-S}, or @option{-E} to say where
@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 @gcctabopt
@item -c
@opindex 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
object file for each source file.

By default, the object file name for a source file is made by replacing
the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.

Unrecognized input files, not requiring compilation or assembly, are
ignored.

@item -S
@opindex S
Stop after the stage of compilation proper; do not assemble.  The output
is in the form of an assembler code file for each non-assembler input
file specified.

By default, the assembler file name for a source file is made by
replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.

Input files that don't require compilation are ignored.

@item -E
@opindex E
Stop after the preprocessing stage; do not run the compiler proper.  The
output is in the form of preprocessed source code, which is sent to the
standard output.

Input files that don't require preprocessing are ignored.

@cindex output file option
@item -o @var{file}
@opindex o
Place the primary output in file @var{file}.  This applies to whatever
sort of output is being produced, whether it be an executable file, an
object file, an assembler file or preprocessed C code.

If @option{-o} is not specified, the default is to put an executable
file in @file{a.out}, the object file for
@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
assembler file in @file{@var{source}.s}, a precompiled header file in
@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
standard output.

Though @option{-o} names only the primary output, it also affects the
naming of auxiliary and dump outputs.  See the examples below.  Unless
overridden, both auxiliary outputs and dump outputs are placed in the
same directory as the primary output.  In auxiliary outputs, the suffix
of the input file is replaced with that of the auxiliary output file
type; in dump outputs, the suffix of the dump file is appended to the
input file suffix.  In compilation commands, the base name of both
auxiliary and dump outputs is that of the primary output; in compile and
link commands, the primary output name, minus the executable suffix, is
combined with the input file name.  If both share the same base name,
disregarding the suffix, the result of the combination is that base
name, otherwise, they are concatenated, separated by a dash.

@smallexample
gcc -c foo.c ...
@end smallexample

will use @file{foo.o} as the primary output, and place aux outputs and
dumps next to it, e.g., aux file @file{foo.dwo} for
@option{-gsplit-dwarf}, and dump file @file{foo.c.???r.final} for
@option{-fdump-rtl-final}.

If a non-linker output file is explicitly specified, aux and dump files
by default take the same base name:

@smallexample
gcc -c foo.c -o dir/foobar.o ...
@end smallexample

will name aux outputs @file{dir/foobar.*} and dump outputs
@file{dir/foobar.c.*}.

A linker output will instead prefix aux and dump outputs:

@smallexample
gcc foo.c bar.c -o dir/foobar ...
@end smallexample

will generally name aux outputs @file{dir/foobar-foo.*} and
@file{dir/foobar-bar.*}, and dump outputs @file{dir/foobar-foo.c.*} and
@file{dir/foobar-bar.c.*}.

The one exception to the above is when the executable shares the base
name with the single input:

@smallexample
gcc foo.c -o dir/foo ...
@end smallexample

in which case aux outputs are named @file{dir/foo.*} and dump outputs
named @file{dir/foo.c.*}.

The location and the names of auxiliary and dump outputs can be adjusted
by the options @option{-dumpbase}, @option{-dumpbase-ext},
@option{-dumpdir}, @option{-save-temps=cwd}, and
@option{-save-temps=obj}.


@item -dumpbase @var{dumpbase}
@opindex dumpbase
This option sets the base name for auxiliary and dump output files.  It
does not affect the name of the primary output file.  Intermediate
outputs, when preserved, are not regarded as primary outputs, but as
auxiliary outputs:

@smallexample
gcc -save-temps -S foo.c
@end smallexample

saves the (no longer) temporary preprocessed file in @file{foo.i}, and
then compiles to the (implied) output file @file{foo.s}, whereas:

@smallexample
gcc -save-temps -dumpbase save-foo -c foo.c
@end smallexample

preprocesses to in @file{save-foo.i}, compiles to @file{save-foo.s} (now
an intermediate, thus auxiliary output), and then assembles to the
(implied) output file @file{foo.o}.

Absent this option, dump and aux files take their names from the input
file, or from the (non-linker) output file, if one is explicitly
specified: dump output files (e.g. those requested by @option{-fdump-*}
options) with the input name suffix, and aux output files (those
requested by other non-dump options, e.g. @code{-save-temps},
@code{-gsplit-dwarf}, @code{-fcallgraph-info}) without it.

Similar suffix differentiation of dump and aux outputs can be attained
for explicitly-given @option{-dumpbase basename.suf} by also specifying
@option{-dumpbase-ext .suf}.

If @var{dumpbase} is explicitly specified with any directory component,
any @var{dumppfx} specification (e.g. @option{-dumpdir} or
@option{-save-temps=*}) is ignored, and instead of appending to it,
@var{dumpbase} fully overrides it:

@smallexample
gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \
  -dumpdir pfx- -save-temps=cwd ...
@end smallexample

creates auxiliary and dump outputs named @file{alt/foo.*}, disregarding
@file{dir/} in @option{-o}, the @file{./} prefix implied by
@option{-save-temps=cwd}, and @file{pfx-} in @option{-dumpdir}.

When @option{-dumpbase} is specified in a command that compiles multiple
inputs, or that compiles and then links, it may be combined with
@var{dumppfx}, as specified under @option{-dumpdir}.  Then, each input
file is compiled using the combined @var{dumppfx}, and default values
for @var{dumpbase} and @var{auxdropsuf} are computed for each input
file:

@smallexample
gcc foo.c bar.c -c -dumpbase main ...
@end smallexample

creates @file{foo.o} and @file{bar.o} as primary outputs, and avoids
overwriting the auxiliary and dump outputs by using the @var{dumpbase}
as a prefix, creating auxiliary and dump outputs named @file{main-foo.*}
and @file{main-bar.*}.

An empty string specified as @var{dumpbase} avoids the influence of the
output basename in the naming of auxiliary and dump outputs during
compilation, computing default values :

@smallexample
gcc -c foo.c -o dir/foobar.o -dumpbase '' ...
@end smallexample

will name aux outputs @file{dir/foo.*} and dump outputs
@file{dir/foo.c.*}.  Note how their basenames are taken from the input
name, but the directory still defaults to that of the output.

The empty-string dumpbase does not prevent the use of the output
basename for outputs during linking:

@smallexample
gcc foo.c bar.c -o dir/foobar -dumpbase '' -flto ...
@end smallexample

The compilation of the source files will name auxiliary outputs
@file{dir/foo.*} and @file{dir/bar.*}, and dump outputs
@file{dir/foo.c.*} and @file{dir/bar.c.*}.  LTO recompilation during
linking will use @file{dir/foobar.} as the prefix for dumps and
auxiliary files.


@item -dumpbase-ext @var{auxdropsuf}
@opindex dumpbase-ext
When forming the name of an auxiliary (but not a dump) output file, drop
trailing @var{auxdropsuf} from @var{dumpbase} before appending any
suffixes.  If not specified, this option defaults to the suffix of a
default @var{dumpbase}, i.e., the suffix of the input file when
@option{-dumpbase} is not present in the command line, or @var{dumpbase}
is combined with @var{dumppfx}.

@smallexample
gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
@end smallexample

creates @file{dir/foo.o} as the main output, and generates auxiliary
outputs in @file{dir/x-foo.*}, taking the location of the primary
output, and dropping the @file{.c} suffix from the @var{dumpbase}.  Dump
outputs retain the suffix: @file{dir/x-foo.c.*}.

This option is disregarded if it does not match the suffix of a
specified @var{dumpbase}, except as an alternative to the executable
suffix when appending the linker output base name to @var{dumppfx}, as
specified below:

@smallexample
gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
@end smallexample

creates @file{main.out} as the primary output, and avoids overwriting
the auxiliary and dump outputs by using the executable name minus
@var{auxdropsuf} as a prefix, creating auxiliary outputs named
@file{main-foo.*} and @file{main-bar.*} and dump outputs named
@file{main-foo.c.*} and @file{main-bar.c.*}.


@item -dumpdir @var{dumppfx}
@opindex dumpdir
When forming the name of an auxiliary or dump output file, use
@var{dumppfx} as a prefix:

@smallexample
gcc -dumpdir pfx- -c foo.c ...
@end smallexample

creates @file{foo.o} as the primary output, and auxiliary outputs named
@file{pfx-foo.*}, combining the given @var{dumppfx} with the default
@var{dumpbase} derived from the default primary output, derived in turn
from the input name.  Dump outputs also take the input name suffix:
@file{pfx-foo.c.*}.

If @var{dumppfx} is to be used as a directory name, it must end with a
directory separator:

@smallexample
gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
@end smallexample

creates @file{obj/bar.o} as the primary output, and auxiliary outputs
named @file{dir/bar.*}, combining the given @var{dumppfx} with the
default @var{dumpbase} derived from the primary output name.  Dump
outputs also take the input name suffix: @file{dir/bar.c.*}.

It defaults to the location of the output file; options
@option{-save-temps=cwd} and @option{-save-temps=obj} override this
default, just like an explicit @option{-dumpdir} option.  In case
multiple such options are given, the last one prevails:

@smallexample
gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
@end smallexample

outputs @file{foo.o}, with auxiliary outputs named @file{foo.*} because
@option{-save-temps=*} overrides the @var{dumppfx} given by the earlier
@option{-dumpdir} option.  It does not matter that @option{=obj} is the
default for @option{-save-temps}, nor that the output directory is
implicitly the current directory.  Dump outputs are named
@file{foo.c.*}.

When compiling from multiple input files, if @option{-dumpbase} is
specified, @var{dumpbase}, minus a @var{auxdropsuf} suffix, and a dash
are appended to (or override, if containing any directory components) an
explicit or defaulted @var{dumppfx}, so that each of the multiple
compilations gets differently-named aux and dump outputs.

@smallexample
gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
@end smallexample

outputs auxiliary dumps to @file{dir/pfx-main-foo.*} and
@file{dir/pfx-main-bar.*}, appending @var{dumpbase}- to @var{dumppfx}.
Dump outputs retain the input file suffix: @file{dir/pfx-main-foo.c.*}
and @file{dir/pfx-main-bar.c.*}, respectively.  Contrast with the
single-input compilation:

@smallexample
gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
@end smallexample

that, applying @option{-dumpbase} to a single source, does not compute
and append a separate @var{dumpbase} per input file.  Its auxiliary and
dump outputs go in @file{dir/pfx-main.*}.

When compiling and then linking from multiple input files, a defaulted
or explicitly specified @var{dumppfx} also undergoes the @var{dumpbase}-
transformation above (e.g. the compilation of @file{foo.c} and
@file{bar.c} above, but without @option{-c}).  If neither
@option{-dumpdir} nor @option{-dumpbase} are given, the linker output
base name, minus @var{auxdropsuf}, if specified, or the executable
suffix otherwise, plus a dash is appended to the default @var{dumppfx}
instead.  Note, however, that unlike earlier cases of linking:

@smallexample
gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
@end smallexample

does not append the output name @file{main} to @var{dumppfx}, because
@option{-dumpdir} is explicitly specified.  The goal is that the
explicitly-specified @var{dumppfx} may contain the specified output name
as part of the prefix, if desired; only an explicitly-specified
@option{-dumpbase} would be combined with it, in order to avoid simply
discarding a meaningful option.

When compiling and then linking from a single input file, the linker
output base name will only be appended to the default @var{dumppfx} as
above if it does not share the base name with the single input file
name.  This has been covered in single-input linking cases above, but
not with an explicit @option{-dumpdir} that inhibits the combination,
even if overridden by @option{-save-temps=*}:

@smallexample
gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
@end smallexample

Auxiliary outputs are named @file{foo.*}, and dump outputs
@file{foo.c.*}, in the current working directory as ultimately requested
by @option{-save-temps=cwd}.

Summing it all up for an intuitive though slightly imprecise data flow:
the primary output name is broken into a directory part and a basename
part; @var{dumppfx} is set to the former, unless overridden by
@option{-dumpdir} or @option{-save-temps=*}, and @var{dumpbase} is set
to the latter, unless overriden by @option{-dumpbase}.  If there are
multiple inputs or linking, this @var{dumpbase} may be combined with
@var{dumppfx} and taken from each input file.  Auxiliary output names
for each input are formed by combining @var{dumppfx}, @var{dumpbase}
minus suffix, and the auxiliary output suffix; dump output names are
only different in that the suffix from @var{dumpbase} is retained.

When it comes to auxiliary and dump outputs created during LTO
recompilation, a combination of @var{dumppfx} and @var{dumpbase}, as
given or as derived from the linker output name but not from inputs,
even in cases in which this combination would not otherwise be used as
such, is passed down with a trailing period replacing the compiler-added
dash, if any, as a @option{-dumpdir} option to @command{lto-wrapper};
being involved in linking, this program does not normally get any
@option{-dumpbase} and @option{-dumpbase-ext}, and it ignores them.

When running sub-compilers, @command{lto-wrapper} appends LTO stage
names to the received @var{dumppfx}, ensures it contains a directory
component so that it overrides any @option{-dumpdir}, and passes that as
@option{-dumpbase} to sub-compilers.

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

@item -###
@opindex ###
Like @option{-v} except the commands are not executed and arguments
are quoted unless they contain only alphanumeric characters or @code{./-_}.
This is useful for shell scripts to capture the driver-generated command lines.

@item --help
@opindex help
Print (on the standard output) a description of the command-line options
understood by @command{gcc}.  If the @option{-v} option is also specified
then @option{--help} is also passed on to the various processes
invoked by @command{gcc}, so that they can display the command-line options
they accept.  If the @option{-Wextra} option has also been specified
(prior to the @option{--help} option), then command-line options that
have no documentation associated with them are also displayed.

@item --target-help
@opindex target-help
Print (on the standard output) a description of target-specific command-line
options for each tool.  For some targets extra target-specific
information may also be printed.

@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
Print (on the standard output) a description of the command-line
options understood by the compiler that fit into all specified classes
and qualifiers.  These are the supported classes:

@table @asis
@item @samp{optimizers}
Display all of the optimization options supported by the
compiler.

@item @samp{warnings}
Display all of the options controlling warning messages
produced by the compiler.

@item @samp{target}
Display target-specific options.  Unlike the
@option{--target-help} option however, target-specific options of the
linker and assembler are not displayed.  This is because those
tools do not currently support the extended @option{--help=} syntax.

@item @samp{params}
Display the values recognized by the @option{--param}
option.

@item @var{language}
Display the options supported for @var{language}, where
@var{language} is the name of one of the languages supported in this
version of GCC@.  If an option is supported by all languages, one needs
to select @samp{common} class.

@item @samp{common}
Display the options that are common to all languages.
@end table

These are the supported qualifiers:

@table @asis
@item @samp{undocumented}
Display only those options that are undocumented.

@item @samp{joined}
Display options taking an argument that appears after an equal
sign in the same continuous piece of text, such as:
@samp{--help=target}.

@item @samp{separate}
Display options taking an argument that appears as a separate word
following the original option, such as: @samp{-o output-file}.
@end table

Thus for example to display all the undocumented target-specific
switches supported by the compiler, use:

@smallexample
--help=target,undocumented
@end smallexample

The sense of a qualifier can be inverted by prefixing it with the
@samp{^} 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
argument) that have a description, use:

@smallexample
--help=warnings,^joined,^undocumented
@end smallexample

The argument to @option{--help=} should not consist solely of inverted
qualifiers.

Combining several classes is possible, although this usually
restricts the output so much that there is nothing to display.  One
case where it does work, however, is when one of the classes is
@var{target}.  For example, to display all the target-specific
optimization options, use:

@smallexample
--help=target,optimizers
@end smallexample

The @option{--help=} option can be repeated on the command line.  Each
successive use displays its requested class of options, skipping
those that have already been displayed.  If @option{--help} is also
specified anywhere on the command line then this takes precedence
over any @option{--help=} option.

If the @option{-Q} option appears on the command line before the
@option{--help=} option, then the descriptive text displayed by
@option{--help=} is changed.  Instead of describing the displayed
options, an indication is given as to whether the option is enabled,
disabled or set to a specific value (assuming that the compiler
knows this at the point where the @option{--help=} option is used).

Here is a truncated example from the ARM port of @command{gcc}:

@smallexample
  % gcc -Q -mabi=2 --help=target -c
  The following options are target specific:
  -mabi=                                2
  -mabort-on-noreturn                   [disabled]
  -mapcs                                [disabled]
@end smallexample

The output is sensitive to the effects of previous command-line
options, so for example it is possible to find out which optimizations
are enabled at @option{-O2} by using:

@smallexample
-Q -O2 --help=optimizers
@end smallexample

Alternatively you can discover which binary optimizations are enabled
by @option{-O3} by using:

@smallexample
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep enabled
@end smallexample

@item --version
@opindex version
Display the version number and copyrights of the invoked GCC@.

@item -pass-exit-codes
@opindex pass-exit-codes
Normally the @command{gcc} program exits with the code of 1 if any
phase of the compiler returns a non-success return code.  If you specify
@option{-pass-exit-codes}, the @command{gcc} program instead returns with
the numerically highest error produced by any phase returning an error
indication.  The C, C++, and Fortran front ends return 4 if an internal
compiler error is encountered.

@item -pipe
@opindex pipe
Use pipes rather than temporary files for communication between the
various stages of compilation.  This fails to work on some systems where
the assembler is unable to read from a pipe; but the GNU assembler has
no trouble.

@item -specs=@var{file}
@opindex specs
Process @var{file} after the compiler reads in the standard @file{specs}
file, in order to override the defaults which the @command{gcc} driver
program uses when determining what switches to pass to @command{cc1},
@command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
@option{-specs=@var{file}} can be specified on the command line, and they
are processed in order, from left to right.  @xref{Spec Files}, for
information about the format of the @var{file}.

@item -wrapper
@opindex wrapper
Invoke all subcommands under a wrapper program.  The name of the
wrapper program and its parameters are passed as a comma separated
list.

@smallexample
gcc -c t.c -wrapper gdb,--args
@end smallexample

@noindent
This invokes all subprograms of @command{gcc} under
@samp{gdb --args}, thus the invocation of @command{cc1} is
@samp{gdb --args cc1 @dots{}}.

@item -ffile-prefix-map=@var{old}=@var{new}
@opindex ffile-prefix-map
When compiling files residing in directory @file{@var{old}}, record
any references to them in the result of the compilation as if the
files resided in directory @file{@var{new}} instead.  Specifying this
option is equivalent to specifying all the individual
@option{-f*-prefix-map} options.  This can be used to make reproducible
builds that are location independent.  See also
@option{-fmacro-prefix-map} and @option{-fdebug-prefix-map}.

@item -fplugin=@var{name}.so
@opindex fplugin
Load the plugin code in file @var{name}.so, assumed to be a
shared object to be dlopen'd by the compiler.  The base name of
the shared object file is used to identify the plugin for the
purposes of argument parsing (See
@option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
Each plugin should define the callback functions specified in the
Plugins API.

@item -fplugin-arg-@var{name}-@var{key}=@var{value}
@opindex fplugin-arg
Define an argument called @var{key} with a value of @var{value}
for the plugin called @var{name}.

@item -fdump-ada-spec@r{[}-slim@r{]}
@opindex fdump-ada-spec
For C and C++ source and include files, generate corresponding Ada specs.
@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
GNAT User's Guide}, which provides detailed documentation on this feature.

@item -fada-spec-parent=@var{unit}
@opindex fada-spec-parent
In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
Ada specs as child units of parent @var{unit}.

@item -fdump-go-spec=@var{file}
@opindex fdump-go-spec
For input files in any language, generate corresponding Go
declarations in @var{file}.  This generates Go @code{const},
@code{type}, @code{var}, and @code{func} declarations which may be a
useful way to start writing a Go interface to code written in some
other language.

@include @value{srcdir}/../libiberty/at-file.texi
@end table

@node Invoking G++
@section Compiling C++ Programs

@cindex suffixes for C++ source
@cindex C++ source file suffixes
C++ source files conventionally use one of the suffixes @samp{.C},
@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
@samp{.H}, or (for shared template code) @samp{.tcc}; and
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 @command{gcc}).

@findex g++
@findex c++
However, the use of @command{gcc} does not add the C++ library.
@command{g++} is a program that calls GCC and automatically specifies linking
against the C++ library.  It treats @samp{.c},
@samp{.h} and @samp{.i} files as C++ source files instead of C source
files unless @option{-x} is used.  This program is also useful when
precompiling a C header file with a @samp{.h} extension for use in C++
compilations.  On many systems, @command{g++} is also installed with
the name @command{c++}.

@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
languages; or options that are meaningful only for C++ programs.
@xref{C Dialect Options,,Options Controlling C Dialect}, for
explanations of options for languages related to C@.
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
explanations of options that are meaningful only for C++ programs.

@node C Dialect Options
@section Options Controlling C Dialect
@cindex dialect options
@cindex language dialect options
@cindex options, dialect

The following options control the dialect of C (or languages derived
from C, such as C++, Objective-C and Objective-C++) that the compiler
accepts:

@table @gcctabopt
@cindex ANSI support
@cindex ISO support
@item -ansi
@opindex ansi
In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
equivalent to @option{-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),
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 ISO trigraph feature.  For the C compiler,
it disables recognition of C++ style @samp{//} comments as well as
the @code{inline} keyword.

The alternate keywords @code{__asm__}, @code{__extension__},
@code{__inline__} and @code{__typeof__} continue to work despite
@option{-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 @option{-ansi}.  Alternate predefined macros
such as @code{__unix__} and @code{__vax__} are also available, with or
without @option{-ansi}.

The @option{-ansi} option does not cause non-ISO programs to be
rejected gratuitously.  For that, @option{-Wpedantic} is required in
addition to @option{-ansi}.  @xref{Warning Options}.

The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
option is used.  Some header files may notice this macro and refrain
from declaring certain functions or defining certain macros that the
ISO standard doesn't call for; this is to avoid interfering with any
programs that might use these names for other things.

Functions that are normally built in but do not have semantics
defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
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. @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{c90} or
@samp{c++98}, and GNU dialects of those standards, such as
@samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
compiler accepts all programs following that standard plus those
using GNU extensions that do not contradict it.  For example,
@option{-std=c90} 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, when a GNU dialect of a standard is
specified, all features supported by the compiler are enabled, even when
those features change the meaning of the base standard.  As a result, some
strict-conforming programs may be rejected.  The particular standard
is used by @option{-Wpedantic} to identify which features are GNU
extensions given that version of the standard. For example
@option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
comments, while @option{-std=gnu99 -Wpedantic} does not.

A value for this option must be provided; possible values are

@table @samp
@item c90
@itemx c89
@itemx iso9899:1990
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.

@item c99
@itemx c9x
@itemx iso9899:1999
@itemx iso9899:199x
ISO C99.  This standard is substantially completely supported, modulo
bugs and floating-point issues
(mainly but not entirely relating to optional C99 features from
Annexes F and G).  See
@w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
names @samp{c9x} and @samp{iso9899:199x} are deprecated.

@item c11
@itemx c1x
@itemx iso9899:2011
ISO C11, the 2011 revision of the ISO C standard.  This standard is
substantially completely supported, modulo bugs, floating-point issues
(mainly but not entirely relating to optional C11 features from
Annexes F and G) and the optional Annexes K (Bounds-checking
interfaces) and L (Analyzability).  The name @samp{c1x} is deprecated.

@item c17
@itemx c18
@itemx iso9899:2017
@itemx iso9899:2018
ISO C17, the 2017 revision of the ISO C standard
(published in 2018).  This standard is
same as C11 except for corrections of defects (all of which are also
applied with @option{-std=c11}) and a new value of
@code{__STDC_VERSION__}, and so is supported to the same extent as C11.

@item c2x
The next version of the ISO C standard, still under development.  The
support for this version is experimental and incomplete.

@item gnu90
@itemx gnu89
GNU dialect of ISO C90 (including some C99 features).

@item gnu99
@itemx gnu9x
GNU dialect of ISO C99.  The name @samp{gnu9x} is deprecated.

@item gnu11
@itemx gnu1x
GNU dialect of ISO C11.
The name @samp{gnu1x} is deprecated.

@item gnu17
@itemx gnu18
GNU dialect of ISO C17.  This is the default for C code.

@item gnu2x
The next version of the ISO C standard, still under development, plus
GNU extensions.  The support for this version is experimental and
incomplete.

@item c++98
@itemx c++03
The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
additional defect reports. Same as @option{-ansi} for C++ code.

@item gnu++98
@itemx gnu++03
GNU dialect of @option{-std=c++98}.

@item c++11
@itemx c++0x
The 2011 ISO C++ standard plus amendments.
The name @samp{c++0x} is deprecated.

@item gnu++11
@itemx gnu++0x
GNU dialect of @option{-std=c++11}.
The name @samp{gnu++0x} is deprecated.

@item c++14
@itemx c++1y
The 2014 ISO C++ standard plus amendments.
The name @samp{c++1y} is deprecated.

@item gnu++14
@itemx gnu++1y
GNU dialect of @option{-std=c++14}.
The name @samp{gnu++1y} is deprecated.

@item c++17
@itemx c++1z
The 2017 ISO C++ standard plus amendments.
The name @samp{c++1z} is deprecated.

@item gnu++17
@itemx gnu++1z
GNU dialect of @option{-std=c++17}.
This is the default for C++ code.
The name @samp{gnu++1z} is deprecated.

@item c++20
@itemx c++2a
The 2020 ISO C++ standard plus amendments.
Support is experimental, and could change in incompatible ways in
future releases.
The name @samp{c++2a} is deprecated.

@item gnu++20
@itemx gnu++2a
GNU dialect of @option{-std=c++20}.
Support is experimental, and could change in incompatible ways in
future releases.
The name @samp{gnu++2a} is deprecated.

@item c++2b
@itemx c++23
The next revision of the ISO C++ standard, planned for
2023.  Support is highly experimental, and will almost certainly
change in incompatible ways in future releases.

@item gnu++2b
@itemx gnu++23
GNU dialect of @option{-std=c++2b}.  Support is highly experimental,
and will almost certainly change in incompatible ways in future
releases.
@end table

@item -aux-info @var{filename}
@opindex aux-info
Output to the given filename prototyped declarations for all functions
declared and/or defined in a translation unit, including those in header
files.  This option is silently ignored in any language other than C@.

Besides declarations, the file indicates, in comments, the origin of
each declaration (source file and line), whether the declaration was
implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
@samp{O} for old, respectively, in the first character after the line
number and the colon), and whether it came from a declaration or a
definition (@samp{C} or @samp{F}, respectively, in the following
character).  In the case of function definitions, a K&R-style list of
arguments followed by their declarations is also provided, inside
comments, after the declaration.

@item -fallow-parameterless-variadic-functions
@opindex fallow-parameterless-variadic-functions
Accept variadic functions without named parameters.

Although it is possible to define such a function, this is not very
useful as it is not possible to read the arguments.  This is only
supported for C as this construct is allowed by C++.

@item -fno-asm
@opindex fno-asm
@opindex fasm
Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
keyword, so that code can use these words as identifiers.  You can use
the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
instead.  @option{-ansi} implies @option{-fno-asm}.

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 @option{-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
@itemx -fno-builtin-@var{function}
@opindex fno-builtin
@opindex fbuiltin
@cindex built-in functions
Don't recognize built-in functions that do not begin with
@samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
functions provided by GCC}, for details of the functions affected,
including those which are not built-in 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 built-in functions
more efficiently; for instance, calls to @code{alloca} may become single
instructions which adjust the stack directly, and calls to @code{memcpy}
may become inline copy loops.  The resulting code is often both smaller
and faster, but since the function calls no longer appear as such, you
cannot set a breakpoint on those calls, nor can you change the behavior
of the functions by linking with a different library.  In addition,
when a function is recognized as a built-in function, GCC may use
information about that function to warn about problems with calls to
that function, or to generate more efficient code, even if the
resulting code still contains calls to that function.  For example,
warnings are given with @option{-Wformat} for bad calls to
@code{printf} when @code{printf} is built in and @code{strlen} is
known not to modify global memory.

With the @option{-fno-builtin-@var{function}} option
only the built-in function @var{function} is
disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
function is named that is not built-in in this version of GCC, this
option is ignored.  There is no corresponding
@option{-fbuiltin-@var{function}} option; if you wish to enable
built-in functions selectively when using @option{-fno-builtin} or
@option{-ffreestanding}, you may define macros such as:

@smallexample
#define abs(n)          __builtin_abs ((n))
#define strcpy(d, s)    __builtin_strcpy ((d), (s))
@end smallexample

@item -fcond-mismatch
@opindex fcond-mismatch
Allow conditional expressions with mismatched types in the second and
third arguments.  The value of such an expression is void.  This option
is not supported for C++.

@item -ffreestanding
@opindex ffreestanding
@cindex hosted environment

Assert that compilation targets a freestanding environment.  This
implies @option{-fno-builtin}.  A freestanding environment
is one in which the standard library may not exist, and program startup may
not necessarily be at @code{main}.  The most obvious example is an OS kernel.
This is equivalent to @option{-fno-hosted}.

@xref{Standards,,Language Standards Supported by GCC}, for details of
freestanding and hosted environments.

@item -fgimple
@opindex fgimple

Enable parsing of function definitions marked with @code{__GIMPLE}.
This is an experimental feature that allows unit testing of GIMPLE
passes.

@item -fgnu-tm
@opindex fgnu-tm
When the option @option{-fgnu-tm} is specified, the compiler
generates code for the Linux variant of Intel's current Transactional
Memory ABI specification document (Revision 1.1, May 6 2009).  This is
an experimental feature whose interface may change in future versions
of GCC, as the official specification changes.  Please note that not
all architectures are supported for this feature.

For more information on GCC's support for transactional memory,
@xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
Transactional Memory Library}.

Note that the transactional memory feature is not supported with
non-call exceptions (@option{-fnon-call-exceptions}).

@item -fgnu89-inline
@opindex fgnu89-inline
The option @option{-fgnu89-inline} tells GCC to use the traditional
GNU semantics for @code{inline} functions when in C99 mode.
@xref{Inline,,An Inline Function is As Fast As a Macro}.
Using this option is roughly equivalent to adding the
@code{gnu_inline} function attribute to all inline functions
(@pxref{Function Attributes}).

The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
specifies the default behavior).
This option is not supported in @option{-std=c90} or
@option{-std=gnu90} mode.

The preprocessor macros @code{__GNUC_GNU_INLINE__} and
@code{__GNUC_STDC_INLINE__} may be used to check which semantics are
in effect for @code{inline} functions.  @xref{Common Predefined
Macros,,,cpp,The C Preprocessor}.

@item -fhosted
@opindex fhosted
@cindex hosted environment

Assert that compilation targets a hosted environment.  This implies
@option{-fbuiltin}.  A hosted environment is one in which the
entire standard library is available, and in which @code{main} has a return
type of @code{int}.  Examples are nearly everything except a kernel.
This is equivalent to @option{-fno-freestanding}.

@item -flax-vector-conversions
@opindex flax-vector-conversions
Allow implicit conversions between vectors with differing numbers of
elements and/or incompatible element types.  This option should not be
used for new code.

@item -fms-extensions
@opindex fms-extensions
Accept some non-standard constructs used in Microsoft header files.

In C++ code, this allows member names in structures to be similar
to previous types declarations.

@smallexample
typedef int UOW;
struct ABC @{
  UOW UOW;
@};
@end smallexample

Some cases of unnamed fields in structures and unions are only
accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
fields within structs/unions}, for details.

Note that this option is off for all targets except for x86
targets using ms-abi.

@item -foffload=disable
@itemx -foffload=default
@itemx -foffload=@var{target-list}
@opindex foffload
@cindex Offloading targets
@cindex OpenACC offloading targets
@cindex OpenMP offloading targets
Specify for which OpenMP and OpenACC offload targets code should be generated.
The default behavior, equivalent to @option{-foffload=default}, is to generate
code for all supported offload targets.  The @option{-foffload=disable} form
generates code only for the host fallback, while
@option{-foffload=@var{target-list}} generates code only for the specified
comma-separated list of offload targets.

Offload targets are specified in GCC's internal target-triplet format. You can
run the compiler with @option{-v} to show the list of configured offload targets
under @code{OFFLOAD_TARGET_NAMES}.

@item -foffload-options=@var{options}
@itemx -foffload-options=@var{target-triplet-list}=@var{options}
@opindex foffload-options
@cindex Offloading options
@cindex OpenACC offloading options
@cindex OpenMP offloading options

With @option{-foffload-options=@var{options}}, GCC passes the specified
@var{options} to the compilers for all enabled offloading targets.  You can
specify options that apply only to a specific target or targets by using
the @option{-foffload-options=@var{target-list}=@var{options}} form.  The
@var{target-list} is a comma-separated list in the same format as for the
@option{-foffload=} option.

Typical command lines are

@smallexample
-foffload-options=-lgfortran -foffload-options=-lm
-foffload-options="-lgfortran -lm" -foffload-options=nvptx-none=-latomic
-foffload-options=amdgcn-amdhsa=-march=gfx906 -foffload-options=-lm
@end smallexample

@item -fopenacc
@opindex fopenacc
@cindex OpenACC accelerator programming
Enable handling of OpenACC directives @code{#pragma acc} in C/C++ and
@code{!$acc} in Fortran.  When @option{-fopenacc} is specified, the
compiler generates accelerated code according to the OpenACC Application
Programming Interface v2.6 @w{@uref{https://www.openacc.org}}.  This option
implies @option{-pthread}, and thus is only supported on targets that
have support for @option{-pthread}.

@item -fopenacc-dim=@var{geom}
@opindex fopenacc-dim
@cindex OpenACC accelerator programming
Specify default compute dimensions for parallel offload regions that do
not explicitly specify.  The @var{geom} value is a triple of
':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A size
can be omitted, to use a target-specific default value.

@item -fopenmp
@opindex fopenmp
@cindex OpenMP parallel
Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
@code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
compiler generates parallel code according to the OpenMP Application
Program Interface v4.5 @w{@uref{https://www.openmp.org}}.  This option
implies @option{-pthread}, and thus is only supported on targets that
have support for @option{-pthread}. @option{-fopenmp} implies
@option{-fopenmp-simd}.

@item -fopenmp-simd
@opindex fopenmp-simd
@cindex OpenMP SIMD
@cindex SIMD
Enable handling of OpenMP's SIMD directives with @code{#pragma omp}
in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives
are ignored.

@item -fpermitted-flt-eval-methods=@var{style}
@opindex fpermitted-flt-eval-methods
@opindex fpermitted-flt-eval-methods=c11
@opindex fpermitted-flt-eval-methods=ts-18661-3
ISO/IEC TS 18661-3 defines new permissible values for
@code{FLT_EVAL_METHOD} that indicate that operations and constants with
a semantic type that is an interchange or extended format should be
evaluated to the precision and range of that type.  These new values are
a superset of those permitted under C99/C11, which does not specify the
meaning of other positive values of @code{FLT_EVAL_METHOD}.  As such, code
conforming to C11 may not have been written expecting the possibility of
the new values.

@option{-fpermitted-flt-eval-methods} specifies whether the compiler
should allow only the values of @code{FLT_EVAL_METHOD} specified in C99/C11,
or the extended set of values specified in ISO/IEC TS 18661-3.

@var{style} is either @code{c11} or @code{ts-18661-3} as appropriate.

The default when in a standards compliant mode (@option{-std=c11} or similar)
is @option{-fpermitted-flt-eval-methods=c11}.  The default when in a GNU
dialect (@option{-std=gnu11} or similar) is
@option{-fpermitted-flt-eval-methods=ts-18661-3}.

@item -fplan9-extensions
@opindex fplan9-extensions
Accept some non-standard constructs used in Plan 9 code.

This enables @option{-fms-extensions}, permits passing pointers to
structures with anonymous fields to functions that expect pointers to
elements of the type of the field, and permits referring to anonymous
fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
struct/union fields within structs/unions}, for details.  This is only
supported for C, not C++.

@item -fsigned-bitfields
@itemx -funsigned-bitfields
@itemx -fno-signed-bitfields
@itemx -fno-unsigned-bitfields
@opindex fsigned-bitfields
@opindex funsigned-bitfields
@opindex fno-signed-bitfields
@opindex fno-unsigned-bitfields
These options control whether a bit-field is signed or unsigned, when the
declaration does not use either @code{signed} or @code{unsigned}.  By
default, such a bit-field is signed, because this is consistent: the
basic integer types such as @code{int} are signed types.

@item -fsigned-char
@opindex fsigned-char
Let the type @code{char} be signed, like @code{signed char}.

Note that this is equivalent to @option{-fno-unsigned-char}, which is
the negative form of @option{-funsigned-char}.  Likewise, the option
@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.

@item -funsigned-char
@opindex funsigned-char
Let the type @code{char} be unsigned, like @code{unsigned char}.

Each kind of machine has a default for what @code{char} should
be.  It is either like @code{unsigned char} by default or like
@code{signed char} by default.

Ideally, a portable program should always use @code{signed char} or
@code{unsigned char} when it depends on the signedness of an object.
But many programs have been written to use plain @code{char} and
expect it to be signed, or expect it to be unsigned, depending on the
machines they were written for.  This option, and its inverse, let you
make such a program work with the opposite default.

The type @code{char} is always a distinct type from each of
@code{signed char} or @code{unsigned char}, even though its behavior
is always just like one of those two.

@item -fsso-struct=@var{endianness}
@opindex fsso-struct
Set the default scalar storage order of structures and unions to the
specified endianness.  The accepted values are @samp{big-endian},
@samp{little-endian} and @samp{native} for the native endianness of
the target (the default).  This option is not supported for C++.

@strong{Warning:} the @option{-fsso-struct} switch causes GCC to generate
code that is not binary compatible with code generated without it if the
specified endianness is not the native endianness of the target.
@end table

@node C++ Dialect Options
@section Options Controlling C++ Dialect

@cindex compiler options, C++
@cindex C++ options, command-line
@cindex options, C++
This section describes the command-line options that are only meaningful
for C++ programs.  You can also use most of the GNU compiler options
regardless of what language your program is in.  For example, you
might compile a file @file{firstClass.C} like this:

@smallexample
g++ -g -fstrict-enums -O -c firstClass.C
@end smallexample

@noindent
In this example, only @option{-fstrict-enums} is an option meant
only for C++ programs; you can use the other options with any
language supported by GCC@.

Some options for compiling C programs, such as @option{-std}, are also
relevant for C++ programs.
@xref{C Dialect Options,,Options Controlling C Dialect}.

Here is a list of options that are @emph{only} for compiling C++ programs:

@table @gcctabopt

@item -fabi-version=@var{n}
@opindex fabi-version
Use version @var{n} of the C++ ABI@.  The default is version 0.

Version 0 refers to the version conforming most closely to
the C++ ABI specification.  Therefore, the ABI obtained using version 0
will change in different versions of G++ as ABI bugs are fixed.

Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.

Version 2 is the version of the C++ ABI that first appeared in G++
3.4, and was the default through G++ 4.9.

Version 3 corrects an error in mangling a constant address as a
template argument.

Version 4, which first appeared in G++ 4.5, implements a standard
mangling for vector types.

Version 5, which first appeared in G++ 4.6, corrects the mangling of
attribute const/volatile on function pointer types, decltype of a
plain decl, and use of a function parameter in the declaration of
another parameter.

Version 6, which first appeared in G++ 4.7, corrects the promotion
behavior of C++11 scoped enums and the mangling of template argument
packs, const/static_cast, prefix ++ and --, and a class scope function
used as a template argument.

Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
builtin type and corrects the mangling of lambdas in default argument
scope.

Version 8, which first appeared in G++ 4.9, corrects the substitution
behavior of function types with function-cv-qualifiers.

Version 9, which first appeared in G++ 5.2, corrects the alignment of
@code{nullptr_t}.

Version 10, which first appeared in G++ 6.1, adds mangling of
attributes that affect type identity, such as ia32 calling convention
attributes (e.g.@: @samp{stdcall}).

Version 11, which first appeared in G++ 7, corrects the mangling of
sizeof... expressions and operator names.  For multiple entities with
the same name within a function, that are declared in different scopes,
the mangling now changes starting with the twelfth occurrence.  It also
implies @option{-fnew-inheriting-ctors}.

Version 12, which first appeared in G++ 8, corrects the calling
conventions for empty classes on the x86_64 target and for classes
with only deleted copy/move constructors.  It accidentally changes the
calling convention for classes with a deleted copy constructor and a
trivial move constructor.

Version 13, which first appeared in G++ 8.2, fixes the accidental
change in version 12.

Version 14, which first appeared in G++ 10, corrects the mangling of
the nullptr expression.

Version 15, which first appeared in G++ 11, changes the mangling of
@code{__alignof__} to be distinct from that of @code{alignof}, and
dependent operator names.

See also @option{-Wabi}.

@item -fabi-compat-version=@var{n}
@opindex fabi-compat-version
On targets that support strong aliases, G++
works around mangling changes by creating an alias with the correct
mangled name when defining a symbol with an incorrect mangled name.
This switch specifies which ABI version to use for the alias.

With @option{-fabi-version=0} (the default), this defaults to 11 (GCC 7
compatibility).  If another ABI version is explicitly selected, this
defaults to 0.  For compatibility with GCC versions 3.2 through 4.9,
use @option{-fabi-compat-version=2}.

If this option is not provided but @option{-Wabi=@var{n}} is, that
version is used for compatibility aliases.  If this option is provided
along with @option{-Wabi} (without the version), the version from this
option is used for the warning.

@item -fno-access-control
@opindex fno-access-control
@opindex faccess-control
Turn off all access checking.  This switch is mainly useful for working
around bugs in the access control code.

@item -faligned-new
@opindex faligned-new
Enable support for C++17 @code{new} of types that require more
alignment than @code{void* ::operator new(std::size_t)} provides.  A
numeric argument such as @code{-faligned-new=32} can be used to
specify how much alignment (in bytes) is provided by that function,
but few users will need to override the default of
@code{alignof(std::max_align_t)}.

This flag is enabled by default for @option{-std=c++17}.

@item -fchar8_t
@itemx -fno-char8_t
@opindex fchar8_t
@opindex fno-char8_t
Enable support for @code{char8_t} as adopted for C++20.  This includes
the addition of a new @code{char8_t} fundamental type, changes to the
types of UTF-8 string and character literals, new signatures for
user-defined literals, associated standard library updates, and new
@code{__cpp_char8_t} and @code{__cpp_lib_char8_t} feature test macros.

This option enables functions to be overloaded for ordinary and UTF-8
strings:

@smallexample
int f(const char *);    // #1
int f(const char8_t *); // #2
int v1 = f("text");     // Calls #1
int v2 = f(u8"text");   // Calls #2
@end smallexample

@noindent
and introduces new signatures for user-defined literals:

@smallexample
int operator""_udl1(char8_t);
int v3 = u8'x'_udl1;
int operator""_udl2(const char8_t*, std::size_t);
int v4 = u8"text"_udl2;
template<typename T, T...> int operator""_udl3();
int v5 = u8"text"_udl3;
@end smallexample

@noindent
The change to the types of UTF-8 string and character literals introduces
incompatibilities with ISO C++11 and later standards.  For example, the
following code is well-formed under ISO C++11, but is ill-formed when
@option{-fchar8_t} is specified.

@smallexample
char ca[] = u8"xx";     // error: char-array initialized from wide
                        //        string
const char *cp = u8"xx";// error: invalid conversion from
                        //        `const char8_t*' to `const char*'
int f(const char*);
auto v = f(u8"xx");     // error: invalid conversion from
                        //        `const char8_t*' to `const char*'
std::string s@{u8"xx"@};  // error: no matching function for call to
                        //        `std::basic_string<char>::basic_string()'
using namespace std::literals;
s = u8"xx"s;            // error: conversion from
                        //        `basic_string<char8_t>' to non-scalar
                        //        type `basic_string<char>' requested
@end smallexample

@item -fcheck-new
@opindex fcheck-new
Check that the pointer returned by @code{operator new} is non-null
before attempting to modify the storage allocated.  This check is
normally unnecessary because the C++ standard specifies that
@code{operator new} only returns @code{0} if it is declared
@code{throw()}, in which case the compiler always checks the
return value even without this option.  In all other cases, when
@code{operator new} has a non-empty exception specification, memory
exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
@samp{new (nothrow)}.

@item -fconcepts
@itemx -fconcepts-ts
@opindex fconcepts
@opindex fconcepts-ts
Below @option{-std=c++20}, @option{-fconcepts} enables support for the
C++ Extensions for Concepts Technical Specification, ISO 19217 (2015).

With @option{-std=c++20} and above, Concepts are part of the language
standard, so @option{-fconcepts} defaults to on.  But the standard
specification of Concepts differs significantly from the TS, so some
constructs that were allowed in the TS but didn't make it into the
standard can still be enabled by @option{-fconcepts-ts}.

@item -fconstexpr-depth=@var{n}
@opindex fconstexpr-depth
Set the maximum nested evaluation depth for C++11 constexpr functions
to @var{n}.  A limit is needed to detect endless recursion during
constant expression evaluation.  The minimum specified by the standard
is 512.

@item -fconstexpr-cache-depth=@var{n}
@opindex fconstexpr-cache-depth
Set the maximum level of nested evaluation depth for C++11 constexpr
functions that will be cached to @var{n}.  This is a heuristic that
trades off compilation speed (when the cache avoids repeated
calculations) against memory consumption (when the cache grows very
large from highly recursive evaluations).  The default is 8.  Very few
users are likely to want to adjust it, but if your code does heavy
constexpr calculations you might want to experiment to find which
value works best for you.

@item -fconstexpr-loop-limit=@var{n}
@opindex fconstexpr-loop-limit
Set the maximum number of iterations for a loop in C++14 constexpr functions
to @var{n}.  A limit is needed to detect infinite loops during
constant expression evaluation.  The default is 262144 (1<<18).

@item -fconstexpr-ops-limit=@var{n}
@opindex fconstexpr-ops-limit
Set the maximum number of operations during a single constexpr evaluation.
Even when number of iterations of a single loop is limited with the above limit,
if there are several nested loops and each of them has many iterations but still
smaller than the above limit, or if in a body of some loop or even outside
of a loop too many expressions need to be evaluated, the resulting constexpr
evaluation might take too long.
The default is 33554432 (1<<25).

@item -fcoroutines
@opindex fcoroutines
Enable support for the C++ coroutines extension (experimental).

@item -fno-elide-constructors
@opindex fno-elide-constructors
@opindex felide-constructors
The C++ standard allows an implementation to omit creating a temporary
that is only used to initialize another object of the same type.
Specifying this option disables that optimization, and forces G++ to
call the copy constructor in all cases.  This option also causes G++
to call trivial member functions which otherwise would be expanded inline.

In C++17, the compiler is required to omit these temporaries, but this
option still affects trivial member functions.

@item -fno-enforce-eh-specs
@opindex fno-enforce-eh-specs
@opindex fenforce-eh-specs
Don't generate code to check for violation of exception specifications
at run time.  This option violates the C++ standard, but may be useful
for reducing code size in production builds, much like defining
@code{NDEBUG}.  This does not give user code permission to throw
exceptions in violation of the exception specifications; the compiler
still optimizes based on the specifications, so throwing an
unexpected exception results in undefined behavior at run time.

@item -fextern-tls-init
@itemx -fno-extern-tls-init
@opindex fextern-tls-init
@opindex fno-extern-tls-init
The C++11 and OpenMP standards allow @code{thread_local} and
@code{threadprivate} variables to have dynamic (runtime)
initialization.  To support this, any use of such a variable goes
through a wrapper function that performs any necessary initialization.
When the use and definition of the variable are in the same
translation unit, this overhead can be optimized away, but when the
use is in a different translation unit there is significant overhead
even if the variable doesn't actually need dynamic initialization.  If
the programmer can be sure that no use of the variable in a
non-defining TU needs to trigger dynamic initialization (either
because the variable is statically initialized, or a use of the
variable in the defining TU will be executed before any uses in
another TU), they can avoid this overhead with the
@option{-fno-extern-tls-init} option.

On targets that support symbol aliases, the default is
@option{-fextern-tls-init}.  On targets that do not support symbol
aliases, the default is @option{-fno-extern-tls-init}.

@item -fno-gnu-keywords
@opindex fno-gnu-keywords
@opindex fgnu-keywords
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.
This option is implied by the strict ISO C++ dialects: @option{-ansi},
@option{-std=c++98}, @option{-std=c++11}, etc.

@item -fno-implicit-templates
@opindex fno-implicit-templates
@opindex fimplicit-templates
Never emit code for non-inline templates that are instantiated
implicitly (i.e.@: by use); only emit code for explicit instantiations.
If you use this option, you must take care to structure your code to
include all the necessary explicit instantiations to avoid getting
undefined symbols at link time.
@xref{Template Instantiation}, for more information.

@item -fno-implicit-inline-templates
@opindex fno-implicit-inline-templates
@opindex fimplicit-inline-templates
Don't emit code for implicit instantiations of inline templates, either.
The default is to handle inlines differently so that compiles with and
without optimization need the same set of explicit instantiations.

@item -fno-implement-inlines
@opindex fno-implement-inlines
@opindex fimplement-inlines
To save space, do not emit out-of-line copies of inline functions
controlled by @code{#pragma implementation}.  This causes linker
errors if these functions are not inlined everywhere they are called.

@item -fmodules-ts
@itemx -fno-modules-ts
@opindex fmodules-ts
@opindex fno-modules-ts
Enable support for C++20 modules (@pxref{C++ Modules}).  The
@option{-fno-modules-ts} is usually not needed, as that is the
default.  Even though this is a C++20 feature, it is not currently
implicitly enabled by selecting that standard version.

@item -fmodule-header
@itemx -fmodule-header=user
@itemx -fmodule-header=system
@opindex fmodule-header
Compile a header file to create an importable header unit.

@item -fmodule-implicit-inline
@opindex fmodule-implicit-inline
Member functions defined in their class definitions are not implicitly
inline for modular code.  This is different to traditional C++
behavior, for good reasons.  However, it may result in a difficulty
during code porting.  This option makes such function definitions
implicitly inline.  It does however generate an ABI incompatibility,
so you must use it everywhere or nowhere.  (Such definitions outside
of a named module remain implicitly inline, regardless.)

@item -fno-module-lazy
@opindex fno-module-lazy
@opindex fmodule-lazy
Disable lazy module importing and module mapper creation.

@item -fmodule-mapper=@r{[}@var{hostname}@r{]}:@var{port}@r{[}?@var{ident}@r{]}
@itemx -fmodule-mapper=|@var{program}@r{[}?@var{ident}@r{]} @var{args...}
@itemx -fmodule-mapper==@var{socket}@r{[}?@var{ident}@r{]}
@itemx -fmodule-mapper=<>@r{[}@var{inout}@r{]}@r{[}?@var{ident}@r{]}
@itemx -fmodule-mapper=<@var{in}>@var{out}@r{[}?@var{ident}@r{]}
@itemx -fmodule-mapper=@var{file}@r{[}?@var{ident}@r{]}
@vindex CXX_MODULE_MAPPER @r{environment variable}
@opindex fmodule-mapper
An oracle to query for module name to filename mappings.  If
unspecified the @env{CXX_MODULE_MAPPER} environment variable is used,
and if that is unset, an in-process default is provided.

@item -fmodule-only
@opindex fmodule-only
Only emit the Compiled Module Interface, inhibiting any object file.

@item -fms-extensions
@opindex fms-extensions
Disable Wpedantic warnings about constructs used in MFC, such as implicit
int and getting a pointer to member function via non-standard syntax.

@item -fnew-inheriting-ctors
@opindex fnew-inheriting-ctors
Enable the P0136 adjustment to the semantics of C++11 constructor
inheritance.  This is part of C++17 but also considered to be a Defect
Report against C++11 and C++14.  This flag is enabled by default
unless @option{-fabi-version=10} or lower is specified.

@item -fnew-ttp-matching
@opindex fnew-ttp-matching
Enable the P0522 resolution to Core issue 150, template template
parameters and default arguments: this allows a template with default
template arguments as an argument for a template template parameter
with fewer template parameters.  This flag is enabled by default for
@option{-std=c++17}.

@item -fno-nonansi-builtins
@opindex fno-nonansi-builtins
@opindex fnonansi-builtins
Disable built-in declarations of functions that are not mandated by
ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
@code{index}, @code{bzero}, @code{conjf}, and other related functions.

@item -fnothrow-opt
@opindex fnothrow-opt
Treat a @code{throw()} exception specification as if it were a
@code{noexcept} specification to reduce or eliminate the text size
overhead relative to a function with no exception specification.  If
the function has local variables of types with non-trivial
destructors, the exception specification actually makes the
function smaller because the EH cleanups for those variables can be
optimized away.  The semantic effect is that an exception thrown out of
a function with such an exception specification results in a call
to @code{terminate} rather than @code{unexpected}.

@item -fno-operator-names
@opindex fno-operator-names
@opindex foperator-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 as keywords.

@item -fno-optional-diags
@opindex fno-optional-diags
@opindex foptional-diags
Disable diagnostics that the standard says a compiler does not need to
issue.  Currently, the only such diagnostic issued by G++ is the one for
a name having multiple meanings within a class.

@item -fpermissive
@opindex fpermissive
Downgrade some diagnostics about nonconformant code from errors to
warnings.  Thus, using @option{-fpermissive} allows some
nonconforming code to compile.

@item -fno-pretty-templates
@opindex fno-pretty-templates
@opindex fpretty-templates
When an error message refers to a specialization of a function
template, the compiler normally prints the signature of the
template followed by the template arguments and any typedefs or
typenames in the signature (e.g.@: @code{void f(T) [with T = int]}
rather than @code{void f(int)}) so that it's clear which template is
involved.  When an error message refers to a specialization of a class
template, the compiler omits any template arguments that match
the default template arguments for that template.  If either of these
behaviors make it harder to understand the error message rather than
easier, you can use @option{-fno-pretty-templates} to disable them.

@item -fno-rtti
@opindex fno-rtti
@opindex frtti
Disable generation of information about every class with virtual
functions for use by the C++ run-time type identification features
(@code{dynamic_cast} and @code{typeid}).  If you don't use those parts
of the language, you can save some space by using this flag.  Note that
exception handling uses the same information, but G++ generates it as
needed. The @code{dynamic_cast} operator can still be used for casts that
do not require run-time type information, i.e.@: casts to @code{void *} or to
unambiguous base classes.

Mixing code compiled with @option{-frtti} with that compiled with
@option{-fno-rtti} may not work.  For example, programs may
fail to link if a class compiled with @option{-fno-rtti} is used as a base 
for a class compiled with @option{-frtti}.  

@item -fsized-deallocation
@opindex fsized-deallocation
Enable the built-in global declarations
@smallexample
void operator delete (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;
@end smallexample
as introduced in C++14.  This is useful for user-defined replacement
deallocation functions that, for example, use the size of the object
to make deallocation faster.  Enabled by default under
@option{-std=c++14} and above.  The flag @option{-Wsized-deallocation}
warns about places that might want to add a definition.

@item -fstrict-enums
@opindex fstrict-enums
Allow the compiler to optimize using the assumption that a value of
enumerated type can only be one of the values of the enumeration (as
defined in the C++ standard; basically, a value that can be
represented in the minimum number of bits needed to represent all the
enumerators).  This assumption may not be valid if the program uses a
cast to convert an arbitrary integer value to the enumerated type.

@item -fstrong-eval-order
@opindex fstrong-eval-order
Evaluate member access, array subscripting, and shift expressions in
left-to-right order, and evaluate assignment in right-to-left order,
as adopted for C++17.  Enabled by default with @option{-std=c++17}.
@option{-fstrong-eval-order=some} enables just the ordering of member
access and shift expressions, and is the default without
@option{-std=c++17}.

@item -ftemplate-backtrace-limit=@var{n}
@opindex ftemplate-backtrace-limit
Set the maximum number of template instantiation notes for a single
warning or error to @var{n}.  The default value is 10.

@item -ftemplate-depth=@var{n}
@opindex ftemplate-depth
Set the maximum instantiation depth for template classes to @var{n}.
A limit on the template instantiation depth is needed to detect
endless recursions during template class instantiation.  ANSI/ISO C++
conforming programs must not rely on a maximum depth greater than 17
(changed to 1024 in C++11).  The default value is 900, as the compiler
can run out of stack space before hitting 1024 in some situations.

@item -fno-threadsafe-statics
@opindex fno-threadsafe-statics
@opindex fthreadsafe-statics
Do not emit the extra code to use the routines specified in the C++
ABI for thread-safe initialization of local statics.  You can use this
option to reduce code size slightly in code that doesn't need to be
thread-safe.

@item -fuse-cxa-atexit
@opindex fuse-cxa-atexit
Register destructors for objects with static storage duration with the
@code{__cxa_atexit} function rather than the @code{atexit} function.
This option is required for fully standards-compliant handling of static
destructors, but only works if your C library supports
@code{__cxa_atexit}.

@item -fno-use-cxa-get-exception-ptr
@opindex fno-use-cxa-get-exception-ptr
@opindex fuse-cxa-get-exception-ptr
Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
causes @code{std::uncaught_exception} to be incorrect, but is necessary
if the runtime routine is not available.

@item -fvisibility-inlines-hidden
@opindex fvisibility-inlines-hidden
This switch declares that the user does not attempt to compare
pointers to inline functions or methods where the addresses of the two functions
are taken in different shared objects.

The effect of this is that GCC may, effectively, mark inline methods with
@code{__attribute__ ((visibility ("hidden")))} so that they do not
appear in the export table of a DSO and do not require a PLT indirection
when used within the DSO@.  Enabling this option can have a dramatic effect
on load and link times of a DSO as it massively reduces the size of the
dynamic export table when the library makes heavy use of templates.

The behavior of this switch is not quite the same as marking the
methods as hidden directly, because it does not affect static variables
local to the function or cause the compiler to deduce that
the function is defined in only one shared object.

You may mark a method as having a visibility explicitly to negate the
effect of the switch for that method.  For example, if you do want to
compare pointers to a particular inline method, you might mark it as
having default visibility.  Marking the enclosing class with explicit
visibility has no effect.

Explicitly instantiated inline methods are unaffected by this option
as their linkage might otherwise cross a shared library boundary.
@xref{Template Instantiation}.

@item -fvisibility-ms-compat
@opindex fvisibility-ms-compat
This flag attempts to use visibility settings to make GCC's C++
linkage model compatible with that of Microsoft Visual Studio.

The flag makes these changes to GCC's linkage model:

@enumerate
@item
It sets the default visibility to @code{hidden}, like
@option{-fvisibility=hidden}.

@item
Types, but not their members, are not hidden by default.

@item
The One Definition Rule is relaxed for types without explicit
visibility specifications that are defined in more than one
shared object: those declarations are permitted if they are
permitted when this option is not used.
@end enumerate

In new code it is better to use @option{-fvisibility=hidden} and
export those classes that are intended to be externally visible.
Unfortunately it is possible for code to rely, perhaps accidentally,
on the Visual Studio behavior.

Among the consequences of these changes are that static data members
of the same type with the same name but defined in different shared
objects are different, so changing one does not change the other;
and that pointers to function members defined in different shared
objects may not compare equal.  When this flag is given, it is a
violation of the ODR to define types with the same name differently.

@item -fno-weak
@opindex fno-weak
@opindex fweak
Do not use weak symbol support, even if it is provided by the linker.
By default, G++ uses weak symbols if they are available.  This
option exists only for testing, and should not be used by end-users;
it results in inferior code and has no benefits.  This option may
be removed in a future release of G++.

@item -fext-numeric-literals @r{(C++ and Objective-C++ only)}
@opindex fext-numeric-literals
@opindex fno-ext-numeric-literals
Accept imaginary, fixed-point, or machine-defined
literal number suffixes as GNU extensions.
When this option is turned off these suffixes are treated
as C++11 user-defined literal numeric suffixes.
This is on by default for all pre-C++11 dialects and all GNU dialects:
@option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11},
@option{-std=gnu++14}.
This option is off by default
for ISO C++11 onwards (@option{-std=c++11}, ...).

@item -nostdinc++
@opindex nostdinc++
Do not search for header files in the standard directories specific to
C++, but do still search the other standard directories.  (This option
is used when building the C++ library.)

@item -flang-info-include-translate
@itemx -flang-info-include-translate-not
@itemx -flang-info-include-translate=@var{header}
@opindex flang-info-include-translate
@opindex flang-info-include-translate-not
Inform of include translation events.  The first will note accepted
include translations, the second will note declined include
translations.  The @var{header} form will inform of include
translations relating to that specific header.  If @var{header} is of
the form @code{"user"} or @code{<system>} it will be resolved to a
specific user or system header using the include path.

@item -flang-info-module-cmi
@itemx -flang-info-module-cmi=@var{module}
@opindex flang-info-module-cmi
Inform of Compiled Module Interface pathnames.  The first will note
all read CMI pathnames.  The @var{module} form will not reading a
specific module's CMI.  @var{module} may be a named module or a
header-unit (the latter indicated by either being a pathname containing
directory separators or enclosed in @code{<>} or @code{""}).

@item -stdlib=@var{libstdc++,libc++}
@opindex stdlib
When G++ is configured to support this option, it allows specification of
alternate C++ runtime libraries.  Two options are available: @var{libstdc++}
(the default, native C++ runtime for G++) and @var{libc++} which is the
C++ runtime installed on some operating systems (e.g. Darwin versions from
Darwin11 onwards).  The option switches G++ to use the headers from the
specified library and to emit @code{-lstdc++} or @code{-lc++} respectively,
when a C++ runtime is required for linking.
@end table

In addition, these warning options have meanings only for C++ programs:

@table @gcctabopt
@item -Wabi-tag @r{(C++ and Objective-C++ only)}
@opindex Wabi-tag
Warn when a type with an ABI tag is used in a context that does not
have that ABI tag.  See @ref{C++ Attributes} for more information
about ABI tags.

@item -Wcomma-subscript @r{(C++ and Objective-C++ only)}
@opindex Wcomma-subscript
@opindex Wno-comma-subscript
Warn about uses of a comma expression within a subscripting expression.
This usage was deprecated in C++20.  However, a comma expression wrapped
in @code{( )} is not deprecated.  Example:

@smallexample
@group
void f(int *a, int b, int c) @{
    a[b,c];     // deprecated
    a[(b,c)];   // OK
@}
@end group
@end smallexample

Enabled by default with @option{-std=c++20}.

@item -Wctad-maybe-unsupported @r{(C++ and Objective-C++ only)}
@opindex Wctad-maybe-unsupported
@opindex Wno-ctad-maybe-unsupported
Warn when performing class template argument deduction (CTAD) on a type with
no explicitly written deduction guides.  This warning will point out cases
where CTAD succeeded only because the compiler synthesized the implicit
deduction guides, which might not be what the programmer intended.  Certain
style guides allow CTAD only on types that specifically "opt-in"; i.e., on
types that are designed to support CTAD.  This warning can be suppressed with
the following pattern:

@smallexample
struct allow_ctad_t; // any name works
template <typename T> struct S @{
  S(T) @{ @}
@};
S(allow_ctad_t) -> S<void>; // guide with incomplete parameter type will never be considered
@end smallexample

@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.  Also warn if there are no non-private
methods, and there's at least one private member function that isn't
a constructor or destructor.

@item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
@opindex Wdelete-non-virtual-dtor
@opindex Wno-delete-non-virtual-dtor
Warn when @code{delete} is used to destroy an instance of a class that
has virtual functions and non-virtual destructor. It is unsafe to delete
an instance of a derived class through a pointer to a base class if the
base class does not have a virtual destructor.  This warning is enabled
by @option{-Wall}.

@item -Wdeprecated-copy @r{(C++ and Objective-C++ only)}
@opindex Wdeprecated-copy
@opindex Wno-deprecated-copy
Warn that the implicit declaration of a copy constructor or copy
assignment operator is deprecated if the class has a user-provided
copy constructor or copy assignment operator, in C++11 and up.  This
warning is enabled by @option{-Wextra}.  With
@option{-Wdeprecated-copy-dtor}, also deprecate if the class has a
user-provided destructor.

@item -Wno-deprecated-enum-enum-conversion @r{(C++ and Objective-C++ only)}
@opindex Wdeprecated-enum-enum-conversion
@opindex Wno-deprecated-enum-enum-conversion
Disable the warning about the case when the usual arithmetic conversions
are applied on operands where one is of enumeration type and the other is
of a different enumeration type.  This conversion was deprecated in C++20.
For example:

@smallexample
enum E1 @{ e @};
enum E2 @{ f @};
int k = f - e;
@end smallexample

@option{-Wdeprecated-enum-enum-conversion} is enabled by default with
@option{-std=c++20}.  In pre-C++20 dialects, this warning can be enabled
by @option{-Wenum-conversion}.

@item -Wno-deprecated-enum-float-conversion @r{(C++ and Objective-C++ only)}
@opindex Wdeprecated-enum-float-conversion
@opindex Wno-deprecated-enum-float-conversion
Disable the warning about the case when the usual arithmetic conversions
are applied on operands where one is of enumeration type and the other is
of a floating-point type.  This conversion was deprecated in C++20.  For
example:

@smallexample
enum E1 @{ e @};
enum E2 @{ f @};
bool b = e <= 3.7;
@end smallexample

@option{-Wdeprecated-enum-float-conversion} is enabled by default with
@option{-std=c++20}.  In pre-C++20 dialects, this warning can be enabled
by @option{-Wenum-conversion}.

@item -Wno-init-list-lifetime @r{(C++ and Objective-C++ only)}
@opindex Winit-list-lifetime
@opindex Wno-init-list-lifetime
Do not warn about uses of @code{std::initializer_list} that are likely
to result in dangling pointers.  Since the underlying array for an
@code{initializer_list} is handled like a normal C++ temporary object,
it is easy to inadvertently keep a pointer to the array past the end
of the array's lifetime.  For example:

@itemize @bullet
@item
If a function returns a temporary @code{initializer_list}, or a local
@code{initializer_list} variable, the array's lifetime ends at the end
of the return statement, so the value returned has a dangling pointer.

@item
If a new-expression creates an @code{initializer_list}, the array only
lives until the end of the enclosing full-expression, so the
@code{initializer_list} in the heap has a dangling pointer.

@item
When an @code{initializer_list} variable is assigned from a
brace-enclosed initializer list, the temporary array created for the
right side of the assignment only lives until the end of the
full-expression, so at the next statement the @code{initializer_list}
variable has a dangling pointer.

@smallexample
// li's initial underlying array lives as long as li
std::initializer_list<int> li = @{ 1,2,3 @};
// assignment changes li to point to a temporary array
li = @{ 4, 5 @};
// now the temporary is gone and li has a dangling pointer
int i = li.begin()[0] // undefined behavior
@end smallexample

@item
When a list constructor stores the @code{begin} pointer from the
@code{initializer_list} argument, this doesn't extend the lifetime of
the array, so if a class variable is constructed from a temporary
@code{initializer_list}, the pointer is left dangling by the end of
the variable declaration statement.

@end itemize

@item -Winvalid-imported-macros
@opindex Winvalid-imported-macros
@opindex Wno-invalid-imported-macros
Verify all imported macro definitions are valid at the end of
compilation.  This is not enabled by default, as it requires
additional processing to determine.  It may be useful when preparing
sets of header-units to ensure consistent macros.

@item -Wno-literal-suffix @r{(C++ and Objective-C++ only)}
@opindex Wliteral-suffix
@opindex Wno-literal-suffix
Do not warn when a string or character literal is followed by a
ud-suffix which does not begin with an underscore.  As a conforming
extension, GCC treats such suffixes as separate preprocessing tokens
in order to maintain backwards compatibility with code that uses
formatting macros from @code{<inttypes.h>}.  For example:

@smallexample
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <stdio.h>

int main() @{
  int64_t i64 = 123;
  printf("My int64: %" PRId64"\n", i64);
@}
@end smallexample

In this case, @code{PRId64} is treated as a separate preprocessing token.

This option also controls warnings when a user-defined literal
operator is declared with a literal suffix identifier that doesn't
begin with an underscore. Literal suffix identifiers that don't begin
with an underscore are reserved for future standardization.

These warnings are enabled by default.

@item -Wno-narrowing @r{(C++ and Objective-C++ only)}
@opindex Wnarrowing
@opindex Wno-narrowing
For C++11 and later standards, narrowing conversions are diagnosed by default,
as required by the standard.  A narrowing conversion from a constant produces
an error, and a narrowing conversion from a non-constant produces a warning,
but @option{-Wno-narrowing} suppresses the diagnostic.
Note that this does not affect the meaning of well-formed code;
narrowing conversions are still considered ill-formed in SFINAE contexts.

With @option{-Wnarrowing} in C++98, warn when a narrowing
conversion prohibited by C++11 occurs within
@samp{@{ @}}, e.g.

@smallexample
int i = @{ 2.2 @}; // error: narrowing from double to int
@end smallexample

This flag is included in @option{-Wall} and @option{-Wc++11-compat}.

@item -Wnoexcept @r{(C++ and Objective-C++ only)}
@opindex Wnoexcept
@opindex Wno-noexcept
Warn when a noexcept-expression evaluates to false because of a call
to a function that does not have a non-throwing exception
specification (i.e. @code{throw()} or @code{noexcept}) but is known by
the compiler to never throw an exception.

@item -Wnoexcept-type @r{(C++ and Objective-C++ only)}
@opindex Wnoexcept-type
@opindex Wno-noexcept-type
Warn if the C++17 feature making @code{noexcept} part of a function
type changes the mangled name of a symbol relative to C++14.  Enabled
by @option{-Wabi} and @option{-Wc++17-compat}.

As an example:

@smallexample
template <class T> void f(T t) @{ t(); @};
void g() noexcept;
void h() @{ f(g); @} 
@end smallexample

@noindent
In C++14, @code{f} calls @code{f<void(*)()>}, but in
C++17 it calls @code{f<void(*)()noexcept>}.

@item -Wclass-memaccess @r{(C++ and Objective-C++ only)}
@opindex Wclass-memaccess
@opindex Wno-class-memaccess
Warn when the destination of a call to a raw memory function such as
@code{memset} or @code{memcpy} is an object of class type, and when writing
into such an object might bypass the class non-trivial or deleted constructor
or copy assignment, violate const-correctness or encapsulation, or corrupt
virtual table pointers.  Modifying the representation of such objects may
violate invariants maintained by member functions of the class.  For example,
the call to @code{memset} below is undefined because it modifies a non-trivial
class object and is, therefore, diagnosed.  The safe way to either initialize
or clear the storage of objects of such types is by using the appropriate
constructor or assignment operator, if one is available.
@smallexample
std::string str = "abc";
memset (&str, 0, sizeof str);
@end smallexample
The @option{-Wclass-memaccess} option is enabled by @option{-Wall}.
Explicitly casting the pointer to the class object to @code{void *} or
to a type that can be safely accessed by the raw memory function suppresses
the warning.

@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 an accessible non-virtual
destructor itself or in an accessible polymorphic base class, in which
case it is possible but unsafe to delete an instance of a derived
class through a pointer to the class itself or base class.  This
warning is automatically enabled if @option{-Weffc++} is specified.

@item -Wregister @r{(C++ and Objective-C++ only)}
@opindex Wregister
@opindex Wno-register
Warn on uses of the @code{register} storage class specifier, except
when it is part of the GNU @ref{Explicit Register Variables} extension.
The use of the @code{register} keyword as storage class specifier has
been deprecated in C++11 and removed in C++17.
Enabled by default with @option{-std=c++17}.

@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
match the order in which they must be executed.  For instance:

@smallexample
struct A @{
  int i;
  int j;
  A(): j (0), i (1) @{ @}
@};
@end smallexample

@noindent
The compiler rearranges the member initializers for @code{i}
and @code{j} to match the declaration order of the members, emitting
a warning to that effect.  This warning is enabled by @option{-Wall}.

@item -Wno-pessimizing-move @r{(C++ and Objective-C++ only)}
@opindex Wpessimizing-move
@opindex Wno-pessimizing-move
This warning warns when a call to @code{std::move} prevents copy
elision.  A typical scenario when copy elision can occur is when returning in
a function with a class return type, when the expression being returned is the
name of a non-volatile automatic object, and is not a function parameter, and
has the same type as the function return type.

@smallexample
struct T @{
@dots{}
@};
T fn()
@{
  T t;
  @dots{}
  return std::move (t);
@}
@end smallexample

But in this example, the @code{std::move} call prevents copy elision.

This warning is enabled by @option{-Wall}.

@item -Wno-redundant-move @r{(C++ and Objective-C++ only)}
@opindex Wredundant-move
@opindex Wno-redundant-move
This warning warns about redundant calls to @code{std::move}; that is, when
a move operation would have been performed even without the @code{std::move}
call.  This happens because the compiler is forced to treat the object as if
it were an rvalue in certain situations such as returning a local variable,
where copy elision isn't applicable.  Consider:

@smallexample
struct T @{
@dots{}
@};
T fn(T t)
@{
  @dots{}
  return std::move (t);
@}
@end smallexample

Here, the @code{std::move} call is redundant.  Because G++ implements Core
Issue 1579, another example is:

@smallexample
struct T @{ // convertible to U
@dots{}
@};
struct U @{
@dots{}
@};
U fn()
@{
  T t;
  @dots{}
  return std::move (t);
@}
@end smallexample
In this example, copy elision isn't applicable because the type of the
expression being returned and the function return type differ, yet G++
treats the return value as if it were designated by an rvalue.

This warning is enabled by @option{-Wextra}.

@item -Wrange-loop-construct @r{(C++ and Objective-C++ only)}
@opindex Wrange-loop-construct
@opindex Wno-range-loop-construct
This warning warns when a C++ range-based for-loop is creating an unnecessary
copy.  This can happen when the range declaration is not a reference, but
probably should be.  For example:

@smallexample
struct S @{ char arr[128]; @};
void fn () @{
  S arr[5];
  for (const auto x : arr) @{ @dots{} @}
@}
@end smallexample

It does not warn when the type being copied is a trivially-copyable type whose
size is less than 64 bytes.

This warning also warns when a loop variable in a range-based for-loop is
initialized with a value of a different type resulting in a copy.  For example:

@smallexample
void fn() @{
  int arr[10];
  for (const double &x : arr) @{ @dots{} @}
@}
@end smallexample

In the example above, in every iteration of the loop a temporary value of
type @code{double} is created and destroyed, to which the reference
@code{const double &} is bound.

This warning is enabled by @option{-Wall}.

@item -Wredundant-tags @r{(C++ and Objective-C++ only)}
@opindex Wredundant-tags
@opindex Wno-redundant-tags
Warn about redundant class-key and enum-key in references to class types
and enumerated types in contexts where the key can be eliminated without
causing an ambiguity.  For example:

@smallexample
struct foo;
struct foo *p;   // warn that keyword struct can be eliminated
@end smallexample

@noindent
On the other hand, in this example there is no warning:

@smallexample
struct foo;
void foo ();   // "hides" struct foo
void bar (struct foo&);  // no warning, keyword struct is necessary
@end smallexample

@item -Wno-subobject-linkage @r{(C++ and Objective-C++ only)}
@opindex Wsubobject-linkage
@opindex Wno-subobject-linkage
Do not warn
if a class type has a base or a field whose type uses the anonymous
namespace or depends on a type with no linkage.  If a type A depends on
a type B with no or internal linkage, defining it in multiple
translation units would be an ODR violation because the meaning of B
is different in each translation unit.  If A only appears in a single
translation unit, the best way to silence the warning is to give it
internal linkage by putting it in an anonymous namespace as well.  The
compiler doesn't give this warning for types defined in the main .C
file, as those are unlikely to have multiple definitions.
@option{-Wsubobject-linkage} is enabled by default.

@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++} series of books:

@itemize @bullet
@item
Define a copy constructor and an assignment operator for classes
with dynamically-allocated memory.

@item
Prefer initialization to assignment in constructors.

@item
Have @code{operator=} return a reference to @code{*this}.

@item
Don't try to return a reference when you must return an object.

@item
Distinguish between prefix and postfix forms of increment and
decrement operators.

@item
Never overload @code{&&}, @code{||}, or @code{,}.

@end itemize

This option also enables @option{-Wnon-virtual-dtor}, which is also
one of the effective C++ recommendations.  However, the check is
extended to warn about the lack of virtual destructor in accessible
non-polymorphic bases classes too.

When selecting this option, be aware that the standard library
headers do not obey all of these guidelines; use @samp{grep -v}
to filter out those warnings.

@item -Wno-exceptions @r{(C++ and Objective-C++ only)}
@opindex Wexceptions
@opindex Wno-exceptions
Disable the warning about the case when an exception handler is shadowed by
another handler, which can point out a wrong ordering of exception handlers.

@item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
@opindex Wstrict-null-sentinel
@opindex Wno-strict-null-sentinel
Warn 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 rather than a
null pointer, it is guaranteed to be of the same size as a pointer.
But this use is not portable across different compilers.

@item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
@opindex Wno-non-template-friend
@opindex Wnon-template-friend
Disable warnings when non-template friend functions are declared
within a template.  In very old versions of GCC that predate implementation
of the ISO standard, declarations such as 
@samp{friend int foo(int)}, where the name of the friend is an unqualified-id,
could be interpreted as a particular specialization of a template
function; the warning exists to diagnose compatibility problems, 
and is enabled by default.

@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 (@code{dynamic_cast},
@code{static_cast}, @code{reinterpret_cast}, and @code{const_cast}) are
less vulnerable to unintended effects and much easier to search for.

@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
@opindex Woverloaded-virtual
@opindex Wno-overloaded-virtual
@cindex overloaded virtual function, warning
@cindex warning for overloaded virtual function
Warn when a function declaration hides virtual functions from a
base class.  For example, in:

@smallexample
struct A @{
  virtual void f();
@};

struct B: public A @{
  void f(int);
@};
@end smallexample

the @code{A} class version of @code{f} is hidden in @code{B}, and code
like:

@smallexample
B* b;
b->f();
@end smallexample

@noindent
fails to compile.

@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++ 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++ tried to preserve
unsignedness, but the standard mandates the current behavior.

@item -Wtemplates @r{(C++ and Objective-C++ only)}
@opindex Wtemplates
@opindex Wno-templates
Warn when a primary template declaration is encountered.  Some coding
rules disallow templates, and this may be used to enforce that rule.
The warning is inactive inside a system header file, such as the STL, so
one can still use the STL.  One may also instantiate or specialize
templates.

@item -Wmismatched-new-delete @r{(C++ and Objective-C++ only)}
@opindex Wmismatched-new-delete
@opindex Wno-mismatched-new-delete
Warn for mismatches between calls to @code{operator new} or @code{operator
delete} and the corresponding call to the allocation or deallocation function.
This includes invocations of C++ @code{operator delete} with pointers
returned from either mismatched forms of @code{operator new}, or from other
functions that allocate objects for which the @code{operator delete} isn't
a suitable deallocator, as well as calls to other deallocation functions
with pointers returned from @code{operator new} for which the deallocation
function isn't suitable.

For example, the @code{delete} expression in the function below is diagnosed
because it doesn't match the array form of the @code{new} expression
the pointer argument was returned from.  Similarly, the call to @code{free}
is also diagnosed.

@smallexample
void f ()
@{
  int *a = new int[n];
  delete a;   // warning: mismatch in array forms of expressions

  char *p = new char[n];
  free (p);   // warning: mismatch between new and free
@}
@end smallexample

The related option @option{-Wmismatched-dealloc} diagnoses mismatches
involving allocation and deallocation functions other than @code{operator
new} and @code{operator delete}.

@option{-Wmismatched-new-delete} is included in @option{-Wall}.

@item -Wmismatched-tags @r{(C++ and Objective-C++ only)}
@opindex Wmismatched-tags
@opindex Wno-mismatched-tags
Warn for declarations of structs, classes, and class templates and their
specializations with a class-key that does not match either the definition
or the first declaration if no definition is provided.

For example, the declaration of @code{struct Object} in the argument list
of @code{draw} triggers the warning.  To avoid it, either remove the redundant
class-key @code{struct} or replace it with @code{class} to match its definition.
@smallexample
class Object @{
public:
  virtual ~Object () = 0;
@};
void draw (struct Object*);
@end smallexample

It is not wrong to declare a class with the class-key @code{struct} as
the example above shows.  The @option{-Wmismatched-tags} option is intended
to help achieve a consistent style of class declarations.  In code that is
intended to be portable to Windows-based compilers the warning helps prevent
unresolved references due to the difference in the mangling of symbols
declared with different class-keys.  The option can be used either on its
own or in conjunction with @option{-Wredundant-tags}.

@item -Wmultiple-inheritance @r{(C++ and Objective-C++ only)}
@opindex Wmultiple-inheritance
@opindex Wno-multiple-inheritance
Warn when a class is defined with multiple direct base classes.  Some
coding rules disallow multiple inheritance, and this may be used to
enforce that rule.  The warning is inactive inside a system header file,
such as the STL, so one can still use the STL.  One may also define
classes that indirectly use multiple inheritance.

@item -Wvirtual-inheritance
@opindex Wvirtual-inheritance
@opindex Wno-virtual-inheritance
Warn when a class is defined with a virtual direct base class.  Some
coding rules disallow multiple inheritance, and this may be used to
enforce that rule.  The warning is inactive inside a system header file,
such as the STL, so one can still use the STL.  One may also define
classes that indirectly use virtual inheritance.

@item -Wno-virtual-move-assign
@opindex Wvirtual-move-assign
@opindex Wno-virtual-move-assign
Suppress warnings about inheriting from a virtual base with a
non-trivial C++11 move assignment operator.  This is dangerous because
if the virtual base is reachable along more than one path, it is
moved multiple times, which can mean both objects end up in the
moved-from state.  If the move assignment operator is written to avoid
moving from a moved-from object, this warning can be disabled.

@item -Wnamespaces
@opindex Wnamespaces
@opindex Wno-namespaces
Warn when a namespace definition is opened.  Some coding rules disallow
namespaces, and this may be used to enforce that rule.  The warning is
inactive inside a system header file, such as the STL, so one can still
use the STL.  One may also use using directives and qualified names.

@item -Wno-terminate @r{(C++ and Objective-C++ only)}
@opindex Wterminate
@opindex Wno-terminate
Disable the warning about a throw-expression that will immediately
result in a call to @code{terminate}.

@item -Wno-vexing-parse @r{(C++ and Objective-C++ only)}
@opindex Wvexing-parse
@opindex Wno-vexing-parse
Warn about the most vexing parse syntactic ambiguity.  This warns about
the cases when a declaration looks like a variable definition, but the
C++ language requires it to be interpreted as a function declaration.
For instance:

@smallexample
void f(double a) @{
  int i();        // extern int i (void);
  int n(int(a));  // extern int n (int);
@}
@end smallexample

Another example:

@smallexample
struct S @{ S(int); @};
void f(double a) @{
  S x(int(a));   // extern struct S x (int);
  S y(int());    // extern struct S y (int (*) (void));
  S z();         // extern struct S z (void);
@}
@end smallexample

The warning will suggest options how to deal with such an ambiguity; e.g.,
it can suggest removing the parentheses or using braces instead.

This warning is enabled by default.

@item -Wno-class-conversion @r{(C++ and Objective-C++ only)}
@opindex Wno-class-conversion
@opindex Wclass-conversion
Do not warn when a conversion function converts an
object to the same type, to a base class of that type, or to void; such
a conversion function will never be called.

@item -Wvolatile @r{(C++ and Objective-C++ only)}
@opindex Wvolatile
@opindex Wno-volatile
Warn about deprecated uses of the @code{volatile} qualifier.  This includes
postfix and prefix @code{++} and @code{--} expressions of
@code{volatile}-qualified types, using simple assignments where the left
operand is a @code{volatile}-qualified non-class type for their value,
compound assignments where the left operand is a @code{volatile}-qualified
non-class type, @code{volatile}-qualified function return type,
@code{volatile}-qualified parameter type, and structured bindings of a
@code{volatile}-qualified type.  This usage was deprecated in C++20.

Enabled by default with @option{-std=c++20}.

@item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
@opindex Wzero-as-null-pointer-constant
@opindex Wno-zero-as-null-pointer-constant
Warn when a literal @samp{0} is used as null pointer constant.  This can
be useful to facilitate the conversion to @code{nullptr} in C++11.

@item -Waligned-new
@opindex Waligned-new
@opindex Wno-aligned-new
Warn about a new-expression of a type that requires greater alignment
than the @code{alignof(std::max_align_t)} but uses an allocation
function without an explicit alignment parameter. This option is
enabled by @option{-Wall}.

Normally this only warns about global allocation functions, but
@option{-Waligned-new=all} also warns about class member allocation
functions.

@item -Wno-placement-new
@itemx -Wplacement-new=@var{n}
@opindex Wplacement-new
@opindex Wno-placement-new
Warn about placement new expressions with undefined behavior, such as
constructing an object in a buffer that is smaller than the type of
the object.  For example, the placement new expression below is diagnosed
because it attempts to construct an array of 64 integers in a buffer only
64 bytes large.
@smallexample
char buf [64];
new (buf) int[64];
@end smallexample
This warning is enabled by default.

@table @gcctabopt
@item -Wplacement-new=1
This is the default warning level of @option{-Wplacement-new}.  At this
level the warning is not issued for some strictly undefined constructs that
GCC allows as extensions for compatibility with legacy code.  For example,
the following @code{new} expression is not diagnosed at this level even
though it has undefined behavior according to the C++ standard because
it writes past the end of the one-element array.
@smallexample
struct S @{ int n, a[1]; @};
S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
new (s->a)int [32]();
@end smallexample

@item -Wplacement-new=2
At this level, in addition to diagnosing all the same constructs as at level
1, a diagnostic is also issued for placement new expressions that construct
an object in the last member of structure whose type is an array of a single
element and whose size is less than the size of the object being constructed.
While the previous example would be diagnosed, the following construct makes
use of the flexible member array extension to avoid the warning at level 2.
@smallexample
struct S @{ int n, a[]; @};
S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
new (s->a)int [32]();
@end smallexample

@end table

@item -Wcatch-value
@itemx -Wcatch-value=@var{n} @r{(C++ and Objective-C++ only)}
@opindex Wcatch-value
@opindex Wno-catch-value
Warn about catch handlers that do not catch via reference.
With @option{-Wcatch-value=1} (or @option{-Wcatch-value} for short)
warn about polymorphic class types that are caught by value.
With @option{-Wcatch-value=2} warn about all class types that are caught
by value. With @option{-Wcatch-value=3} warn about all types that are
not caught by reference. @option{-Wcatch-value} is enabled by @option{-Wall}.

@item -Wconditionally-supported @r{(C++ and Objective-C++ only)}
@opindex Wconditionally-supported
@opindex Wno-conditionally-supported
Warn for conditionally-supported (C++11 [intro.defs]) constructs.

@item -Wno-delete-incomplete @r{(C++ and Objective-C++ only)}
@opindex Wdelete-incomplete
@opindex Wno-delete-incomplete
Do not warn when deleting a pointer to incomplete type, which may cause
undefined behavior at runtime.  This warning is enabled by default.

@item -Wextra-semi @r{(C++, Objective-C++ only)}
@opindex Wextra-semi
@opindex Wno-extra-semi
Warn about redundant semicolons after in-class function definitions.

@item -Wno-inaccessible-base @r{(C++, Objective-C++ only)}
@opindex Winaccessible-base
@opindex Wno-inaccessible-base
This option controls warnings
when a base class is inaccessible in a class derived from it due to
ambiguity.  The warning is enabled by default.
Note that the warning for ambiguous virtual
bases is enabled by the @option{-Wextra} option.
@smallexample
@group
struct A @{ int a; @};

struct B : A @{ @};

struct C : B, A @{ @};
@end group
@end smallexample

@item -Wno-inherited-variadic-ctor
@opindex Winherited-variadic-ctor
@opindex Wno-inherited-variadic-ctor
Suppress warnings about use of C++11 inheriting constructors when the
base class inherited from has a C variadic constructor; the warning is
on by default because the ellipsis is not inherited.

@item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
@opindex Wno-invalid-offsetof
@opindex Winvalid-offsetof
Suppress warnings from applying the @code{offsetof} macro to a non-POD
type.  According to the 2014 ISO C++ standard, applying @code{offsetof}
to a non-standard-layout type is undefined.  In existing C++ implementations,
however, @code{offsetof} typically gives meaningful results.
This flag is for users who are aware that they are
writing nonportable code and who have deliberately chosen to ignore the
warning about it.

The restrictions on @code{offsetof} may be relaxed in a future version
of the C++ standard.

@item -Wsized-deallocation @r{(C++ and Objective-C++ only)}
@opindex Wsized-deallocation
@opindex Wno-sized-deallocation
Warn about a definition of an unsized deallocation function
@smallexample
void operator delete (void *) noexcept;
void operator delete[] (void *) noexcept;
@end smallexample
without a definition of the corresponding sized deallocation function
@smallexample
void operator delete (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;
@end smallexample
or vice versa.  Enabled by @option{-Wextra} along with
@option{-fsized-deallocation}.

@item -Wsuggest-final-types
@opindex Wno-suggest-final-types
@opindex Wsuggest-final-types
Warn about types with virtual methods where code quality would be improved
if the type were declared with the C++11 @code{final} specifier,
or, if possible,
declared in an anonymous namespace. This allows GCC to more aggressively
devirtualize the polymorphic calls. This warning is more effective with
link-time optimization,
where the information about the class hierarchy graph is
more complete.

@item -Wsuggest-final-methods
@opindex Wno-suggest-final-methods
@opindex Wsuggest-final-methods
Warn about virtual methods where code quality would be improved if the method
were declared with the C++11 @code{final} specifier,
or, if possible, its type were
declared in an anonymous namespace or with the @code{final} specifier.
This warning is
more effective with link-time optimization, where the information about the
class hierarchy graph is more complete. It is recommended to first consider
suggestions of @option{-Wsuggest-final-types} and then rebuild with new
annotations.

@item -Wsuggest-override
@opindex Wsuggest-override
@opindex Wno-suggest-override
Warn about overriding virtual functions that are not marked with the
@code{override} keyword.

@item -Wuseless-cast @r{(C++ and Objective-C++ only)}
@opindex Wuseless-cast
@opindex Wno-useless-cast
Warn when an expression is casted to its own type.

@item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
@opindex Wconversion-null
@opindex Wno-conversion-null
Do not warn for conversions between @code{NULL} and non-pointer
types. @option{-Wconversion-null} is enabled by default.

@end table

@node Objective-C and Objective-C++ Dialect Options
@section Options Controlling Objective-C and Objective-C++ Dialects

@cindex compiler options, Objective-C and Objective-C++
@cindex Objective-C and Objective-C++ options, command-line
@cindex options, Objective-C and Objective-C++
(NOTE: This manual does not describe the Objective-C and Objective-C++
languages themselves.  @xref{Standards,,Language Standards
Supported by GCC}, for references.)

This section describes the command-line options that are only meaningful
for Objective-C and Objective-C++ programs.  You can also use most of
the language-independent GNU compiler options.
For example, you might compile a file @file{some_class.m} like this:

@smallexample
gcc -g -fgnu-runtime -O -c some_class.m
@end smallexample

@noindent
In this example, @option{-fgnu-runtime} is an option meant only for
Objective-C and Objective-C++ programs; you can use the other options with
any language supported by GCC@.

Note that since Objective-C is an extension of the C language, Objective-C
compilations may also use options specific to the C front-end (e.g.,
@option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
C++-specific options (e.g., @option{-Wabi}).

Here is a list of options that are @emph{only} for compiling Objective-C
and Objective-C++ programs:

@table @gcctabopt
@item -fconstant-string-class=@var{class-name}
@opindex fconstant-string-class
Use @var{class-name} as the name of the class to instantiate for each
literal string specified with the syntax @code{@@"@dots{}"}.  The default
class name is @code{NXConstantString} if the GNU runtime is being used, and
@code{NSConstantString} if the NeXT runtime is being used (see below).  The
@option{-fconstant-cfstrings} option, if also present, overrides the
@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
to be laid out as constant CoreFoundation strings.

@item -fgnu-runtime
@opindex fgnu-runtime
Generate object code compatible with the standard GNU Objective-C
runtime.  This is the default for most types of systems.

@item -fnext-runtime
@opindex fnext-runtime
Generate output compatible with the NeXT runtime.  This is the default
for NeXT-based systems, including Darwin and Mac OS X@.  The macro
@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
used.

@item -fno-nil-receivers
@opindex fno-nil-receivers
@opindex fnil-receivers
Assume that all Objective-C message dispatches (@code{[receiver
message:arg]}) in this translation unit ensure that the receiver is
not @code{nil}.  This allows for more efficient entry points in the
runtime to be used.  This option is only available in conjunction with
the NeXT runtime and ABI version 0 or 1.

@item -fobjc-abi-version=@var{n}
@opindex fobjc-abi-version
Use version @var{n} of the Objective-C ABI for the selected runtime.
This option is currently supported only for the NeXT runtime.  In that
case, Version 0 is the traditional (32-bit) ABI without support for
properties and other Objective-C 2.0 additions.  Version 1 is the
traditional (32-bit) ABI with support for properties and other
Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
nothing is specified, the default is Version 0 on 32-bit target
machines, and Version 2 on 64-bit target machines.

@item -fobjc-call-cxx-cdtors
@opindex fobjc-call-cxx-cdtors
For each Objective-C class, check if any of its instance variables is a
C++ object with a non-trivial default constructor.  If so, synthesize a
special @code{- (id) .cxx_construct} instance method which runs
non-trivial default constructors on any such instance variables, in order,
and then return @code{self}.  Similarly, check if any instance variable
is a C++ object with a non-trivial destructor, and if so, synthesize a
special @code{- (void) .cxx_destruct} method which runs
all such default destructors, in reverse order.

The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
methods thusly generated only operate on instance variables
declared in the current Objective-C class, and not those inherited
from superclasses.  It is the responsibility of the Objective-C
runtime to invoke all such methods in an object's inheritance
hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
by the runtime immediately after a new object instance is allocated;
the @code{- (void) .cxx_destruct} methods are invoked immediately
before the runtime deallocates an object instance.

As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
support for invoking the @code{- (id) .cxx_construct} and
@code{- (void) .cxx_destruct} methods.

@item -fobjc-direct-dispatch
@opindex fobjc-direct-dispatch
Allow fast jumps to the message dispatcher.  On Darwin this is
accomplished via the comm page.

@item -fobjc-exceptions
@opindex fobjc-exceptions
Enable syntactic support for structured exception handling in
Objective-C, similar to what is offered by C++.  This option
is required to use the Objective-C keywords @code{@@try},
@code{@@throw}, @code{@@catch}, @code{@@finally} and
@code{@@synchronized}.  This option is available with both the GNU
runtime and the NeXT runtime (but not available in conjunction with
the NeXT runtime on Mac OS X 10.2 and earlier).

@item -fobjc-gc
@opindex fobjc-gc
Enable garbage collection (GC) in Objective-C and Objective-C++
programs.  This option is only available with the NeXT runtime; the
GNU runtime has a different garbage collection implementation that
does not require special compiler flags.

@item -fobjc-nilcheck
@opindex fobjc-nilcheck
For the NeXT runtime with version 2 of the ABI, check for a nil
receiver in method invocations before doing the actual method call.
This is the default and can be disabled using
@option{-fno-objc-nilcheck}.  Class methods and super calls are never
checked for nil in this way no matter what this flag is set to.
Currently this flag does nothing when the GNU runtime, or an older
version of the NeXT runtime ABI, is used.

@item -fobjc-std=objc1
@opindex fobjc-std
Conform to the language syntax of Objective-C 1.0, the language
recognized by GCC 4.0.  This only affects the Objective-C additions to
the C/C++ language; it does not affect conformance to C/C++ standards,
which is controlled by the separate C/C++ dialect option flags.  When
this option is used with the Objective-C or Objective-C++ compiler,
any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
This is useful if you need to make sure that your Objective-C code can
be compiled with older versions of GCC@.

@item -freplace-objc-classes
@opindex freplace-objc-classes
Emit a special marker instructing @command{ld(1)} not to statically link in
the resulting object file, and allow @command{dyld(1)} to load it in at
run time instead.  This is used in conjunction with the Fix-and-Continue
debugging mode, where the object file in question may be recompiled and
dynamically reloaded in the course of program execution, without the need
to restart the program itself.  Currently, Fix-and-Continue functionality
is only available in conjunction with the NeXT runtime on Mac OS X 10.3
and later.

@item -fzero-link
@opindex fzero-link
When compiling for the NeXT runtime, the compiler ordinarily replaces calls
to @code{objc_getClass("@dots{}")} (when the name of the class is known at
compile time) with static class references that get initialized at load time,
which improves run-time performance.  Specifying the @option{-fzero-link} flag
suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
to be retained.  This is useful in Zero-Link debugging mode, since it allows
for individual class implementations to be modified during program execution.
The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
regardless of command-line options.

@item -fno-local-ivars
@opindex fno-local-ivars
@opindex flocal-ivars
By default instance variables in Objective-C can be accessed as if
they were local variables from within the methods of the class they're
declared in.  This can lead to shadowing between instance variables
and other variables declared either locally inside a class method or
globally with the same name.  Specifying the @option{-fno-local-ivars}
flag disables this behavior thus avoiding variable shadowing issues.

@item -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]}
@opindex fivar-visibility
Set the default instance variable visibility to the specified option
so that instance variables declared outside the scope of any access
modifier directives default to the specified visibility.

@item -gen-decls
@opindex gen-decls
Dump interface declarations for all classes seen in the source file to a
file named @file{@var{sourcename}.decl}.

@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-property-assign-default @r{(Objective-C and Objective-C++ only)}
@opindex Wproperty-assign-default
@opindex Wno-property-assign-default
Do not warn if a property for an Objective-C object has no assign
semantics specified.

@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
implemented in the class, even if a method implementation is inherited
from the superclass.  If you use the @option{-Wno-protocol} option, then
methods inherited from the superclass are considered to be implemented,
and no warning is issued for them.

@item -Wobjc-root-class @r{(Objective-C and Objective-C++ only)}
@opindex Wobjc-root-class
Warn if a class interface lacks a superclass. Most classes will inherit
from @code{NSObject} (or @code{Object}) for example.  When declaring
classes intended to be root classes, the warning can be suppressed by
marking their interfaces with @code{__attribute__((objc_root_class))}.

@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
for each selector appearing in a @code{@@selector(@dots{})}
expression, and a corresponding method for that selector has been found
during compilation.  Because these checks scan the method table only at
the end of compilation, these warnings are not produced if the final
stage of compilation is not reached, for example because an error is
found during compilation, or because the @option{-fsyntax-only} option is
being used.

@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
is off (which is the default behavior), the compiler omits such warnings
if any differences found are confined to types that share the same size
and alignment.

@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
@code{@@selector(@dots{})} expression, either explicitly in an
@code{@@interface} or @code{@@protocol} declaration, or implicitly in
an @code{@@implementation} section.  This option always performs its
checks as soon as a @code{@@selector(@dots{})} expression is found,
while @option{-Wselector} only performs its checks in the final stage of
compilation.  This also enforces the coding style convention
that methods and selectors must be declared before being used.

@item -print-objc-runtime-info
@opindex print-objc-runtime-info
Generate C header describing the largest structure that is passed by
value, if any.

@end table

@node Diagnostic Message Formatting 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, @dots{}).  You can use the
options described below
to control the formatting algorithm for diagnostic messages, 
e.g.@: how many characters per line, how often source location
information should be reported.  Note that some language front ends may not
honor these options.

@table @gcctabopt
@item -fmessage-length=@var{n}
@opindex fmessage-length
Try to format error messages so that they fit on lines of about
@var{n} characters.  If @var{n} is zero, then no line-wrapping is
done; each error message appears on a single line.  This is the
default for all front ends.

Note - this option also affects the display of the @samp{#error} and
@samp{#warning} pre-processor directives, and the @samp{deprecated}
function/type/variable attribute.  It does not however affect the
@samp{pragma GCC warning} and @samp{pragma GCC error} pragmas.

@item -fdiagnostics-plain-output
This option requests that diagnostic output look as plain as possible, which
may be useful when running @command{dejagnu} or other utilities that need to
parse diagnostics output and prefer that it remain more stable over time.
@option{-fdiagnostics-plain-output} is currently equivalent to the following
options:
@gccoptlist{-fno-diagnostics-show-caret @gol
-fno-diagnostics-show-line-numbers @gol
-fdiagnostics-color=never @gol
-fdiagnostics-urls=never @gol
-fdiagnostics-path-format=separate-events}
In the future, if GCC changes the default appearance of its diagnostics, the
corresponding option to disable the new behavior will be added to this list.

@item -fdiagnostics-show-location=once
@opindex fdiagnostics-show-location
Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
reporter to emit source location information @emph{once}; 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
behavior.

@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 message which is too long to fit on a single line.

@item -fdiagnostics-color[=@var{WHEN}]
@itemx -fno-diagnostics-color
@opindex fdiagnostics-color
@cindex highlight, color
@vindex GCC_COLORS @r{environment variable}
Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
or @samp{auto}.  The default depends on how the compiler has been configured,
it can be any of the above @var{WHEN} options or also @samp{never}
if @env{GCC_COLORS} environment variable isn't present in the environment,
and @samp{auto} otherwise.
@samp{auto} makes GCC use color only when the standard error is a terminal,
and when not executing in an emacs shell.
The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
aliases for @option{-fdiagnostics-color=always} and
@option{-fdiagnostics-color=never}, respectively.

The colors are defined by the environment variable @env{GCC_COLORS}.
Its value is a colon-separated list of capabilities and Select Graphic
Rendition (SGR) substrings. SGR commands are interpreted by the
terminal or terminal emulator.  (See the section in the documentation
of your text terminal for permitted values and their meanings as
character attributes.)  These substring values are integers in decimal
representation and can be concatenated with semicolons.
Common values to concatenate include
@samp{1} for bold,
@samp{4} for underline,
@samp{5} for blink,
@samp{7} for inverse,
@samp{39} for default foreground color,
@samp{30} to @samp{37} for foreground colors,
@samp{90} to @samp{97} for 16-color mode foreground colors,
@samp{38;5;0} to @samp{38;5;255}
for 88-color and 256-color modes foreground colors,
@samp{49} for default background color,
@samp{40} to @samp{47} for background colors,
@samp{100} to @samp{107} for 16-color mode background colors,
and @samp{48;5;0} to @samp{48;5;255}
for 88-color and 256-color modes background colors.

The default @env{GCC_COLORS} is
@smallexample
error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
type-diff=01;32
@end smallexample
@noindent
where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
@samp{01;36} is bold cyan, @samp{32} is green, @samp{34} is blue,
@samp{01} is bold, and @samp{31} is red.
Setting @env{GCC_COLORS} to the empty string disables colors.
Supported capabilities are as follows.

@table @code
@item error=
@vindex error GCC_COLORS @r{capability}
SGR substring for error: markers.

@item warning=
@vindex warning GCC_COLORS @r{capability}
SGR substring for warning: markers.

@item note=
@vindex note GCC_COLORS @r{capability}
SGR substring for note: markers.

@item path=
@vindex path GCC_COLORS @r{capability}
SGR substring for colorizing paths of control-flow events as printed
via @option{-fdiagnostics-path-format=}, such as the identifiers of
individual events and lines indicating interprocedural calls and returns.

@item range1=
@vindex range1 GCC_COLORS @r{capability}
SGR substring for first additional range.

@item range2=
@vindex range2 GCC_COLORS @r{capability}
SGR substring for second additional range.

@item locus=
@vindex locus GCC_COLORS @r{capability}
SGR substring for location information, @samp{file:line} or
@samp{file:line:column} etc.

@item quote=
@vindex quote GCC_COLORS @r{capability}
SGR substring for information printed within quotes.

@item fixit-insert=
@vindex fixit-insert GCC_COLORS @r{capability}
SGR substring for fix-it hints suggesting text to
be inserted or replaced.

@item fixit-delete=
@vindex fixit-delete GCC_COLORS @r{capability}
SGR substring for fix-it hints suggesting text to
be deleted.

@item diff-filename=
@vindex diff-filename GCC_COLORS @r{capability}
SGR substring for filename headers within generated patches.

@item diff-hunk=
@vindex diff-hunk GCC_COLORS @r{capability}
SGR substring for the starts of hunks within generated patches.

@item diff-delete=
@vindex diff-delete GCC_COLORS @r{capability}
SGR substring for deleted lines within generated patches.

@item diff-insert=
@vindex diff-insert GCC_COLORS @r{capability}
SGR substring for inserted lines within generated patches.

@item type-diff=
@vindex type-diff GCC_COLORS @r{capability}
SGR substring for highlighting mismatching types within template
arguments in the C++ frontend.
@end table

@item -fdiagnostics-urls[=@var{WHEN}]
@opindex fdiagnostics-urls
@cindex urls
@vindex GCC_URLS @r{environment variable}
@vindex TERM_URLS @r{environment variable}
Use escape sequences to embed URLs in diagnostics.  For example, when
@option{-fdiagnostics-show-option} emits text showing the command-line
option controlling a diagnostic, embed a URL for documentation of that
option.

@var{WHEN} is @samp{never}, @samp{always}, or @samp{auto}.
@samp{auto} makes GCC use URL escape sequences only when the standard error
is a terminal, and when not executing in an emacs shell or any graphical
terminal which is known to be incompatible with this feature, see below.

The default depends on how the compiler has been configured.
It can be any of the above @var{WHEN} options.

GCC can also be configured (via the
@option{--with-diagnostics-urls=auto-if-env} configure-time option)
so that the default is affected by environment variables.
Under such a configuration, GCC defaults to using @samp{auto}
if either @env{GCC_URLS} or @env{TERM_URLS} environment variables are
present and non-empty in the environment of the compiler, or @samp{never}
if neither are.

However, even with @option{-fdiagnostics-urls=always} the behavior is
dependent on those environment variables:
If @env{GCC_URLS} is set to empty or @samp{no}, do not embed URLs in
diagnostics.  If set to @samp{st}, URLs use ST escape sequences.
If set to @samp{bel}, the default, URLs use BEL escape sequences.
Any other non-empty value enables the feature.
If @env{GCC_URLS} is not set, use @env{TERM_URLS} as a fallback.
Note: ST is an ANSI escape sequence, string terminator @samp{ESC \},
BEL is an ASCII character, CTRL-G that usually sounds like a beep.

At this time GCC tries to detect also a few terminals that are known to
not implement the URL feature, and have bugs or at least had bugs in
some versions that are still in use, where the URL escapes are likely
to misbehave, i.e. print garbage on the screen.
That list is currently xfce4-terminal, certain known to be buggy
gnome-terminal versions, the linux console, and mingw.
This check can be skipped with the @option{-fdiagnostics-urls=always}.

@item -fno-diagnostics-show-option
@opindex fno-diagnostics-show-option
@opindex fdiagnostics-show-option
By default, each diagnostic emitted includes text indicating the
command-line option that directly controls the diagnostic (if such an
option is known to the diagnostic machinery).  Specifying the
@option{-fno-diagnostics-show-option} flag suppresses that behavior.

@item -fno-diagnostics-show-caret
@opindex fno-diagnostics-show-caret
@opindex fdiagnostics-show-caret
By default, each diagnostic emitted includes the original source line
and a caret @samp{^} indicating the column.  This option suppresses this
information.  The source line is truncated to @var{n} characters, if
the @option{-fmessage-length=n} option is given.  When the output is done
to the terminal, the width is limited to the width given by the
@env{COLUMNS} environment variable or, if not set, to the terminal width.

@item -fno-diagnostics-show-labels
@opindex fno-diagnostics-show-labels
@opindex fdiagnostics-show-labels
By default, when printing source code (via @option{-fdiagnostics-show-caret}),
diagnostics can label ranges of source code with pertinent information, such
as the types of expressions:

@smallexample
    printf ("foo %s bar", long_i + long_j);
                 ~^       ~~~~~~~~~~~~~~~
                  |              |
                  char *         long int
@end smallexample

This option suppresses the printing of these labels (in the example above,
the vertical bars and the ``char *'' and ``long int'' text).

@item -fno-diagnostics-show-cwe
@opindex fno-diagnostics-show-cwe
@opindex fdiagnostics-show-cwe
Diagnostic messages can optionally have an associated
@url{https://cwe.mitre.org/index.html, CWE} identifier.
GCC itself only provides such metadata for some of the @option{-fanalyzer}
diagnostics.  GCC plugins may also provide diagnostics with such metadata.
By default, if this information is present, it will be printed with
the diagnostic.  This option suppresses the printing of this metadata.

@item -fno-diagnostics-show-line-numbers
@opindex fno-diagnostics-show-line-numbers
@opindex fdiagnostics-show-line-numbers
By default, when printing source code (via @option{-fdiagnostics-show-caret}),
a left margin is printed, showing line numbers.  This option suppresses this
left margin.

@item -fdiagnostics-minimum-margin-width=@var{width}
@opindex fdiagnostics-minimum-margin-width
This option controls the minimum width of the left margin printed by
@option{-fdiagnostics-show-line-numbers}.  It defaults to 6.

@item -fdiagnostics-parseable-fixits
@opindex fdiagnostics-parseable-fixits
Emit fix-it hints in a machine-parseable format, suitable for consumption
by IDEs.  For each fix-it, a line will be printed after the relevant
diagnostic, starting with the string ``fix-it:''.  For example:

@smallexample
fix-it:"test.c":@{45:3-45:21@}:"gtk_widget_show_all"
@end smallexample

The location is expressed as a half-open range, expressed as a count of
bytes, starting at byte 1 for the initial column.  In the above example,
bytes 3 through 20 of line 45 of ``test.c'' are to be replaced with the
given string:

@smallexample
00000000011111111112222222222
12345678901234567890123456789
  gtk_widget_showall (dlg);
  ^^^^^^^^^^^^^^^^^^
  gtk_widget_show_all
@end smallexample

The filename and replacement string escape backslash as ``\\", tab as ``\t'',
newline as ``\n'', double quotes as ``\"'', non-printable characters as octal
(e.g. vertical tab as ``\013'').

An empty replacement string indicates that the given range is to be removed.
An empty range (e.g. ``45:3-45:3'') indicates that the string is to
be inserted at the given position.

@item -fdiagnostics-generate-patch
@opindex fdiagnostics-generate-patch
Print fix-it hints to stderr in unified diff format, after any diagnostics
are printed.  For example:

@smallexample
--- test.c
+++ test.c
@@ -42,5 +42,5 @@

 void show_cb(GtkDialog *dlg)
 @{
-  gtk_widget_showall(dlg);
+  gtk_widget_show_all(dlg);
 @}

@end smallexample

The diff may or may not be colorized, following the same rules
as for diagnostics (see @option{-fdiagnostics-color}).

@item -fdiagnostics-show-template-tree
@opindex fdiagnostics-show-template-tree

In the C++ frontend, when printing diagnostics showing mismatching
template types, such as:

@smallexample
  could not convert 'std::map<int, std::vector<double> >()'
    from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
@end smallexample

the @option{-fdiagnostics-show-template-tree} flag enables printing a
tree-like structure showing the common and differing parts of the types,
such as:

@smallexample
  map<
    [...],
    vector<
      [double != float]>>
@end smallexample

The parts that differ are highlighted with color (``double'' and
``float'' in this case).

@item -fno-elide-type
@opindex fno-elide-type
@opindex felide-type
By default when the C++ frontend prints diagnostics showing mismatching
template types, common parts of the types are printed as ``[...]'' to
simplify the error message.  For example:

@smallexample
  could not convert 'std::map<int, std::vector<double> >()'
    from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
@end smallexample

Specifying the @option{-fno-elide-type} flag suppresses that behavior.
This flag also affects the output of the
@option{-fdiagnostics-show-template-tree} flag.

@item -fdiagnostics-path-format=@var{KIND}
@opindex fdiagnostics-path-format
Specify how to print paths of control-flow events for diagnostics that
have such a path associated with them.

@var{KIND} is @samp{none}, @samp{separate-events}, or @samp{inline-events},
the default.

@samp{none} means to not print diagnostic paths.

@samp{separate-events} means to print a separate ``note'' diagnostic for
each event within the diagnostic.  For example:

@smallexample
test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
test.c:25:10: note: (1) when 'PyList_New' fails, returning NULL
test.c:27:3: note: (2) when 'i < count'
test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
@end smallexample

@samp{inline-events} means to print the events ``inline'' within the source
code.  This view attempts to consolidate the events into runs of
sufficiently-close events, printing them as labelled ranges within the source.

For example, the same events as above might be printed as:

@smallexample
  'test': events 1-3
    |
    |   25 |   list = PyList_New(0);
    |      |          ^~~~~~~~~~~~~
    |      |          |
    |      |          (1) when 'PyList_New' fails, returning NULL
    |   26 |
    |   27 |   for (i = 0; i < count; i++) @{
    |      |   ~~~
    |      |   |
    |      |   (2) when 'i < count'
    |   28 |     item = PyLong_FromLong(random());
    |   29 |     PyList_Append(list, item);
    |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |     |
    |      |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
    |
@end smallexample

Interprocedural control flow is shown by grouping the events by stack frame,
and using indentation to show how stack frames are nested, pushed, and popped.

For example:

@smallexample
  'test': events 1-2
    |
    |  133 | @{
    |      | ^
    |      | |
    |      | (1) entering 'test'
    |  134 |   boxed_int *obj = make_boxed_int (i);
    |      |                    ~~~~~~~~~~~~~~~~~~
    |      |                    |
    |      |                    (2) calling 'make_boxed_int'
    |
    +--> 'make_boxed_int': events 3-4
           |
           |  120 | @{
           |      | ^
           |      | |
           |      | (3) entering 'make_boxed_int'
           |  121 |   boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int));
           |      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                                    |
           |      |                                    (4) calling 'wrapped_malloc'
           |
           +--> 'wrapped_malloc': events 5-6
                  |
                  |    7 | @{
                  |      | ^
                  |      | |
                  |      | (5) entering 'wrapped_malloc'
                  |    8 |   return malloc (size);
                  |      |          ~~~~~~~~~~~~~
                  |      |          |
                  |      |          (6) calling 'malloc'
                  |
    <-------------+
    |
 'test': event 7
    |
    |  138 |   free_boxed_int (obj);
    |      |   ^~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (7) calling 'free_boxed_int'
    |
(etc)
@end smallexample

@item -fdiagnostics-show-path-depths
@opindex fdiagnostics-show-path-depths
This option provides additional information when printing control-flow paths
associated with a diagnostic.

If this is option is provided then the stack depth will be printed for
each run of events within @option{-fdiagnostics-path-format=separate-events}.

This is intended for use by GCC developers and plugin developers when
debugging diagnostics that report interprocedural control flow.

@item -fno-show-column
@opindex fno-show-column
@opindex fshow-column
Do not print column numbers in diagnostics.  This may be necessary if
diagnostics are being scanned by a program that does not understand the
column numbers, such as @command{dejagnu}.

@item -fdiagnostics-column-unit=@var{UNIT}
@opindex fdiagnostics-column-unit
Select the units for the column number.  This affects traditional diagnostics
(in the absence of @option{-fno-show-column}), as well as JSON format
diagnostics if requested.

The default @var{UNIT}, @samp{display}, considers the number of display
columns occupied by each character.  This may be larger than the number
of bytes required to encode the character, in the case of tab
characters, or it may be smaller, in the case of multibyte characters.
For example, the character ``GREEK SMALL LETTER PI (U+03C0)'' occupies one
display column, and its UTF-8 encoding requires two bytes; the character
``SLIGHTLY SMILING FACE (U+1F642)'' occupies two display columns, and
its UTF-8 encoding requires four bytes.

Setting @var{UNIT} to @samp{byte} changes the column number to the raw byte
count in all cases, as was traditionally output by GCC prior to version 11.1.0.

@item -fdiagnostics-column-origin=@var{ORIGIN}
@opindex fdiagnostics-column-origin
Select the origin for column numbers, i.e. the column number assigned to the
first column.  The default value of 1 corresponds to traditional GCC
behavior and to the GNU style guide.  Some utilities may perform better with an
origin of 0; any non-negative value may be specified.

@item -fdiagnostics-format=@var{FORMAT}
@opindex fdiagnostics-format
Select a different format for printing diagnostics.
@var{FORMAT} is @samp{text} or @samp{json}.
The default is @samp{text}.

The @samp{json} format consists of a top-level JSON array containing JSON
objects representing the diagnostics.

The JSON is emitted as one line, without formatting; the examples below
have been formatted for clarity.

Diagnostics can have child diagnostics.  For example, this error and note:

@smallexample
misleading-indentation.c:15:3: warning: this 'if' clause does not
  guard... [-Wmisleading-indentation]
   15 |   if (flag)
      |   ^~
misleading-indentation.c:17:5: note: ...this statement, but the latter
  is misleadingly indented as if it were guarded by the 'if'
   17 |     y = 2;
      |     ^
@end smallexample

@noindent
might be printed in JSON form (after formatting) like this:

@smallexample
[
    @{
        "kind": "warning",
        "locations": [
            @{
                "caret": @{
		    "display-column": 3,
		    "byte-column": 3,
                    "column": 3,
                    "file": "misleading-indentation.c",
                    "line": 15
                @},
                "finish": @{
		    "display-column": 4,
		    "byte-column": 4,
                    "column": 4,
                    "file": "misleading-indentation.c",
                    "line": 15
                @}
            @}
        ],
        "message": "this \u2018if\u2019 clause does not guard...",
        "option": "-Wmisleading-indentation",
        "option_url": "https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation",
        "children": [
            @{
                "kind": "note",
                "locations": [
                    @{
                        "caret": @{
			    "display-column": 5,
			    "byte-column": 5,
                            "column": 5,
                            "file": "misleading-indentation.c",
                            "line": 17
                        @}
                    @}
                ],
                "message": "...this statement, but the latter is @dots{}"
            @}
        ]
	"column-origin": 1,
    @}
]
@end smallexample

@noindent
where the @code{note} is a child of the @code{warning}.

A diagnostic has a @code{kind}.  If this is @code{warning}, then there is
an @code{option} key describing the command-line option controlling the
warning.

A diagnostic can contain zero or more locations.  Each location has an
optional @code{label} string and up to three positions within it: a
@code{caret} position and optional @code{start} and @code{finish} positions.
A position is described by a @code{file} name, a @code{line} number, and
three numbers indicating a column position:
@itemize @bullet

@item
@code{display-column} counts display columns, accounting for tabs and
multibyte characters.

@item
@code{byte-column} counts raw bytes.

@item
@code{column} is equal to one of
the previous two, as dictated by the @option{-fdiagnostics-column-unit}
option.

@end itemize
All three columns are relative to the origin specified by
@option{-fdiagnostics-column-origin}, which is typically equal to 1 but may
be set, for instance, to 0 for compatibility with other utilities that
number columns from 0.  The column origin is recorded in the JSON output in
the @code{column-origin} tag.  In the remaining examples below, the extra
column number outputs have been omitted for brevity.

For example, this error:

@smallexample
bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' @{aka
   'struct s'@} and 'T' @{aka 'struct t'@})
   64 |   return callee_4a () + callee_4b ();
      |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
      |          |              |
      |          |              T @{aka struct t@}
      |          S @{aka struct s@}
@end smallexample

@noindent
has three locations.  Its primary location is at the ``+'' token at column
23.  It has two secondary locations, describing the left and right-hand sides
of the expression, which have labels.  It might be printed in JSON form as:

@smallexample
    @{
        "children": [],
        "kind": "error",
        "locations": [
            @{
                "caret": @{
                    "column": 23, "file": "bad-binary-ops.c", "line": 64
                @}
            @},
            @{
                "caret": @{
                    "column": 10, "file": "bad-binary-ops.c", "line": 64
                @},
                "finish": @{
                    "column": 21, "file": "bad-binary-ops.c", "line": 64
                @},
                "label": "S @{aka struct s@}"
            @},
            @{
                "caret": @{
                    "column": 25, "file": "bad-binary-ops.c", "line": 64
                @},
                "finish": @{
                    "column": 36, "file": "bad-binary-ops.c", "line": 64
                @},
                "label": "T @{aka struct t@}"
            @}
        ],
        "message": "invalid operands to binary + @dots{}"
    @}
@end smallexample

If a diagnostic contains fix-it hints, it has a @code{fixits} array,
consisting of half-open intervals, similar to the output of
@option{-fdiagnostics-parseable-fixits}.  For example, this diagnostic
with a replacement fix-it hint:

@smallexample
demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
  mean 'color'?
    8 |   return ptr->colour;
      |               ^~~~~~
      |               color
@end smallexample

@noindent
might be printed in JSON form as:

@smallexample
    @{
        "children": [],
        "fixits": [
            @{
                "next": @{
                    "column": 21,
                    "file": "demo.c",
                    "line": 8
                @},
                "start": @{
                    "column": 15,
                    "file": "demo.c",
                    "line": 8
                @},
                "string": "color"
            @}
        ],
        "kind": "error",
        "locations": [
            @{
                "caret": @{
                    "column": 15,
                    "file": "demo.c",
                    "line": 8
                @},
                "finish": @{
                    "column": 20,
                    "file": "demo.c",
                    "line": 8
                @}
            @}
        ],
        "message": "\u2018struct s\u2019 has no member named @dots{}"
    @}
@end smallexample

@noindent
where the fix-it hint suggests replacing the text from @code{start} up
to but not including @code{next} with @code{string}'s value.  Deletions
are expressed via an empty value for @code{string}, insertions by
having @code{start} equal @code{next}.

If the diagnostic has a path of control-flow events associated with it,
it has a @code{path} array of objects representing the events.  Each
event object has a @code{description} string, a @code{location} object,
along with a @code{function} string and a @code{depth} number for
representing interprocedural paths.  The @code{function} represents the
current function at that event, and the @code{depth} represents the
stack depth relative to some baseline: the higher, the more frames are
within the stack.

For example, the intraprocedural example shown for
@option{-fdiagnostics-path-format=} might have this JSON for its path:

@smallexample
    "path": [
        @{
            "depth": 0,
            "description": "when 'PyList_New' fails, returning NULL",
            "function": "test",
            "location": @{
                "column": 10,
                "file": "test.c",
                "line": 25
            @}
        @},
        @{
            "depth": 0,
            "description": "when 'i < count'",
            "function": "test",
            "location": @{
                "column": 3,
                "file": "test.c",
                "line": 27
            @}
        @},
        @{
            "depth": 0,
            "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1",
            "function": "test",
            "location": @{
                "column": 5,
                "file": "test.c",
                "line": 29
            @}
        @}
    ]
@end smallexample

@end table

@node Warning Options
@section Options to Request or Suppress Warnings
@cindex options to control warnings
@cindex warning messages
@cindex messages, warning
@cindex suppressing warnings

Warnings are diagnostic messages that report constructions that
are not inherently erroneous but that are risky or suggest there
may have been an error.

The following language-independent options do not enable specific
warnings but control the kinds of diagnostics produced by GCC@.

@table @gcctabopt
@cindex syntax checking
@item -fsyntax-only
@opindex fsyntax-only
Check the code for syntax errors, but don't do anything beyond that.

@item -fmax-errors=@var{n}
@opindex fmax-errors
Limits the maximum number of error messages to @var{n}, at which point
GCC bails out rather than attempting to continue processing the source
code.  If @var{n} is 0 (the default), there is no limit on the number
of error messages produced.  If @option{-Wfatal-errors} is also
specified, then @option{-Wfatal-errors} takes precedence over this
option.

@item -w
@opindex w
Inhibit all warning messages.

@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
negative form, to be used to negate @option{-Werror} for specific
warnings; for example @option{-Wno-error=switch} makes
@option{-Wswitch} warnings not be errors, even when @option{-Werror}
is in effect.

The warning message for each controllable warning includes the
option that controls the warning.  That option can then be used with
@option{-Werror=} and @option{-Wno-error=} as described above.
(Printing of the option in the warning message can be disabled using the
@option{-fno-diagnostics-show-option} flag.)

Note that specifying @option{-Werror=}@var{foo} automatically implies
@option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
imply anything.

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

@end table

You can request many specific warnings with options beginning with
@samp{-W}, for example @option{-Wimplicit} to request warnings on
implicit declarations.  Each of these specific warning options also
has a negative form beginning @samp{-Wno-} to turn off warnings; for
example, @option{-Wno-implicit}.  This manual lists only one of the
two forms, whichever is not the default.  For further
language-specific options also refer to @ref{C++ Dialect Options} and
@ref{Objective-C and Objective-C++ Dialect Options}.
Additional warnings can be produced by enabling the static analyzer;
@xref{Static Analyzer Options}.

Some options, such as @option{-Wall} and @option{-Wextra}, turn on other
options, such as @option{-Wunused}, which may turn on further options,
such as @option{-Wunused-value}. The combined effect of positive and
negative forms is that more specific options have priority over less
specific ones, independently of their position in the command-line. For
options of the same specificity, the last one takes effect. Options
enabled or disabled via pragmas (@pxref{Diagnostic Pragmas}) take effect
as if they appeared at the end of the command-line.

When an unrecognized warning option is requested (e.g.,
@option{-Wunknown-warning}), GCC emits a diagnostic stating
that the option is not recognized.  However, if the @option{-Wno-} form
is used, the behavior is slightly different: no diagnostic is
produced for @option{-Wno-unknown-warning} unless other diagnostics
are being produced.  This allows the use of new @option{-Wno-} options
with old compilers, but if something goes wrong, the compiler
warns that an unrecognized option is present.

The effectiveness of some warnings depends on optimizations also being
enabled. For example @option{-Wsuggest-final-types} is more effective
with link-time optimization and @option{-Wmaybe-uninitialized} does not
warn at all unless optimization is enabled.

@table @gcctabopt
@item -Wpedantic
@itemx -pedantic
@opindex pedantic
@opindex Wpedantic
@opindex Wno-pedantic
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 @option{-std} option used.

Valid ISO C and ISO C++ programs should compile properly with or without
this option (though a rare few 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.

@option{-Wpedantic} does not cause warning messages for use of the
alternate keywords whose names begin and end with @samp{__}.  This alternate
format can also be used to disable warnings for non-ISO @samp{__intN} types,
i.e. @samp{__intN__}.
Pedantic warnings are also disabled in the expression that follows
@code{__extension__}.  However, only system header files should use
these escape routes; application programs should avoid them.
@xref{Alternate Keywords}.

Some users try to use @option{-Wpedantic} to check programs for strict ISO
C conformance.  They soon find that it does not do quite what they want:
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 ISO C might be useful in
some instances, but would require considerable additional work and would
be quite different from @option{-Wpedantic}.  We don't have plans to
support such a feature in the near future.

Where the standard specified with @option{-std} represents a GNU
extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
corresponding @dfn{base standard}, the version of ISO C on which the GNU
extended dialect is based.  Warnings from @option{-Wpedantic} are given
where they are required by the base standard.  (It does not make sense
for such warnings to be given only for features not in the specified GNU
C dialect, since by definition the GNU dialects of C include all
features the compiler supports with the given option, and there would be
nothing to warn about.)

@item -pedantic-errors
@opindex pedantic-errors
Give an error whenever the @dfn{base standard} (see @option{-Wpedantic})
requires a diagnostic, in some cases where there is undefined behavior
at compile-time and in some other cases that do not prevent compilation
of programs that are valid according to the standard. This is not
equivalent to @option{-Werror=pedantic}, since there are errors enabled
by this option and not enabled by the latter and vice versa.

@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
enables some language-specific warnings described in @ref{C++ Dialect
Options} and @ref{Objective-C and Objective-C++ Dialect Options}.

@option{-Wall} turns on the following warning flags:

@gccoptlist{-Waddress   @gol
-Warray-bounds=1 @r{(only with} @option{-O2}@r{)}  @gol
-Warray-compare @gol
-Warray-parameter=2 @r{(C and Objective-C only)} @gol
-Wbool-compare  @gol
-Wbool-operation  @gol
-Wc++11-compat  -Wc++14-compat  @gol
-Wcatch-value @r{(C++ and Objective-C++ only)}  @gol
-Wchar-subscripts  @gol
-Wcomment  @gol
-Wduplicate-decl-specifier @r{(C and Objective-C only)} @gol
-Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol
-Wformat   @gol
-Wformat-overflow  @gol
-Wformat-truncation  @gol
-Wint-in-bool-context  @gol
-Wimplicit @r{(C and Objective-C only)} @gol
-Wimplicit-int @r{(C and Objective-C only)} @gol
-Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
-Winit-self @r{(only for C++)} @gol
-Wlogical-not-parentheses @gol
-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
-Wmaybe-uninitialized @gol
-Wmemset-elt-size @gol
-Wmemset-transposed-args @gol
-Wmisleading-indentation @r{(only for C/C++)} @gol
-Wmismatched-dealloc @gol
-Wmismatched-new-delete @r{(only for C/C++)} @gol
-Wmissing-attributes @gol
-Wmissing-braces @r{(only for C/ObjC)} @gol
-Wmultistatement-macros  @gol
-Wnarrowing @r{(only for C++)}  @gol
-Wnonnull  @gol
-Wnonnull-compare  @gol
-Wopenmp-simd @gol
-Wparentheses  @gol
-Wpessimizing-move @r{(only for C++)}  @gol
-Wpointer-sign  @gol
-Wrange-loop-construct @r{(only for C++)}  @gol
-Wreorder   @gol
-Wrestrict   @gol
-Wreturn-type  @gol
-Wsequence-point  @gol
-Wsign-compare @r{(only in C++)}  @gol
-Wsizeof-array-div @gol
-Wsizeof-pointer-div @gol
-Wsizeof-pointer-memaccess @gol
-Wstrict-aliasing  @gol
-Wstrict-overflow=1  @gol
-Wswitch  @gol
-Wtautological-compare  @gol
-Wtrigraphs  @gol
-Wuninitialized  @gol
-Wunknown-pragmas  @gol
-Wunused-function  @gol
-Wunused-label     @gol
-Wunused-value     @gol
-Wunused-variable  @gol
-Wvla-parameter @r{(C and Objective-C only)} @gol
-Wvolatile-register-var  @gol
-Wzero-length-bounds}

Note that some warning flags are not implied by @option{-Wall}.  Some of
them warn about constructions that users generally do not consider
questionable, but which occasionally you might wish to check for;
others warn about constructions that are necessary or hard to avoid in
some cases, and there is no simple way to modify the code to suppress
the warning. Some of them are enabled by @option{-Wextra} but many of
them must be enabled individually.

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

@gccoptlist{-Wclobbered  @gol
-Wcast-function-type  @gol
-Wdeprecated-copy @r{(C++ only)} @gol
-Wempty-body  @gol
-Wenum-conversion @r{(C only)} @gol
-Wignored-qualifiers @gol
-Wimplicit-fallthrough=3 @gol
-Wmissing-field-initializers  @gol
-Wmissing-parameter-type @r{(C only)}  @gol
-Wold-style-declaration @r{(C only)}  @gol
-Woverride-init  @gol
-Wsign-compare @r{(C only)} @gol
-Wstring-compare @gol
-Wredundant-move @r{(only for C++)}  @gol
-Wtype-limits  @gol
-Wuninitialized  @gol
-Wshift-negative-value @r{(in C++03 and in C99 and newer)}  @gol
-Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
-Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}}


The option @option{-Wextra} also prints warning messages for the
following cases:

@itemize @bullet

@item
A pointer is compared against integer zero with @code{<}, @code{<=},
@code{>}, or @code{>=}.

@item
(C++ only) An enumerator and a non-enumerator both appear in a
conditional expression.

@item
(C++ only) Ambiguous virtual bases.

@item
(C++ only) Subscripting an array that has been declared @code{register}.

@item
(C++ only) Taking the address of a variable that has been declared
@code{register}.

@item
(C++ only) A base class is not initialized in the copy constructor
of a derived class.

@end itemize

@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
@opindex Wabi
@opindex Wno-abi

Warn about code affected by ABI changes.  This includes code that may
not be compatible with the vendor-neutral C++ ABI as well as the psABI
for the particular target.

Since G++ now defaults to updating the ABI with each major release,
normally @option{-Wabi} warns only about C++ ABI compatibility
problems if there is a check added later in a release series for an
ABI issue discovered since the initial release.  @option{-Wabi} warns
about more things if an older ABI version is selected (with
@option{-fabi-version=@var{n}}).

@option{-Wabi} can also be used with an explicit version number to
warn about C++ ABI compatibility with a particular @option{-fabi-version}
level, e.g.@: @option{-Wabi=2} to warn about changes relative to
@option{-fabi-version=2}.

If an explicit version number is provided and
@option{-fabi-compat-version} is not specified, the version number
from this option is used for compatibility aliases.  If no explicit
version number is provided with this option, but
@option{-fabi-compat-version} is specified, that version number is
used for C++ ABI warnings.

Although an effort has been made to warn about
all such cases, there are probably some cases that are not warned about,
even though G++ is generating incompatible code.  There may also be
cases where warnings are emitted even though the code that is generated
is compatible.

You should rewrite your code to avoid these warnings if you are
concerned about the fact that code generated by G++ may not be binary
compatible with code generated by other compilers.

Known incompatibilities in @option{-fabi-version=2} (which was the
default from GCC 3.4 to 4.9) include:

@itemize @bullet

@item
A template with a non-type template parameter of reference type was
mangled incorrectly:
@smallexample
extern int N;
template <int &> struct S @{@};
void n (S<N>) @{2@}
@end smallexample

This was fixed in @option{-fabi-version=3}.

@item
SIMD vector types declared using @code{__attribute ((vector_size))} were
mangled in a non-standard way that does not allow for overloading of
functions taking vectors of different sizes.

The mangling was changed in @option{-fabi-version=4}.

@item
@code{__attribute ((const))} and @code{noreturn} were mangled as type
qualifiers, and @code{decltype} of a plain declaration was folded away.

These mangling issues were fixed in @option{-fabi-version=5}.

@item
Scoped enumerators passed as arguments to a variadic function are
promoted like unscoped enumerators, causing @code{va_arg} to complain.
On most targets this does not actually affect the parameter passing
ABI, as there is no way to pass an argument smaller than @code{int}.

Also, the ABI changed the mangling of template argument packs,
@code{const_cast}, @code{static_cast}, prefix increment/decrement, and
a class scope function used as a template argument.

These issues were corrected in @option{-fabi-version=6}.

@item
Lambdas in default argument scope were mangled incorrectly, and the
ABI changed the mangling of @code{nullptr_t}.

These issues were corrected in @option{-fabi-version=7}.

@item
When mangling a function type with function-cv-qualifiers, the
un-qualified function type was incorrectly treated as a substitution
candidate.

This was fixed in @option{-fabi-version=8}, the default for GCC 5.1.

@item
@code{decltype(nullptr)} incorrectly had an alignment of 1, leading to
unaligned accesses.  Note that this did not affect the ABI of a
function with a @code{nullptr_t} parameter, as parameters have a
minimum alignment.

This was fixed in @option{-fabi-version=9}, the default for GCC 5.2.

@item
Target-specific attributes that affect the identity of a type, such as
ia32 calling conventions on a function type (stdcall, regparm, etc.),
did not affect the mangled name, leading to name collisions when
function pointers were used as template arguments.

This was fixed in @option{-fabi-version=10}, the default for GCC 6.1.

@end itemize

This option also enables warnings about psABI-related changes.
The known psABI changes at this point include:

@itemize @bullet

@item
For SysV/x86-64, unions with @code{long double} members are
passed in memory as specified in psABI.  Prior to GCC 4.4, this was not
the case.  For example:

@smallexample
union U @{
  long double ld;
  int i;
@};
@end smallexample

@noindent
@code{union U} is now always passed in memory.

@end itemize

@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.
This warning is enabled by @option{-Wall}.

@item -Wno-coverage-mismatch
@opindex Wno-coverage-mismatch
@opindex Wcoverage-mismatch
Warn if feedback profiles do not match when using the
@option{-fprofile-use} option.
If a source file is changed between compiling with @option{-fprofile-generate}
and with @option{-fprofile-use}, the files with the profile feedback can fail
to match the source file and GCC cannot use the profile feedback
information.  By default, this warning is enabled and is treated as an
error.  @option{-Wno-coverage-mismatch} can be used to disable the
warning or @option{-Wno-error=coverage-mismatch} can be used to
disable the error.  Disabling the error for this warning can result in
poorly optimized code and is useful only in the
case of very minor changes such as bug fixes to an existing code-base.
Completely disabling the warning is not recommended.

@item -Wno-coverage-invalid-line-number
@opindex Wno-coverage-invalid-line-number
@opindex Wcoverage-invalid-line-number
Warn in case a function ends earlier than it begins due
to an invalid linenum macros.  The warning is emitted only
with @option{--coverage} enabled.

By default, this warning is enabled and is treated as an
error.  @option{-Wno-coverage-invalid-line-number} can be used to disable the
warning or @option{-Wno-error=coverage-invalid-line-number} can be used to
disable the error.

@item -Wno-cpp @r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
@opindex Wno-cpp
@opindex Wcpp
Suppress warning messages emitted by @code{#warning} directives.

@item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wdouble-promotion
@opindex Wno-double-promotion
Give a warning when a value of type @code{float} is implicitly
promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
floating-point unit implement @code{float} in hardware, but emulate
@code{double} in software.  On such a machine, doing computations
using @code{double} values is much more expensive because of the
overhead required for software emulation.

It is easy to accidentally do computations with @code{double} because
floating-point literals are implicitly of type @code{double}.  For
example, in:
@smallexample
@group
float area(float radius)
@{
   return 3.14159 * radius * radius;
@}
@end group
@end smallexample
the compiler performs the entire computation with @code{double}
because the floating-point literal is a @code{double}.

@item -Wduplicate-decl-specifier @r{(C and Objective-C only)}
@opindex Wduplicate-decl-specifier
@opindex Wno-duplicate-decl-specifier
Warn if a declaration has duplicate @code{const}, @code{volatile},
@code{restrict} or @code{_Atomic} specifier.  This warning is enabled by
@option{-Wall}.

@item -Wformat
@itemx -Wformat=@var{n}
@opindex Wformat
@opindex Wno-format
@opindex ffreestanding
@opindex fno-builtin
@opindex 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, 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 (or other target-specific families).
Which functions are checked without format attributes having been
specified depends on the standard version selected, and such checks of
functions without the attribute specified are disabled by
@option{-ffreestanding} or @option{-fno-builtin}.

The formats are checked against the format features supported by GNU
libc version 2.2.  These include all ISO C90 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 @option{-Wpedantic} is used
with @option{-Wformat}, warnings are 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}.

@table @gcctabopt
@item -Wformat=1
@itemx -Wformat
@opindex Wformat
@opindex Wformat=1
Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and
@option{-Wno-format} is equivalent to @option{-Wformat=0}.  Since
@option{-Wformat} also checks for null format arguments for several
functions, @option{-Wformat} also implies @option{-Wnonnull}.  Some
aspects of this level of format checking can be disabled by the
options: @option{-Wno-format-contains-nul},
@option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}.
@option{-Wformat} is enabled by @option{-Wall}.

@item -Wformat=2
@opindex Wformat=2
Enable @option{-Wformat} plus additional format checks.  Currently
equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security
-Wformat-y2k}.
@end table

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

Where the unused arguments lie between used arguments that are
specified with @samp{$} operand number specifications, normally
warnings are still given, since the implementation could not know what
type to pass to @code{va_arg} to skip the unused arguments.  However,
in the case of @code{scanf} formats, this option suppresses the
warning if the unused arguments are all pointers, since the Single
Unix Specification says that such unused arguments are allowed.

@item -Wformat-overflow
@itemx -Wformat-overflow=@var{level}
@opindex Wformat-overflow
@opindex Wno-format-overflow
Warn about calls to formatted input/output functions such as @code{sprintf}
and @code{vsprintf} that might overflow the destination buffer.  When the
exact number of bytes written by a format directive cannot be determined
at compile-time it is estimated based on heuristics that depend on the
@var{level} argument and on optimization.  While enabling optimization
will in most cases improve the accuracy of the warning, it may also
result in false positives.

@table @gcctabopt
@item -Wformat-overflow
@itemx -Wformat-overflow=1
@opindex Wformat-overflow
@opindex Wno-format-overflow
Level @var{1} of @option{-Wformat-overflow} enabled by @option{-Wformat}
employs a conservative approach that warns only about calls that most
likely overflow the buffer.  At this level, numeric arguments to format
directives with unknown values are assumed to have the value of one, and
strings of unknown length to be empty.  Numeric arguments that are known
to be bounded to a subrange of their type, or string arguments whose output
is bounded either by their directive's precision or by a finite set of
string literals, are assumed to take on the value within the range that
results in the most bytes on output.  For example, the call to @code{sprintf}
below is diagnosed because even with both @var{a} and @var{b} equal to zero,
the terminating NUL character (@code{'\0'}) appended by the function
to the destination buffer will be written past its end.  Increasing
the size of the buffer by a single byte is sufficient to avoid the
warning, though it may not be sufficient to avoid the overflow.

@smallexample
void f (int a, int b)
@{
  char buf [13];
  sprintf (buf, "a = %i, b = %i\n", a, b);
@}
@end smallexample

@item -Wformat-overflow=2
Level @var{2} warns also about calls that might overflow the destination
buffer given an argument of sufficient length or magnitude.  At level
@var{2}, unknown numeric arguments are assumed to have the minimum
representable value for signed types with a precision greater than 1, and
the maximum representable value otherwise.  Unknown string arguments whose
length cannot be assumed to be bounded either by the directive's precision,
or by a finite set of string literals they may evaluate to, or the character
array they may point to, are assumed to be 1 character long.

At level @var{2}, the call in the example above is again diagnosed, but
this time because with @var{a} equal to a 32-bit @code{INT_MIN} the first
@code{%i} directive will write some of its digits beyond the end of
the destination buffer.  To make the call safe regardless of the values
of the two variables, the size of the destination buffer must be increased
to at least 34 bytes.  GCC includes the minimum size of the buffer in
an informational note following the warning.

An alternative to increasing the size of the destination buffer is to
constrain the range of formatted values.  The maximum length of string
arguments can be bounded by specifying the precision in the format
directive.  When numeric arguments of format directives can be assumed
to be bounded by less than the precision of their type, choosing
an appropriate length modifier to the format specifier will reduce
the required buffer size.  For example, if @var{a} and @var{b} in the
example above can be assumed to be within the precision of
the @code{short int} type then using either the @code{%hi} format
directive or casting the argument to @code{short} reduces the maximum
required size of the buffer to 24 bytes.

@smallexample
void f (int a, int b)
@{
  char buf [23];
  sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
@}
@end smallexample
@end table

@item -Wno-format-zero-length
@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
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 @option{-Wformat-nonliteral} warns about, but
in future warnings may be added to @option{-Wformat-security} that are not
included in @option{-Wformat-nonliteral}.)

@item -Wformat-signedness
@opindex Wformat-signedness
@opindex Wno-format-signedness
If @option{-Wformat} is specified, also warn if the format string
requires an unsigned argument and the argument is signed and vice versa.

@item -Wformat-truncation
@itemx -Wformat-truncation=@var{level}
@opindex Wformat-truncation
@opindex Wno-format-truncation
Warn about calls to formatted input/output functions such as @code{snprintf}
and @code{vsnprintf} that might result in output truncation.  When the exact
number of bytes written by a format directive cannot be determined at
compile-time it is estimated based on heuristics that depend on
the @var{level} argument and on optimization.  While enabling optimization
will in most cases improve the accuracy of the warning, it may also result
in false positives.  Except as noted otherwise, the option uses the same
logic @option{-Wformat-overflow}.

@table @gcctabopt
@item -Wformat-truncation
@itemx -Wformat-truncation=1
@opindex Wformat-truncation
@opindex Wno-format-truncation
Level @var{1} of @option{-Wformat-truncation} enabled by @option{-Wformat}
employs a conservative approach that warns only about calls to bounded
functions whose return value is unused and that will most likely result
in output truncation.

@item -Wformat-truncation=2
Level @var{2} warns also about calls to bounded functions whose return
value is used and that might result in truncation given an argument of
sufficient length or magnitude.
@end table

@item -Wformat-y2k
@opindex Wformat-y2k
@opindex Wno-format-y2k
If @option{-Wformat} is specified, also warn about @code{strftime}
formats that may yield only a two-digit year.

@item -Wnonnull
@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.

@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
can be disabled with the @option{-Wno-nonnull} option.

@item -Wnonnull-compare
@opindex Wnonnull-compare
@opindex Wno-nonnull-compare
Warn when comparing an argument marked with the @code{nonnull}
function attribute against null inside the function.

@option{-Wnonnull-compare} is included in @option{-Wall}.  It
can be disabled with the @option{-Wno-nonnull-compare} option.

@item -Wnull-dereference
@opindex Wnull-dereference
@opindex Wno-null-dereference
Warn if the compiler detects paths that trigger erroneous or
undefined behavior due to dereferencing a null pointer.  This option
is only active when @option{-fdelete-null-pointer-checks} is active,
which is enabled by optimizations in most targets.  The precision of
the warnings depends on the optimization options used.

@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Winit-self
@opindex Wno-init-self
Warn about uninitialized variables that are initialized with themselves.
Note this option can only be used with the @option{-Wuninitialized} option.

For example, GCC warns about @code{i} being uninitialized in the
following snippet only when @option{-Winit-self} has been specified:
@smallexample
@group
int f()
@{
  int i = i;
  return i;
@}
@end group
@end smallexample

This warning is enabled by @option{-Wall} in C++.

@item -Wno-implicit-int @r{(C and Objective-C only)}
@opindex Wimplicit-int
@opindex Wno-implicit-int
This option controls warnings when a declaration does not specify a type.
This warning is enabled by default in C99 and later dialects of C,
and also by @option{-Wall}.

@item -Wno-implicit-function-declaration @r{(C and Objective-C only)}
@opindex Wimplicit-function-declaration
@opindex Wno-implicit-function-declaration
This option controls warnings when a function is used before being declared.
This warning is enabled by default in C99 and later dialects of C,
and also by @option{-Wall}.
The warning is made into an error by @option{-pedantic-errors}.

@item -Wimplicit @r{(C and Objective-C only)}
@opindex Wimplicit
@opindex Wno-implicit
Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
This warning is enabled by @option{-Wall}.

@item -Wimplicit-fallthrough
@opindex Wimplicit-fallthrough
@opindex Wno-implicit-fallthrough
@option{-Wimplicit-fallthrough} is the same as @option{-Wimplicit-fallthrough=3}
and @option{-Wno-implicit-fallthrough} is the same as
@option{-Wimplicit-fallthrough=0}.

@item -Wimplicit-fallthrough=@var{n}
@opindex Wimplicit-fallthrough=
Warn when a switch case falls through.  For example:

@smallexample
@group
switch (cond)
  @{
  case 1:
    a = 1;
    break;
  case 2:
    a = 2;
  case 3:
    a = 3;
    break;
  @}
@end group
@end smallexample

This warning does not warn when the last statement of a case cannot
fall through, e.g. when there is a return statement or a call to function
declared with the noreturn attribute.  @option{-Wimplicit-fallthrough=}
also takes into account control flow statements, such as ifs, and only
warns when appropriate.  E.g.@:

@smallexample
@group
switch (cond)
  @{
  case 1:
    if (i > 3) @{
      bar (5);
      break;
    @} else if (i < 1) @{
      bar (0);
    @} else
      return;
  default:
    @dots{}
  @}
@end group
@end smallexample

Since there are occasions where a switch case fall through is desirable,
GCC provides an attribute, @code{__attribute__ ((fallthrough))}, that is
to be used along with a null statement to suppress this warning that
would normally occur:

@smallexample
@group
switch (cond)
  @{
  case 1:
    bar (0);
    __attribute__ ((fallthrough));
  default:
    @dots{}
  @}
@end group
@end smallexample

C++17 provides a standard way to suppress the @option{-Wimplicit-fallthrough}
warning using @code{[[fallthrough]];} instead of the GNU attribute.  In C++11
or C++14 users can use @code{[[gnu::fallthrough]];}, which is a GNU extension.
Instead of these attributes, it is also possible to add a fallthrough comment
to silence the warning.  The whole body of the C or C++ style comment should
match the given regular expressions listed below.  The option argument @var{n}
specifies what kind of comments are accepted:

@itemize @bullet

@item @option{-Wimplicit-fallthrough=0} disables the warning altogether.

@item @option{-Wimplicit-fallthrough=1} matches @code{.*} regular
expression, any comment is used as fallthrough comment.

@item @option{-Wimplicit-fallthrough=2} case insensitively matches
@code{.*falls?[ \t-]*thr(ough|u).*} regular expression.

@item @option{-Wimplicit-fallthrough=3} case sensitively matches one of the
following regular expressions:

@itemize @bullet

@item @code{-fallthrough}

@item @code{@@fallthrough@@}

@item @code{lint -fallthrough[ \t]*}

@item @code{[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?@*FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?}

@item @code{[ \t.!]*(Else,? |Intentional(ly)? )?@*Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?}

@item @code{[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?@*fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?}

@end itemize

@item @option{-Wimplicit-fallthrough=4} case sensitively matches one of the
following regular expressions:

@itemize @bullet

@item @code{-fallthrough}

@item @code{@@fallthrough@@}

@item @code{lint -fallthrough[ \t]*}

@item @code{[ \t]*FALLTHR(OUGH|U)[ \t]*}

@end itemize

@item @option{-Wimplicit-fallthrough=5} doesn't recognize any comments as
fallthrough comments, only attributes disable the warning.

@end itemize

The comment needs to be followed after optional whitespace and other comments
by @code{case} or @code{default} keywords or by a user label that precedes some
@code{case} or @code{default} label.

@smallexample
@group
switch (cond)
  @{
  case 1:
    bar (0);
    /* FALLTHRU */
  default:
    @dots{}
  @}
@end group
@end smallexample

The @option{-Wimplicit-fallthrough=3} warning is enabled by @option{-Wextra}.

@item -Wno-if-not-aligned @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wif-not-aligned
@opindex Wno-if-not-aligned
Control if warnings triggered by the @code{warn_if_not_aligned} attribute
should be issued.  These warnings are enabled by default.

@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
such as @code{const}.  For ISO C such a type qualifier has no effect,
since the value returned by a function is not an lvalue.
For C++, the warning is only emitted for scalar types or @code{void}.
ISO C prohibits qualified @code{void} return types on function
definitions, so such return types always receive a warning
even without this option.

This warning is also enabled by @option{-Wextra}.

@item -Wno-ignored-attributes @r{(C and C++ only)}
@opindex Wignored-attributes
@opindex Wno-ignored-attributes
This option controls warnings when an attribute is ignored.
This is different from the
@option{-Wattributes} option in that it warns whenever the compiler decides
to drop an attribute, not that the attribute is either unknown, used in a
wrong place, etc.  This warning is enabled by default.

@item -Wmain
@opindex Wmain
@opindex Wno-main
Warn if the type of @code{main} is suspicious.  @code{main} should be
a function with external linkage, returning int, taking either zero
arguments, two, or three arguments of appropriate types.  This warning
is enabled by default in C++ and is enabled by either @option{-Wall}
or @option{-Wpedantic}.

@item -Wmisleading-indentation @r{(C and C++ only)}
@opindex Wmisleading-indentation
@opindex Wno-misleading-indentation
Warn when the indentation of the code does not reflect the block structure.
Specifically, a warning is issued for @code{if}, @code{else}, @code{while}, and
@code{for} clauses with a guarded statement that does not use braces,
followed by an unguarded statement with the same indentation.

In the following example, the call to ``bar'' is misleadingly indented as
if it were guarded by the ``if'' conditional.

@smallexample
  if (some_condition ())
    foo ();
    bar ();  /* Gotcha: this is not guarded by the "if".  */
@end smallexample

In the case of mixed tabs and spaces, the warning uses the
@option{-ftabstop=} option to determine if the statements line up
(defaulting to 8).

The warning is not issued for code involving multiline preprocessor logic
such as the following example.

@smallexample
  if (flagA)
    foo (0);
#if SOME_CONDITION_THAT_DOES_NOT_HOLD
  if (flagB)
#endif
    foo (1);
@end smallexample

The warning is not issued after a @code{#line} directive, since this
typically indicates autogenerated code, and no assumptions can be made
about the layout of the file that the directive references.

This warning is enabled by @option{-Wall} in C and C++.

@item -Wmissing-attributes
@opindex Wmissing-attributes
@opindex Wno-missing-attributes
Warn when a declaration of a function is missing one or more attributes
that a related function is declared with and whose absence may adversely
affect the correctness or efficiency of generated code.  For example,
the warning is issued for declarations of aliases that use attributes
to specify less restrictive requirements than those of their targets.
This typically represents a potential optimization opportunity.
By contrast, the @option{-Wattribute-alias=2} option controls warnings
issued when the alias is more restrictive than the target, which could
lead to incorrect code generation.
Attributes considered include @code{alloc_align}, @code{alloc_size},
@code{cold}, @code{const}, @code{hot}, @code{leaf}, @code{malloc},
@code{nonnull}, @code{noreturn}, @code{nothrow}, @code{pure},
@code{returns_nonnull}, and @code{returns_twice}.

In C++, the warning is issued when an explicit specialization of a primary
template declared with attribute @code{alloc_align}, @code{alloc_size},
@code{assume_aligned}, @code{format}, @code{format_arg}, @code{malloc},
or @code{nonnull} is declared without it.  Attributes @code{deprecated},
@code{error}, and @code{warning} suppress the warning.
(@pxref{Function Attributes}).

You can use the @code{copy} attribute to apply the same
set of attributes to a declaration as that on another declaration without
explicitly enumerating the attributes. This attribute can be applied
to declarations of functions (@pxref{Common Function Attributes}),
variables (@pxref{Common Variable Attributes}), or types
(@pxref{Common Type Attributes}).

@option{-Wmissing-attributes} is enabled by @option{-Wall}.

For example, since the declaration of the primary function template
below makes use of both attribute @code{malloc} and @code{alloc_size}
the declaration of the explicit specialization of the template is
diagnosed because it is missing one of the attributes.

@smallexample
template <class T>
T* __attribute__ ((malloc, alloc_size (1)))
allocate (size_t);

template <>
void* __attribute__ ((malloc))   // missing alloc_size
allocate<void> (size_t);
@end smallexample

@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 @code{a} is not fully
bracketed, but that for @code{b} is fully bracketed.

@smallexample
int a[2][2] = @{ 0, 1, 2, 3 @};
int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wmissing-include-dirs @r{(C, C++, Objective-C, Objective-C++ and Fortran only)}
@opindex Wmissing-include-dirs
@opindex Wno-missing-include-dirs
Warn if a user-supplied include directory does not exist. This opions is disabled
by default for C, C++, Objective-C and Objective-C++. For Fortran, it is partially
enabled by default by warning for -I and -J, only.

@item -Wno-missing-profile
@opindex Wmissing-profile
@opindex Wno-missing-profile
This option controls warnings if feedback profiles are missing when using the
@option{-fprofile-use} option.
This option diagnoses those cases where a new function or a new file is added
between compiling with @option{-fprofile-generate} and with
@option{-fprofile-use}, without regenerating the profiles.
In these cases, the profile feedback data files do not contain any
profile feedback information for
the newly added function or file respectively.  Also, in the case when profile
count data (.gcda) files are removed, GCC cannot use any profile feedback
information.  In all these cases, warnings are issued to inform you that a
profile generation step is due.
Ignoring the warning can result in poorly optimized code.
@option{-Wno-missing-profile} can be used to
disable the warning, but this is not recommended and should be done only
when non-existent profile data is justified.

@item -Wmismatched-dealloc
@opindex Wmismatched-dealloc
@opindex Wno-mismatched-dealloc

Warn for calls to deallocation functions with pointer arguments returned
from from allocations functions for which the former isn't a suitable
deallocator.  A pair of functions can be associated as matching allocators
and deallocators by use of attribute @code{malloc}.  Unless disabled by
the @option{-fno-builtin} option the standard functions @code{calloc},
@code{malloc}, @code{realloc}, and @code{free}, as well as the corresponding
forms of C++ @code{operator new} and @code{operator delete} are implicitly
associated as matching allocators and deallocators.  In the following
example @code{mydealloc} is the deallocator for pointers returned from
@code{myalloc}.

@smallexample
void mydealloc (void*);

__attribute__ ((malloc (mydealloc, 1))) void*
myalloc (size_t);

void f (void)
@{
  void *p = myalloc (32);
  // @dots{}use p@dots{}
  free (p);   // warning: not a matching deallocator for myalloc
  mydealloc (p);   // ok
@}
@end smallexample

In C++, the related option @option{-Wmismatched-new-delete} diagnoses
mismatches involving either @code{operator new} or @code{operator delete}.

Option @option{-Wmismatched-dealloc} is included in @option{-Wall}.

@item -Wmultistatement-macros
@opindex Wmultistatement-macros
@opindex Wno-multistatement-macros
Warn about unsafe multiple statement macros that appear to be guarded
by a clause such as @code{if}, @code{else}, @code{for}, @code{switch}, or
@code{while}, in which only the first statement is actually guarded after
the macro is expanded.

For example:

@smallexample
#define DOIT x++; y++
if (c)
  DOIT;
@end smallexample

will increment @code{y} unconditionally, not just when @code{c} holds.
The can usually be fixed by wrapping the macro in a do-while loop:
@smallexample
#define DOIT do @{ x++; y++; @} while (0)
if (c)
  DOIT;
@end smallexample

This warning is enabled by @option{-Wall} in C and C++.

@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
often get confused about.

Also warn if a comparison like @code{x<=y<=z} appears; this is
equivalent to @code{(x<=y ? 1 : 0) <= z}, which is a different
interpretation from that of ordinary mathematical notation.

Also warn for dangerous uses of the GNU extension to
@code{?:} with omitted middle operand. When the condition
in the @code{?}: operator is a boolean expression, the omitted value is
always 1.  Often programmers expect it to be a value computed
inside the conditional expression instead.

For C++ this also warns for some cases of unnecessary parentheses in
declarations, which can indicate an attempt at a function call instead
of a declaration:
@smallexample
@{
  // Declares a local variable called mymutex.
  std::unique_lock<std::mutex> (mymutex);
  // User meant std::unique_lock<std::mutex> lock (mymutex);
@}
@end smallexample

This warning is enabled by @option{-Wall}.

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

The C and C++ standards define the order in which expressions in a C/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 and C++ standards specify 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 C++17 standard will define the order of evaluation of operands in
more cases: in particular it requires that the right-hand side of an
assignment be evaluated before the left-hand side, so the above
examples are no longer undefined.  But this option will still warn
about them, to help people avoid writing code that is undefined in C
and earlier revisions of C++.

The standard is worded confusingly, therefore there is some debate
over the precise meaning of the sequence point rules in subtle cases.
Links to discussions of the problem, including proposed formal
definitions, may be found on the GCC readings page, at
@uref{http://gcc.gnu.org/@/readings.html}.

This warning is enabled by @option{-Wall} for C and C++.

@item -Wno-return-local-addr
@opindex Wno-return-local-addr
@opindex Wreturn-local-addr
Do not warn about returning a pointer (or in C++, a reference) to a
variable that goes out of scope after the function returns.

@item -Wreturn-type
@opindex Wreturn-type
@opindex Wno-return-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}
(falling off the end of the function body is considered returning
without a value).

For C only, warn about a @code{return} statement with an expression in a
function whose return type is @code{void}, unless the expression type is
also @code{void}.  As a GNU extension, the latter case is accepted
without a warning unless @option{-Wpedantic} is used.  Attempting
to use the return value of a non-@code{void} function other than @code{main}
that flows off the end by reaching the closing curly brace that terminates
the function is undefined.

Unlike in C, in C++, flowing off the end of a non-@code{void} function other
than @code{main} results in undefined behavior even when the value of
the function is not used.

This warning is enabled by default in C++ and by @option{-Wall} otherwise.

@item -Wno-shift-count-negative
@opindex Wshift-count-negative
@opindex Wno-shift-count-negative
Controls warnings if a shift count is negative.
This warning is enabled by default.

@item -Wno-shift-count-overflow
@opindex Wshift-count-overflow
@opindex Wno-shift-count-overflow
Controls warnings if a shift count is greater than or equal to the bit width
of the type.  This warning is enabled by default.

@item -Wshift-negative-value
@opindex Wshift-negative-value
@opindex Wno-shift-negative-value
Warn if left shifting a negative value.  This warning is enabled by
@option{-Wextra} in C99 and C++11 modes (and newer).

@item -Wno-shift-overflow
@itemx -Wshift-overflow=@var{n}
@opindex Wshift-overflow
@opindex Wno-shift-overflow
These options control warnings about left shift overflows.

@table @gcctabopt
@item -Wshift-overflow=1
This is the warning level of @option{-Wshift-overflow} and is enabled
by default in C99 and C++11 modes (and newer).  This warning level does
not warn about left-shifting 1 into the sign bit.  (However, in C, such
an overflow is still rejected in contexts where an integer constant expression
is required.)  No warning is emitted in C++20 mode (and newer), as signed left
shifts always wrap.

@item -Wshift-overflow=2
This warning level also warns about left-shifting 1 into the sign bit,
unless C++14 mode (or newer) is active.
@end table

@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
warning.)  @code{case} labels outside the enumeration range also
provoke warnings when this option is used (even if there is a
@code{default} label).
This warning is enabled by @option{-Wall}.

@item -Wswitch-default
@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
provoke warnings when this option is used.  The only difference
between @option{-Wswitch} and this option is that this option gives a
warning about an omitted enumeration code even if there is a
@code{default} label.

@item -Wno-switch-bool
@opindex Wswitch-bool
@opindex Wno-switch-bool
Do not warn when a @code{switch} statement has an index of boolean type
and the case values are outside the range of a boolean type.
It is possible to suppress this warning by casting the controlling
expression to a type other than @code{bool}.  For example:
@smallexample
@group
switch ((int) (a == 4))
  @{
  @dots{}
  @}
@end group
@end smallexample
This warning is enabled by default for C and C++ programs.

@item -Wno-switch-outside-range
@opindex Wswitch-outside-range
@opindex Wno-switch-outside-range
This option controls warnings when a @code{switch} case has a value
that is outside of its
respective type range.  This warning is enabled by default for
C and C++ programs.

@item -Wno-switch-unreachable
@opindex Wswitch-unreachable
@opindex Wno-switch-unreachable
Do not warn when a @code{switch} statement contains statements between the
controlling expression and the first case label, which will never be
executed.  For example:
@smallexample
@group
switch (cond)
  @{
   i = 15;
  @dots{}
   case 5:
  @dots{}
  @}
@end group
@end smallexample
@option{-Wswitch-unreachable} does not warn if the statement between the
controlling expression and the first case label is just a declaration:
@smallexample
@group
switch (cond)
  @{
   int i;
  @dots{}
   case 5:
   i = 5;
  @dots{}
  @}
@end group
@end smallexample
This warning is enabled by default for C and C++ programs.

@item -Wsync-nand @r{(C and C++ only)}
@opindex Wsync-nand
@opindex Wno-sync-nand
Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
built-in functions are used.  These functions changed semantics in GCC 4.4.

@item -Wunused-but-set-parameter
@opindex Wunused-but-set-parameter
@opindex Wno-unused-but-set-parameter
Warn whenever a function parameter is assigned to, but otherwise unused
(aside from its declaration).

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

This warning is also enabled by @option{-Wunused} together with
@option{-Wextra}.

@item -Wunused-but-set-variable
@opindex Wunused-but-set-variable
@opindex Wno-unused-but-set-variable
Warn whenever a local variable is assigned to, but otherwise unused
(aside from its declaration).
This warning is enabled by @option{-Wall}.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

This warning is also enabled by @option{-Wunused}, which 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}.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
@opindex Wunused-local-typedefs
@opindex Wno-unused-local-typedefs
Warn when a typedef locally defined in a function is 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 @code{unused} attribute
(@pxref{Variable Attributes}).

@item -Wno-unused-result
@opindex Wunused-result
@opindex Wno-unused-result
Do not warn if a caller of a function marked with attribute
@code{warn_unused_result} (@pxref{Function Attributes}) does not use
its return value. The default is @option{-Wunused-result}.

@item -Wunused-variable
@opindex Wunused-variable
@opindex Wno-unused-variable
Warn whenever a local or static variable is unused aside from its
declaration. This option implies @option{-Wunused-const-variable=1} for C,
but not for C++. This warning is enabled by @option{-Wall}.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@item -Wunused-const-variable
@itemx -Wunused-const-variable=@var{n}
@opindex Wunused-const-variable
@opindex Wno-unused-const-variable
Warn whenever a constant static variable is unused aside from its declaration.
@option{-Wunused-const-variable=1} is enabled by @option{-Wunused-variable}
for C, but not for C++. In C this declares variable storage, but in C++ this
is not an error since const variables take the place of @code{#define}s.

To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).

@table @gcctabopt
@item -Wunused-const-variable=1
This is the warning level that is enabled by @option{-Wunused-variable} for
C.  It warns only about unused static const variables defined in the main
compilation unit, but not about static const variables declared in any
header included.

@item -Wunused-const-variable=2
This warning level also warns for unused constant static variables in
headers (excluding system headers).  This is the warning level of
@option{-Wunused-const-variable} and must be explicitly requested since
in C++ this isn't an error and in C it might be harder to clean up all
headers included.
@end table

@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
@code{void}. This includes an expression-statement or the left-hand
side of a comma expression that contains no side effects. For example,
an expression such as @code{x[i,j]} causes a warning, while
@code{x[(void)i,j]} does not.

This warning is enabled by @option{-Wall}.

@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
either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
@option{-Wunused}), or separately specify @option{-Wunused-parameter}.

@item -Wuninitialized
@opindex Wuninitialized
@opindex Wno-uninitialized
Warn if an object with automatic or allocated storage duration is used
without having been initialized.  In C++, also warn if a non-static
reference or non-static @code{const} member appears in a class without
constructors.

In addition, passing a pointer (or in C++, a reference) to an uninitialized
object to a @code{const}-qualified argument of a built-in function known to
read the object is also diagnosed by this warning.
(@option{-Wmaybe-uninitialized} is issued for ordinary functions.)

If you want to warn about code that uses the uninitialized value of the
variable in its own initializer, use the @option{-Winit-self} option.

These warnings occur for individual uninitialized elements of
structure, union or array variables as well as for variables that are
uninitialized as a whole.  They do not occur for variables or elements
declared @code{volatile}.  Because these warnings depend on
optimization, the exact variables or elements for which there are
warnings depend on the precise optimization options and version of GCC
used.

Note that there may be no warning about a variable that is used only
to compute a value that itself is never used, because such
computations may be deleted by data flow analysis before the warnings
are printed.

@item -Wno-invalid-memory-model
@opindex Winvalid-memory-model
@opindex Wno-invalid-memory-model
This option controls warnings
for invocations of @ref{__atomic Builtins}, @ref{__sync Builtins},
and the C11 atomic generic functions with a memory consistency argument
that is either invalid for the operation or outside the range of values
of the @code{memory_order} enumeration.  For example, since the
@code{__atomic_store} and @code{__atomic_store_n} built-ins are only
defined for the relaxed, release, and sequentially consistent memory
orders the following code is diagnosed:

@smallexample
void store (int *i)
@{
  __atomic_store_n (i, 0, memory_order_consume);
@}
@end smallexample

@option{-Winvalid-memory-model} is enabled by default.

@item -Wmaybe-uninitialized
@opindex Wmaybe-uninitialized
@opindex Wno-maybe-uninitialized
For an object with automatic or allocated storage duration, if there exists
a path from the function entry to a use of the object that is initialized,
but there exist some other paths for which the object is not initialized,
the compiler emits a warning if it cannot prove the uninitialized paths
are not executed at run time.

In addition, passing a pointer (or in C++, a reference) to an uninitialized
object to a @code{const}-qualified function argument is also diagnosed by
this warning.  (@option{-Wuninitialized} is issued for built-in functions
known to read the object.)  Annotating the function with attribute
@code{access (none)} indicates that the argument isn't used to access
the object and avoids the warning (@pxref{Common Function Attributes}).

These warnings are only possible in optimizing compilation, because otherwise
GCC does not keep track of the state of variables.

These warnings are made optional because GCC may not be able to determine when
the code is correct in spite of appearing to have an error.  Here is one
example of how this can happen:

@smallexample
@group
@{
  int x;
  switch (y)
    @{
    case 1: x = 1;
      break;
    case 2: x = 4;
      break;
    case 3: x = 5;
    @}
  foo (x);
@}
@end group
@end smallexample

@noindent
If the value of @code{y} is always 1, 2 or 3, then @code{x} is
always initialized, but GCC doesn't know this. To suppress the
warning, you need to provide a default case with assert(0) or
similar code.

@cindex @code{longjmp} warnings
This option also warns when a non-volatile automatic variable might be
changed by a call to @code{longjmp}.
The compiler sees only the calls to @code{setjmp}.  It cannot know
where @code{longjmp} will be called; in fact, a signal handler could
call it at any point in the code.  As a result, you may get a warning
even when there is in fact no problem because @code{longjmp} cannot
in fact be called at the place that would cause a problem.

Some spurious warnings can be avoided if you declare all the functions
you use that never return as @code{noreturn}.  @xref{Function
Attributes}.

This warning is enabled by @option{-Wall} or @option{-Wextra}.

@item -Wunknown-pragmas
@opindex Wunknown-pragmas
@opindex Wno-unknown-pragmas
@cindex warning for unknown pragmas
@cindex unknown pragmas, warning
@cindex pragmas, warning of unknown
Warn when a @code{#pragma} directive is encountered that is not understood by 
GCC@.  If this command-line option is used, warnings are even issued
for unknown pragmas in system header files.  This is not the case if
the warnings are only enabled by the @option{-Wall} command-line option.

@item -Wno-pragmas
@opindex Wno-pragmas
@opindex Wpragmas
Do not warn about misuses of pragmas, such as incorrect parameters,
invalid syntax, or conflicts between pragmas.  See also
@option{-Wunknown-pragmas}.

@item -Wno-prio-ctor-dtor
@opindex Wno-prio-ctor-dtor
@opindex Wprio-ctor-dtor
Do not warn if a priority from 0 to 100 is used for constructor or destructor.
The use of constructor and destructor attributes allow you to assign a
priority to the constructor/destructor to control its order of execution
before @code{main} is called or after it returns.  The priority values must be
greater than 100 as the compiler reserves priority values between 0--100 for
the implementation.

@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 that might break the strict aliasing rules that the
compiler is using for optimization.  The warning does not catch all
cases, but does attempt to catch the more common pitfalls.  It is
included in @option{-Wall}.
It is equivalent to @option{-Wstrict-aliasing=3}

@item -Wstrict-aliasing=n
@opindex Wstrict-aliasing=n
This option is only active when @option{-fstrict-aliasing} is active.
It warns about code that might break the strict aliasing rules that the
compiler is using for optimization.
Higher levels correspond to higher accuracy (fewer false positives).
Higher levels also correspond to more effort, similar to the way @option{-O} 
works.
@option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.

Level 1: Most aggressive, quick, least accurate.
Possibly useful when higher levels
do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
false negatives.  However, it has many false positives.
Warns for all pointer conversions between possibly incompatible types,
even if never dereferenced.  Runs in the front end only.

Level 2: Aggressive, quick, not too precise.
May still have many false positives (not as many as level 1 though),
and few false negatives (but possibly more than level 1).
Unlike level 1, it only warns when an address is taken.  Warns about
incomplete types.  Runs in the front end only.

Level 3 (default for @option{-Wstrict-aliasing}):
Should have very few false positives and few false
negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
Takes care of the common pun+dereference pattern in the front end:
@code{*(int*)&some_float}.
If optimization is enabled, it also runs in the back end, where it deals
with multiple statement cases using flow-sensitive points-to information.
Only warns when the converted pointer is dereferenced.
Does not warn about incomplete types.

@item -Wstrict-overflow
@itemx -Wstrict-overflow=@var{n}
@opindex Wstrict-overflow
@opindex Wno-strict-overflow
This option is only active when signed overflow is undefined.
It warns about cases where the compiler optimizes based on the
assumption that signed overflow does not occur.  Note that it does not
warn about all cases where the code might overflow: it only warns
about cases where the compiler implements some optimization.  Thus
this warning depends on the optimization level.

An optimization that assumes that signed overflow does not occur is
perfectly safe if the values of the variables involved are such that
overflow never does, in fact, occur.  Therefore this warning can
easily give a false positive: a warning about code that is not
actually a problem.  To help focus on important issues, several
warning levels are defined.  No warnings are issued for the use of
undefined signed overflow when estimating how many iterations a loop
requires, in particular when determining whether a loop will be
executed at all.

@table @gcctabopt
@item -Wstrict-overflow=1
Warn about cases that are both questionable and easy to avoid.  For
example the compiler simplifies
@code{x + 1 > x} to @code{1}.  This level of
@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
are not, and must be explicitly requested.

@item -Wstrict-overflow=2
Also warn about other cases where a comparison is simplified to a
constant.  For example: @code{abs (x) >= 0}.  This can only be
simplified when signed integer overflow is undefined, because
@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
zero.  @option{-Wstrict-overflow} (with no level) is the same as
@option{-Wstrict-overflow=2}.

@item -Wstrict-overflow=3
Also warn about other cases where a comparison is simplified.  For
example: @code{x + 1 > 1} is simplified to @code{x > 0}.

@item -Wstrict-overflow=4
Also warn about other simplifications not covered by the above cases.
For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.

@item -Wstrict-overflow=5
Also warn about cases where the compiler reduces the magnitude of a
constant involved in a comparison.  For example: @code{x + 2 > y} is
simplified to @code{x + 1 >= y}.  This is reported only at the
highest warning level because this simplification applies to many
comparisons, so this warning level gives a very large number of
false positives.
@end table

@item -Wstring-compare
@opindex Wstring-compare
@opindex Wno-string-compare
Warn for calls to @code{strcmp} and @code{strncmp} whose result is
determined to be either zero or non-zero in tests for such equality
owing to the length of one argument being greater than the size of
the array the other argument is stored in (or the bound in the case
of @code{strncmp}).  Such calls could be mistakes.  For example,
the call to @code{strcmp} below is diagnosed because its result is
necessarily non-zero irrespective of the contents of the array @code{a}.

@smallexample
extern char a[4];
void f (char *d)
@{
  strcpy (d, "string");
  @dots{}
  if (0 == strcmp (a, d))   // cannot be true
    puts ("a and d are the same");
@}
@end smallexample

@option{-Wstring-compare} is enabled by @option{-Wextra}.

@item -Wno-stringop-overflow
@item -Wstringop-overflow
@itemx -Wstringop-overflow=@var{type}
@opindex Wstringop-overflow
@opindex Wno-stringop-overflow
Warn for calls to string manipulation functions such as @code{memcpy} and
@code{strcpy} that are determined to overflow the destination buffer.  The
optional argument is one greater than the type of Object Size Checking to
perform to determine the size of the destination.  @xref{Object Size Checking}.
The argument is meaningful only for functions that operate on character arrays
but not for raw memory functions like @code{memcpy} which always make use
of Object Size type-0.  The option also warns for calls that specify a size
in excess of the largest possible object or at most @code{SIZE_MAX / 2} bytes.
The option produces the best results with optimization enabled but can detect
a small subset of simple buffer overflows even without optimization in
calls to the GCC built-in functions like @code{__builtin_memcpy} that
correspond to the standard functions.  In any case, the option warns about
just a subset of buffer overflows detected by the corresponding overflow
checking built-ins.  For example, the option issues a warning for
the @code{strcpy} call below because it copies at least 5 characters
(the string @code{"blue"} including the terminating NUL) into the buffer
of size 4.

@smallexample
enum Color @{ blue, purple, yellow @};
const char* f (enum Color clr)
@{
  static char buf [4];
  const char *str;
  switch (clr)
    @{
      case blue: str = "blue"; break;
      case purple: str = "purple"; break;
      case yellow: str = "yellow"; break;
    @}

  return strcpy (buf, str);   // warning here
@}
@end smallexample

Option @option{-Wstringop-overflow=2} is enabled by default.

@table @gcctabopt
@item -Wstringop-overflow
@itemx -Wstringop-overflow=1
@opindex Wstringop-overflow
@opindex Wno-stringop-overflow
The @option{-Wstringop-overflow=1} option uses type-zero Object Size Checking
to determine the sizes of destination objects.  At this setting the option
does not warn for writes past the end of subobjects of larger objects accessed
by pointers unless the size of the largest surrounding object is known.  When
the destination may be one of several objects it is assumed to be the largest
one of them.  On Linux systems, when optimization is enabled at this setting
the option warns for the same code as when the @code{_FORTIFY_SOURCE} macro
is defined to a non-zero value.

@item -Wstringop-overflow=2
The @option{-Wstringop-overflow=2} option uses type-one Object Size Checking
to determine the sizes of destination objects.  At this setting the option
warns about overflows when writing to members of the largest complete
objects whose exact size is known.  However, it does not warn for excessive
writes to the same members of unknown objects referenced by pointers since
they may point to arrays containing unknown numbers of elements.  This is
the default setting of the option.

@item -Wstringop-overflow=3
The @option{-Wstringop-overflow=3} option uses type-two Object Size Checking
to determine the sizes of destination objects.  At this setting the option
warns about overflowing the smallest object or data member.  This is the
most restrictive setting of the option that may result in warnings for safe
code.

@item -Wstringop-overflow=4
The @option{-Wstringop-overflow=4} option uses type-three Object Size Checking
to determine the sizes of destination objects.  At this setting the option
warns about overflowing any data members, and when the destination is
one of several objects it uses the size of the largest of them to decide
whether to issue a warning.  Similarly to @option{-Wstringop-overflow=3} this
setting of the option may result in warnings for benign code.
@end table

@item -Wno-stringop-overread
@opindex Wstringop-overread
@opindex Wno-stringop-overread
Warn for calls to string manipulation functions such as @code{memchr}, or
@code{strcpy} that are determined to read past the end of the source
sequence.

Option @option{-Wstringop-overread} is enabled by default.

@item -Wno-stringop-truncation
@opindex Wstringop-truncation
@opindex Wno-stringop-truncation
Do not warn for calls to bounded string manipulation functions
such as @code{strncat},
@code{strncpy}, and @code{stpncpy} that may either truncate the copied string
or leave the destination unchanged.

In the following example, the call to @code{strncat} specifies a bound that
is less than the length of the source string.  As a result, the copy of
the source will be truncated and so the call is diagnosed.  To avoid the
warning use @code{bufsize - strlen (buf) - 1)} as the bound.

@smallexample
void append (char *buf, size_t bufsize)
@{
  strncat (buf, ".txt", 3);
@}
@end smallexample

As another example, the following call to @code{strncpy} results in copying
to @code{d} just the characters preceding the terminating NUL, without
appending the NUL to the end.  Assuming the result of @code{strncpy} is
necessarily a NUL-terminated string is a common mistake, and so the call
is diagnosed.  To avoid the warning when the result is not expected to be
NUL-terminated, call @code{memcpy} instead.

@smallexample
void copy (char *d, const char *s)
@{
  strncpy (d, s, strlen (s));
@}
@end smallexample

In the following example, the call to @code{strncpy} specifies the size
of the destination buffer as the bound.  If the length of the source
string is equal to or greater than this size the result of the copy will
not be NUL-terminated.  Therefore, the call is also diagnosed.  To avoid
the warning, specify @code{sizeof buf - 1} as the bound and set the last
element of the buffer to @code{NUL}.

@smallexample
void copy (const char *s)
@{
  char buf[80];
  strncpy (buf, s, sizeof buf);
  @dots{}
@}
@end smallexample

In situations where a character array is intended to store a sequence
of bytes with no terminating @code{NUL} such an array may be annotated
with attribute @code{nonstring} to avoid this warning.  Such arrays,
however, are not suitable arguments to functions that expect
@code{NUL}-terminated strings.  To help detect accidental misuses of
such arrays GCC issues warnings unless it can prove that the use is
safe.  @xref{Common Variable Attributes}.

@item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}cold@r{|}malloc@r{]}
@opindex Wsuggest-attribute=
@opindex Wno-suggest-attribute=
Warn for cases where adding an attribute may be beneficial. The
attributes currently supported are listed below.

@table @gcctabopt
@item -Wsuggest-attribute=pure
@itemx -Wsuggest-attribute=const
@itemx -Wsuggest-attribute=noreturn
@itemx -Wmissing-noreturn
@itemx -Wsuggest-attribute=malloc
@opindex Wsuggest-attribute=pure
@opindex Wno-suggest-attribute=pure
@opindex Wsuggest-attribute=const
@opindex Wno-suggest-attribute=const
@opindex Wsuggest-attribute=noreturn
@opindex Wno-suggest-attribute=noreturn
@opindex Wmissing-noreturn
@opindex Wno-missing-noreturn
@opindex Wsuggest-attribute=malloc
@opindex Wno-suggest-attribute=malloc

Warn about functions that might be candidates for attributes
@code{pure}, @code{const} or @code{noreturn} or @code{malloc}. The compiler
only warns for functions visible in other compilation units or (in the case of
@code{pure} and @code{const}) if it cannot prove that the function returns
normally. A function returns normally if it doesn't contain an infinite loop or
return abnormally by throwing, calling @code{abort} or trapping.  This analysis
requires option @option{-fipa-pure-const}, which is enabled by default at
@option{-O} and higher.  Higher optimization levels improve the accuracy
of the analysis.

@item -Wsuggest-attribute=format
@itemx -Wmissing-format-attribute
@opindex Wsuggest-attribute=format
@opindex Wmissing-format-attribute
@opindex Wno-suggest-attribute=format
@opindex Wno-missing-format-attribute
@opindex Wformat
@opindex Wno-format

Warn about function pointers that might be candidates for @code{format}
attributes.  Note these are only possible candidates, not absolute ones.
GCC guesses that function pointers with @code{format} attributes that
are used in assignment, initialization, parameter passing or return
statements should have a corresponding @code{format} attribute in the
resulting type.  I.e.@: the left-hand side of the assignment or
initialization, the type of the parameter variable, or the return type
of the containing function respectively should also have a @code{format}
attribute to avoid the warning.

GCC also warns about function definitions that might be
candidates for @code{format} attributes.  Again, these are only
possible candidates.  GCC guesses 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.

@item -Wsuggest-attribute=cold
@opindex Wsuggest-attribute=cold
@opindex Wno-suggest-attribute=cold

Warn about functions that might be candidates for @code{cold} attribute.  This
is based on static detection and generally only warns about functions which
always leads to a call to another @code{cold} function such as wrappers of
C++ @code{throw} or fatal error reporting functions leading to @code{abort}.
@end table

@item -Walloc-zero
@opindex Wno-alloc-zero
@opindex Walloc-zero
Warn about calls to allocation functions decorated with attribute
@code{alloc_size} that specify zero bytes, including those to the built-in
forms of the functions @code{aligned_alloc}, @code{alloca}, @code{calloc},
@code{malloc}, and @code{realloc}.  Because the behavior of these functions
when called with a zero size differs among implementations (and in the case
of @code{realloc} has been deprecated) relying on it may result in subtle
portability bugs and should be avoided.

@item -Walloc-size-larger-than=@var{byte-size}
@opindex Walloc-size-larger-than=
@opindex Wno-alloc-size-larger-than
Warn about calls to functions decorated with attribute @code{alloc_size}
that attempt to allocate objects larger than the specified number of bytes,
or where the result of the size computation in an integer type with infinite
precision would exceed the value of @samp{PTRDIFF_MAX} on the target.
@option{-Walloc-size-larger-than=}@samp{PTRDIFF_MAX} is enabled by default.
Warnings controlled by the option can be disabled either by specifying
@var{byte-size} of @samp{SIZE_MAX} or more or by
@option{-Wno-alloc-size-larger-than}.
@xref{Function Attributes}.

@item -Wno-alloc-size-larger-than
@opindex Wno-alloc-size-larger-than
Disable @option{-Walloc-size-larger-than=} warnings.  The option is
equivalent to @option{-Walloc-size-larger-than=}@samp{SIZE_MAX} or
larger.

@item -Walloca
@opindex Wno-alloca
@opindex Walloca
This option warns on all uses of @code{alloca} in the source.

@item -Walloca-larger-than=@var{byte-size}
@opindex Walloca-larger-than=
@opindex Wno-alloca-larger-than
This option warns on calls to @code{alloca} with an integer argument whose
value is either zero, or that is not bounded by a controlling predicate
that limits its value to at most @var{byte-size}.  It also warns for calls
to @code{alloca} where the bound value is unknown.  Arguments of non-integer
types are considered unbounded even if they appear to be constrained to
the expected range.

For example, a bounded case of @code{alloca} could be:

@smallexample
void func (size_t n)
@{
  void *p;
  if (n <= 1000)
    p = alloca (n);
  else
    p = malloc (n);
  f (p);
@}
@end smallexample

In the above example, passing @code{-Walloca-larger-than=1000} would not
issue a warning because the call to @code{alloca} is known to be at most
1000 bytes.  However, if @code{-Walloca-larger-than=500} were passed,
the compiler would emit a warning.

Unbounded uses, on the other hand, are uses of @code{alloca} with no
controlling predicate constraining its integer argument.  For example:

@smallexample
void func ()
@{
  void *p = alloca (n);
  f (p);
@}
@end smallexample

If @code{-Walloca-larger-than=500} were passed, the above would trigger
a warning, but this time because of the lack of bounds checking.

Note, that even seemingly correct code involving signed integers could
cause a warning:

@smallexample
void func (signed int n)
@{
  if (n < 500)
    @{
      p = alloca (n);
      f (p);
    @}
@}
@end smallexample

In the above example, @var{n} could be negative, causing a larger than
expected argument to be implicitly cast into the @code{alloca} call.

This option also warns when @code{alloca} is used in a loop.

@option{-Walloca-larger-than=}@samp{PTRDIFF_MAX} is enabled by default
but is usually only effective  when @option{-ftree-vrp} is active (default
for @option{-O2} and above).

See also @option{-Wvla-larger-than=}@samp{byte-size}.

@item -Wno-alloca-larger-than
@opindex Wno-alloca-larger-than
Disable @option{-Walloca-larger-than=} warnings.  The option is
equivalent to @option{-Walloca-larger-than=}@samp{SIZE_MAX} or larger.

@item -Warith-conversion
@opindex Warith-conversion
@opindex Wno-arith-conversion
Do warn about implicit conversions from arithmetic operations even
when conversion of the operands to the same type cannot change their
values.  This affects warnings from @option{-Wconversion},
@option{-Wfloat-conversion}, and @option{-Wsign-conversion}.

@smallexample
@group
void f (char c, int i)
@{
  c = c + i; // warns with @option{-Wconversion}
  c = c + 1; // only warns with @option{-Warith-conversion}
@}
@end group
@end smallexample

@item -Warray-bounds
@itemx -Warray-bounds=@var{n}
@opindex Wno-array-bounds
@opindex Warray-bounds
This option is only active when @option{-ftree-vrp} is active
(default for @option{-O2} and above). It warns about subscripts to arrays
that are always out of bounds. This warning is enabled by @option{-Wall}.

@table @gcctabopt
@item -Warray-bounds=1
This is the warning level of @option{-Warray-bounds} and is enabled
by @option{-Wall}; higher levels are not, and must be explicitly requested.

@item -Warray-bounds=2
This warning level also warns about out of bounds access for
arrays at the end of a struct and for arrays accessed through
pointers. This warning level may give a larger number of
false positives and is deactivated by default.
@end table

@item -Warray-compare
@opindex Warray-compare
@opindex Wno-array-compare
Warn about equality and relational comparisons between two operands of array
type.  This comparison was deprecated in C++20.  For example:

@smallexample
int arr1[5];
int arr2[5];
bool same = arr1 == arr2;
@end smallexample

@option{-Warray-compare} is enabled by @option{-Wall}.

@item -Warray-parameter
@itemx -Warray-parameter=@var{n}
@opindex Wno-array-parameter
Warn about redeclarations of functions involving arguments of array or
pointer types of inconsistent kinds or forms, and enable the detection
of out-of-bounds accesses to such parameters by warnings such as
@option{-Warray-bounds}.

If the first function declaration uses the array form the bound specified
in the array is assumed to be the minimum number of elements expected to
be provided in calls to the function and the maximum number of elements
accessed by it.  Failing to provide arguments of sufficient size or accessing
more than the maximum number of elements may be diagnosed by warnings such
as @option{-Warray-bounds}.  At level 1 the warning diagnoses inconsistencies
involving array parameters declared using the @code{T[static N]} form.

For example, the warning triggers for the following redeclarations because
the first one allows an array of any size to be passed to @code{f} while
the second one with the keyword @code{static} specifies that the array
argument must have at least four elements.

@smallexample
void f (int[static 4]);
void f (int[]);           // warning (inconsistent array form)

void g (void)
@{
  int *p = (int *)malloc (4);
  f (p);                  // warning (array too small)
  @dots{}
@}
@end smallexample

At level 2 the warning also triggers for redeclarations involving any other
inconsistency in array or pointer argument forms denoting array sizes.
Pointers and arrays of unspecified bound are considered equivalent and do
not trigger a warning.

@smallexample
void g (int*);
void g (int[]);     // no warning
void g (int[8]);    // warning (inconsistent array bound)
@end smallexample

@option{-Warray-parameter=2} is included in @option{-Wall}.  The
@option{-Wvla-parameter} option triggers warnings for similar inconsistencies
involving Variable Length Array arguments.

@item -Wattribute-alias=@var{n}
@itemx -Wno-attribute-alias
@opindex Wattribute-alias
@opindex Wno-attribute-alias
Warn about declarations using the @code{alias} and similar attributes whose
target is incompatible with the type of the alias.
@xref{Function Attributes,,Declaring Attributes of Functions}.

@table @gcctabopt
@item -Wattribute-alias=1
The default warning level of the @option{-Wattribute-alias} option diagnoses
incompatibilities between the type of the alias declaration and that of its
target.  Such incompatibilities are typically indicative of bugs.

@item -Wattribute-alias=2

At this level @option{-Wattribute-alias} also diagnoses cases where
the attributes of the alias declaration are more restrictive than the
attributes applied to its target.  These mismatches can potentially
result in incorrect code generation.  In other cases they may be
benign and could be resolved simply by adding the missing attribute to
the target.  For comparison, see the @option{-Wmissing-attributes}
option, which controls diagnostics when the alias declaration is less
restrictive than the target, rather than more restrictive.

Attributes considered include @code{alloc_align}, @code{alloc_size},
@code{cold}, @code{const}, @code{hot}, @code{leaf}, @code{malloc},
@code{nonnull}, @code{noreturn}, @code{nothrow}, @code{pure},
@code{returns_nonnull}, and @code{returns_twice}.
@end table

@option{-Wattribute-alias} is equivalent to @option{-Wattribute-alias=1}.
This is the default.  You can disable these warnings with either
@option{-Wno-attribute-alias} or @option{-Wattribute-alias=0}.

@item -Wbool-compare
@opindex Wno-bool-compare
@opindex Wbool-compare
Warn about boolean expression compared with an integer value different from
@code{true}/@code{false}.  For instance, the following comparison is
always false:
@smallexample
int n = 5;
@dots{}
if ((n > 1) == 2) @{ @dots{} @}
@end smallexample
This warning is enabled by @option{-Wall}.

@item -Wbool-operation
@opindex Wno-bool-operation
@opindex Wbool-operation
Warn about suspicious operations on expressions of a boolean type.  For
instance, bitwise negation of a boolean is very likely a bug in the program.
For C, this warning also warns about incrementing or decrementing a boolean,
which rarely makes sense.  (In C++, decrementing a boolean is always invalid.
Incrementing a boolean is invalid in C++17, and deprecated otherwise.)

This warning is enabled by @option{-Wall}.

@item -Wduplicated-branches
@opindex Wno-duplicated-branches
@opindex Wduplicated-branches
Warn when an if-else has identical branches.  This warning detects cases like
@smallexample
if (p != NULL)
  return 0;
else
  return 0;
@end smallexample
It doesn't warn when both branches contain just a null statement.  This warning
also warn for conditional operators:
@smallexample
  int i = x ? *p : *p;
@end smallexample

@item -Wduplicated-cond
@opindex Wno-duplicated-cond
@opindex Wduplicated-cond
Warn about duplicated conditions in an if-else-if chain.  For instance,
warn for the following code:
@smallexample
if (p->q != NULL) @{ @dots{} @}
else if (p->q != NULL) @{ @dots{} @}
@end smallexample

@item -Wframe-address
@opindex Wno-frame-address
@opindex Wframe-address
Warn when the @samp{__builtin_frame_address} or @samp{__builtin_return_address}
is called with an argument greater than 0.  Such calls may return indeterminate
values or crash the program.  The warning is included in @option{-Wall}.

@item -Wno-discarded-qualifiers @r{(C and Objective-C only)}
@opindex Wno-discarded-qualifiers
@opindex Wdiscarded-qualifiers
Do not warn if type qualifiers on pointers are being discarded.
Typically, the compiler warns if a @code{const char *} variable is
passed to a function that takes a @code{char *} parameter.  This option
can be used to suppress such a warning.

@item -Wno-discarded-array-qualifiers @r{(C and Objective-C only)}
@opindex Wno-discarded-array-qualifiers
@opindex Wdiscarded-array-qualifiers
Do not warn if type qualifiers on arrays which are pointer targets
are being discarded.  Typically, the compiler warns if a
@code{const int (*)[]} variable is passed to a function that
takes a @code{int (*)[]} parameter.  This option can be used to
suppress such a warning.

@item -Wno-incompatible-pointer-types @r{(C and Objective-C only)}
@opindex Wno-incompatible-pointer-types
@opindex Wincompatible-pointer-types
Do not warn when there is a conversion between pointers that have incompatible
types.  This warning is for cases not covered by @option{-Wno-pointer-sign},
which warns for pointer argument passing or assignment with different
signedness.

@item -Wno-int-conversion @r{(C and Objective-C only)}
@opindex Wno-int-conversion
@opindex Wint-conversion
Do not warn about incompatible integer to pointer and pointer to integer
conversions.  This warning is about implicit conversions; for explicit
conversions the warnings @option{-Wno-int-to-pointer-cast} and
@option{-Wno-pointer-to-int-cast} may be used.

@item -Wzero-length-bounds
@opindex Wzero-length-bounds
@opindex Wzero-length-bounds
Warn about accesses to elements of zero-length array members that might
overlap other members of the same object.  Declaring interior zero-length
arrays is discouraged because accesses to them are undefined.  See
@xref{Zero Length}.

For example, the first two stores in function @code{bad} are diagnosed
because the array elements overlap the subsequent members @code{b} and
@code{c}.  The third store is diagnosed by @option{-Warray-bounds}
because it is beyond the bounds of the enclosing object.

@smallexample
struct X @{ int a[0]; int b, c; @};
struct X x;

void bad (void)
@{
  x.a[0] = 0;   // -Wzero-length-bounds
  x.a[1] = 1;   // -Wzero-length-bounds
  x.a[2] = 2;   // -Warray-bounds
@}
@end smallexample

Option @option{-Wzero-length-bounds} is enabled by @option{-Warray-bounds}.

@item -Wno-div-by-zero
@opindex Wno-div-by-zero
@opindex Wdiv-by-zero
Do not warn about compile-time integer division by zero.  Floating-point
division by zero is not warned about, as it can be a legitimate way of
obtaining infinities and NaNs.

@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.
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 @option{-Wall} in conjunction with this
option does @emph{not} warn about unknown pragmas in system
headers---for that, @option{-Wunknown-pragmas} must also be used.

@item -Wtautological-compare
@opindex Wtautological-compare
@opindex Wno-tautological-compare
Warn if a self-comparison always evaluates to true or false.  This
warning detects various mistakes such as:
@smallexample
int i = 1;
@dots{}
if (i > i) @{ @dots{} @}
@end smallexample

This warning also warns about bitwise comparisons that always evaluate
to true or false, for instance:
@smallexample
if ((a & 16) == 10) @{ @dots{} @}
@end smallexample
will always be false.

This warning is enabled by @option{-Wall}.

@item -Wtrampolines
@opindex Wtrampolines
@opindex Wno-trampolines
Warn about trampolines generated for pointers to nested functions.
A trampoline is a small piece of data or code that is created at run
time on the stack when the address of a nested function is taken, and is
used to call the nested function indirectly.  For some targets, it is
made up of data only and thus requires no special treatment.  But, for
most targets, it is made up of code and thus requires the stack to be
made executable in order for the program to work properly.

@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
programmer) to consider floating-point values as approximations to
infinitely precise real numbers.  If you are doing this, then you need
to compute (by analyzing the code, or in some other way) the maximum or
likely maximum error that the computation introduces, and allow for it
when performing comparisons (and when producing output, but that's a
different problem).  In particular, instead of testing for equality, you
should check to see whether the two values have ranges that overlap; and
this is done with the relational operators, so equality comparisons are
probably mistaken.

@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 that should be avoided.

@itemize @bullet
@item
Macro parameters that appear within string literals in the macro body.
In traditional C macro replacement takes place within string literals,
but in ISO C it does not.

@item
In traditional C, some preprocessor directives did not exist.
Traditional preprocessors only considered a line to be a directive
if the @samp{#} appeared in column 1 on the line.  Therefore
@option{-Wtraditional} warns about directives that traditional C
understands but ignores because the @samp{#} does not appear as the
first character on the line.  It also suggests you hide directives like
@code{#pragma} not understood by traditional C by indenting them.  Some
traditional implementations do not recognize @code{#elif}, so this option
suggests avoiding it altogether.

@item
A function-like macro that appears without arguments.

@item
The unary plus operator.

@item
The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
constants.)  Note, these suffixes appear in macros defined in the system
headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
Use of these macros in user code might normally lead to spurious
warnings, however GCC's integrated preprocessor has enough context to
avoid warning in these cases.

@item
A function declared external in one block and then used after the end of
the block.

@item
A @code{switch} statement has an operand of type @code{long}.

@item
A non-@code{static} function declaration follows a @code{static} one.
This construct is not accepted by some traditional C compilers.

@item
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 ISO string concatenation is detected.

@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
Conversions by prototypes between fixed/floating-point values and vice
versa.  The absence of these prototypes when compiling with traditional
C causes serious problems.  This is a subset of the possible
conversion warnings; for the full set use @option{-Wtraditional-conversion}.

@item
Use of ISO C style function definitions.  This warning intentionally is
@emph{not} issued for prototype declarations or variadic functions
because these ISO C features appear in your code when using
libiberty's traditional C compatibility macros, @code{PARAMS} and
@code{VPARAMS}.  This warning is also bypassed for nested functions
because that feature is already a GCC extension and thus not relevant to
traditional C compatibility.
@end itemize

@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 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.  @xref{Mixed Labels and Declarations}.

@item -Wshadow
@opindex Wshadow
@opindex Wno-shadow
Warn whenever a local variable or type declaration shadows another
variable, parameter, type, class member (in C++), or instance variable
(in Objective-C) or whenever a built-in function is shadowed.  Note
that in C++, the compiler warns if a local variable shadows an
explicit typedef, but not if it shadows a struct/class/enum.
If this warning is enabled, it includes also all instances of
local shadowing.  This means that @option{-Wno-shadow=local}
and @option{-Wno-shadow=compatible-local} are ignored when
@option{-Wshadow} is used.
Same as @option{-Wshadow=global}.

@item -Wno-shadow-ivar @r{(Objective-C only)}
@opindex Wno-shadow-ivar
@opindex Wshadow-ivar
Do not warn whenever a local variable shadows an instance variable in an
Objective-C method.

@item -Wshadow=global
@opindex Wshadow=global
Warn for any shadowing.
Same as @option{-Wshadow}.

@item -Wshadow=local
@opindex Wshadow=local
Warn when a local variable shadows another local variable or parameter.

@item -Wshadow=compatible-local
@opindex Wshadow=compatible-local
Warn when a local variable shadows another local variable or parameter
whose type is compatible with that of the shadowing variable.  In C++,
type compatibility here means the type of the shadowing variable can be
converted to that of the shadowed variable.  The creation of this flag
(in addition to @option{-Wshadow=local}) is based on the idea that when
a local variable shadows another one of incompatible type, it is most
likely intentional, not a bug or typo, as shown in the following example:

@smallexample
@group
for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
@{
  for (int i = 0; i < N; ++i)
  @{
    ...
  @}
  ...
@}
@end group
@end smallexample

Since the two variable @code{i} in the example above have incompatible types,
enabling only @option{-Wshadow=compatible-local} does not emit a warning.
Because their types are incompatible, if a programmer accidentally uses one
in place of the other, type checking is expected to catch that and emit an
error or warning.  Use of this flag instead of @option{-Wshadow=local} can
possibly reduce the number of warnings triggered by intentional shadowing.
Note that this also means that shadowing @code{const char *i} by
@code{char *i} does not emit a warning.

This warning is also enabled by @option{-Wshadow=local}.

@item -Wlarger-than=@var{byte-size}
@opindex Wlarger-than=
@opindex Wlarger-than-@var{byte-size}
Warn whenever an object is defined whose size exceeds @var{byte-size}.
@option{-Wlarger-than=}@samp{PTRDIFF_MAX} is enabled by default.
Warnings controlled by the option can be disabled either by specifying
@var{byte-size} of @samp{SIZE_MAX} or more or by @option{-Wno-larger-than}.

Also warn for calls to bounded functions such as @code{memchr} or
@code{strnlen} that specify a bound greater than the largest possible
object, which is @samp{PTRDIFF_MAX} bytes by default.  These warnings
can only be disabled by @option{-Wno-larger-than}.

@item -Wno-larger-than
@opindex Wno-larger-than
Disable @option{-Wlarger-than=} warnings.  The option is equivalent
to @option{-Wlarger-than=}@samp{SIZE_MAX} or larger.

@item -Wframe-larger-than=@var{byte-size}
@opindex Wframe-larger-than=
@opindex Wno-frame-larger-than
Warn if the size of a function frame exceeds @var{byte-size}.
The computation done to determine the stack frame size is approximate
and not conservative.
The actual requirements may be somewhat greater than @var{byte-size}
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.
@option{-Wframe-larger-than=}@samp{PTRDIFF_MAX} is enabled by default.
Warnings controlled by the option can be disabled either by specifying
@var{byte-size} of @samp{SIZE_MAX} or more or by
@option{-Wno-frame-larger-than}.

@item -Wno-frame-larger-than
@opindex Wno-frame-larger-than
Disable @option{-Wframe-larger-than=} warnings.  The option is equivalent
to @option{-Wframe-larger-than=}@samp{SIZE_MAX} or larger.

@item -Wfree-nonheap-object
@opindex Wfree-nonheap-object
@opindex Wno-free-nonheap-object
Warn when attempting to deallocate an object that was either not allocated
on the heap, or by using a pointer that was not returned from a prior call
to the corresponding allocation function.  For example, because the call
to @code{stpcpy} returns a pointer to the terminating nul character and
not to the begginning of the object, the call to @code{free} below is
diagnosed.

@smallexample
void f (char *p)
@{
  p = stpcpy (p, "abc");
  // ...
  free (p);   // warning
@}
@end smallexample

@option{-Wfree-nonheap-object} is included in @option{-Wall}.

@item -Wstack-usage=@var{byte-size}
@opindex Wstack-usage
@opindex Wno-stack-usage
Warn if the stack usage of a function might exceed @var{byte-size}.
The computation done to determine the stack usage is conservative.
Any space allocated via @code{alloca}, variable-length arrays, or related
constructs is included by the compiler when determining whether or not to
issue a warning.

The message is in keeping with the output of @option{-fstack-usage}.

@itemize
@item
If the stack usage is fully static but exceeds the specified amount, it's:

@smallexample
  warning: stack usage is 1120 bytes
@end smallexample
@item
If the stack usage is (partly) dynamic but bounded, it's:

@smallexample
  warning: stack usage might be 1648 bytes
@end smallexample
@item
If the stack usage is (partly) dynamic and not bounded, it's:

@smallexample
  warning: stack usage might be unbounded
@end smallexample
@end itemize

@option{-Wstack-usage=}@samp{PTRDIFF_MAX} is enabled by default.
Warnings controlled by the option can be disabled either by specifying
@var{byte-size} of @samp{SIZE_MAX} or more or by
@option{-Wno-stack-usage}.

@item -Wno-stack-usage
@opindex Wno-stack-usage
Disable @option{-Wstack-usage=} warnings.  The option is equivalent
to @option{-Wstack-usage=}@samp{SIZE_MAX} or larger.

@item -Wunsafe-loop-optimizations
@opindex Wunsafe-loop-optimizations
@opindex Wno-unsafe-loop-optimizations
Warn if the loop cannot be optimized because the compiler cannot
assume anything on the bounds of the loop indices.  With
@option{-funsafe-loop-optimizations} warn if the compiler makes
such assumptions.

@item -Wno-pedantic-ms-format @r{(MinGW targets only)}
@opindex Wno-pedantic-ms-format
@opindex Wpedantic-ms-format
When used in combination with @option{-Wformat}
and @option{-pedantic} without GNU extensions, this option
disables the warnings about non-ISO @code{printf} / @code{scanf} format
width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets,
which depend on the MS runtime.

@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
to functions.  In C++, warn also when an arithmetic operation involves
@code{NULL}.  This warning is also enabled by @option{-Wpedantic}.

@item -Wno-pointer-compare
@opindex Wpointer-compare
@opindex Wno-pointer-compare
Do not warn if a pointer is compared with a zero character constant.
This usually
means that the pointer was meant to be dereferenced.  For example:

@smallexample
const char *p = foo ();
if (p == '\0')
  return 42;
@end smallexample

Note that the code above is invalid in C++11.

This warning is enabled by default.

@item -Wtsan
@opindex Wtsan
@opindex Wno-tsan
Warn about unsupported features in ThreadSanitizer.

ThreadSanitizer does not support @code{std::atomic_thread_fence} and
can report false positives.

This warning is enabled by default.

@item -Wtype-limits
@opindex Wtype-limits
@opindex Wno-type-limits
Warn if a comparison is always true or always false due to the limited
range of the data type, but do not warn for constant expressions.  For
example, warn if an unsigned variable is compared against zero with
@code{<} or @code{>=}.  This warning is also enabled by
@option{-Wextra}.

@item -Wabsolute-value @r{(C and Objective-C only)}
@opindex Wabsolute-value
@opindex Wno-absolute-value
Warn for calls to standard functions that compute the absolute value
of an argument when a more appropriate standard function is available.
For example, calling @code{abs(3.14)} triggers the warning because the
appropriate function to call to compute the absolute value of a double
argument is @code{fabs}.  The option also triggers warnings when the
argument in a call to such a function has an unsigned type.  This
warning can be suppressed with an explicit type cast and it is also
enabled by @option{-Wextra}.

@include cppwarnopts.texi

@item -Wbad-function-cast @r{(C and Objective-C only)}
@opindex Wbad-function-cast
@opindex Wno-bad-function-cast
Warn when a function call is cast to a non-matching type.
For example, warn if a call to a function returning an integer type 
is cast to a pointer type.

@item -Wc90-c99-compat @r{(C and Objective-C only)}
@opindex Wc90-c99-compat
@opindex Wno-c90-c99-compat
Warn about features not present in ISO C90, but present in ISO C99.
For instance, warn about use of variable length arrays, @code{long long}
type, @code{bool} type, compound literals, designated initializers, and so
on.  This option is independent of the standards mode.  Warnings are disabled
in the expression that follows @code{__extension__}.

@item -Wc99-c11-compat @r{(C and Objective-C only)}
@opindex Wc99-c11-compat
@opindex Wno-c99-c11-compat
Warn about features not present in ISO C99, but present in ISO C11.
For instance, warn about use of anonymous structures and unions,
@code{_Atomic} type qualifier, @code{_Thread_local} storage-class specifier,
@code{_Alignas} specifier, @code{Alignof} operator, @code{_Generic} keyword,
and so on.  This option is independent of the standards mode.  Warnings are
disabled in the expression that follows @code{__extension__}.

@item -Wc11-c2x-compat @r{(C and Objective-C only)}
@opindex Wc11-c2x-compat
@opindex Wno-c11-c2x-compat
Warn about features not present in ISO C11, but present in ISO C2X.
For instance, warn about omitting the string in @code{_Static_assert},
use of @samp{[[]]} syntax for attributes, use of decimal
floating-point types, and so on.  This option is independent of the
standards mode.  Warnings are disabled in the expression that follows
@code{__extension__}.

@item -Wc++-compat @r{(C and Objective-C only)}
@opindex Wc++-compat
@opindex Wno-c++-compat
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 -Wc++11-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++11-compat
@opindex Wno-c++11-compat
Warn about C++ constructs whose meaning differs between ISO C++ 1998
and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
enabled by @option{-Wall}.

@item -Wc++14-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++14-compat
@opindex Wno-c++14-compat
Warn about C++ constructs whose meaning differs between ISO C++ 2011
and ISO C++ 2014.  This warning is enabled by @option{-Wall}.

@item -Wc++17-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++17-compat
@opindex Wno-c++17-compat
Warn about C++ constructs whose meaning differs between ISO C++ 2014
and ISO C++ 2017.  This warning is enabled by @option{-Wall}.

@item -Wc++20-compat @r{(C++ and Objective-C++ only)}
@opindex Wc++20-compat
@opindex Wno-c++20-compat
Warn about C++ constructs whose meaning differs between ISO C++ 2017
and ISO C++ 2020.  This warning is enabled by @option{-Wall}.

@item -Wno-c++11-extensions @r{(C++ and Objective-C++ only)}
@opindex Wc++11-extensions
@opindex Wno-c++11-extensions
Do not warn about C++11 constructs in code being compiled using
an older C++ standard.  Even without this option, some C++11 constructs
will only be diagnosed if @option{-Wpedantic} is used.

@item -Wno-c++14-extensions @r{(C++ and Objective-C++ only)}
@opindex Wc++14-extensions
@opindex Wno-c++14-extensions
Do not warn about C++14 constructs in code being compiled using
an older C++ standard.  Even without this option, some C++14 constructs
will only be diagnosed if @option{-Wpedantic} is used.

@item -Wno-c++17-extensions @r{(C++ and Objective-C++ only)}
@opindex Wc++17-extensions
@opindex Wno-c++17-extensions
Do not warn about C++17 constructs in code being compiled using
an older C++ standard.  Even without this option, some C++17 constructs
will only be diagnosed if @option{-Wpedantic} is used.

@item -Wno-c++20-extensions @r{(C++ and Objective-C++ only)}
@opindex Wc++20-extensions
@opindex Wno-c++20-extensions
Do not warn about C++20 constructs in code being compiled using
an older C++ standard.  Even without this option, some C++20 constructs
will only be diagnosed if @option{-Wpedantic} is used.

@item -Wno-c++23-extensions @r{(C++ and Objective-C++ only)}
@opindex Wc++23-extensions
@opindex Wno-c++23-extensions
Do not warn about C++23 constructs in code being compiled using
an older C++ standard.  Even without this option, some C++23 constructs
will only be diagnosed if @option{-Wpedantic} is used.

@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 *}.

Also warn when making a cast that introduces a type qualifier in an
unsafe way.  For example, casting @code{char **} to @code{const char **}
is unsafe, as in this example:

@smallexample
  /* p is char ** value.  */
  const char **q = (const char **) p;
  /* Assignment of readonly string to const char * is OK.  */
  *q = "string";
  /* Now char** pointer points to read-only memory.  */
  **p = 'b';
@end smallexample

@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
two- or four-byte boundaries.

@item -Wcast-align=strict
@opindex Wcast-align=strict
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 *} regardless of the target machine.

@item -Wcast-function-type
@opindex Wcast-function-type
@opindex Wno-cast-function-type
Warn when a function pointer is cast to an incompatible function pointer.
In a cast involving function types with a variable argument list only
the types of initial arguments that are provided are considered.
Any parameter of pointer-type matches any other pointer-type.  Any benign
differences in integral types are ignored, like @code{int} vs.@: @code{long}
on ILP32 targets.  Likewise type qualifiers are ignored.  The function
type @code{void (*) (void)} is special and matches everything, which can
be used to suppress this warning.
In a cast involving pointer to member types this warning warns whenever
the type cast is changing the pointer to member type.
This warning is enabled by @option{-Wextra}.

@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 *} pointer produces a warning.  These
warnings help you find at compile time code that can try to write
into a string constant, but only if you have been very careful about
using @code{const} in declarations and prototypes.  Otherwise, it is
just a nuisance. This is why we did not make @option{-Wall} request
these warnings.

When compiling C++, warn about the deprecated conversion from string
literals to @code{char *}.  This warning is enabled by default for C++
programs.

@item -Wclobbered
@opindex Wclobbered
@opindex Wno-clobbered
Warn for variables that might be changed by @code{longjmp} or
@code{vfork}.  This warning is also enabled by @option{-Wextra}.

@item -Wconversion
@opindex Wconversion
@opindex Wno-conversion
Warn for implicit conversions that may alter a value. This includes
conversions between real and integer, like @code{abs (x)} when
@code{x} is @code{double}; conversions between signed and unsigned,
like @code{unsigned ui = -1}; and conversions to smaller types, like
@code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
changed by the conversion like in @code{abs (2.0)}.  Warnings about
conversions between signed and unsigned integers can be disabled by
using @option{-Wno-sign-conversion}.

For C++, also warn for confusing overload resolution for user-defined
conversions; and conversions that never use a type conversion
operator: conversions to @code{void}, the same type, a base class or a
reference to them. Warnings about conversions between signed and
unsigned integers are disabled by default in C++ unless
@option{-Wsign-conversion} is explicitly enabled.

Warnings about conversion from arithmetic on a small type back to that
type are only given with @option{-Warith-conversion}.

@item -Wdangling-else
@opindex Wdangling-else
@opindex Wno-dangling-else
Warn about constructions where there may be confusion to which
@code{if} statement an @code{else} branch belongs.  Here is an example of
such a case:

@smallexample
@group
@{
  if (a)
    if (b)
      foo ();
  else
    bar ();
@}
@end group
@end smallexample

In C/C++, every @code{else} branch belongs to the innermost possible
@code{if} statement, which in this example is @code{if (b)}.  This is
often not what the programmer expected, as illustrated in the above
example by indentation the programmer chose.  When there is the
potential for this confusion, GCC issues a warning when this flag
is specified.  To eliminate the warning, add explicit braces around
the innermost @code{if} statement so there is no way the @code{else}
can belong to the enclosing @code{if}.  The resulting code
looks like this:

@smallexample
@group
@{
  if (a)
    @{
      if (b)
        foo ();
      else
        bar ();
    @}
@}
@end group
@end smallexample

This warning is enabled by @option{-Wparentheses}.

@item -Wdate-time
@opindex Wdate-time
@opindex Wno-date-time
Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
are encountered as they might prevent bit-wise-identical reproducible
compilations.

@item -Wempty-body
@opindex Wempty-body
@opindex Wno-empty-body
Warn if an empty body occurs in an @code{if}, @code{else} or @code{do
while} statement.  This warning is also enabled by @option{-Wextra}.

@item -Wno-endif-labels
@opindex Wendif-labels
@opindex Wno-endif-labels
Do not warn about stray tokens after @code{#else} and @code{#endif}.

@item -Wenum-compare
@opindex Wenum-compare
@opindex Wno-enum-compare
Warn about a comparison between values of different enumerated types.
In C++ enumerated type mismatches in conditional expressions are also
diagnosed and the warning is enabled by default.  In C this warning is 
enabled by @option{-Wall}.

@item -Wenum-conversion
@opindex Wenum-conversion
@opindex Wno-enum-conversion
Warn when a value of enumerated type is implicitly converted to a 
different enumerated type.  This warning is enabled by @option{-Wextra}
in C@.

@item -Wjump-misses-init @r{(C, Objective-C only)}
@opindex Wjump-misses-init
@opindex Wno-jump-misses-init
Warn if a @code{goto} statement or a @code{switch} statement jumps
forward across the initialization of a variable, or jumps backward to a
label after the variable has been initialized.  This only warns about
variables that are initialized when they are declared.  This warning is
only supported for C and Objective-C; in C++ this sort of branch is an
error in any case.

@option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
can be disabled with the @option{-Wno-jump-misses-init} option.

@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
Warn when a comparison between signed and unsigned values could produce
an incorrect result when the signed value is converted to unsigned.
In C++, this warning is also enabled by @option{-Wall}.  In C, it is
also enabled by @option{-Wextra}.

@item -Wsign-conversion
@opindex Wsign-conversion
@opindex Wno-sign-conversion
Warn for implicit conversions that may change the sign of an integer
value, like assigning a signed integer expression to an unsigned
integer variable. An explicit cast silences the warning. In C, this
option is enabled also by @option{-Wconversion}.

@item -Wfloat-conversion
@opindex Wfloat-conversion
@opindex Wno-float-conversion
Warn for implicit conversions that reduce the precision of a real value.
This includes conversions from real to integer, and from higher precision
real to lower precision real values.  This option is also enabled by
@option{-Wconversion}.

@item -Wno-scalar-storage-order
@opindex Wno-scalar-storage-order
@opindex Wscalar-storage-order
Do not warn on suspicious constructs involving reverse scalar storage order.

@item -Wsizeof-array-div
@opindex Wsizeof-array-div
@opindex Wno-sizeof-array-div
Warn about divisions of two sizeof operators when the first one is applied
to an array and the divisor does not equal the size of the array element.
In such a case, the computation will not yield the number of elements in the
array, which is likely what the user intended.  This warning warns e.g. about
@smallexample
int fn ()
@{
  int arr[10];
  return sizeof (arr) / sizeof (short);
@}
@end smallexample

This warning is enabled by @option{-Wall}.

@item -Wsizeof-pointer-div
@opindex Wsizeof-pointer-div
@opindex Wno-sizeof-pointer-div
Warn for suspicious divisions of two sizeof expressions that divide
the pointer size by the element size, which is the usual way to compute
the array size but won't work out correctly with pointers.  This warning
warns e.g.@: about @code{sizeof (ptr) / sizeof (ptr[0])} if @code{ptr} is
not an array, but a pointer.  This warning is enabled by @option{-Wall}.

@item -Wsizeof-pointer-memaccess
@opindex Wsizeof-pointer-memaccess
@opindex Wno-sizeof-pointer-memaccess
Warn for suspicious length parameters to certain string and memory built-in
functions if the argument uses @code{sizeof}.  This warning triggers for
example for @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not
an array, but a pointer, and suggests a possible fix, or about
@code{memcpy (&foo, ptr, sizeof (&foo));}.  @option{-Wsizeof-pointer-memaccess}
also warns about calls to bounded string copy functions like @code{strncat}
or @code{strncpy} that specify as the bound a @code{sizeof} expression of
the source array.  For example, in the following function the call to
@code{strncat} specifies the size of the source string as the bound.  That
is almost certainly a mistake and so the call is diagnosed.
@smallexample
void make_file (const char *name)
@{
  char path[PATH_MAX];
  strncpy (path, name, sizeof path - 1);
  strncat (path, ".text", sizeof ".text");
  @dots{}
@}
@end smallexample

The @option{-Wsizeof-pointer-memaccess} option is enabled by @option{-Wall}.

@item -Wno-sizeof-array-argument
@opindex Wsizeof-array-argument
@opindex Wno-sizeof-array-argument
Do not warn when the @code{sizeof} operator is applied to a parameter that is
declared as an array in a function definition.  This warning is enabled by
default for C and C++ programs.

@item -Wmemset-elt-size
@opindex Wmemset-elt-size
@opindex Wno-memset-elt-size
Warn for suspicious calls to the @code{memset} built-in function, if the
first argument references an array, and the third argument is a number
equal to the number of elements, but not equal to the size of the array
in memory.  This indicates that the user has omitted a multiplication by
the element size.  This warning is enabled by @option{-Wall}.

@item -Wmemset-transposed-args
@opindex Wmemset-transposed-args
@opindex Wno-memset-transposed-args
Warn for suspicious calls to the @code{memset} built-in function where
the second argument is not zero and the third argument is zero.  For
example, the call @code{memset (buf, sizeof buf, 0)} is diagnosed because
@code{memset (buf, 0, sizeof buf)} was meant instead.  The diagnostic
is only emitted if the third argument is a literal zero.  Otherwise, if
it is an expression that is folded to zero, or a cast of zero to some
type, it is far less likely that the arguments have been mistakenly
transposed and no warning is emitted.  This warning is enabled
by @option{-Wall}.

@item -Waddress
@opindex Waddress
@opindex Wno-address
Warn about suspicious uses of address expressions. These include comparing
the address of a function or a declared object to the null pointer constant
such as in
@smallexample
void f (void);
void g (void)
@{
  if (!func)   // warning: expression evaluates to false
    abort ();
@}
@end smallexample
comparisons of a pointer to a string literal, such as in
@smallexample
void f (const char *x)
@{
  if (x == "abc")   // warning: expression evaluates to false
    puts ("equal");
@}
@end smallexample
and tests of the results of pointer addition or subtraction for equality
to null, such as in
@smallexample
void f (const int *p, int i)
@{
  return p + i == NULL;
@}
@end smallexample
Such uses typically indicate a programmer error: the address of most
functions and objects necessarily evaluates to true (the exception are
weak symbols), so their use in a conditional might indicate missing
parentheses in a function call or a missing dereference in an array
expression.  The subset of the warning for object pointers can be
suppressed by casting the pointer operand to an integer type such
as @code{inptr_t} or @code{uinptr_t}.
Comparisons against string literals result in unspecified behavior
and are not portable, and suggest the intent was to call @code{strcmp}.
@option{-Waddress} warning is enabled by @option{-Wall}.

@item -Wno-address-of-packed-member
@opindex Waddress-of-packed-member
@opindex Wno-address-of-packed-member
Do not warn when the address of packed member of struct or union is taken,
which usually results in an unaligned pointer value.  This is
enabled by default.

@item -Wlogical-op
@opindex Wlogical-op
@opindex Wno-logical-op
Warn about suspicious uses of logical operators in expressions.
This includes using logical operators in contexts where a
bit-wise operator is likely to be expected.  Also warns when
the operands of a logical operator are the same:
@smallexample
extern int a;
if (a < 0 && a < 0) @{ @dots{} @}
@end smallexample

@item -Wlogical-not-parentheses
@opindex Wlogical-not-parentheses
@opindex Wno-logical-not-parentheses
Warn about logical not used on the left hand side operand of a comparison.
This option does not warn if the right operand is considered to be a boolean
expression.  Its purpose is to detect suspicious code like the following:
@smallexample
int a;
@dots{}
if (!a > 1) @{ @dots{} @}
@end smallexample

It is possible to suppress the warning by wrapping the LHS into
parentheses:
@smallexample
if ((!a) > 1) @{ @dots{} @}
@end smallexample

This warning is enabled by @option{-Wall}.

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

@item -Wno-aggressive-loop-optimizations
@opindex Wno-aggressive-loop-optimizations
@opindex Waggressive-loop-optimizations
Warn if in a loop with constant number of iterations the compiler detects
undefined behavior in some statement during one or more of the iterations.

@item -Wno-attributes
@opindex Wno-attributes
@opindex Wattributes
Do not warn if an unexpected @code{__attribute__} is used, such as
unrecognized attributes, function attributes applied to variables,
etc.  This does not stop errors for incorrect use of supported
attributes.

@item -Wno-builtin-declaration-mismatch
@opindex Wno-builtin-declaration-mismatch
@opindex Wbuiltin-declaration-mismatch
Warn if a built-in function is declared with an incompatible signature
or as a non-function, or when a built-in function declared with a type
that does not include a prototype is called with arguments whose promoted
types do not match those expected by the function.  When @option{-Wextra}
is specified, also warn when a built-in function that takes arguments is
declared without a prototype.  The @option{-Wbuiltin-declaration-mismatch}
warning is enabled by default.  To avoid the warning include the appropriate
header to bring the prototypes of built-in functions into scope.

For example, the call to @code{memset} below is diagnosed by the warning
because the function expects a value of type @code{size_t} as its argument
but the type of @code{32} is @code{int}.  With @option{-Wextra},
the declaration of the function is diagnosed as well.
@smallexample
extern void* memset ();
void f (void *d)
@{
  memset (d, '\0', 32);
@}
@end smallexample

@item -Wno-builtin-macro-redefined
@opindex Wno-builtin-macro-redefined
@opindex Wbuiltin-macro-redefined
Do not warn if certain built-in macros are redefined.  This suppresses
warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
@code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.

@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 that specifies the argument
types.)

@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 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.  A definition using @samp{()}
is not considered an old-style definition in C2X mode, because it is
equivalent to @samp{(void)} in that case, but is considered an
old-style definition for older standards.

@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:

@smallexample
void foo(bar) @{ @}
@end smallexample

This warning is also enabled by @option{-Wextra}.

@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.  Use this option to detect global functions
that do not have a matching prototype declaration in a header file.
This option is not valid for C++ because all function declarations
provide prototypes and a non-matching declaration declares an
overload rather than conflict with an earlier declaration.
Use @option{-Wmissing-declarations} to detect missing declarations in C++.

@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
header files.  In C, no warnings are issued for functions with previous
non-prototype declarations; use @option{-Wmissing-prototypes} to detect
missing prototypes.  In C++, no warnings are issued for function templates,
or for inline functions, or for functions in anonymous namespaces.

@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 causes such a warning, because
@code{x.h} is implicitly zero:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ 3, 4 @};
@end smallexample

This option does not warn about designated initializers, so the following
modification does not trigger a warning:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ .f = 3, .g = 4 @};
@end smallexample

In C this option does not warn about the universal zero initializer
@samp{@{ 0 @}}:

@smallexample
struct s @{ int f, g, h; @};
struct s x = @{ 0 @};
@end smallexample

Likewise, in C++ this option does not warn about the empty @{ @}
initializer, for example:

@smallexample
struct s @{ int f, g, h; @};
s x = @{ @};
@end smallexample

This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.

@item -Wno-missing-requires
@opindex Wmissing-requires
@opindex Wno-missing-requires

By default, the compiler warns about a concept-id appearing as a C++20 simple-requirement:

@smallexample
bool satisfied = requires @{ C<T> @};
@end smallexample

Here @samp{satisfied} will be true if @samp{C<T>} is a valid
expression, which it is for all T.  Presumably the user meant to write

@smallexample
bool satisfied = requires @{ requires C<T> @};
@end smallexample

so @samp{satisfied} is only true if concept @samp{C} is satisfied for
type @samp{T}.

This warning can be disabled with @option{-Wno-missing-requires}.

@item -Wno-multichar
@opindex Wno-multichar
@opindex Wmultichar
Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
Usually they indicate a typo in the user's code, as they have
implementation-defined values, and should not be used in portable code.

@item -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]}
@opindex Wnormalized=
@opindex Wnormalized
@opindex Wno-normalized
@cindex NFC
@cindex NFKC
@cindex character set, input normalization
In ISO C and ISO C++, two identifiers are different if they are
different sequences of characters.  However, sometimes when characters
outside the basic ASCII character set are used, you can have two
different character sequences that look the same.  To avoid confusion,
the ISO 10646 standard sets out some @dfn{normalization rules} which
when applied ensure that two sequences that look the same are turned into
the same sequence.  GCC can warn you if you are using identifiers that
have not been normalized; this option controls that warning.

There are four levels of warning supported by GCC@.  The default is
@option{-Wnormalized=nfc}, which warns about any identifier that is
not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
recommended form for most uses.  It is equivalent to
@option{-Wnormalized}.

Unfortunately, there are some characters allowed in identifiers by
ISO C and ISO C++ that, when turned into NFC, are not allowed in 
identifiers.  That is, there's no way to use these symbols in portable
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.

You can switch the warning off for all characters by writing
@option{-Wnormalized=none} or @option{-Wno-normalized}.  You should
only do this if you are using some other normalization scheme (like
``D''), because otherwise you can easily create bugs that are
literally impossible to see.

Some characters in ISO 10646 have distinct meanings but look identical
in some fonts or display methodologies, especially once formatting has
been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
LETTER N'', displays just like a regular @code{n} that has been
placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
normalization scheme to convert all these into a standard form as
well, and GCC warns if your code is not in NFKC if you use
@option{-Wnormalized=nfkc}.  This warning is comparable to warning
about every identifier that contains the letter O because it might be
confused with the digit 0, and so is not the default, but may be
useful as a local coding convention if the programming environment 
cannot be fixed to display these characters distinctly.

@item -Wno-attribute-warning
@opindex Wno-attribute-warning
@opindex Wattribute-warning
Do not warn about usage of functions (@pxref{Function Attributes})
declared with @code{warning} attribute.  By default, this warning is
enabled.  @option{-Wno-attribute-warning} can be used to disable the
warning or @option{-Wno-error=attribute-warning} can be used to
disable the error when compiled with @option{-Werror} flag.

@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}
attribute.

@item -Wno-overflow
@opindex Wno-overflow
@opindex Woverflow
Do not warn about compile-time overflow in constant expressions.

@item -Wno-odr
@opindex Wno-odr
@opindex Wodr
Warn about One Definition Rule violations during link-time optimization.
Enabled by default.

@item -Wopenacc-parallelism
@opindex Wopenacc-parallelism
@opindex Wno-openacc-parallelism
@cindex OpenACC accelerator programming
Warn about potentially suboptimal choices related to OpenACC parallelism.

@item -Wopenmp-simd
@opindex Wopenmp-simd
@opindex Wno-openmp-simd
Warn if the vectorizer cost model overrides the OpenMP
simd directive set by user.  The @option{-fsimd-cost-model=unlimited}
option can be used to relax the cost model.

@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}).

This warning is included in @option{-Wextra}.  To get other
@option{-Wextra} warnings without this one, use @option{-Wextra
-Wno-override-init}.

@item -Wno-override-init-side-effects @r{(C and Objective-C only)}
@opindex Woverride-init-side-effects
@opindex Wno-override-init-side-effects
Do not warn if an initialized field with side effects is overridden when
using designated initializers (@pxref{Designated Inits, , Designated
Initializers}).  This warning is enabled by default.

@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
instance, in this code, the variable @code{f.x} in @code{struct bar}
is misaligned even though @code{struct bar} does not itself
have the packed attribute:

@smallexample
@group
struct foo @{
  int x;
  char a, b, c, d;
@} __attribute__((packed));
struct bar @{
  char z;
  struct foo f;
@};
@end group
@end smallexample

@item -Wnopacked-bitfield-compat
@opindex Wpacked-bitfield-compat
@opindex Wno-packed-bitfield-compat
The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
on bit-fields of type @code{char}.  This was fixed in GCC 4.4 but
the change can lead to differences in the structure layout.  GCC
informs you when the offset of such a field has changed in GCC 4.4.
For example there is no longer a 4-bit padding between field @code{a}
and @code{b} in this structure:

@smallexample
struct foo
@{
  char a:4;
  char b:8;
@} __attribute__ ((packed));
@end smallexample

This warning is enabled by default.  Use
@option{-Wno-packed-bitfield-compat} to disable this warning.

@item -Wpacked-not-aligned @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wpacked-not-aligned
@opindex Wno-packed-not-aligned
Warn if a structure field with explicitly specified alignment in a
packed struct or union is misaligned.  For example, a warning will
be issued on @code{struct S}, like, @code{warning: alignment 1 of
'struct S' is less than 8}, in this code:

@smallexample
@group
struct __attribute__ ((aligned (8))) S8 @{ char a[8]; @};
struct __attribute__ ((packed)) S @{
  struct S8 s8;
@};
@end group
@end smallexample

This warning is enabled by @option{-Wall}.

@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
reduce the padding and so make the structure smaller.

@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 -Wrestrict
@opindex Wrestrict
@opindex Wno-restrict
Warn when an object referenced by a @code{restrict}-qualified parameter
(or, in C++, a @code{__restrict}-qualified parameter) is aliased by another
argument, or when copies between such objects overlap.  For example,
the call to the @code{strcpy} function below attempts to truncate the string
by replacing its initial characters with the last four.  However, because
the call writes the terminating NUL into @code{a[4]}, the copies overlap and
the call is diagnosed.

@smallexample
void foo (void)
@{
  char a[] = "abcd1234";
  strcpy (a, a + 4);
  @dots{}
@}
@end smallexample
The @option{-Wrestrict} option detects some instances of simple overlap
even without optimization but works best at @option{-O2} and above.  It
is included in @option{-Wall}.

@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 -Winline
@opindex Winline
@opindex Wno-inline
Warn if a function that is declared as inline cannot be inlined.
Even with this option, the compiler does not warn about failures to
inline functions declared in system headers.

The compiler uses a variety of heuristics to determine whether or not
to inline a function.  For example, the compiler takes into account
the size of the function being inlined and the amount of inlining
that has already been done in the current function.  Therefore,
seemingly insignificant changes in the source program can cause the
warnings produced by @option{-Winline} to appear or disappear.

@item -Winterference-size
@opindex Winterference-size
Warn about use of C++17 @code{std::hardware_destructive_interference_size}
without specifying its value with @option{--param destructive-interference-size}.
Also warn about questionable values for that option.

This variable is intended to be used for controlling class layout, to
avoid false sharing in concurrent code:

@smallexample
struct independent_fields @{
  alignas(std::hardware_destructive_interference_size) std::atomic<int> one;
  alignas(std::hardware_destructive_interference_size) std::atomic<int> two;
@};
@end smallexample

Here @samp{one} and @samp{two} are intended to be far enough apart
that stores to one won't require accesses to the other to reload the
cache line.

By default, @option{--param destructive-interference-size} and
@option{--param constructive-interference-size} are set based on the
current @option{-mtune} option, typically to the L1 cache line size
for the particular target CPU, sometimes to a range if tuning for a
generic target.  So all translation units that depend on ABI
compatibility for the use of these variables must be compiled with
the same @option{-mtune} (or @option{-mcpu}).

If ABI stability is important, such as if the use is in a header for a
library, you should probably not use the hardware interference size
variables at all.  Alternatively, you can force a particular value
with @option{--param}.

If you are confident that your use of the variable does not affect ABI
outside a single build of your project, you can turn off the warning
with @option{-Wno-interference-size}.

@item -Wint-in-bool-context
@opindex Wint-in-bool-context
@opindex Wno-int-in-bool-context
Warn for suspicious use of integer values where boolean values are expected,
such as conditional expressions (?:) using non-boolean integer constants in
boolean context, like @code{if (a <= b ? 2 : 3)}.  Or left shifting of signed
integers in boolean context, like @code{for (a = 0; 1 << a; a++);}.  Likewise
for all kinds of multiplications regardless of the data type.
This warning is enabled by @option{-Wall}.

@item -Wno-int-to-pointer-cast
@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. In C++, casting to a pointer type of smaller size is
an error. @option{Wint-to-pointer-cast} is enabled by default.


@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 cannot be used.

@item -Wlong-long
@opindex Wlong-long
@opindex Wno-long-long
Warn if @code{long long} type is used.  This is enabled by either
@option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
modes.  To inhibit the warning messages, use @option{-Wno-long-long}.

@item -Wvariadic-macros
@opindex Wvariadic-macros
@opindex Wno-variadic-macros
Warn if variadic macros are used in ISO C90 mode, or if the GNU
alternate syntax is used in ISO C99 mode.  This is enabled by either
@option{-Wpedantic} or @option{-Wtraditional}.  To inhibit the warning
messages, use @option{-Wno-variadic-macros}.

@item -Wno-varargs
@opindex Wvarargs
@opindex Wno-varargs
Do not warn upon questionable usage of the macros used to handle variable
arguments like @code{va_start}.  These warnings are enabled by default.

@item -Wvector-operation-performance
@opindex Wvector-operation-performance
@opindex Wno-vector-operation-performance
Warn if vector operation is not implemented via SIMD capabilities of the
architecture.  Mainly useful for the performance tuning.
Vector operation can be implemented @code{piecewise}, which means that the
scalar operation is performed on every vector element; 
@code{in parallel}, which means that the vector operation is implemented
using scalars of wider type, which normally is more performance efficient;
and @code{as a single scalar}, which means that vector fits into a
scalar type.

@item -Wvla
@opindex Wvla
@opindex Wno-vla
Warn if a variable-length array is used in the code.
@option{-Wno-vla} prevents the @option{-Wpedantic} warning of
the variable-length array.

@item -Wvla-larger-than=@var{byte-size}
@opindex Wvla-larger-than=
@opindex Wno-vla-larger-than
If this option is used, the compiler warns for declarations of
variable-length arrays whose size is either unbounded, or bounded
by an argument that allows the array size to exceed @var{byte-size}
bytes.  This is similar to how @option{-Walloca-larger-than=}@var{byte-size}
works, but with variable-length arrays.

Note that GCC may optimize small variable-length arrays of a known
value into plain arrays, so this warning may not get triggered for
such arrays.

@option{-Wvla-larger-than=}@samp{PTRDIFF_MAX} is enabled by default but
is typically only effective when @option{-ftree-vrp} is active (default
for @option{-O2} and above).

See also @option{-Walloca-larger-than=@var{byte-size}}.

@item -Wno-vla-larger-than
@opindex Wno-vla-larger-than
Disable @option{-Wvla-larger-than=} warnings.  The option is equivalent
to @option{-Wvla-larger-than=}@samp{SIZE_MAX} or larger.

@item -Wvla-parameter
@opindex Wno-vla-parameter
Warn about redeclarations of functions involving arguments of Variable
Length Array types of inconsistent kinds or forms, and enable the detection
of out-of-bounds accesses to such parameters by warnings such as
@option{-Warray-bounds}.

If the first function declaration uses the VLA form the bound specified
in the array is assumed to be the minimum number of elements expected to
be provided in calls to the function and the maximum number of elements
accessed by it.  Failing to provide arguments of sufficient size or
accessing more than the maximum number of elements may be diagnosed.

For example, the warning triggers for the following redeclarations because
the first one allows an array of any size to be passed to @code{f} while
the second one specifies that the array argument must have at least @code{n}
elements.  In addition, calling @code{f} with the assotiated VLA bound
parameter in excess of the actual VLA bound triggers a warning as well.

@smallexample
void f (int n, int[n]);
void f (int, int[]);     // warning: argument 2 previously declared as a VLA

void g (int n)
@{
    if (n > 4)
      return;
    int a[n];
    f (sizeof a, a);     // warning: access to a by f may be out of bounds
  @dots{}
@}

@end smallexample

@option{-Wvla-parameter} is included in @option{-Wall}.  The
@option{-Warray-parameter} option triggers warnings for similar problems
involving ordinary array arguments.

@item -Wvolatile-register-var
@opindex Wvolatile-register-var
@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.  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 are unable to handle the code
effectively.  Often, the problem is that your code is too big or too
complex; GCC refuses to optimize programs when the optimization
itself is likely to take inordinate amounts of time.

@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.
This option is only supported for C and Objective-C@.  It is implied by
@option{-Wall} and by @option{-Wpedantic}, which can be disabled with
@option{-Wno-pointer-sign}.

@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 are not protected against stack smashing.

@item -Woverlength-strings
@opindex Woverlength-strings
@opindex Wno-overlength-strings
Warn about string constants that are longer than the ``minimum
maximum'' length specified in the C standard.  Modern compilers
generally allow string constants that are much longer than the
standard's minimum limit, but very portable programs should avoid
using longer strings.

The limit applies @emph{after} string constant concatenation, and does
not count the trailing NUL@.  In C90, the limit was 509 characters; in
C99, it was raised to 4095.  C++98 does not specify a normative
minimum maximum, so we do not diagnose overlength strings in C++@.

This option is implied by @option{-Wpedantic}, and can be disabled with
@option{-Wno-overlength-strings}.

@item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
@opindex Wunsuffixed-float-constants
@opindex Wno-unsuffixed-float-constants

Issue a warning for any floating constant that does not have
a suffix.  When used together with @option{-Wsystem-headers} it
warns about such constants in system header files.  This can be useful
when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
from the decimal floating-point extension to C99.

@item -Wno-lto-type-mismatch
@opindex Wlto-type-mismatch
@opindex Wno-lto-type-mismatch

During the link-time optimization, do not warn about type mismatches in
global declarations from different compilation units.
Requires @option{-flto} to be enabled.  Enabled by default.

@item -Wno-designated-init @r{(C and Objective-C only)}
@opindex Wdesignated-init
@opindex Wno-designated-init
Suppress warnings when a positional initializer is used to initialize
a structure that has been marked with the @code{designated_init}
attribute.

@end table

@node Static Analyzer Options
@section Options That Control Static Analysis

@table @gcctabopt
@item -fanalyzer
@opindex analyzer
@opindex fanalyzer
@opindex fno-analyzer
This option enables an static analysis of program flow which looks
for ``interesting'' interprocedural paths through the
code, and issues warnings for problems found on them.

This analysis is much more expensive than other GCC warnings.

Enabling this option effectively enables the following warnings:

@gccoptlist{ @gol
-Wanalyzer-double-fclose @gol
-Wanalyzer-double-free @gol
-Wanalyzer-exposure-through-output-file @gol
-Wanalyzer-file-leak @gol
-Wanalyzer-free-of-non-heap @gol
-Wanalyzer-malloc-leak @gol
-Wanalyzer-mismatching-deallocation @gol
-Wanalyzer-possible-null-argument @gol
-Wanalyzer-possible-null-dereference @gol
-Wanalyzer-null-argument @gol
-Wanalyzer-null-dereference @gol
-Wanalyzer-shift-count-negative @gol
-Wanalyzer-shift-count-overflow @gol
-Wanalyzer-stale-setjmp-buffer @gol
-Wanalyzer-tainted-array-index @gol
-Wanalyzer-unsafe-call-within-signal-handler @gol
-Wanalyzer-use-after-free @gol
-Wanalyzer-use-of-uninitialized-value @gol
-Wanalyzer-use-of-pointer-in-stale-stack-frame @gol
-Wanalyzer-write-to-const @gol
-Wanalyzer-write-to-string-literal @gol
}

This option is only available if GCC was configured with analyzer
support enabled.

@item -Wanalyzer-too-complex
@opindex Wanalyzer-too-complex
@opindex Wno-analyzer-too-complex
If @option{-fanalyzer} is enabled, the analyzer uses various heuristics
to attempt to explore the control flow and data flow in the program,
but these can be defeated by sufficiently complicated code.

By default, the analysis silently stops if the code is too
complicated for the analyzer to fully explore and it reaches an internal
limit.  The @option{-Wanalyzer-too-complex} option warns if this occurs.

@item -Wno-analyzer-double-fclose
@opindex Wanalyzer-double-fclose
@opindex Wno-analyzer-double-fclose
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-double-fclose} to disable it.

This diagnostic warns for paths through the code in which a @code{FILE *}
can have @code{fclose} called on it more than once.

@item -Wno-analyzer-double-free
@opindex Wanalyzer-double-free
@opindex Wno-analyzer-double-free
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-double-free} to disable it.

This diagnostic warns for paths through the code in which a pointer
can have a deallocator called on it more than once, either @code{free},
or a deallocator referenced by attribute @code{malloc}.

@item -Wno-analyzer-exposure-through-output-file
@opindex Wanalyzer-exposure-through-output-file
@opindex Wno-analyzer-exposure-through-output-file
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-exposure-through-output-file}
to disable it.

This diagnostic warns for paths through the code in which a
security-sensitive value is written to an output file
(such as writing a password to a log file).

@item -Wno-analyzer-file-leak
@opindex Wanalyzer-file-leak
@opindex Wno-analyzer-file-leak
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-file-leak}
to disable it.

This diagnostic warns for paths through the code in which a
@code{<stdio.h>} @code{FILE *} stream object is leaked.

@item -Wno-analyzer-free-of-non-heap
@opindex Wanalyzer-free-of-non-heap
@opindex Wno-analyzer-free-of-non-heap
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-free-of-non-heap}
to disable it.

This diagnostic warns for paths through the code in which @code{free}
is called on a non-heap pointer (e.g. an on-stack buffer, or a global).

@item -Wno-analyzer-malloc-leak
@opindex Wanalyzer-malloc-leak
@opindex Wno-analyzer-malloc-leak
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-malloc-leak}
to disable it.

This diagnostic warns for paths through the code in which a
pointer allocated via an allocator is leaked: either @code{malloc},
or a function marked with attribute @code{malloc}.

@item -Wno-analyzer-mismatching-deallocation
@opindex Wanalyzer-mismatching-deallocation
@opindex Wno-analyzer-mismatching-deallocation
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-mismatching-deallocation}
to disable it.

This diagnostic warns for paths through the code in which the
wrong deallocation function is called on a pointer value, based on
which function was used to allocate the pointer value.  The diagnostic
will warn about mismatches between @code{free}, scalar @code{delete}
and vector @code{delete[]}, and those marked as allocator/deallocator
pairs using attribute @code{malloc}.

@item -Wno-analyzer-possible-null-argument
@opindex Wanalyzer-possible-null-argument
@opindex Wno-analyzer-possible-null-argument
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-possible-null-argument} to disable it.

This diagnostic warns for paths through the code in which a
possibly-NULL value is passed to a function argument marked
with @code{__attribute__((nonnull))} as requiring a non-NULL
value.

@item -Wno-analyzer-possible-null-dereference
@opindex Wanalyzer-possible-null-dereference
@opindex Wno-analyzer-possible-null-dereference
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-possible-null-dereference} to disable it.

This diagnostic warns for paths through the code in which a
possibly-NULL value is dereferenced.

@item -Wno-analyzer-null-argument
@opindex Wanalyzer-null-argument
@opindex Wno-analyzer-null-argument
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-null-argument} to disable it.

This diagnostic warns for paths through the code in which a
value known to be NULL is passed to a function argument marked
with @code{__attribute__((nonnull))} as requiring a non-NULL
value.

@item -Wno-analyzer-null-dereference
@opindex Wanalyzer-null-dereference
@opindex Wno-analyzer-null-dereference
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-null-dereference} to disable it.

This diagnostic warns for paths through the code in which a
value known to be NULL is dereferenced.

@item -Wno-analyzer-shift-count-negative
@opindex Wanalyzer-shift-count-negative
@opindex Wno-analyzer-shift-count-negative
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-shift-count-negative} to disable it.

This diagnostic warns for paths through the code in which a
shift is attempted with a negative count.  It is analogous to
the @option{-Wshift-count-negative} diagnostic implemented in
the C/C++ front ends, but is implemented based on analyzing
interprocedural paths, rather than merely parsing the syntax tree.
However, the analyzer does not prioritize detection of such paths, so
false negatives are more likely relative to other warnings.

@item -Wno-analyzer-shift-count-overflow
@opindex Wanalyzer-shift-count-overflow
@opindex Wno-analyzer-shift-count-overflow
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-shift-count-overflow} to disable it.

This diagnostic warns for paths through the code in which a
shift is attempted with a count greater than or equal to the
precision of the operand's type.  It is analogous to
the @option{-Wshift-count-overflow} diagnostic implemented in
the C/C++ front ends, but is implemented based on analyzing
interprocedural paths, rather than merely parsing the syntax tree.
However, the analyzer does not prioritize detection of such paths, so
false negatives are more likely relative to other warnings.

@item -Wno-analyzer-stale-setjmp-buffer
@opindex Wanalyzer-stale-setjmp-buffer
@opindex Wno-analyzer-stale-setjmp-buffer
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-stale-setjmp-buffer} to disable it.

This diagnostic warns for paths through the code in which
@code{longjmp} is called to rewind to a @code{jmp_buf} relating
to a @code{setjmp} call in a function that has returned.

When @code{setjmp} is called on a @code{jmp_buf} to record a rewind
location, it records the stack frame.  The stack frame becomes invalid
when the function containing the @code{setjmp} call returns.  Attempting
to rewind to it via @code{longjmp} would reference a stack frame that
no longer exists, and likely lead to a crash (or worse).

@item -Wno-analyzer-tainted-array-index
@opindex Wanalyzer-tainted-array-index
@opindex Wno-analyzer-tainted-array-index
This warning requires both @option{-fanalyzer} and
@option{-fanalyzer-checker=taint} to enable it;
use @option{-Wno-analyzer-tainted-array-index} to disable it.

This diagnostic warns for paths through the code in which a value
that could be under an attacker's control is used as the index
of an array access without being sanitized.

@item -Wno-analyzer-unsafe-call-within-signal-handler
@opindex Wanalyzer-unsafe-call-within-signal-handler
@opindex Wno-analyzer-unsafe-call-within-signal-handler
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-unsafe-call-within-signal-handler} to disable it.

This diagnostic warns for paths through the code in which a
function known to be async-signal-unsafe (such as @code{fprintf}) is
called from a signal handler.

@item -Wno-analyzer-use-after-free
@opindex Wanalyzer-use-after-free
@opindex Wno-analyzer-use-after-free
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-use-after-free} to disable it.

This diagnostic warns for paths through the code in which a
pointer is used after a deallocator is called on it: either @code{free},
or a deallocator referenced by attribute @code{malloc}.

@item -Wno-analyzer-use-of-pointer-in-stale-stack-frame
@opindex Wanalyzer-use-of-pointer-in-stale-stack-frame
@opindex Wno-analyzer-use-of-pointer-in-stale-stack-frame
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-use-of-pointer-in-stale-stack-frame}
to disable it.

This diagnostic warns for paths through the code in which a pointer
is dereferenced that points to a variable in a stale stack frame.

@item -Wno-analyzer-write-to-const
@opindex Wanalyzer-write-to-const
@opindex Wno-analyzer-write-to-const
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-write-to-const}
to disable it.

This diagnostic warns for paths through the code in which the analyzer
detects an attempt to write through a pointer to a @code{const} object.
However, the analyzer does not prioritize detection of such paths, so
false negatives are more likely relative to other warnings.

@item -Wno-analyzer-write-to-string-literal
@opindex Wanalyzer-write-to-string-literal
@opindex Wno-analyzer-write-to-string-literal
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-write-to-string-literal}
to disable it.

This diagnostic warns for paths through the code in which the analyzer
detects an attempt to write through a pointer to a string literal.
However, the analyzer does not prioritize detection of such paths, so
false negatives are more likely relative to other warnings.

@item -Wno-analyzer-use-of-uninitialized-value
@opindex Wanalyzer-use-of-uninitialized-value
@opindex Wno-analyzer-use-of-uninitialized-value
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-use-of-uninitialized-value} to disable it.

This diagnostic warns for paths through the code in which an uninitialized
value is used.

@end table

Pertinent parameters for controlling the exploration are:
@option{--param analyzer-bb-explosion-factor=@var{value}},
@option{--param analyzer-max-enodes-per-program-point=@var{value}},
@option{--param analyzer-max-recursion-depth=@var{value}}, and
@option{--param analyzer-min-snodes-for-call-summary=@var{value}}.

The following options control the analyzer.

@table @gcctabopt

@item -fanalyzer-call-summaries
@opindex fanalyzer-call-summaries
@opindex fno-analyzer-call-summaries
Simplify interprocedural analysis by computing the effect of certain calls,
rather than exploring all paths through the function from callsite to each
possible return.

If enabled, call summaries are only used for functions with more than one
call site, and that are sufficiently complicated (as per
@option{--param analyzer-min-snodes-for-call-summary=@var{value}}).

@item -fanalyzer-checker=@var{name}
@opindex fanalyzer-checker
Restrict the analyzer to run just the named checker, and enable it.

Some checkers are disabled by default (even with @option{-fanalyzer}),
such as the @code{taint} checker that implements
@option{-Wanalyzer-tainted-array-index}, and this option is required
to enable them.

@item -fno-analyzer-feasibility
@opindex fanalyzer-feasibility
@opindex fno-analyzer-feasibility
This option is intended for analyzer developers.

By default the analyzer verifies that there is a feasible control flow path
for each diagnostic it emits: that the conditions that hold are not mutually
exclusive.  Diagnostics for which no feasible path can be found are rejected.
This filtering can be suppressed with @option{-fno-analyzer-feasibility}, for
debugging issues in this code.

@item -fanalyzer-fine-grained
@opindex fanalyzer-fine-grained
@opindex fno-analyzer-fine-grained
This option is intended for analyzer developers.

Internally the analyzer builds an ``exploded graph'' that combines
control flow graphs with data flow information.

By default, an edge in this graph can contain the effects of a run
of multiple statements within a basic block.  With
@option{-fanalyzer-fine-grained}, each statement gets its own edge.

@item -fanalyzer-show-duplicate-count
@opindex fanalyzer-show-duplicate-count
@opindex fno-analyzer-show-duplicate-count
This option is intended for analyzer developers: if multiple diagnostics
have been detected as being duplicates of each other, it emits a note when
reporting the best diagnostic, giving the number of additional diagnostics
that were suppressed by the deduplication logic.

@item -fno-analyzer-state-merge
@opindex fanalyzer-state-merge
@opindex fno-analyzer-state-merge
This option is intended for analyzer developers.

By default the analyzer attempts to simplify analysis by merging
sufficiently similar states at each program point as it builds its
``exploded graph''.  With @option{-fno-analyzer-state-merge} this
merging can be suppressed, for debugging state-handling issues.

@item -fno-analyzer-state-purge
@opindex fanalyzer-state-purge
@opindex fno-analyzer-state-purge
This option is intended for analyzer developers.

By default the analyzer attempts to simplify analysis by purging
aspects of state at a program point that appear to no longer be relevant
e.g. the values of locals that aren't accessed later in the function
and which aren't relevant to leak analysis.

With @option{-fno-analyzer-state-purge} this purging of state can
be suppressed, for debugging state-handling issues.

@item -fanalyzer-transitivity
@opindex fanalyzer-transitivity
@opindex fno-analyzer-transitivity
This option enables transitivity of constraints within the analyzer.

@item -fanalyzer-verbose-edges
This option is intended for analyzer developers.  It enables more
verbose, lower-level detail in the descriptions of control flow
within diagnostic paths.

@item -fanalyzer-verbose-state-changes
This option is intended for analyzer developers.  It enables more
verbose, lower-level detail in the descriptions of events relating
to state machines within diagnostic paths.

@item -fanalyzer-verbosity=@var{level}
This option controls the complexity of the control flow paths that are
emitted for analyzer diagnostics.

The @var{level} can be one of:

@table @samp
@item 0
At this level, interprocedural call and return events are displayed,
along with the most pertinent state-change events relating to
a diagnostic.  For example, for a double-@code{free} diagnostic,
both calls to @code{free} will be shown.

@item 1
As per the previous level, but also show events for the entry
to each function.

@item 2
As per the previous level, but also show events relating to
control flow that are significant to triggering the issue
(e.g. ``true path taken'' at a conditional).

This level is the default.

@item 3
As per the previous level, but show all control flow events, not
just significant ones.

@item 4
This level is intended for analyzer developers; it adds various
other events intended for debugging the analyzer.

@end table

@item -fdump-analyzer
@opindex fdump-analyzer
Dump internal details about what the analyzer is doing to
@file{@var{file}.analyzer.txt}.
This option is overridden by @option{-fdump-analyzer-stderr}.

@item -fdump-analyzer-stderr
@opindex fdump-analyzer-stderr
Dump internal details about what the analyzer is doing to stderr.
This option overrides @option{-fdump-analyzer}.

@item -fdump-analyzer-callgraph
@opindex fdump-analyzer-callgraph
Dump a representation of the call graph suitable for viewing with
GraphViz to @file{@var{file}.callgraph.dot}.

@item -fdump-analyzer-exploded-graph
@opindex fdump-analyzer-exploded-graph
Dump a representation of the ``exploded graph'' suitable for viewing with
GraphViz to @file{@var{file}.eg.dot}.
Nodes are color-coded based on state-machine states to emphasize
state changes.

@item -fdump-analyzer-exploded-nodes
@opindex dump-analyzer-exploded-nodes
Emit diagnostics showing where nodes in the ``exploded graph'' are
in relation to the program source.

@item -fdump-analyzer-exploded-nodes-2
@opindex dump-analyzer-exploded-nodes-2
Dump a textual representation of the ``exploded graph'' to
@file{@var{file}.eg.txt}.

@item -fdump-analyzer-exploded-nodes-3
@opindex dump-analyzer-exploded-nodes-3
Dump a textual representation of the ``exploded graph'' to
one dump file per node, to @file{@var{file}.eg-@var{id}.txt}.
This is typically a large number of dump files.

@item -fdump-analyzer-exploded-paths
@opindex fdump-analyzer-exploded-paths
Dump a textual representation of the ``exploded path'' for each
diagnostic to @file{@var{file}.@var{idx}.@var{kind}.epath.txt}.

@item -fdump-analyzer-feasibility
@opindex dump-analyzer-feasibility
Dump internal details about the analyzer's search for feasible paths.
The details are written in a form suitable for viewing with GraphViz
to filenames of the form @file{@var{file}.*.fg.dot} and
@file{@var{file}.*.tg.dot}.

@item -fdump-analyzer-json
@opindex fdump-analyzer-json
Dump a compressed JSON representation of analyzer internals to
@file{@var{file}.analyzer.json.gz}.  The precise format is subject
to change.

@item -fdump-analyzer-state-purge
@opindex fdump-analyzer-state-purge
As per @option{-fdump-analyzer-supergraph}, dump a representation of the
``supergraph'' suitable for viewing with GraphViz, but annotate the
graph with information on what state will be purged at each node.
The graph is written to @file{@var{file}.state-purge.dot}.

@item -fdump-analyzer-supergraph
@opindex fdump-analyzer-supergraph
Dump representations of the ``supergraph'' suitable for viewing with
GraphViz to @file{@var{file}.supergraph.dot} and to
@file{@var{file}.supergraph-eg.dot}.  These show all of the
control flow graphs in the program, with interprocedural edges for
calls and returns.  The second dump contains annotations showing nodes
in the ``exploded graph'' and diagnostics associated with them.

@end table

@node Debugging Options
@section Options for Debugging Your Program
@cindex options, debugging
@cindex debugging information options

To tell GCC to emit extra information for use by a debugger, in almost 
all cases you need only to add @option{-g} to your other options.  Some debug
formats can co-exist (like DWARF with CTF) when each of them is enabled
explicitly by adding the respective command line option to your other options.

GCC allows you to use @option{-g} with
@option{-O}.  The shortcuts taken by optimized code may occasionally
be surprising: some variables you declared may not exist
at all; flow of control may briefly move where you did not expect it;
some statements may not be executed because they compute constant
results or their values are already at hand; some statements may
execute in different places because they have been moved out of loops.
Nevertheless it is possible to debug optimized output.  This makes
it reasonable to use the optimizer for programs that might have bugs.

If you are not using some other optimization option, consider
using @option{-Og} (@pxref{Optimize Options}) with @option{-g}.  
With no @option{-O} option at all, some compiler passes that collect
information useful for debugging do not run at all, so that
@option{-Og} may result in a better debugging experience.

@table @gcctabopt
@item -g
@opindex g
Produce debugging information in the operating system's native format
(stabs, COFF, XCOFF, or DWARF)@.  GDB can work with this debugging
information.

On most systems that use stabs format, @option{-g} enables use of extra
debugging information that only GDB can use; this extra information
makes debugging work better in GDB but probably makes other debuggers
crash or
refuse to read the program.  If you want to control for certain whether
to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).

@item -ggdb
@opindex ggdb
Produce debugging information for use by GDB@.  This means to use the
most expressive format available (DWARF, stabs, or the native format
if neither of those are supported), including GDB extensions if at all
possible.

@item -gdwarf
@itemx -gdwarf-@var{version}
@opindex gdwarf
Produce debugging information in DWARF format (if that is supported).
The value of @var{version} may be either 2, 3, 4 or 5; the default
version for most targets is 5 (with the exception of VxWorks, TPF and
Darwin/Mac OS X, which default to version 2, and AIX, which defaults
to version 4).

Note that with DWARF Version 2, some ports require and always
use some non-conflicting DWARF 3 extensions in the unwind tables.

Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
for maximum benefit. Version 5 requires GDB 8.0 or higher.

GCC no longer supports DWARF Version 1, which is substantially
different than Version 2 and later.  For historical reasons, some
other DWARF-related options such as
@option{-fno-dwarf2-cfi-asm}) retain a reference to DWARF Version 2
in their names, but apply to all currently-supported versions of DWARF.

@item -gbtf
@opindex gbtf
Request BTF debug information.  BTF is the default debugging format for the
eBPF target.  On other targets, like x86, BTF debug information can be
generated along with DWARF debug information when both of the debug formats are
enabled explicitly via their respective command line options.

@item -gctf
@itemx -gctf@var{level}
@opindex gctf
Request CTF debug information and use level to specify how much CTF debug
information should be produced.  If @option{-gctf} is specified
without a value for level, the default level of CTF debug information is 2.

CTF debug information can be generated along with DWARF debug information when
both of the debug formats are enabled explicitly via their respective command
line options.

Level 0 produces no CTF debug information at all.  Thus, @option{-gctf0}
negates @option{-gctf}.

Level 1 produces CTF information for tracebacks only.  This includes callsite
information, but does not include type information.

Level 2 produces type information for entities (functions, data objects etc.)
at file-scope or global-scope only.

@item -gstabs
@opindex gstabs
Produce debugging information in stabs format (if that is supported),
without GDB extensions.  This is the format used by DBX on most BSD
systems.  On MIPS, Alpha and System V Release 4 systems this option
produces stabs debugging output that is not understood by DBX@.
On System V Release 4 systems this option requires the GNU assembler.

@item -gstabs+
@opindex gstabs+
Produce debugging information in stabs format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB)@.  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program.

@item -gxcoff
@opindex gxcoff
Produce debugging information in XCOFF format (if that is supported).
This is the format used by the DBX debugger on IBM RS/6000 systems.

@item -gxcoff+
@opindex gxcoff+
Produce debugging information in XCOFF format (if that is supported),
using GNU extensions understood only by the GNU debugger (GDB)@.  The
use of these extensions is likely to make other debuggers crash or
refuse to read the program, and may cause assemblers other than the GNU
assembler (GAS) to fail with an error.

@item -gvms
@opindex gvms
Produce debugging information in Alpha/VMS debug format (if that is
supported).  This is the format used by DEBUG on Alpha/VMS systems.

@item -g@var{level}
@itemx -ggdb@var{level}
@itemx -gstabs@var{level}
@itemx -gxcoff@var{level}
@itemx -gvms@var{level}
Request debugging information and also use @var{level} to specify how
much information.  The default level is 2.

Level 0 produces no debug information at all.  Thus, @option{-g0} negates
@option{-g}.

Level 1 produces minimal information, enough for making backtraces in
parts of the program that you don't plan to debug.  This includes
descriptions of functions and external variables, and line number
tables, but no information about local variables.

Level 3 includes extra information, such as all the macro definitions
present in the program.  Some debuggers support macro expansion when
you use @option{-g3}.

If you use multiple @option{-g} options, with or without level numbers,
the last such option is the one that is effective.

@option{-gdwarf} does not accept a concatenated debug level, to avoid
confusion with @option{-gdwarf-@var{level}}.
Instead use an additional @option{-g@var{level}} option to change the
debug level for DWARF.

@item -fno-eliminate-unused-debug-symbols
@opindex feliminate-unused-debug-symbols
@opindex fno-eliminate-unused-debug-symbols
By default, no debug information is produced for symbols that are not actually
used. Use this option if you want debug information for all symbols.

@item -femit-class-debug-always
@opindex femit-class-debug-always
Instead of emitting debugging information for a C++ class in only one
object file, emit it in all object files using the class.  This option
should be used only with debuggers that are unable to handle the way GCC
normally emits debugging information for classes because using this
option increases the size of debugging information by as much as a
factor of two.

@item -fno-merge-debug-strings
@opindex fmerge-debug-strings
@opindex fno-merge-debug-strings
Direct the linker to not merge together strings in the debugging
information that are identical in different object files.  Merging is
not supported by all assemblers or linkers.  Merging decreases the size
of the debug information in the output file at the cost of increasing
link processing time.  Merging is enabled by default.

@item -fdebug-prefix-map=@var{old}=@var{new}
@opindex fdebug-prefix-map
When compiling files residing in directory @file{@var{old}}, record
debugging information describing them as if the files resided in
directory @file{@var{new}} instead.  This can be used to replace a
build-time path with an install-time path in the debug info.  It can
also be used to change an absolute path to a relative path by using
@file{.} for @var{new}.  This can give more reproducible builds, which
are location independent, but may require an extra command to tell GDB
where to find the source files. See also @option{-ffile-prefix-map}.

@item -fvar-tracking
@opindex fvar-tracking
Run variable tracking pass.  It computes where variables are stored at each
position in code.  Better debugging information is then generated
(if the debugging information format supports this information).

It is enabled by default when compiling with optimization (@option{-Os},
@option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
the debug info format supports it.

@item -fvar-tracking-assignments
@opindex fvar-tracking-assignments
@opindex fno-var-tracking-assignments
Annotate assignments to user variables early in the compilation and
attempt to carry the annotations over throughout the compilation all the
way to the end, in an attempt to improve debug information while
optimizing.  Use of @option{-gdwarf-4} is recommended along with it.

It can be enabled even if var-tracking is disabled, in which case
annotations are created and maintained, but discarded at the end.
By default, this flag is enabled together with @option{-fvar-tracking},
except when selective scheduling is enabled.

@item -gsplit-dwarf
@opindex gsplit-dwarf
If DWARF debugging information is enabled, separate as much debugging
information as possible into a separate output file with the extension
@file{.dwo}.  This option allows the build system to avoid linking files with
debug information.  To be useful, this option requires a debugger capable of
reading @file{.dwo} files.

@item -gdwarf32
@itemx -gdwarf64
@opindex gdwarf32
@opindex gdwarf64
If DWARF debugging information is enabled, the @option{-gdwarf32} selects
the 32-bit DWARF format and the @option{-gdwarf64} selects the 64-bit
DWARF format.  The default is target specific, on most targets it is
@option{-gdwarf32} though.  The 32-bit DWARF format is smaller, but
can't support more than 2GiB of debug information in any of the DWARF
debug information sections.  The 64-bit DWARF format allows larger debug
information and might not be well supported by all consumers yet.

@item -gdescribe-dies
@opindex gdescribe-dies
Add description attributes to some DWARF DIEs that have no name attribute,
such as artificial variables, external references and call site
parameter DIEs.

@item -gpubnames
@opindex gpubnames
Generate DWARF @code{.debug_pubnames} and @code{.debug_pubtypes} sections.

@item -ggnu-pubnames
@opindex ggnu-pubnames
Generate @code{.debug_pubnames} and @code{.debug_pubtypes} sections in a format
suitable for conversion into a GDB@ index.  This option is only useful
with a linker that can produce GDB@ index version 7.

@item -fdebug-types-section
@opindex fdebug-types-section
@opindex fno-debug-types-section
When using DWARF Version 4 or higher, type DIEs can be put into
their own @code{.debug_types} section instead of making them part of the
@code{.debug_info} section.  It is more efficient to put them in a separate
comdat section since the linker can then remove duplicates.
But not all DWARF consumers support @code{.debug_types} sections yet
and on some objects @code{.debug_types} produces larger instead of smaller
debugging information.

@item -grecord-gcc-switches
@itemx -gno-record-gcc-switches
@opindex grecord-gcc-switches
@opindex gno-record-gcc-switches
This switch causes the command-line options used to invoke the
compiler that may affect code generation to be appended to the
DW_AT_producer attribute in DWARF debugging information.  The options
are concatenated with spaces separating them from each other and from
the compiler version.  
It is enabled by default.
See also @option{-frecord-gcc-switches} for another
way of storing compiler options into the object file.  

@item -gstrict-dwarf
@opindex gstrict-dwarf
Disallow using extensions of later DWARF standard version than selected
with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
DWARF extensions from later standard versions is allowed.

@item -gno-strict-dwarf
@opindex gno-strict-dwarf
Allow using extensions of later DWARF standard version than selected with
@option{-gdwarf-@var{version}}.

@item -gas-loc-support
@opindex gas-loc-support
Inform the compiler that the assembler supports @code{.loc} directives.
It may then use them for the assembler to generate DWARF2+ line number
tables.

This is generally desirable, because assembler-generated line-number
tables are a lot more compact than those the compiler can generate
itself.

This option will be enabled by default if, at GCC configure time, the
assembler was found to support such directives.

@item -gno-as-loc-support
@opindex gno-as-loc-support
Force GCC to generate DWARF2+ line number tables internally, if DWARF2+
line number tables are to be generated.

@item -gas-locview-support
@opindex gas-locview-support
Inform the compiler that the assembler supports @code{view} assignment
and reset assertion checking in @code{.loc} directives.

This option will be enabled by default if, at GCC configure time, the
assembler was found to support them.

@item -gno-as-locview-support
Force GCC to assign view numbers internally, if
@option{-gvariable-location-views} are explicitly requested.

@item -gcolumn-info
@itemx -gno-column-info
@opindex gcolumn-info
@opindex gno-column-info
Emit location column information into DWARF debugging information, rather
than just file and line.
This option is enabled by default.

@item -gstatement-frontiers
@itemx -gno-statement-frontiers
@opindex gstatement-frontiers
@opindex gno-statement-frontiers
This option causes GCC to create markers in the internal representation
at the beginning of statements, and to keep them roughly in place
throughout compilation, using them to guide the output of @code{is_stmt}
markers in the line number table.  This is enabled by default when
compiling with optimization (@option{-Os}, @option{-O1}, @option{-O2},
@dots{}), and outputting DWARF 2 debug information at the normal level.

@item -gvariable-location-views
@itemx -gvariable-location-views=incompat5
@itemx -gno-variable-location-views
@opindex gvariable-location-views
@opindex gvariable-location-views=incompat5
@opindex gno-variable-location-views
Augment variable location lists with progressive view numbers implied
from the line number table.  This enables debug information consumers to
inspect state at certain points of the program, even if no instructions
associated with the corresponding source locations are present at that
point.  If the assembler lacks support for view numbers in line number
tables, this will cause the compiler to emit the line number table,
which generally makes them somewhat less compact.  The augmented line
number tables and location lists are fully backward-compatible, so they
can be consumed by debug information consumers that are not aware of
these augmentations, but they won't derive any benefit from them either.

This is enabled by default when outputting DWARF 2 debug information at
the normal level, as long as there is assembler support,
@option{-fvar-tracking-assignments} is enabled and
@option{-gstrict-dwarf} is not.  When assembler support is not
available, this may still be enabled, but it will force GCC to output
internal line number tables, and if
@option{-ginternal-reset-location-views} is not enabled, that will most
certainly lead to silently mismatching location views.

There is a proposed representation for view numbers that is not backward
compatible with the location list format introduced in DWARF 5, that can
be enabled with @option{-gvariable-location-views=incompat5}.  This
option may be removed in the future, is only provided as a reference
implementation of the proposed representation.  Debug information
consumers are not expected to support this extended format, and they
would be rendered unable to decode location lists using it.

@item -ginternal-reset-location-views
@itemx -gno-internal-reset-location-views
@opindex ginternal-reset-location-views
@opindex gno-internal-reset-location-views
Attempt to determine location views that can be omitted from location
view lists.  This requires the compiler to have very accurate insn
length estimates, which isn't always the case, and it may cause
incorrect view lists to be generated silently when using an assembler
that does not support location view lists.  The GNU assembler will flag
any such error as a @code{view number mismatch}.  This is only enabled
on ports that define a reliable estimation function.

@item -ginline-points
@itemx -gno-inline-points
@opindex ginline-points
@opindex gno-inline-points
Generate extended debug information for inlined functions.  Location
view tracking markers are inserted at inlined entry points, so that
address and view numbers can be computed and output in debug
information.  This can be enabled independently of location views, in
which case the view numbers won't be output, but it can only be enabled
along with statement frontiers, and it is only enabled by default if
location views are enabled.

@item -gz@r{[}=@var{type}@r{]}
@opindex gz
Produce compressed debug sections in DWARF format, if that is supported.
If @var{type} is not given, the default type depends on the capabilities
of the assembler and linker used.  @var{type} may be one of
@samp{none} (don't compress debug sections), @samp{zlib} (use zlib
compression in ELF gABI format), or @samp{zlib-gnu} (use zlib
compression in traditional GNU format).  If the linker doesn't support
writing compressed debug sections, the option is rejected.  Otherwise,
if the assembler does not support them, @option{-gz} is silently ignored
when producing object files.

@item -femit-struct-debug-baseonly
@opindex femit-struct-debug-baseonly
Emit debug information for struct-like types
only when the base name of the compilation source file
matches the base name of file in which the struct is defined.

This option substantially reduces the size of debugging information,
but at significant potential loss in type information to the debugger.
See @option{-femit-struct-debug-reduced} for a less aggressive option.
See @option{-femit-struct-debug-detailed} for more detailed control.

This option works only with DWARF debug output.

@item -femit-struct-debug-reduced
@opindex femit-struct-debug-reduced
Emit debug information for struct-like types
only when the base name of the compilation source file
matches the base name of file in which the type is defined,
unless the struct is a template or defined in a system header.

This option significantly reduces the size of debugging information,
with some potential loss in type information to the debugger.
See @option{-femit-struct-debug-baseonly} for a more aggressive option.
See @option{-femit-struct-debug-detailed} for more detailed control.

This option works only with DWARF debug output.

@item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
@opindex femit-struct-debug-detailed
Specify the struct-like types
for which the compiler generates debug information.
The intent is to reduce duplicate struct debug information
between different object files within the same program.

This option is a detailed version of
@option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
which serves for most needs.

A specification has the syntax@*
[@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})

The optional first word limits the specification to
structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
A struct type is used directly when it is the type of a variable, member.
Indirect uses arise through pointers to structs.
That is, when use of an incomplete struct is valid, the use is indirect.
An example is
@samp{struct one direct; struct two * indirect;}.

The optional second word limits the specification to
ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
Generic structs are a bit complicated to explain.
For C++, these are non-explicit specializations of template classes,
or non-template classes within the above.
Other programming languages have generics,
but @option{-femit-struct-debug-detailed} does not yet implement them.

The third word specifies the source files for those
structs for which the compiler should emit debug information.
The values @samp{none} and @samp{any} have the normal meaning.
The value @samp{base} means that
the base of name of the file in which the type declaration appears
must match the base of the name of the main compilation file.
In practice, this means that when compiling @file{foo.c}, debug information
is generated for types declared in that file and @file{foo.h},
but not other header files.
The value @samp{sys} means those types satisfying @samp{base}
or declared in system or compiler headers.

You may need to experiment to determine the best settings for your application.

The default is @option{-femit-struct-debug-detailed=all}.

This option works only with DWARF debug output.

@item -fno-dwarf2-cfi-asm
@opindex fdwarf2-cfi-asm
@opindex fno-dwarf2-cfi-asm
Emit DWARF unwind info as compiler generated @code{.eh_frame} section
instead of using GAS @code{.cfi_*} directives.

@item -fno-eliminate-unused-debug-types
@opindex feliminate-unused-debug-types
@opindex fno-eliminate-unused-debug-types
Normally, when producing DWARF output, GCC avoids producing debug symbol 
output for types that are nowhere used in the source file being compiled.
Sometimes it is useful to have GCC emit debugging
information for all types declared in a compilation
unit, regardless of whether or not they are actually used
in that compilation unit, for example 
if, in the debugger, you want to cast a value to a type that is
not actually used in your program (but is declared).  More often,
however, this results in a significant amount of wasted space.
@end table

@node Optimize Options
@section Options That Control Optimization
@cindex optimize options
@cindex options, optimization

These options control various sorts of optimizations.

Without any optimization option, the compiler's goal is to reduce the
cost of compilation and to make debugging produce the expected
results.  Statements are independent: if you stop the program with a
breakpoint between statements, you can then assign a new value to any
variable or change the program counter to any other statement in the
function and get exactly the results you expect from the source
code.

Turning on optimization flags makes the compiler attempt to improve
the performance and/or code size at the expense of compilation time
and possibly the ability to debug the program.

The compiler performs optimization based on the knowledge it has of the
program.  Compiling multiple files at once to a single output file mode allows
the compiler to use information gained from all of the files when compiling
each of them.

Not all optimizations are controlled directly by a flag.  Only
optimizations that have a flag are listed in this section.

Most optimizations are completely disabled at @option{-O0} or if an
@option{-O} level is not set on the command line, even if individual
optimization flags are specified.  Similarly, @option{-Og} suppresses
many optimization passes.

Depending on the target and how GCC was configured, a slightly different
set of optimizations may be enabled at each @option{-O} level than
those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
to find out the exact set of optimizations that are enabled at each level.
@xref{Overall Options}, for examples.

@table @gcctabopt
@item -O
@itemx -O1
@opindex O
@opindex O1
Optimize.  Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.

With @option{-O}, the compiler tries to reduce code size and execution
time, without performing any optimizations that take a great deal of
compilation time.

@c Note that in addition to the default_options_table list in opts.c,
@c several optimization flags default to true but control optimization
@c passes that are explicitly disabled at -O0.

@option{-O} turns on the following optimization flags:

@c Please keep the following list alphabetized.
@gccoptlist{-fauto-inc-dec @gol
-fbranch-count-reg @gol
-fcombine-stack-adjustments @gol
-fcompare-elim @gol
-fcprop-registers @gol
-fdce @gol
-fdefer-pop @gol
-fdelayed-branch @gol
-fdse @gol
-fforward-propagate @gol
-fguess-branch-probability @gol
-fif-conversion @gol
-fif-conversion2 @gol
-finline-functions-called-once @gol
-fipa-modref @gol
-fipa-profile @gol
-fipa-pure-const @gol
-fipa-reference @gol
-fipa-reference-addressable @gol
-fmerge-constants @gol
-fmove-loop-invariants @gol
-fmove-loop-stores@gol
-fomit-frame-pointer @gol
-freorder-blocks @gol
-fshrink-wrap @gol
-fshrink-wrap-separate @gol
-fsplit-wide-types @gol
-fssa-backprop @gol
-fssa-phiopt @gol
-ftree-bit-ccp @gol
-ftree-ccp @gol
-ftree-ch @gol
-ftree-coalesce-vars @gol
-ftree-copy-prop @gol
-ftree-dce @gol
-ftree-dominator-opts @gol
-ftree-dse @gol
-ftree-forwprop @gol
-ftree-fre @gol
-ftree-phiprop @gol
-ftree-pta @gol
-ftree-scev-cprop @gol
-ftree-sink @gol
-ftree-slsr @gol
-ftree-sra @gol
-ftree-ter @gol
-funit-at-a-time}

@item -O2
@opindex O2
Optimize even more.  GCC performs nearly all supported optimizations
that do not involve a space-speed tradeoff.
As compared to @option{-O}, this option increases both compilation time
and the performance of the generated code.

@option{-O2} turns on all optimization flags specified by @option{-O1}.  It
also turns on the following optimization flags:

@c Please keep the following list alphabetized!
@gccoptlist{-falign-functions  -falign-jumps @gol
-falign-labels  -falign-loops @gol
-fcaller-saves @gol
-fcode-hoisting @gol
-fcrossjumping @gol
-fcse-follow-jumps  -fcse-skip-blocks @gol
-fdelete-null-pointer-checks @gol
-fdevirtualize  -fdevirtualize-speculatively @gol
-fexpensive-optimizations @gol
-ffinite-loops @gol
-fgcse  -fgcse-lm  @gol
-fhoist-adjacent-loads @gol
-finline-functions @gol
-finline-small-functions @gol
-findirect-inlining @gol
-fipa-bit-cp  -fipa-cp  -fipa-icf @gol
-fipa-ra  -fipa-sra  -fipa-vrp @gol
-fisolate-erroneous-paths-dereference @gol
-flra-remat @gol
-foptimize-sibling-calls @gol
-foptimize-strlen @gol
-fpartial-inlining @gol
-fpeephole2 @gol
-freorder-blocks-algorithm=stc @gol
-freorder-blocks-and-partition  -freorder-functions @gol
-frerun-cse-after-loop  @gol
-fschedule-insns  -fschedule-insns2 @gol
-fsched-interblock  -fsched-spec @gol
-fstore-merging @gol
-fstrict-aliasing @gol
-fthread-jumps @gol
-ftree-builtin-call-dce @gol
-ftree-loop-vectorize @gol
-ftree-pre @gol
-ftree-slp-vectorize @gol
-ftree-switch-conversion  -ftree-tail-merge @gol
-ftree-vrp @gol
-fvect-cost-model=very-cheap}

Please note the warning under @option{-fgcse} about
invoking @option{-O2} on programs that use computed gotos.

@item -O3
@opindex O3
Optimize yet more.  @option{-O3} turns on all optimizations specified
by @option{-O2} and also turns on the following optimization flags:

@c Please keep the following list alphabetized!
@gccoptlist{-fgcse-after-reload @gol
-fipa-cp-clone
-floop-interchange @gol
-floop-unroll-and-jam @gol
-fpeel-loops @gol
-fpredictive-commoning @gol
-fsplit-loops @gol
-fsplit-paths @gol
-ftree-loop-distribution @gol
-ftree-partial-pre @gol
-funswitch-loops @gol
-fvect-cost-model=dynamic @gol
-fversion-loops-for-strides}

@item -O0
@opindex O0
Reduce compilation time and make debugging produce the expected
results.  This is the default.

@item -Os
@opindex Os
Optimize for size.  @option{-Os} enables all @option{-O2} optimizations 
except those that often increase code size:

@gccoptlist{-falign-functions  -falign-jumps @gol
-falign-labels  -falign-loops @gol
-fprefetch-loop-arrays  -freorder-blocks-algorithm=stc}

It also enables @option{-finline-functions}, causes the compiler to tune for
code size rather than execution speed, and performs further optimizations
designed to reduce code size.

@item -Ofast
@opindex Ofast
Disregard strict standards compliance.  @option{-Ofast} enables all
@option{-O3} optimizations.  It also enables optimizations that are not
valid for all standard-compliant programs.
It turns on @option{-ffast-math}, @option{-fallow-store-data-races}
and the Fortran-specific @option{-fstack-arrays}, unless
@option{-fmax-stack-var-size} is specified, and @option{-fno-protect-parens}.

@item -Og
@opindex Og
Optimize debugging experience.  @option{-Og} should be the optimization
level of choice for the standard edit-compile-debug cycle, offering
a reasonable level of optimization while maintaining fast compilation
and a good debugging experience.  It is a better choice than @option{-O0}
for producing debuggable code because some compiler passes
that collect debug information are disabled at @option{-O0}.

Like @option{-O0}, @option{-Og} completely disables a number of 
optimization passes so that individual options controlling them have
no effect.  Otherwise @option{-Og} enables all @option{-O1} 
optimization flags except for those that may interfere with debugging:

@gccoptlist{-fbranch-count-reg  -fdelayed-branch @gol
-fdse  -fif-conversion  -fif-conversion2  @gol
-finline-functions-called-once @gol
-fmove-loop-invariants  -fmove-loop-stores  -fssa-phiopt @gol
-ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra}

@end table

If you use multiple @option{-O} options, with or without level numbers,
the last such option is the one that is effective.

Options of the form @option{-f@var{flag}} specify machine-independent
flags.  Most flags have both positive and negative forms; the negative
form of @option{-ffoo} is @option{-fno-foo}.  In the table
below, only one of the forms is listed---the one you typically 
use.  You can figure out the other form by either removing @samp{no-}
or adding it.

The following options control specific optimizations.  They are either
activated by @option{-O} options or are related to ones that are.  You
can use the following flags in the rare cases when ``fine-tuning'' of
optimizations to be performed is desired.

@table @gcctabopt
@item -fno-defer-pop
@opindex fno-defer-pop
@opindex fdefer-pop
For machines that must pop arguments after a function call, always pop 
the arguments as soon as each function returns.  
At levels @option{-O1} and higher, @option{-fdefer-pop} is the default;
this allows the compiler to let arguments accumulate on the stack for several
function calls and pop them all at once.

@item -fforward-propagate
@opindex fforward-propagate
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.

This option is enabled by default at optimization levels @option{-O1},
@option{-O2}, @option{-O3}, @option{-Os}.

@item -ffp-contract=@var{style}
@opindex ffp-contract
@option{-ffp-contract=off} disables floating-point expression contraction.
@option{-ffp-contract=fast} enables floating-point expression contraction
such as forming of fused multiply-add operations if the target has
native support for them.
@option{-ffp-contract=on} enables floating-point expression contraction
if allowed by the language standard.  This is currently not implemented
and treated equal to @option{-ffp-contract=off}.

The default is @option{-ffp-contract=fast}.

@item -fomit-frame-pointer
@opindex fomit-frame-pointer
Omit the frame pointer in functions that don't need one.  This avoids the
instructions to save, set up and restore the frame pointer; on many targets
it also makes an extra register available.

On some targets this flag has no effect because the standard calling sequence
always uses a frame pointer, so it cannot be omitted.

Note that @option{-fno-omit-frame-pointer} doesn't guarantee the frame pointer
is used in all functions.  Several targets always omit the frame pointer in
leaf functions.

Enabled by default at @option{-O1} and higher.

@item -foptimize-sibling-calls
@opindex foptimize-sibling-calls
Optimize sibling and tail recursive calls.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -foptimize-strlen
@opindex foptimize-strlen
Optimize various standard C string functions (e.g.@: @code{strlen},
@code{strchr} or @code{strcpy}) and
their @code{_FORTIFY_SOURCE} counterparts into faster alternatives.

Enabled at levels @option{-O2}, @option{-O3}.

@item -fno-inline
@opindex fno-inline
@opindex finline
Do not expand any functions inline apart from those marked with
the @code{always_inline} attribute.  This is the default when not
optimizing.

Single functions can be exempted from inlining by marking them
with the @code{noinline} attribute.

@item -finline-small-functions
@opindex finline-small-functions
Integrate functions into their callers when their body is smaller than expected
function call code (so overall size of program gets smaller).  The compiler
heuristically decides which functions are simple enough to be worth integrating
in this way.  This inlining applies to all functions, even those not declared
inline.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -findirect-inlining
@opindex findirect-inlining
Inline also indirect calls that are discovered to be known at compile
time thanks to previous inlining.  This option has any effect only
when inlining itself is turned on by the @option{-finline-functions}
or @option{-finline-small-functions} options.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -finline-functions
@opindex finline-functions
Consider all functions for inlining, even if they are not declared inline.
The compiler heuristically decides which functions are worth integrating
in this way.

If all calls to a given function are integrated, and the function is
declared @code{static}, then the function is normally not output as
assembler code in its own right.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.  Also enabled
by @option{-fprofile-use} and @option{-fauto-profile}.

@item -finline-functions-called-once
@opindex finline-functions-called-once
Consider all @code{static} functions called once for inlining into their
caller even if they are not marked @code{inline}.  If a call to a given
function is integrated, then the function is not output as assembler code
in its own right.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os},
but not @option{-Og}.

@item -fearly-inlining
@opindex fearly-inlining
Inline functions marked by @code{always_inline} and functions whose body seems
smaller than the function call overhead early before doing
@option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
makes profiling significantly cheaper and usually inlining faster on programs
having large chains of nested wrapper functions.

Enabled by default.

@item -fipa-sra
@opindex fipa-sra
Perform interprocedural scalar replacement of aggregates, removal of
unused parameters and replacement of parameters passed by reference
by parameters passed by value.

Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.

@item -finline-limit=@var{n}
@opindex finline-limit
By default, GCC limits the size of functions that can be inlined.  This flag
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}}.
The @option{-finline-limit=@var{n}} option sets some of these parameters
as follows:

@table @gcctabopt
@item max-inline-insns-single
is set to @var{n}/2.
@item max-inline-insns-auto
is set to @var{n}/2.
@end table

See below for a documentation of the individual
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
of assembly instructions and as such its exact meaning might change from one
release to an another.

@item -fno-keep-inline-dllexport
@opindex fno-keep-inline-dllexport
@opindex fkeep-inline-dllexport
This is a more fine-grained version of @option{-fkeep-inline-functions},
which applies only to functions that are declared using the @code{dllexport}
attribute or declspec.  @xref{Function Attributes,,Declaring Attributes of
Functions}.

@item -fkeep-inline-functions
@opindex fkeep-inline-functions
In C, emit @code{static} functions that are declared @code{inline}
into the object file, even if the function has been inlined into all
of its callers.  This switch does not affect functions using the
@code{extern inline} extension in GNU C90@.  In C++, emit any and all
inline functions into the object file.

@item -fkeep-static-functions
@opindex fkeep-static-functions
Emit @code{static} functions into the object file, even if the function
is never used.

@item -fkeep-static-consts
@opindex fkeep-static-consts
Emit variables declared @code{static const} when optimization isn't turned
on, even if the variables aren't referenced.

GCC enables this option by default.  If you want to force the compiler to
check if a variable is referenced, regardless of whether or not
optimization is turned on, use the @option{-fno-keep-static-consts} option.

@item -fmerge-constants
@opindex fmerge-constants
Attempt to merge identical constants (string constants and floating-point
constants) across compilation units.

This option is the default for optimized compilation if the assembler and
linker support it.  Use @option{-fno-merge-constants} to inhibit this
behavior.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fmerge-all-constants
@opindex fmerge-all-constants
Attempt to merge identical constants and identical variables.

This option implies @option{-fmerge-constants}.  In addition to
@option{-fmerge-constants} this considers e.g.@: even constant initialized
arrays or initialized constant variables with integral or floating-point
types.  Languages like C or C++ require each variable, including multiple
instances of the same variable in recursive calls, to have distinct locations,
so using this option results in non-conforming
behavior.

@item -fmodulo-sched
@opindex fmodulo-sched
Perform swing modulo scheduling immediately before the first scheduling
pass.  This pass looks at innermost loops and reorders their
instructions by overlapping different iterations.

@item -fmodulo-sched-allow-regmoves
@opindex fmodulo-sched-allow-regmoves
Perform more aggressive SMS-based modulo scheduling with register moves
allowed.  By setting this flag certain anti-dependences edges are
deleted, which triggers the generation of reg-moves based on the
life-range analysis.  This option is effective only with
@option{-fmodulo-sched} enabled.

@item -fno-branch-count-reg
@opindex fno-branch-count-reg
@opindex fbranch-count-reg
Disable the optimization pass that scans for opportunities to use 
``decrement and branch'' instructions on a count register instead of
instruction sequences that decrement a register, compare it against zero, and
then branch based upon the result.  This option is only meaningful on
architectures that support such instructions, which include x86, PowerPC,
IA-64 and S/390.  Note that the @option{-fno-branch-count-reg} option
doesn't remove the decrement and branch instructions from the generated
instruction stream introduced by other optimization passes.

The default is @option{-fbranch-count-reg} at @option{-O1} and higher,
except for @option{-Og}.

@item -fno-function-cse
@opindex fno-function-cse
@opindex ffunction-cse
Do not put function addresses in registers; make each instruction that
calls a constant function contain the function's address explicitly.

This option results in less efficient code, but some strange hacks
that alter the assembler output may be confused by the optimizations
performed when this option is not used.

The default is @option{-ffunction-cse}

@item -fno-zero-initialized-in-bss
@opindex fno-zero-initialized-in-bss
@opindex fzero-initialized-in-bss
If the target supports a BSS section, GCC by default puts variables that
are initialized to zero into BSS@.  This can save space in the resulting
code.

This option turns off this behavior because some programs explicitly
rely on variables going to the data section---e.g., so that the
resulting executable can find the beginning of that section and/or make
assumptions based on that.

The default is @option{-fzero-initialized-in-bss}.

@item -fthread-jumps
@opindex fthread-jumps
Perform optimizations that check to see if a jump branches to a
location where another comparison subsumed by the first is found.  If
so, the first branch is redirected to either the destination of the
second branch or a point immediately following it, depending on whether
the condition is known to be true or false.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fsplit-wide-types
@opindex fsplit-wide-types
When using a type that occupies multiple registers, such as @code{long
long} on a 32-bit system, split the registers apart and allocate them
independently.  This normally generates better code for those types,
but may make debugging more difficult.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3},
@option{-Os}.

@item -fsplit-wide-types-early
@opindex fsplit-wide-types-early
Fully split wide types early, instead of very late.
This option has no effect unless @option{-fsplit-wide-types} is turned on.

This is the default on some targets.

@item -fcse-follow-jumps
@opindex fcse-follow-jumps
In common subexpression elimination (CSE), scan through jump instructions
when the target of the jump is not reached by any other path.  For
example, when CSE encounters an @code{if} statement with an
@code{else} clause, CSE follows the jump when the condition
tested is false.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcse-skip-blocks
@opindex fcse-skip-blocks
This is similar to @option{-fcse-follow-jumps}, but causes CSE to
follow jumps that conditionally skip over blocks.  When CSE
encounters a simple @code{if} statement with no else clause,
@option{-fcse-skip-blocks} causes CSE to follow the jump around the
body of the @code{if}.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -frerun-cse-after-loop
@opindex frerun-cse-after-loop
Re-run common subexpression elimination after loop optimizations are
performed.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fgcse
@opindex fgcse
Perform a global common subexpression elimination pass.
This pass also performs global constant and copy propagation.

@emph{Note:} When compiling a program using computed gotos, a GCC
extension, you may get better run-time performance if you disable
the global common subexpression elimination pass by adding
@option{-fno-gcse} to the command line.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fgcse-lm
@opindex fgcse-lm
When @option{-fgcse-lm} is enabled, global common subexpression elimination
attempts to move loads that are only killed by stores into themselves.  This
allows a loop containing a load/store sequence to be changed to a load outside
the loop, and a copy/store within the loop.

Enabled by default when @option{-fgcse} is enabled.

@item -fgcse-sm
@opindex fgcse-sm
When @option{-fgcse-sm} is enabled, a store motion pass is run after
global common subexpression elimination.  This pass attempts to move
stores out of loops.  When used in conjunction with @option{-fgcse-lm},
loops containing a load/store sequence can be changed to a load before
the loop and a store after the loop.

Not enabled at any optimization level.

@item -fgcse-las
@opindex fgcse-las
When @option{-fgcse-las} is enabled, the global common subexpression
elimination pass eliminates redundant loads that come after stores to the
same memory location (both partial and full redundancies).

Not enabled at any optimization level.

@item -fgcse-after-reload
@opindex fgcse-after-reload
When @option{-fgcse-after-reload} is enabled, a redundant load elimination
pass is performed after reload.  The purpose of this pass is to clean up
redundant spilling.

Enabled by @option{-O3}, @option{-fprofile-use} and @option{-fauto-profile}.

@item -faggressive-loop-optimizations
@opindex faggressive-loop-optimizations
This option tells the loop optimizer to use language constraints to
derive bounds for the number of iterations of a loop.  This assumes that
loop code does not invoke undefined behavior by for example causing signed
integer overflows or out-of-bound array accesses.  The bounds for the
number of iterations of a loop are used to guide loop unrolling and peeling
and loop exit test optimizations.
This option is enabled by default.

@item -funconstrained-commons
@opindex funconstrained-commons
This option tells the compiler that variables declared in common blocks
(e.g.@: Fortran) may later be overridden with longer trailing arrays. This
prevents certain optimizations that depend on knowing the array bounds.

@item -fcrossjumping
@opindex fcrossjumping
Perform cross-jumping transformation.
This transformation unifies equivalent code and saves code size.  The
resulting code may or may not perform better than without cross-jumping.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fauto-inc-dec
@opindex fauto-inc-dec
Combine increments or decrements of addresses with memory accesses.
This pass is always skipped on architectures that do not have
instructions to support this.  Enabled by default at @option{-O1} and
higher on architectures that support this.

@item -fdce
@opindex fdce
Perform dead code elimination (DCE) on RTL@.
Enabled by default at @option{-O1} and higher.

@item -fdse
@opindex fdse
Perform dead store elimination (DSE) on RTL@.
Enabled by default at @option{-O1} and higher.

@item -fif-conversion
@opindex fif-conversion
Attempt to transform conditional jumps into branch-less equivalents.  This
includes use of conditional moves, min, max, set flags and abs instructions, and
some tricks doable by standard arithmetics.  The use of conditional execution
on chips where it is available is controlled by @option{-fif-conversion2}.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}, but
not with @option{-Og}.

@item -fif-conversion2
@opindex fif-conversion2
Use conditional execution (where available) to transform conditional jumps into
branch-less equivalents.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}, but
not with @option{-Og}.

@item -fdeclone-ctor-dtor
@opindex fdeclone-ctor-dtor
The C++ ABI requires multiple entry points for constructors and
destructors: one for a base subobject, one for a complete object, and
one for a virtual destructor that calls operator delete afterwards.
For a hierarchy with virtual bases, the base and complete variants are
clones, which means two copies of the function.  With this option, the
base and complete variants are changed to be thunks that call a common
implementation.

Enabled by @option{-Os}.

@item -fdelete-null-pointer-checks
@opindex fdelete-null-pointer-checks
Assume that programs cannot safely dereference null pointers, and that
no code or data element resides at address zero.
This option enables simple constant
folding optimizations at all optimization levels.  In addition, other
optimization passes in GCC use this flag to control global dataflow
analyses that eliminate useless checks for null pointers; these assume
that a memory access to address zero always results in a trap, so
that if a pointer is checked after it has already been dereferenced,
it cannot be null.

Note however that in some environments this assumption is not true.
Use @option{-fno-delete-null-pointer-checks} to disable this optimization
for programs that depend on that behavior.

This option is enabled by default on most targets.  On Nios II ELF, it
defaults to off.  On AVR, CR16, and MSP430, this option is completely disabled.

Passes that use the dataflow information
are enabled independently at different optimization levels.

@item -fdevirtualize
@opindex fdevirtualize
Attempt to convert calls to virtual functions to direct calls.  This
is done both within a procedure and interprocedurally as part of
indirect inlining (@option{-findirect-inlining}) and interprocedural constant
propagation (@option{-fipa-cp}).
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fdevirtualize-speculatively
@opindex fdevirtualize-speculatively
Attempt to convert calls to virtual functions to speculative direct calls.
Based on the analysis of the type inheritance graph, determine for a given call
the set of likely targets. If the set is small, preferably of size 1, change
the call into a conditional deciding between direct and indirect calls.  The
speculative calls enable more optimizations, such as inlining.  When they seem
useless after further optimization, they are converted back into original form.

@item -fdevirtualize-at-ltrans
@opindex fdevirtualize-at-ltrans
Stream extra information needed for aggressive devirtualization when running
the link-time optimizer in local transformation mode.  
This option enables more devirtualization but
significantly increases the size of streamed data. For this reason it is
disabled by default.

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

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -free
@opindex free
Attempt to remove redundant extension instructions.  This is especially
helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
registers after writing to their lower 32-bit half.

Enabled for Alpha, AArch64 and x86 at levels @option{-O2},
@option{-O3}, @option{-Os}.

@item -fno-lifetime-dse
@opindex fno-lifetime-dse
@opindex flifetime-dse
In C++ the value of an object is only affected by changes within its
lifetime: when the constructor begins, the object has an indeterminate
value, and any changes during the lifetime of the object are dead when
the object is destroyed.  Normally dead store elimination will take
advantage of this; if your code relies on the value of the object
storage persisting beyond the lifetime of the object, you can use this
flag to disable this optimization.  To preserve stores before the
constructor starts (e.g.@: because your operator new clears the object
storage) but still treat the object as dead after the destructor, you
can use @option{-flifetime-dse=1}.  The default behavior can be
explicitly selected with @option{-flifetime-dse=2}.
@option{-flifetime-dse=0} is equivalent to @option{-fno-lifetime-dse}.

@item -flive-range-shrinkage
@opindex flive-range-shrinkage
Attempt to decrease register pressure through register live range
shrinkage.  This is helpful for fast processors with small or moderate
size register sets.

@item -fira-algorithm=@var{algorithm}
@opindex fira-algorithm
Use the specified coloring algorithm for the integrated register
allocator.  The @var{algorithm} argument can be @samp{priority}, which
specifies Chow's priority coloring, or @samp{CB}, which specifies
Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
for all architectures, but for those targets that do support it, it is
the default because it generates better code.

@item -fira-region=@var{region}
@opindex fira-region
Use specified regions for the integrated register allocator.  The
@var{region} argument should be one of the following:

@table @samp

@item all
Use all loops as register allocation regions.
This can give the best results for machines with a small and/or
irregular register set.

@item mixed
Use all loops except for loops with small register pressure 
as the regions.  This value usually gives
the best results in most cases and for most architectures,
and is enabled by default when compiling with optimization for speed
(@option{-O}, @option{-O2}, @dots{}).

@item one
Use all functions as a single region.  
This typically results in the smallest code size, and is enabled by default for
@option{-Os} or @option{-O0}.

@end table

@item -fira-hoist-pressure
@opindex fira-hoist-pressure
Use IRA to evaluate register pressure in the code hoisting pass for
decisions to hoist expressions.  This option usually results in smaller
code, but it can slow the compiler down.

This option is enabled at level @option{-Os} for all targets.

@item -fira-loop-pressure
@opindex fira-loop-pressure
Use IRA to evaluate register pressure in loops for decisions to move
loop invariants.  This option usually results in generation
of faster and smaller code on machines with large register files (>= 32
registers), but it can slow the compiler down.

This option is enabled at level @option{-O3} for some targets.

@item -fno-ira-share-save-slots
@opindex fno-ira-share-save-slots
@opindex fira-share-save-slots
Disable sharing of stack slots used for saving call-used hard
registers living through a call.  Each hard register gets a
separate stack slot, and as a result function stack frames are
larger.

@item -fno-ira-share-spill-slots
@opindex fno-ira-share-spill-slots
@opindex fira-share-spill-slots
Disable sharing of stack slots allocated for pseudo-registers.  Each
pseudo-register that does not get a hard register gets a separate
stack slot, and as a result function stack frames are larger.

@item -flra-remat
@opindex flra-remat
Enable CFG-sensitive rematerialization in LRA.  Instead of loading
values of spilled pseudos, LRA tries to rematerialize (recalculate)
values if it is profitable.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fdelayed-branch
@opindex fdelayed-branch
If supported for the target machine, attempt to reorder instructions
to exploit instruction slots available after delayed branch
instructions.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os},
but not at @option{-Og}.

@item -fschedule-insns
@opindex fschedule-insns
If supported for the target machine, attempt to reorder instructions to
eliminate execution stalls due to required data being unavailable.  This
helps machines that have slow floating point or memory load instructions
by allowing other instructions to be issued until the result of the load
or floating-point instruction is required.

Enabled at levels @option{-O2}, @option{-O3}.

@item -fschedule-insns2
@opindex fschedule-insns2
Similar to @option{-fschedule-insns}, but requests an additional pass of
instruction scheduling after register allocation has been done.  This is
especially useful on machines with a relatively small number of
registers and where memory load instructions take more than one cycle.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fno-sched-interblock
@opindex fno-sched-interblock
@opindex fsched-interblock
Disable instruction scheduling across basic blocks, which
is normally enabled when scheduling before register allocation, i.e.@:
with @option{-fschedule-insns} or at @option{-O2} or higher.

@item -fno-sched-spec
@opindex fno-sched-spec
@opindex fsched-spec
Disable speculative motion of non-load instructions, which
is normally enabled when scheduling before register allocation, i.e.@:
with @option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-pressure
@opindex fsched-pressure
Enable register pressure sensitive insn scheduling before register
allocation.  This only makes sense when scheduling before register
allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
@option{-O2} or higher.  Usage of this option can improve the
generated code and decrease its size by preventing register pressure
increase above the number of available hard registers and subsequent
spills in register allocation.

@item -fsched-spec-load
@opindex fsched-spec-load
Allow speculative motion of some load instructions.  This only makes
sense when scheduling before register allocation, i.e.@: with
@option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-spec-load-dangerous
@opindex fsched-spec-load-dangerous
Allow speculative motion of more load instructions.  This only makes
sense when scheduling before register allocation, i.e.@: with
@option{-fschedule-insns} or at @option{-O2} or higher.

@item -fsched-stalled-insns
@itemx -fsched-stalled-insns=@var{n}
@opindex fsched-stalled-insns
Define how many insns (if any) can be moved prematurely from the queue
of stalled insns into the ready list during the second scheduling pass.
@option{-fno-sched-stalled-insns} means that no insns are moved
prematurely, @option{-fsched-stalled-insns=0} means there is no limit
on how many queued insns can be moved prematurely.
@option{-fsched-stalled-insns} without a value is equivalent to
@option{-fsched-stalled-insns=1}.

@item -fsched-stalled-insns-dep
@itemx -fsched-stalled-insns-dep=@var{n}
@opindex fsched-stalled-insns-dep
Define how many insn groups (cycles) are examined for a dependency
on a stalled insn that is a candidate for premature removal from the queue
of stalled insns.  This has an effect only during the second scheduling pass,
and only if @option{-fsched-stalled-insns} is used.
@option{-fno-sched-stalled-insns-dep} is equivalent to
@option{-fsched-stalled-insns-dep=0}.
@option{-fsched-stalled-insns-dep} without a value is equivalent to
@option{-fsched-stalled-insns-dep=1}.

@item -fsched2-use-superblocks
@opindex fsched2-use-superblocks
When scheduling after register allocation, use superblock scheduling.
This allows motion across basic block boundaries,
resulting in faster schedules.  This option is experimental, as not all machine
descriptions used by GCC model the CPU closely enough to avoid unreliable
results from the algorithm.

This only makes sense when scheduling after register allocation, i.e.@: with
@option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched-group-heuristic
@opindex fsched-group-heuristic
Enable the group heuristic in the scheduler.  This heuristic favors
the instruction that belongs to a schedule group.  This is enabled
by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
or @option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched-critical-path-heuristic
@opindex fsched-critical-path-heuristic
Enable the critical-path heuristic in the scheduler.  This heuristic favors
instructions on the critical path.  This is enabled by default when
scheduling is enabled, i.e.@: with @option{-fschedule-insns}
or @option{-fschedule-insns2} or at @option{-O2} or higher.

@item -fsched-spec-insn-heuristic
@opindex fsched-spec-insn-heuristic
Enable the speculative instruction heuristic in the scheduler.  This
heuristic favors speculative instructions with greater dependency weakness.
This is enabled by default when scheduling is enabled, i.e.@:
with @option{-fschedule-insns} or @option{-fschedule-insns2}
or at @option{-O2} or higher.

@item -fsched-rank-heuristic
@opindex fsched-rank-heuristic
Enable the rank heuristic in the scheduler.  This heuristic favors
the instruction belonging to a basic block with greater size or frequency.
This is enabled by default when scheduling is enabled, i.e.@:
with @option{-fschedule-insns} or @option{-fschedule-insns2} or
at @option{-O2} or higher.

@item -fsched-last-insn-heuristic
@opindex fsched-last-insn-heuristic
Enable the last-instruction heuristic in the scheduler.  This heuristic
favors the instruction that is less dependent on the last instruction
scheduled.  This is enabled by default when scheduling is enabled,
i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
at @option{-O2} or higher.

@item -fsched-dep-count-heuristic
@opindex fsched-dep-count-heuristic
Enable the dependent-count heuristic in the scheduler.  This heuristic
favors the instruction that has more instructions depending on it.
This is enabled by default when scheduling is enabled, i.e.@:
with @option{-fschedule-insns} or @option{-fschedule-insns2} or
at @option{-O2} or higher.

@item -freschedule-modulo-scheduled-loops
@opindex freschedule-modulo-scheduled-loops
Modulo scheduling is performed before traditional scheduling.  If a loop
is modulo scheduled, later scheduling passes may change its schedule.  
Use this option to control that behavior.

@item -fselective-scheduling
@opindex fselective-scheduling
Schedule instructions using selective scheduling algorithm.  Selective
scheduling runs instead of the first scheduler pass.

@item -fselective-scheduling2
@opindex fselective-scheduling2
Schedule instructions using selective scheduling algorithm.  Selective
scheduling runs instead of the second scheduler pass.

@item -fsel-sched-pipelining
@opindex fsel-sched-pipelining
Enable software pipelining of innermost loops during selective scheduling.
This option has no effect unless one of @option{-fselective-scheduling} or
@option{-fselective-scheduling2} is turned on.

@item -fsel-sched-pipelining-outer-loops
@opindex fsel-sched-pipelining-outer-loops
When pipelining loops during selective scheduling, also pipeline outer loops.
This option has no effect unless @option{-fsel-sched-pipelining} is turned on.

@item -fsemantic-interposition
@opindex fsemantic-interposition
Some object formats, like ELF, allow interposing of symbols by the 
dynamic linker.
This means that for symbols exported from the DSO, the compiler cannot perform
interprocedural propagation, inlining and other optimizations in anticipation
that the function or variable in question may change. While this feature is
useful, for example, to rewrite memory allocation functions by a debugging
implementation, it is expensive in the terms of code quality.
With @option{-fno-semantic-interposition} the compiler assumes that 
if interposition happens for functions the overwriting function will have 
precisely the same semantics (and side effects). 
Similarly if interposition happens
for variables, the constructor of the variable will be the same. The flag
has no effect for functions explicitly declared inline 
(where it is never allowed for interposition to change semantics) 
and for symbols explicitly declared weak.

@item -fshrink-wrap
@opindex fshrink-wrap
Emit function prologues only before parts of the function that need it,
rather than at the top of the function.  This flag is enabled by default at
@option{-O} and higher.

@item -fshrink-wrap-separate
@opindex fshrink-wrap-separate
Shrink-wrap separate parts of the prologue and epilogue separately, so that
those parts are only executed when needed.
This option is on by default, but has no effect unless @option{-fshrink-wrap}
is also turned on and the target supports this.

@item -fcaller-saves
@opindex fcaller-saves
Enable allocation of values to registers that are clobbered by
function calls, by emitting extra instructions to save and restore the
registers around such calls.  Such allocation is done only when it
seems to result in better code.

This option is always enabled by default on certain machines, usually
those which have no call-preserved registers to use instead.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcombine-stack-adjustments
@opindex fcombine-stack-adjustments
Tracks stack adjustments (pushes and pops) and stack memory references
and then tries to find ways to combine them.

Enabled by default at @option{-O1} and higher.

@item -fipa-ra
@opindex fipa-ra
Use caller save registers for allocation if those registers are not used by
any called function.  In that case it is not necessary to save and restore
them around calls.  This is only possible if called functions are part of
same compilation unit as current function and they are compiled before it.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}, however the option
is disabled if generated code will be instrumented for profiling
(@option{-p}, or @option{-pg}) or if callee's register usage cannot be known
exactly (this happens on targets that do not expose prologues
and epilogues in RTL).

@item -fconserve-stack
@opindex fconserve-stack
Attempt to minimize stack usage.  The compiler attempts to use less
stack space, even if that makes the program slower.  This option
implies setting the @option{large-stack-frame} parameter to 100
and the @option{large-stack-frame-growth} parameter to 400.

@item -ftree-reassoc
@opindex ftree-reassoc
Perform reassociation on trees.  This flag is enabled by default
at @option{-O1} and higher.

@item -fcode-hoisting
@opindex fcode-hoisting
Perform code hoisting.  Code hoisting tries to move the
evaluation of expressions executed on all paths to the function exit
as early as possible.  This is especially useful as a code size
optimization, but it often helps for code speed as well.
This flag is enabled by default at @option{-O2} and higher.

@item -ftree-pre
@opindex ftree-pre
Perform partial redundancy elimination (PRE) on trees.  This flag is
enabled by default at @option{-O2} and @option{-O3}.

@item -ftree-partial-pre
@opindex ftree-partial-pre
Make partial redundancy elimination (PRE) more aggressive.  This flag is
enabled by default at @option{-O3}.

@item -ftree-forwprop
@opindex ftree-forwprop
Perform forward propagation on trees.  This flag is enabled by default
at @option{-O1} and higher.

@item -ftree-fre
@opindex ftree-fre
Perform full redundancy elimination (FRE) on trees.  The difference
between FRE and PRE is that FRE only considers expressions
that are computed on all paths leading to the redundant computation.
This analysis is faster than PRE, though it exposes fewer redundancies.
This flag is enabled by default at @option{-O1} and higher.

@item -ftree-phiprop
@opindex ftree-phiprop
Perform hoisting of loads from conditional pointers on trees.  This
pass is enabled by default at @option{-O1} and higher.

@item -fhoist-adjacent-loads
@opindex fhoist-adjacent-loads
Speculatively hoist loads from both branches of an if-then-else if the
loads are from adjacent locations in the same structure and the target
architecture has a conditional move instruction.  This flag is enabled
by default at @option{-O2} and higher.

@item -ftree-copy-prop
@opindex ftree-copy-prop
Perform copy propagation on trees.  This pass eliminates unnecessary
copy operations.  This flag is enabled by default at @option{-O1} and
higher.

@item -fipa-pure-const
@opindex fipa-pure-const
Discover which functions are pure or constant.
Enabled by default at @option{-O1} and higher.

@item -fipa-reference
@opindex fipa-reference
Discover which static variables do not escape the
compilation unit.
Enabled by default at @option{-O1} and higher.

@item -fipa-reference-addressable
@opindex fipa-reference-addressable
Discover read-only, write-only and non-addressable static variables.
Enabled by default at @option{-O1} and higher.

@item -fipa-stack-alignment
@opindex fipa-stack-alignment
Reduce stack alignment on call sites if possible.
Enabled by default.

@item -fipa-pta
@opindex fipa-pta
Perform interprocedural pointer analysis and interprocedural modification
and reference analysis.  This option can cause excessive memory and
compile-time usage on large compilation units.  It is not enabled by
default at any optimization level.

@item -fipa-profile
@opindex fipa-profile
Perform interprocedural profile propagation.  The functions called only from
cold functions are marked as cold. Also functions executed once (such as
@code{cold}, @code{noreturn}, static constructors or destructors) are
identified. Cold functions and loop less parts of functions executed once are
then optimized for size.
Enabled by default at @option{-O1} and higher.

@item -fipa-modref
@opindex fipa-modref
Perform interprocedural mod/ref analysis.  This optimization analyzes the side
effects of functions (memory locations that are modified or referenced) and
enables better optimization across the function call boundary.  This flag is
enabled by default at @option{-O1} and higher.

@item -fipa-cp
@opindex fipa-cp
Perform interprocedural constant propagation.
This optimization analyzes the program to determine when values passed
to functions are constants and then optimizes accordingly.
This optimization can substantially increase performance
if the application has constants passed to functions.
This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -fipa-cp-clone
@opindex fipa-cp-clone
Perform function cloning to make interprocedural constant propagation stronger.
When enabled, interprocedural constant propagation performs function cloning
when externally visible function can be called with constant arguments.
Because this optimization can create multiple copies of functions,
it may significantly increase code size
(see @option{--param ipa-cp-unit-growth=@var{value}}).
This flag is enabled by default at @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -fipa-bit-cp
@opindex fipa-bit-cp
When enabled, perform interprocedural bitwise constant
propagation. This flag is enabled by default at @option{-O2} and
by @option{-fprofile-use} and @option{-fauto-profile}.
It requires that @option{-fipa-cp} is enabled.  

@item -fipa-vrp
@opindex fipa-vrp
When enabled, perform interprocedural propagation of value
ranges. This flag is enabled by default at @option{-O2}. It requires
that @option{-fipa-cp} is enabled.

@item -fipa-icf
@opindex fipa-icf
Perform Identical Code Folding for functions and read-only variables.
The optimization reduces code size and may disturb unwind stacks by replacing
a function by equivalent one with a different name. The optimization works
more effectively with link-time optimization enabled.

Although the behavior is similar to the Gold Linker's ICF optimization, GCC ICF
works on different levels and thus the optimizations are not same - there are
equivalences that are found only by GCC and equivalences found only by Gold.

This flag is enabled by default at @option{-O2} and @option{-Os}.

@item -flive-patching=@var{level}
@opindex flive-patching
Control GCC's optimizations to produce output suitable for live-patching.

If the compiler's optimization uses a function's body or information extracted
from its body to optimize/change another function, the latter is called an
impacted function of the former.  If a function is patched, its impacted
functions should be patched too.

The impacted functions are determined by the compiler's interprocedural
optimizations.  For example, a caller is impacted when inlining a function
into its caller,
cloning a function and changing its caller to call this new clone,
or extracting a function's pureness/constness information to optimize
its direct or indirect callers, etc.

Usually, the more IPA optimizations enabled, the larger the number of
impacted functions for each function.  In order to control the number of
impacted functions and more easily compute the list of impacted function,
IPA optimizations can be partially enabled at two different levels.

The @var{level} argument should be one of the following:

@table @samp

@item inline-clone

Only enable inlining and cloning optimizations, which includes inlining,
cloning, interprocedural scalar replacement of aggregates and partial inlining.
As a result, when patching a function, all its callers and its clones'
callers are impacted, therefore need to be patched as well.

@option{-flive-patching=inline-clone} disables the following optimization flags:
@gccoptlist{-fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra @gol
-fipa-icf  -fipa-icf-functions  -fipa-icf-variables @gol
-fipa-bit-cp  -fipa-vrp  -fipa-pure-const  -fipa-reference-addressable @gol
-fipa-stack-alignment -fipa-modref}

@item inline-only-static

Only enable inlining of static functions.
As a result, when patching a static function, all its callers are impacted
and so need to be patched as well.

In addition to all the flags that @option{-flive-patching=inline-clone}
disables,
@option{-flive-patching=inline-only-static} disables the following additional
optimization flags:
@gccoptlist{-fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp}

@end table

When @option{-flive-patching} is specified without any value, the default value
is @var{inline-clone}.

This flag is disabled by default.

Note that @option{-flive-patching} is not supported with link-time optimization
(@option{-flto}).

@item -fisolate-erroneous-paths-dereference
@opindex fisolate-erroneous-paths-dereference
Detect paths that trigger erroneous or undefined behavior due to
dereferencing a null pointer.  Isolate those paths from the main control
flow and turn the statement with erroneous or undefined behavior into a trap.
This flag is enabled by default at @option{-O2} and higher and depends on
@option{-fdelete-null-pointer-checks} also being enabled.

@item -fisolate-erroneous-paths-attribute
@opindex fisolate-erroneous-paths-attribute
Detect paths that trigger erroneous or undefined behavior due to a null value
being used in a way forbidden by a @code{returns_nonnull} or @code{nonnull}
attribute.  Isolate those paths from the main control flow and turn the
statement with erroneous or undefined behavior into a trap.  This is not
currently enabled, but may be enabled by @option{-O2} in the future.

@item -ftree-sink
@opindex ftree-sink
Perform forward store motion on trees.  This flag is
enabled by default at @option{-O1} and higher.

@item -ftree-bit-ccp
@opindex ftree-bit-ccp
Perform sparse conditional bit constant propagation on trees and propagate
pointer alignment information.
This pass only operates on local scalar variables and is enabled by default
at @option{-O1} and higher, except for @option{-Og}.
It requires that @option{-ftree-ccp} is enabled.

@item -ftree-ccp
@opindex ftree-ccp
Perform sparse conditional constant propagation (CCP) on trees.  This
pass only operates on local scalar variables and is enabled by default
at @option{-O1} and higher.

@item -fssa-backprop
@opindex fssa-backprop
Propagate information about uses of a value up the definition chain
in order to simplify the definitions.  For example, this pass strips
sign operations if the sign of a value never matters.  The flag is
enabled by default at @option{-O1} and higher.

@item -fssa-phiopt
@opindex fssa-phiopt
Perform pattern matching on SSA PHI nodes to optimize conditional
code.  This pass is enabled by default at @option{-O1} and higher,
except for @option{-Og}.

@item -ftree-switch-conversion
@opindex ftree-switch-conversion
Perform conversion of simple initializations in a switch to
initializations from a scalar array.  This flag is enabled by default
at @option{-O2} and higher.

@item -ftree-tail-merge
@opindex ftree-tail-merge
Look for identical code sequences.  When found, replace one with a jump to the
other.  This optimization is known as tail merging or cross jumping.  This flag
is enabled by default at @option{-O2} and higher.  The compilation time
in this pass can
be limited using @option{max-tail-merge-comparisons} parameter and
@option{max-tail-merge-iterations} parameter.

@item -ftree-dce
@opindex ftree-dce
Perform dead code elimination (DCE) on trees.  This flag is enabled by
default at @option{-O1} and higher.

@item -ftree-builtin-call-dce
@opindex ftree-builtin-call-dce
Perform conditional dead code elimination (DCE) for calls to built-in functions
that may set @code{errno} but are otherwise free of side effects.  This flag is
enabled by default at @option{-O2} and higher if @option{-Os} is not also
specified.

@item -ffinite-loops
@opindex ffinite-loops
@opindex fno-finite-loops
Assume that a loop with an exit will eventually take the exit and not loop
indefinitely.  This allows the compiler to remove loops that otherwise have
no side-effects, not considering eventual endless looping as such.

This option is enabled by default at @option{-O2} for C++ with -std=c++11
or higher.

@item -ftree-dominator-opts
@opindex ftree-dominator-opts
Perform a variety of simple scalar cleanups (constant/copy
propagation, redundancy elimination, range propagation and expression
simplification) based on a dominator tree traversal.  This also
performs jump threading (to reduce jumps to jumps). This flag is
enabled by default at @option{-O1} and higher.

@item -ftree-dse
@opindex ftree-dse
Perform dead store elimination (DSE) on trees.  A dead store is a store into
a memory location that is later overwritten by another store without
any intervening loads.  In this case the earlier store can be deleted.  This
flag is enabled by default at @option{-O1} and higher.

@item -ftree-ch
@opindex ftree-ch
Perform loop header copying on trees.  This is beneficial since it increases
effectiveness of code motion optimizations.  It also saves one jump.  This flag
is enabled by default at @option{-O1} and higher.  It is not enabled
for @option{-Os}, since it usually increases code size.

@item -ftree-loop-optimize
@opindex ftree-loop-optimize
Perform loop optimizations on trees.  This flag is enabled by default
at @option{-O1} and higher.

@item -ftree-loop-linear
@itemx -floop-strip-mine
@itemx -floop-block
@opindex ftree-loop-linear
@opindex floop-strip-mine
@opindex floop-block
Perform loop nest optimizations.  Same as
@option{-floop-nest-optimize}.  To use this code transformation, GCC has
to be configured with @option{--with-isl} to enable the Graphite loop
transformation infrastructure.

@item -fgraphite-identity
@opindex fgraphite-identity
Enable the identity transformation for graphite.  For every SCoP we generate
the polyhedral representation and transform it back to gimple.  Using
@option{-fgraphite-identity} we can check the costs or benefits of the
GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
are also performed by the code generator isl, like index splitting and
dead code elimination in loops.

@item -floop-nest-optimize
@opindex floop-nest-optimize
Enable the isl based loop nest optimizer.  This is a generic loop nest
optimizer based on the Pluto optimization algorithms.  It calculates a loop
structure optimized for data-locality and parallelism.  This option
is experimental.

@item -floop-parallelize-all
@opindex floop-parallelize-all
Use the Graphite data dependence analysis to identify loops that can
be parallelized.  Parallelize all the loops that can be analyzed to
not contain loop carried dependences without checking that it is
profitable to parallelize the loops.

@item -ftree-coalesce-vars
@opindex ftree-coalesce-vars
While transforming the program out of the SSA representation, attempt to
reduce copying by coalescing versions of different user-defined
variables, instead of just compiler temporaries.  This may severely
limit the ability to debug an optimized program compiled with
@option{-fno-var-tracking-assignments}.  In the negated form, this flag
prevents SSA coalescing of user variables.  This option is enabled by
default if optimization is enabled, and it does very little otherwise.

@item -ftree-loop-if-convert
@opindex ftree-loop-if-convert
Attempt to transform conditional jumps in the innermost loops to
branch-less equivalents.  The intent is to remove control-flow from
the innermost loops in order to improve the ability of the
vectorization pass to handle these loops.  This is enabled by default
if vectorization is enabled.

@item -ftree-loop-distribution
@opindex 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
This flag is enabled by default at @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -ftree-loop-distribute-patterns
@opindex ftree-loop-distribute-patterns
Perform loop distribution of patterns that can be code generated with
calls to a library.  This flag is enabled by default at @option{-O2} and
higher, and by @option{-fprofile-use} and @option{-fauto-profile}.

This pass distributes the initialization loops and generates a call to
memset zero.  For example, the loop
@smallexample
DO I = 1, N
  A(I) = 0
  B(I) = A(I) + I
ENDDO
@end smallexample
is transformed to
@smallexample
DO I = 1, N
   A(I) = 0
ENDDO
DO I = 1, N
   B(I) = A(I) + I
ENDDO
@end smallexample
and the initialization loop is transformed into a call to memset zero.
This flag is enabled by default at @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -floop-interchange
@opindex floop-interchange
Perform loop interchange outside of graphite.  This flag can improve cache
performance on loop nest and allow further loop optimizations, like
vectorization, to take place.  For example, the loop
@smallexample
for (int i = 0; i < N; i++)
  for (int j = 0; j < N; j++)
    for (int k = 0; k < N; k++)
      c[i][j] = c[i][j] + a[i][k]*b[k][j];
@end smallexample
is transformed to
@smallexample
for (int i = 0; i < N; i++)
  for (int k = 0; k < N; k++)
    for (int j = 0; j < N; j++)
      c[i][j] = c[i][j] + a[i][k]*b[k][j];
@end smallexample
This flag is enabled by default at @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -floop-unroll-and-jam
@opindex floop-unroll-and-jam
Apply unroll and jam transformations on feasible loops.  In a loop
nest this unrolls the outer loop by some factor and fuses the resulting
multiple inner loops.  This flag is enabled by default at @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -ftree-loop-im
@opindex ftree-loop-im
Perform loop invariant motion on trees.  This pass moves only invariants that
are hard to handle at RTL level (function calls, operations that expand to
nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
operands of conditions that are invariant out of the loop, so that we can use
just trivial invariantness analysis in loop unswitching.  The pass also includes
store motion.

@item -ftree-loop-ivcanon
@opindex ftree-loop-ivcanon
Create a canonical counter for number of iterations in loops for which
determining number of iterations requires complicated analysis.  Later
optimizations then may determine the number easily.  Useful especially
in connection with unrolling.

@item -ftree-scev-cprop
@opindex ftree-scev-cprop
Perform final value replacement.  If a variable is modified in a loop
in such a way that its value when exiting the loop can be determined using
only its initial value and the number of loop iterations, replace uses of
the final value by such a computation, provided it is sufficiently cheap.
This reduces data dependencies and may allow further simplifications.
Enabled by default at @option{-O1} and higher.

@item -fivopts
@opindex fivopts
Perform induction variable optimizations (strength reduction, induction
variable merging and induction variable elimination) on trees.

@item -ftree-parallelize-loops=n
@opindex ftree-parallelize-loops
Parallelize loops, i.e., split their iteration space to run in n threads.
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
implies @option{-pthread}, and thus is only supported on targets
that have support for @option{-pthread}.

@item -ftree-pta
@opindex ftree-pta
Perform function-local points-to analysis on trees.  This flag is
enabled by default at @option{-O1} and higher, except for @option{-Og}.

@item -ftree-sra
@opindex ftree-sra
Perform scalar replacement of aggregates.  This pass replaces structure
references with scalars to prevent committing structures to memory too
early.  This flag is enabled by default at @option{-O1} and higher,
except for @option{-Og}.

@item -fstore-merging
@opindex fstore-merging
Perform merging of narrow stores to consecutive memory addresses.  This pass
merges contiguous stores of immediate values narrower than a word into fewer
wider stores to reduce the number of instructions.  This is enabled by default
at @option{-O2} and higher as well as @option{-Os}.

@item -ftree-ter
@opindex ftree-ter
Perform temporary expression replacement during the SSA->normal phase.  Single
use/single def temporaries are replaced at their use location with their
defining expression.  This results in non-GIMPLE code, but gives the expanders
much more complex trees to work on resulting in better RTL generation.  This is
enabled by default at @option{-O1} and higher.

@item -ftree-slsr
@opindex ftree-slsr
Perform straight-line strength reduction on trees.  This recognizes related
expressions involving multiplications and replaces them by less expensive
calculations when possible.  This is enabled by default at @option{-O1} and
higher.

@item -ftree-vectorize
@opindex ftree-vectorize
Perform vectorization on trees. This flag enables @option{-ftree-loop-vectorize}
and @option{-ftree-slp-vectorize} if not explicitly specified.

@item -ftree-loop-vectorize
@opindex ftree-loop-vectorize
Perform loop vectorization on trees. This flag is enabled by default at
@option{-O3} and by @option{-ftree-vectorize}, @option{-fprofile-use},
and @option{-fauto-profile}.

@item -ftree-slp-vectorize
@opindex ftree-slp-vectorize
Perform basic block vectorization on trees. This flag is enabled by default at
@option{-O3} and by @option{-ftree-vectorize}, @option{-fprofile-use},
and @option{-fauto-profile}.

@item -ftrivial-auto-var-init=@var{choice}
@opindex ftrivial-auto-var-init
Initialize automatic variables with either a pattern or with zeroes to increase
the security and predictability of a program by preventing uninitialized memory
disclosure and use.
GCC still considers an automatic variable that doesn't have an explicit
initializer as uninitialized, -Wuninitialized will still report warning messages
on such automatic variables.
With this option, GCC will also initialize any padding of automatic variables
that have structure or union types to zeroes.

The three values of @var{choice} are:

@itemize @bullet
@item
@samp{uninitialized} doesn't initialize any automatic variables.
This is C and C++'s default.

@item
@samp{pattern} Initialize automatic variables with values which will likely
transform logic bugs into crashes down the line, are easily recognized in a
crash dump and without being values that programmers can rely on for useful
program semantics.
The current value is byte-repeatable pattern with byte "0xFE".
The values used for pattern initialization might be changed in the future.

@item
@samp{zero} Initialize automatic variables with zeroes.
@end itemize

The default is @samp{uninitialized}.

You can control this behavior for a specific variable by using the variable
attribute @code{uninitialized} (@pxref{Variable Attributes}).

@item -fvect-cost-model=@var{model}
@opindex fvect-cost-model
Alter the cost model used for vectorization.  The @var{model} argument
should be one of @samp{unlimited}, @samp{dynamic}, @samp{cheap} or
@samp{very-cheap}.
With the @samp{unlimited} model the vectorized code-path is assumed
to be profitable while with the @samp{dynamic} model a runtime check
guards the vectorized code-path to enable it only for iteration
counts that will likely execute faster than when executing the original
scalar loop.  The @samp{cheap} model disables vectorization of
loops where doing so would be cost prohibitive for example due to
required runtime checks for data dependence or alignment but otherwise
is equal to the @samp{dynamic} model.  The @samp{very-cheap} model only
allows vectorization if the vector code would entirely replace the
scalar code that is being vectorized.  For example, if each iteration
of a vectorized loop would only be able to handle exactly four iterations
of the scalar loop, the @samp{very-cheap} model would only allow
vectorization if the scalar iteration count is known to be a multiple
of four.

The default cost model depends on other optimization flags and is
either @samp{dynamic} or @samp{cheap}.

@item -fsimd-cost-model=@var{model}
@opindex fsimd-cost-model
Alter the cost model used for vectorization of loops marked with the OpenMP
simd directive.  The @var{model} argument should be one of
@samp{unlimited}, @samp{dynamic}, @samp{cheap}.  All values of @var{model}
have the same meaning as described in @option{-fvect-cost-model} and by
default a cost model defined with @option{-fvect-cost-model} is used.

@item -ftree-vrp
@opindex ftree-vrp
Perform Value Range Propagation on trees.  This is similar to the
constant propagation pass, but instead of values, ranges of values are
propagated.  This allows the optimizers to remove unnecessary range
checks like array bound checks and null pointer checks.  This is
enabled by default at @option{-O2} and higher.  Null pointer check
elimination is only done if @option{-fdelete-null-pointer-checks} is
enabled.

@item -fsplit-paths
@opindex fsplit-paths
Split paths leading to loop backedges.  This can improve dead code
elimination and common subexpression elimination.  This is enabled by
default at @option{-O3} and above.

@item -fsplit-ivs-in-unroller
@opindex fsplit-ivs-in-unroller
Enables expression of values of induction variables in later iterations
of the unrolled loop using the value in the first iteration.  This breaks
long dependency chains, thus improving efficiency of the scheduling passes.

A combination of @option{-fweb} and CSE is often sufficient to obtain the
same effect.  However, that is not reliable in cases where the loop body
is more complicated than a single basic block.  It also does not work at all
on some architectures due to restrictions in the CSE pass.

This optimization is enabled by default.

@item -fvariable-expansion-in-unroller
@opindex fvariable-expansion-in-unroller
With this option, the compiler creates multiple copies of some
local variables when unrolling a loop, which can result in superior code.

This optimization is enabled by default for PowerPC targets, but disabled
by default otherwise.

@item -fpartial-inlining
@opindex fpartial-inlining
Inline parts of functions.  This option has any effect only
when inlining itself is turned on by the @option{-finline-functions}
or @option{-finline-small-functions} options.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fpredictive-commoning
@opindex fpredictive-commoning
Perform predictive commoning optimization, i.e., reusing computations
(especially memory loads and stores) performed in previous
iterations of loops.

This option is enabled at level @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -fprefetch-loop-arrays
@opindex fprefetch-loop-arrays
If supported by the target machine, generate instructions to prefetch
memory to improve the performance of loops that access large arrays.

This option may generate better or worse code; results are highly
dependent on the structure of loops within the source code.

Disabled at level @option{-Os}.

@item -fno-printf-return-value
@opindex fno-printf-return-value
@opindex fprintf-return-value
Do not substitute constants for known return value of formatted output
functions such as @code{sprintf}, @code{snprintf}, @code{vsprintf}, and
@code{vsnprintf} (but not @code{printf} of @code{fprintf}).  This
transformation allows GCC to optimize or even eliminate branches based
on the known return value of these functions called with arguments that
are either constant, or whose values are known to be in a range that
makes determining the exact return value possible.  For example, when
@option{-fprintf-return-value} is in effect, both the branch and the
body of the @code{if} statement (but not the call to @code{snprint})
can be optimized away when @code{i} is a 32-bit or smaller integer
because the return value is guaranteed to be at most 8.

@smallexample
char buf[9];
if (snprintf (buf, "%08x", i) >= sizeof buf)
  @dots{}
@end smallexample

The @option{-fprintf-return-value} option relies on other optimizations
and yields best results with @option{-O2} and above.  It works in tandem
with the @option{-Wformat-overflow} and @option{-Wformat-truncation}
options.  The @option{-fprintf-return-value} option is enabled by default.

@item -fno-peephole
@itemx -fno-peephole2
@opindex fno-peephole
@opindex fpeephole
@opindex fno-peephole2
@opindex fpeephole2
Disable any machine-specific peephole optimizations.  The difference
between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
are implemented in the compiler; some targets use one, some use the
other, a few use both.

@option{-fpeephole} is enabled by default.
@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fno-guess-branch-probability
@opindex fno-guess-branch-probability
@opindex fguess-branch-probability
Do not guess branch probabilities using heuristics.

GCC uses heuristics to guess branch probabilities if they are
not provided by profiling feedback (@option{-fprofile-arcs}).  These
heuristics are based on the control flow graph.  If some branch probabilities
are specified by @code{__builtin_expect}, then the heuristics are
used to guess branch probabilities for the rest of the control flow graph,
taking the @code{__builtin_expect} info into account.  The interactions
between the heuristics and @code{__builtin_expect} can be complex, and in
some cases, it may be useful to disable the heuristics so that the effects
of @code{__builtin_expect} are easier to understand.

It is also possible to specify expected probability of the expression
with @code{__builtin_expect_with_probability} built-in function.

The default is @option{-fguess-branch-probability} at levels
@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -freorder-blocks
@opindex freorder-blocks
Reorder basic blocks in the compiled function in order to reduce number of
taken branches and improve code locality.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -freorder-blocks-algorithm=@var{algorithm}
@opindex freorder-blocks-algorithm
Use the specified algorithm for basic block reordering.  The
@var{algorithm} argument can be @samp{simple}, which does not increase
code size (except sometimes due to secondary effects like alignment),
or @samp{stc}, the ``software trace cache'' algorithm, which tries to
put all often executed code together, minimizing the number of branches
executed by making extra copies of code.

The default is @samp{simple} at levels @option{-O1}, @option{-Os}, and
@samp{stc} at levels @option{-O2}, @option{-O3}.

@item -freorder-blocks-and-partition
@opindex freorder-blocks-and-partition
In addition to reordering basic blocks in the compiled function, in order
to reduce number of taken branches, partitions hot and cold basic blocks
into separate sections of the assembly and @file{.o} files, to improve
paging and cache locality performance.

This optimization is automatically turned off in the presence of
exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined
section attribute and on any architecture that does not support named
sections.  When @option{-fsplit-stack} is used this option is not
enabled by default (to avoid linker errors), but may be enabled
explicitly (if using a working linker).

Enabled for x86 at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -freorder-functions
@opindex freorder-functions
Reorder functions in the object file in order to
improve code locality.  This is implemented by using special
subsections @code{.text.hot} for most frequently executed functions and
@code{.text.unlikely} for unlikely executed functions.  Reordering is done by
the linker so object file format must support named sections and linker must
place them in a reasonable way.

This option isn't effective unless you either provide profile feedback
(see @option{-fprofile-arcs} for details) or manually annotate functions with 
@code{hot} or @code{cold} attributes (@pxref{Common Function Attributes}).

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fstrict-aliasing
@opindex fstrict-aliasing
Allow the compiler to assume the strictest aliasing rules applicable to
the language being compiled.  For C (and C++), this activates
optimizations based on the type of expressions.  In particular, an
object of one type is assumed never to reside at the same address as an
object of a different type, unless the types are almost the same.  For
example, an @code{unsigned int} can alias an @code{int}, but not a
@code{void*} or a @code{double}.  A character type may alias any other
type.

@anchor{Type-punning}Pay special attention to code like this:
@smallexample
union a_union @{
  int i;
  double d;
@};

int f() @{
  union a_union t;
  t.d = 3.0;
  return t.i;
@}
@end smallexample
The practice of reading from a different union member than the one most
recently written to (called ``type-punning'') is common.  Even with
@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
is accessed through the union type.  So, the code above works as
expected.  @xref{Structures unions enumerations and bit-fields
implementation}.  However, this code might not:
@smallexample
int f() @{
  union a_union t;
  int* ip;
  t.d = 3.0;
  ip = &t.i;
  return *ip;
@}
@end smallexample

Similarly, access by taking the address, casting the resulting pointer
and dereferencing the result has undefined behavior, even if the cast
uses a union type, e.g.:
@smallexample
int f() @{
  double d = 3.0;
  return ((union a_union *) &d)->i;
@}
@end smallexample

The @option{-fstrict-aliasing} option is enabled at levels
@option{-O2}, @option{-O3}, @option{-Os}.

@item -falign-functions
@itemx -falign-functions=@var{n}
@itemx -falign-functions=@var{n}:@var{m}
@itemx -falign-functions=@var{n}:@var{m}:@var{n2}
@itemx -falign-functions=@var{n}:@var{m}:@var{n2}:@var{m2}
@opindex falign-functions
Align the start of functions to the next power-of-two greater than or
equal to @var{n}, skipping up to @var{m}-1 bytes.  This ensures that at
least the first @var{m} bytes of the function can be fetched by the CPU
without crossing an @var{n}-byte alignment boundary.

If @var{m} is not specified, it defaults to @var{n}.

Examples: @option{-falign-functions=32} aligns functions to the next
32-byte boundary, @option{-falign-functions=24} aligns to the next
32-byte boundary only if this can be done by skipping 23 bytes or less,
@option{-falign-functions=32:7} aligns to the next
32-byte boundary only if this can be done by skipping 6 bytes or less.

The second pair of @var{n2}:@var{m2} values allows you to specify
a secondary alignment: @option{-falign-functions=64:7:32:3} aligns to
the next 64-byte boundary if this can be done by skipping 6 bytes or less,
otherwise aligns to the next 32-byte boundary if this can be done
by skipping 2 bytes or less.
If @var{m2} is not specified, it defaults to @var{n2}.

Some assemblers only support this flag when @var{n} is a power of two;
in that case, it is rounded up.

@option{-fno-align-functions} and @option{-falign-functions=1} are
equivalent and mean that functions are not aligned.

If @var{n} is not specified or is zero, use a machine-dependent default.
The maximum allowed @var{n} option value is 65536.

Enabled at levels @option{-O2}, @option{-O3}.

@item -flimit-function-alignment
If this option is enabled, the compiler tries to avoid unnecessarily
overaligning functions. It attempts to instruct the assembler to align
by the amount specified by @option{-falign-functions}, but not to
skip more bytes than the size of the function.

@item -falign-labels
@itemx -falign-labels=@var{n}
@itemx -falign-labels=@var{n}:@var{m}
@itemx -falign-labels=@var{n}:@var{m}:@var{n2}
@itemx -falign-labels=@var{n}:@var{m}:@var{n2}:@var{m2}
@opindex falign-labels
Align all branch targets to a power-of-two boundary.

Parameters of this option are analogous to the @option{-falign-functions} option.
@option{-fno-align-labels} and @option{-falign-labels=1} are
equivalent and mean that labels are not aligned.

If @option{-falign-loops} or @option{-falign-jumps} are applicable and
are greater than this value, then their values are used instead.

If @var{n} is not specified or is zero, use a machine-dependent default
which is very likely to be @samp{1}, meaning no alignment.
The maximum allowed @var{n} option value is 65536.

Enabled at levels @option{-O2}, @option{-O3}.

@item -falign-loops
@itemx -falign-loops=@var{n}
@itemx -falign-loops=@var{n}:@var{m}
@itemx -falign-loops=@var{n}:@var{m}:@var{n2}
@itemx -falign-loops=@var{n}:@var{m}:@var{n2}:@var{m2}
@opindex falign-loops
Align loops to a power-of-two boundary.  If the loops are executed
many times, this makes up for any execution of the dummy padding
instructions.

If @option{-falign-labels} is greater than this value, then its value
is used instead.

Parameters of this option are analogous to the @option{-falign-functions} option.
@option{-fno-align-loops} and @option{-falign-loops=1} are
equivalent and mean that loops are not aligned.
The maximum allowed @var{n} option value is 65536.

If @var{n} is not specified or is zero, use a machine-dependent default.

Enabled at levels @option{-O2}, @option{-O3}.

@item -falign-jumps
@itemx -falign-jumps=@var{n}
@itemx -falign-jumps=@var{n}:@var{m}
@itemx -falign-jumps=@var{n}:@var{m}:@var{n2}
@itemx -falign-jumps=@var{n}:@var{m}:@var{n2}:@var{m2}
@opindex falign-jumps
Align branch targets to a power-of-two boundary, for branch targets
where the targets can only be reached by jumping.  In this case,
no dummy operations need be executed.

If @option{-falign-labels} is greater than this value, then its value
is used instead.

Parameters of this option are analogous to the @option{-falign-functions} option.
@option{-fno-align-jumps} and @option{-falign-jumps=1} are
equivalent and mean that loops are not aligned.

If @var{n} is not specified or is zero, use a machine-dependent default.
The maximum allowed @var{n} option value is 65536.

Enabled at levels @option{-O2}, @option{-O3}.

@item -fno-allocation-dce
@opindex fno-allocation-dce
Do not remove unused C++ allocations in dead code elimination.

@item -fallow-store-data-races
@opindex fallow-store-data-races
Allow the compiler to perform optimizations that may introduce new data races
on stores, without proving that the variable cannot be concurrently accessed
by other threads.  Does not affect optimization of local data.  It is safe to
use this option if it is known that global data will not be accessed by
multiple threads.

Examples of optimizations enabled by @option{-fallow-store-data-races} include
hoisting or if-conversions that may cause a value that was already in memory
to be re-written with that same value.  Such re-writing is safe in a single
threaded context but may be unsafe in a multi-threaded context.  Note that on
some processors, if-conversions may be required in order to enable
vectorization.

Enabled at level @option{-Ofast}.

@item -funit-at-a-time
@opindex funit-at-a-time
This option is left for compatibility reasons. @option{-funit-at-a-time}
has no effect, while @option{-fno-unit-at-a-time} implies
@option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.

Enabled by default.

@item -fno-toplevel-reorder
@opindex fno-toplevel-reorder
@opindex ftoplevel-reorder
Do not reorder top-level functions, variables, and @code{asm}
statements.  Output them in the same order that they appear in the
input file.  When this option is used, unreferenced static variables
are not removed.  This option is intended to support existing code
that relies on a particular ordering.  For new code, it is better to
use attributes when possible.

@option{-ftoplevel-reorder} is the default at @option{-O1} and higher, and
also at @option{-O0} if @option{-fsection-anchors} is explicitly requested.
Additionally @option{-fno-toplevel-reorder} implies
@option{-fno-section-anchors}.

@item -fweb
@opindex fweb
Constructs webs as commonly used for register allocation purposes and assign
each web individual pseudo register.  This allows the register allocation pass
to operate on pseudos directly, but also strengthens several other optimization
passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
however, make debugging impossible, since variables no longer stay in a
``home register''.

Enabled by default with @option{-funroll-loops}.

@item -fwhole-program
@opindex fwhole-program
Assume that the current compilation unit represents the whole program being
compiled.  All public functions and variables with the exception of @code{main}
and those merged by attribute @code{externally_visible} become static functions
and in effect are optimized more aggressively by interprocedural optimizers.

This option should not be used in combination with @option{-flto}.
Instead relying on a linker plugin should provide safer and more precise
information.

@item -flto[=@var{n}]
@opindex flto
This option runs the standard link-time optimizer.  When invoked
with source code, it generates GIMPLE (one of GCC's internal
representations) and writes it to special ELF sections in the object
file.  When the object files are linked together, all the function
bodies are read from these ELF sections and instantiated as if they
had been part of the same translation unit.

To use the link-time optimizer, @option{-flto} and optimization
options should be specified at compile time and during the final link.
It is recommended that you compile all the files participating in the
same link with the same options and also specify those options at
link time.  
For example:

@smallexample
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
@end smallexample

The first two invocations to GCC save a bytecode representation
of GIMPLE into special ELF sections inside @file{foo.o} and
@file{bar.o}.  The final invocation reads the GIMPLE bytecode from
@file{foo.o} and @file{bar.o}, merges the two files into a single
internal image, and compiles the result as usual.  Since both
@file{foo.o} and @file{bar.o} are merged into a single image, this
causes all the interprocedural analyses and optimizations in GCC to
work across the two files as if they were a single one.  This means,
for example, that the inliner is able to inline functions in
@file{bar.o} into functions in @file{foo.o} and vice-versa.

Another (simpler) way to enable link-time optimization is:

@smallexample
gcc -o myprog -flto -O2 foo.c bar.c
@end smallexample

The above generates bytecode for @file{foo.c} and @file{bar.c},
merges them together into a single GIMPLE representation and optimizes
them as usual to produce @file{myprog}.

The important thing to keep in mind is that to enable link-time
optimizations you need to use the GCC driver to perform the link step.
GCC automatically performs link-time optimization if any of the
objects involved were compiled with the @option{-flto} command-line option.  
You can always override
the automatic decision to do link-time optimization
by passing @option{-fno-lto} to the link command.

To make whole program optimization effective, it is necessary to make
certain whole program assumptions.  The compiler needs to know
what functions and variables can be accessed by libraries and runtime
outside of the link-time optimized unit.  When supported by the linker,
the linker plugin (see @option{-fuse-linker-plugin}) passes information
to the compiler about used and externally visible symbols.  When
the linker plugin is not available, @option{-fwhole-program} should be
used to allow the compiler to make these assumptions, which leads
to more aggressive optimization decisions.

When a file is compiled with @option{-flto} without
@option{-fuse-linker-plugin}, the generated object file is larger than
a regular object file because it contains GIMPLE bytecodes and the usual
final code (see @option{-ffat-lto-objects}).  This means that
object files with LTO information can be linked as normal object
files; if @option{-fno-lto} is passed to the linker, no
interprocedural optimizations are applied.  Note that when
@option{-fno-fat-lto-objects} is enabled the compile stage is faster
but you cannot perform a regular, non-LTO link on them.

When producing the final binary, GCC only
applies link-time optimizations to those files that contain bytecode.
Therefore, you can mix and match object files and libraries with
GIMPLE bytecodes and final object code.  GCC automatically selects
which files to optimize in LTO mode and which files to link without
further processing.

Generally, options specified at link time override those
specified at compile time, although in some cases GCC attempts to infer
link-time options from the settings used to compile the input files.

If you do not specify an optimization level option @option{-O} at
link time, then GCC uses the highest optimization level 
used when compiling the object files.  Note that it is generally 
ineffective to specify an optimization level option only at link time and 
not at compile time, for two reasons.  First, compiling without 
optimization suppresses compiler passes that gather information 
needed for effective optimization at link time.  Second, some early
optimization passes can be performed only at compile time and 
not at link time.

There are some code generation flags preserved by GCC when
generating bytecodes, as they need to be used during the final link.
Currently, the following options and their settings are taken from
the first object file that explicitly specifies them: 
@option{-fcommon}, @option{-fexceptions}, @option{-fnon-call-exceptions},
@option{-fgnu-tm} and all the @option{-m} target flags.

The following options @option{-fPIC}, @option{-fpic}, @option{-fpie} and
@option{-fPIE} are combined based on the following scheme:

@smallexample
@option{-fPIC} + @option{-fpic} = @option{-fpic}
@option{-fPIC} + @option{-fno-pic} = @option{-fno-pic}
@option{-fpic/-fPIC} + (no option) = (no option)
@option{-fPIC} + @option{-fPIE} = @option{-fPIE}
@option{-fpic} + @option{-fPIE} = @option{-fpie}
@option{-fPIC/-fpic} + @option{-fpie} = @option{-fpie}
@end smallexample

Certain ABI-changing flags are required to match in all compilation units,
and trying to override this at link time with a conflicting value
is ignored.  This includes options such as @option{-freg-struct-return}
and @option{-fpcc-struct-return}. 

Other options such as @option{-ffp-contract}, @option{-fno-strict-overflow},
@option{-fwrapv}, @option{-fno-trapv} or @option{-fno-strict-aliasing}
are passed through to the link stage and merged conservatively for
conflicting translation units.  Specifically
@option{-fno-strict-overflow}, @option{-fwrapv} and @option{-fno-trapv} take
precedence; and for example @option{-ffp-contract=off} takes precedence
over @option{-ffp-contract=fast}.  You can override them at link time.

Diagnostic options such as @option{-Wstringop-overflow} are passed
through to the link stage and their setting matches that of the
compile-step at function granularity.  Note that this matters only
for diagnostics emitted during optimization.  Note that code
transforms such as inlining can lead to warnings being enabled
or disabled for regions if code not consistent with the setting
at compile time.

When you need to pass options to the assembler via @option{-Wa} or
@option{-Xassembler} make sure to either compile such translation
units with @option{-fno-lto} or consistently use the same assembler
options on all translation units.  You can alternatively also
specify assembler options at LTO link time.

To enable debug info generation you need to supply @option{-g} at
compile time.  If any of the input files at link time were built
with debug info generation enabled the link will enable debug info
generation as well.  Any elaborate debug info settings
like the dwarf level @option{-gdwarf-5} need to be explicitly repeated
at the linker command line and mixing different settings in different
translation units is discouraged.

If LTO encounters objects with C linkage declared with incompatible
types in separate translation units to be linked together (undefined
behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
issued.  The behavior is still undefined at run time.  Similar
diagnostics may be raised for other languages.

Another feature of LTO is that it is possible to apply interprocedural
optimizations on files written in different languages:

@smallexample
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
@end smallexample

Notice that the final link is done with @command{g++} to get the C++
runtime libraries and @option{-lgfortran} is added to get the Fortran
runtime libraries.  In general, when mixing languages in LTO mode, you
should use the same link command options as when mixing languages in a
regular (non-LTO) compilation.

If object files containing GIMPLE bytecode are stored in a library archive, say
@file{libfoo.a}, it is possible to extract and use them in an LTO link if you
are using a linker with plugin support.  To create static libraries suitable
for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar}
and @command{ranlib}; 
to show the symbols of object files with GIMPLE bytecode, use
@command{gcc-nm}.  Those commands require that @command{ar}, @command{ranlib}
and @command{nm} have been compiled with plugin support.  At link time, use the
flag @option{-fuse-linker-plugin} to ensure that the library participates in
the LTO optimization process:

@smallexample
gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
@end smallexample

With the linker plugin enabled, the linker extracts the needed
GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
to make them part of the aggregated GIMPLE image to be optimized.

If you are not using a linker with plugin support and/or do not
enable the linker plugin, then the objects inside @file{libfoo.a}
are extracted and linked as usual, but they do not participate
in the LTO optimization process.  In order to make a static library suitable
for both LTO optimization and usual linkage, compile its object files with
@option{-flto} @option{-ffat-lto-objects}.

Link-time optimizations do not require the presence of the whole program to
operate.  If the program does not require any symbols to be exported, it is
possible to combine @option{-flto} and @option{-fwhole-program} to allow
the interprocedural optimizers to use more aggressive assumptions which may
lead to improved optimization opportunities.
Use of @option{-fwhole-program} is not needed when linker plugin is
active (see @option{-fuse-linker-plugin}).

The current implementation of LTO makes no
attempt to generate bytecode that is portable between different
types of hosts.  The bytecode files are versioned and there is a
strict version check, so bytecode files generated in one version of
GCC do not work with an older or newer version of GCC.

Link-time optimization does not work well with generation of debugging
information on systems other than those using a combination of ELF and
DWARF.

If you specify the optional @var{n}, the optimization and code
generation done at link time is executed in parallel using @var{n}
parallel jobs by utilizing an installed @command{make} program.  The
environment variable @env{MAKE} may be used to override the program
used.

You can also specify @option{-flto=jobserver} to use GNU make's
job server mode to determine the number of parallel jobs. This
is useful when the Makefile calling GCC is already executing in parallel.
You must prepend a @samp{+} to the command recipe in the parent Makefile
for this to work.  This option likely only works if @env{MAKE} is
GNU make.  Even without the option value, GCC tries to automatically
detect a running GNU make's job server.

Use @option{-flto=auto} to use GNU make's job server, if available,
or otherwise fall back to autodetection of the number of CPU threads
present in your system.

@item -flto-partition=@var{alg}
@opindex flto-partition
Specify the partitioning algorithm used by the link-time optimizer.
The value is either @samp{1to1} to specify a partitioning mirroring
the original source files or @samp{balanced} to specify partitioning
into equally sized chunks (whenever possible) or @samp{max} to create
new partition for every symbol where possible.  Specifying @samp{none}
as an algorithm disables partitioning and streaming completely. 
The default value is @samp{balanced}. While @samp{1to1} can be used
as an workaround for various code ordering issues, the @samp{max}
partitioning is intended for internal testing only.
The value @samp{one} specifies that exactly one partition should be
used while the value @samp{none} bypasses partitioning and executes
the link-time optimization step directly from the WPA phase.

@item -flto-compression-level=@var{n}
@opindex flto-compression-level
This option specifies the level of compression used for intermediate
language written to LTO object files, and is only meaningful in
conjunction with LTO mode (@option{-flto}).  GCC currently supports two
LTO compression algorithms. For zstd, valid values are 0 (no compression)
to 19 (maximum compression), while zlib supports values from 0 to 9.
Values outside this range are clamped to either minimum or maximum
of the supported values.  If the option is not given,
a default balanced compression setting is used.

@item -fuse-linker-plugin
@opindex fuse-linker-plugin
Enables the use of a linker plugin during link-time optimization.  This
option relies on plugin support in the linker, which is available in gold
or in GNU ld 2.21 or newer.

This option enables the extraction of object files with GIMPLE bytecode out
of library archives. This improves the quality of optimization by exposing
more code to the link-time optimizer.  This information specifies what
symbols can be accessed externally (by non-LTO object or during dynamic
linking).  Resulting code quality improvements on binaries (and shared
libraries that use hidden visibility) are similar to @option{-fwhole-program}.
See @option{-flto} for a description of the effect of this flag and how to
use it.

This option is enabled by default when LTO support in GCC is enabled
and GCC was configured for use with
a linker supporting plugins (GNU ld 2.21 or newer or gold).

@item -ffat-lto-objects
@opindex ffat-lto-objects
Fat LTO objects are object files that contain both the intermediate language
and the object code. This makes them usable for both LTO linking and normal
linking. This option is effective only when compiling with @option{-flto}
and is ignored at link time.

@option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
requires the complete toolchain to be aware of LTO. It requires a linker with
linker plugin support for basic functionality.  Additionally,
@command{nm}, @command{ar} and @command{ranlib}
need to support linker plugins to allow a full-featured build environment
(capable of building static libraries etc).  GCC provides the @command{gcc-ar},
@command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options
to these tools. With non fat LTO makefiles need to be modified to use them.

Note that modern binutils provide plugin auto-load mechanism.
Installing the linker plugin into @file{$libdir/bfd-plugins} has the same
effect as usage of the command wrappers (@command{gcc-ar}, @command{gcc-nm} and
@command{gcc-ranlib}).

The default is @option{-fno-fat-lto-objects} on targets with linker plugin
support.

@item -fcompare-elim
@opindex fcompare-elim
After register allocation and post-register allocation instruction splitting,
identify arithmetic instructions that compute processor flags similar to a
comparison operation based on that arithmetic.  If possible, eliminate the
explicit comparison operation.

This pass only applies to certain targets that cannot explicitly represent
the comparison operation before register allocation is complete.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcprop-registers
@opindex fcprop-registers
After register allocation and post-register allocation instruction splitting,
perform a copy-propagation pass to try to reduce scheduling dependencies
and occasionally eliminate the copy.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fprofile-correction
@opindex fprofile-correction
Profiles collected using an instrumented binary for multi-threaded programs may
be inconsistent due to missed counter updates. When this option is specified,
GCC uses heuristics to correct or smooth out such inconsistencies. By
default, GCC emits an error message when an inconsistent profile is detected.

This option is enabled by @option{-fauto-profile}.

@item -fprofile-partial-training
@opindex fprofile-partial-training
With @code{-fprofile-use} all portions of programs not executed during train
run are optimized agressively for size rather than speed.  In some cases it is
not practical to train all possible hot paths in the program. (For
example, program may contain functions specific for a given hardware and
trianing may not cover all hardware configurations program is run on.)  With
@code{-fprofile-partial-training} profile feedback will be ignored for all
functions not executed during the train run leading them to be optimized as if
they were compiled without profile feedback. This leads to better performance
when train run is not representative but also leads to significantly bigger
code.

@item -fprofile-use
@itemx -fprofile-use=@var{path}
@opindex fprofile-use
Enable profile feedback-directed optimizations, 
and the following optimizations, many of which
are generally profitable only with profile feedback available:

@gccoptlist{-fbranch-probabilities  -fprofile-values @gol
-funroll-loops  -fpeel-loops  -ftracer  -fvpt @gol
-finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp @gol
-fpredictive-commoning  -fsplit-loops  -funswitch-loops @gol
-fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize @gol
-fvect-cost-model=dynamic  -ftree-loop-distribute-patterns @gol
-fprofile-reorder-functions}

Before you can use this option, you must first generate profiling information.
@xref{Instrumentation Options}, for information about the
@option{-fprofile-generate} option.

By default, GCC emits an error message if the feedback profiles do not
match the source code.  This error can be turned into a warning by using
@option{-Wno-error=coverage-mismatch}.  Note this may result in poorly
optimized code.  Additionally, by default, GCC also emits a warning message if
the feedback profiles do not exist (see @option{-Wmissing-profile}).

If @var{path} is specified, GCC looks at the @var{path} to find
the profile feedback data files. See @option{-fprofile-dir}.

@item -fauto-profile
@itemx -fauto-profile=@var{path}
@opindex fauto-profile
Enable sampling-based feedback-directed optimizations, 
and the following optimizations,
many of which are generally profitable only with profile feedback available:

@gccoptlist{-fbranch-probabilities  -fprofile-values @gol
-funroll-loops  -fpeel-loops  -ftracer  -fvpt @gol
-finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp @gol
-fpredictive-commoning  -fsplit-loops  -funswitch-loops @gol
-fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize @gol
-fvect-cost-model=dynamic  -ftree-loop-distribute-patterns @gol
-fprofile-correction}

@var{path} is the name of a file containing AutoFDO profile information.
If omitted, it defaults to @file{fbdata.afdo} in the current directory.

Producing an AutoFDO profile data file requires running your program
with the @command{perf} utility on a supported GNU/Linux target system.
For more information, see @uref{https://perf.wiki.kernel.org/}.

E.g.
@smallexample
perf record -e br_inst_retired:near_taken -b -o perf.data \
    -- your_program
@end smallexample

Then use the @command{create_gcov} tool to convert the raw profile data
to a format that can be used by GCC.@  You must also supply the 
unstripped binary for your program to this tool.  
See @uref{https://github.com/google/autofdo}.

E.g.
@smallexample
create_gcov --binary=your_program.unstripped --profile=perf.data \
    --gcov=profile.afdo
@end smallexample
@end table

The following options control compiler behavior regarding floating-point 
arithmetic.  These options trade off between speed and
correctness.  All must be specifically enabled.

@table @gcctabopt
@item -ffloat-store
@opindex 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
register or memory.

@cindex floating-point precision
This option prevents undesirable excess precision on machines such as
the 68000 where the floating registers (of the 68881) keep more
precision than a @code{double} is supposed to have.  Similarly for the
x86 architecture.  For most programs, the excess precision does only
good, but a few programs rely on the precise definition of IEEE floating
point.  Use @option{-ffloat-store} for such programs, after modifying
them to store all pertinent intermediate computations into variables.

@item -fexcess-precision=@var{style}
@opindex fexcess-precision
This option allows further control over excess precision on machines
where floating-point operations occur in a format with more precision or
range than the IEEE standard and interchange floating-point types.  By
default, @option{-fexcess-precision=fast} is in effect; this means that
operations may be carried out in a wider precision than the types specified
in the source if that would result in faster code, and it is unpredictable
when rounding to the types specified in the source code takes place.
When compiling C, if @option{-fexcess-precision=standard} is specified then
excess precision follows the rules specified in ISO C99; in particular,
both casts and assignments cause values to be rounded to their
semantic types (whereas @option{-ffloat-store} only affects
assignments).  This option is enabled by default for C if a strict
conformance option such as @option{-std=c99} is used.
@option{-ffast-math} enables @option{-fexcess-precision=fast} by default
regardless of whether a strict conformance option is used.

@opindex mfpmath
@option{-fexcess-precision=standard} is not implemented for languages
other than C.  On the x86, it has no effect if @option{-mfpmath=sse}
or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
semantics apply without excess precision, and in the latter, rounding
is unpredictable.

@item -ffast-math
@opindex ffast-math
Sets the options @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
@option{-ffinite-math-only}, @option{-fno-rounding-math},
@option{-fno-signaling-nans}, @option{-fcx-limited-range} and
@option{-fexcess-precision=fast}.

This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.

This option is not turned on by any @option{-O} option besides
@option{-Ofast} since it can result in incorrect output for programs
that depend on an exact implementation of IEEE or ISO rules/specifications
for math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.

@item -fno-math-errno
@opindex fno-math-errno
@opindex fmath-errno
Do not set @code{errno} after calling math functions that are executed
with a single instruction, e.g., @code{sqrt}.  A program that relies on
IEEE exceptions for math error handling may want to use this flag
for speed while maintaining IEEE arithmetic compatibility.

This option is not turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.

The default is @option{-fmath-errno}.

On Darwin systems, the math library never sets @code{errno}.  There is
therefore no reason for the compiler to consider the possibility that
it might, and @option{-fno-math-errno} is the default.

@item -funsafe-math-optimizations
@opindex funsafe-math-optimizations

Allow optimizations for floating-point arithmetic that (a) assume
that arguments and results are valid and (b) may violate IEEE or
ANSI standards.  When used at link time, it may include libraries
or startup files that change the default FPU control word or other
similar optimizations.

This option is not turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.
Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
@option{-fassociative-math} and @option{-freciprocal-math}.

The default is @option{-fno-unsafe-math-optimizations}.

@item -fassociative-math
@opindex fassociative-math

Allow re-association of operands in series of floating-point operations.
This violates the ISO C and C++ language standard by possibly changing
computation result.  NOTE: re-ordering may change the sign of zero as
well as ignore NaNs and inhibit or create underflow or overflow (and
thus cannot be used on code that relies on rounding behavior like
@code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
and thus may not be used when ordered comparisons are required.
This option requires that both @option{-fno-signed-zeros} and
@option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
much sense with @option{-frounding-math}. For Fortran the option
is automatically enabled when both @option{-fno-signed-zeros} and
@option{-fno-trapping-math} are in effect.

The default is @option{-fno-associative-math}.

@item -freciprocal-math
@opindex freciprocal-math

Allow the reciprocal of a value to be used instead of dividing by
the value if this enables optimizations.  For example @code{x / y}
can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
is subject to common subexpression elimination.  Note that this loses
precision and increases the number of flops operating on the value.

The default is @option{-fno-reciprocal-math}.

@item -ffinite-math-only
@opindex ffinite-math-only
Allow optimizations for floating-point arithmetic that assume
that arguments and results are not NaNs or +-Infs.

This option is not turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications.

The default is @option{-fno-finite-math-only}.

@item -fno-signed-zeros
@opindex fno-signed-zeros
@opindex fsigned-zeros
Allow optimizations for floating-point arithmetic that ignore the
signedness of zero.  IEEE arithmetic specifies the behavior of
distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
This option implies that the sign of a zero result isn't significant.

The default is @option{-fsigned-zeros}.

@item -fno-trapping-math
@opindex fno-trapping-math
@opindex ftrapping-math
Compile code assuming that floating-point operations cannot generate
user-visible traps.  These traps include division by zero, overflow,
underflow, inexact result and invalid operation.  This option requires
that @option{-fno-signaling-nans} be in effect.  Setting this option may
allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.

This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs that depend on
an exact implementation of IEEE or ISO rules/specifications for
math functions.

The default is @option{-ftrapping-math}.

@item -frounding-math
@opindex frounding-math
Disable transformations and optimizations that assume default floating-point
rounding behavior.  This is round-to-zero for all floating point
to integer conversions, and round-to-nearest for all other arithmetic
truncations.  This option should be specified for programs that change
the FP rounding mode dynamically, or that may be executed with a
non-default rounding mode.  This option disables constant folding of
floating-point expressions at compile time (which may be affected by
rounding mode) and arithmetic transformations that are unsafe in the
presence of sign-dependent rounding modes.

The default is @option{-fno-rounding-math}.

This option is experimental and does not currently guarantee to
disable all GCC optimizations that are affected by rounding mode.
Future versions of GCC may provide finer control of this setting
using C99's @code{FENV_ACCESS} pragma.  This command-line option
will be used to specify the default state for @code{FENV_ACCESS}.

@item -fsignaling-nans
@opindex fsignaling-nans
Compile code assuming that IEEE signaling NaNs may generate user-visible
traps during floating-point operations.  Setting this option disables
optimizations that may change the number of exceptions visible with
signaling NaNs.  This option implies @option{-ftrapping-math}.

This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
be defined.

The default is @option{-fno-signaling-nans}.

This option is experimental and does not currently guarantee to
disable all GCC optimizations that affect signaling NaN behavior.

@item -fno-fp-int-builtin-inexact
@opindex fno-fp-int-builtin-inexact
@opindex ffp-int-builtin-inexact
Do not allow the built-in functions @code{ceil}, @code{floor},
@code{round} and @code{trunc}, and their @code{float} and @code{long
double} variants, to generate code that raises the ``inexact''
floating-point exception for noninteger arguments.  ISO C99 and C11
allow these functions to raise the ``inexact'' exception, but ISO/IEC
TS 18661-1:2014, the C bindings to IEEE 754-2008, as integrated into
ISO C2X, does not allow these functions to do so.

The default is @option{-ffp-int-builtin-inexact}, allowing the
exception to be raised, unless C2X or a later C standard is selected.
This option does nothing unless @option{-ftrapping-math} is in effect.

Even if @option{-fno-fp-int-builtin-inexact} is used, if the functions
generate a call to a library function then the ``inexact'' exception
may be raised if the library implementation does not follow TS 18661.

@item -fsingle-precision-constant
@opindex fsingle-precision-constant
Treat floating-point constants as single precision instead of
implicitly converting them to double-precision constants.

@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.  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
performance, but are not enabled by any @option{-O} options.  This
section includes experimental options that may produce broken code.

@table @gcctabopt
@item -fbranch-probabilities
@opindex fbranch-probabilities
After running a program compiled with @option{-fprofile-arcs}
(@pxref{Instrumentation Options}),
you can compile it a second time using
@option{-fbranch-probabilities}, to improve optimizations based on
the number of times each branch was taken.  When a program
compiled with @option{-fprofile-arcs} exits, it saves arc execution
counts to a file called @file{@var{sourcename}.gcda} for each source
file.  The information in this data file is very dependent on the
structure of the generated code, so you must use the same source code
and the same optimization options for both compilations.

With @option{-fbranch-probabilities}, GCC puts a
@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
These can be used to improve optimization.  Currently, they are only
used in one place: in @file{reorg.c}, instead of guessing which path a
branch is most likely to take, the @samp{REG_BR_PROB} values are used to
exactly determine which path is taken more often.

Enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -fprofile-values
@opindex fprofile-values
If combined with @option{-fprofile-arcs}, it adds code so that some
data about values of expressions in the program is gathered.

With @option{-fbranch-probabilities}, it reads back the data gathered
from profiling values of expressions for usage in optimizations.

Enabled by @option{-fprofile-generate}, @option{-fprofile-use}, and
@option{-fauto-profile}.

@item -fprofile-reorder-functions
@opindex fprofile-reorder-functions
Function reordering based on profile instrumentation collects
first time of execution of a function and orders these functions
in ascending order.

Enabled with @option{-fprofile-use}.

@item -fvpt
@opindex fvpt
If combined with @option{-fprofile-arcs}, this option instructs the compiler
to add code to gather information about values of expressions.

With @option{-fbranch-probabilities}, it reads back the data gathered
and actually performs the optimizations based on them.
Currently the optimizations include specialization of division operations
using the knowledge about the value of the denominator.

Enabled with @option{-fprofile-use} and @option{-fauto-profile}.

@item -frename-registers
@opindex frename-registers
Attempt to avoid false dependencies in scheduled code by making use
of registers left over after register allocation.  This optimization
most benefits processors with lots of registers.  Depending on the
debug information format adopted by the target, however, it can
make debugging impossible, since variables no longer stay in
a ``home register''.

Enabled by default with @option{-funroll-loops}.

@item -fschedule-fusion
@opindex fschedule-fusion
Performs a target dependent pass over the instruction stream to schedule
instructions of same type together because target machine can execute them
more efficiently if they are adjacent to each other in the instruction flow.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -ftracer
@opindex ftracer
Perform tail duplication to enlarge superblock size.  This transformation
simplifies the control flow of the function allowing other optimizations to do
a better job.

Enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -funroll-loops
@opindex funroll-loops
Unroll loops whose number of iterations can be determined at compile time or
upon entry to the loop.  @option{-funroll-loops} implies
@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
It also turns on complete loop peeling (i.e.@: complete removal of loops with
a small constant number of iterations).  This option makes code larger, and may
or may not make it run faster.

Enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -funroll-all-loops
@opindex funroll-all-loops
Unroll all loops, even if their number of iterations is uncertain when
the loop is entered.  This usually makes programs run more slowly.
@option{-funroll-all-loops} implies the same options as
@option{-funroll-loops}.

@item -fpeel-loops
@opindex fpeel-loops
Peels loops for which there is enough information that they do not
roll much (from profile feedback or static analysis).  It also turns on
complete loop peeling (i.e.@: complete removal of loops with small constant
number of iterations).

Enabled by @option{-O3}, @option{-fprofile-use}, and @option{-fauto-profile}.

@item -fmove-loop-invariants
@opindex fmove-loop-invariants
Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
at level @option{-O1} and higher, except for @option{-Og}.

@item -fmove-loop-stores
@opindex fmove-loop-stores
Enables the loop store motion pass in the GIMPLE loop optimizer.  This
moves invariant stores to after the end of the loop in exchange for
carrying the stored value in a register across the iteration.
Note for this option to have an effect @option{-ftree-loop-im} has to
be enabled as well.  Enabled at level @option{-O1} and higher, except
for @option{-Og}.

@item -fsplit-loops
@opindex fsplit-loops
Split a loop into two if it contains a condition that's always true
for one side of the iteration space and false for the other.

Enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -funswitch-loops
@opindex funswitch-loops
Move branches with loop invariant conditions out of the loop, with duplicates
of the loop on both branches (modified according to result of the condition).

Enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -fversion-loops-for-strides
@opindex fversion-loops-for-strides
If a loop iterates over an array with a variable stride, create another
version of the loop that assumes the stride is always one.  For example:

@smallexample
for (int i = 0; i < n; ++i)
  x[i * stride] = @dots{};
@end smallexample

becomes:

@smallexample
if (stride == 1)
  for (int i = 0; i < n; ++i)
    x[i] = @dots{};
else
  for (int i = 0; i < n; ++i)
    x[i * stride] = @dots{};
@end smallexample

This is particularly useful for assumed-shape arrays in Fortran where
(for example) it allows better vectorization assuming contiguous accesses.
This flag is enabled by default at @option{-O3}.
It is also enabled by @option{-fprofile-use} and @option{-fauto-profile}.

@item -ffunction-sections
@itemx -fdata-sections
@opindex ffunction-sections
@opindex fdata-sections
Place each function or data item into its own section in the output
file if the target supports arbitrary sections.  The name of the
function or the name of the data item determines the section's name
in the output file.

Use these options on systems where the linker can perform optimizations to
improve locality of reference in the instruction space.  Most systems using the
ELF object format have linkers with such optimizations.  On AIX, the linker
rearranges sections (CSECTs) based on the call graph.  The performance impact
varies.

Together with a linker garbage collection (linker @option{--gc-sections}
option) these options may lead to smaller statically-linked executables (after
stripping).

On ELF/DWARF systems these options do not degenerate the quality of the debug
information.  There could be issues with other object files/debug info formats.

Only use these options when there are significant benefits from doing so.  When
you specify these options, the assembler and linker create larger object and
executable files and are also slower.  These options affect code generation.
They prevent optimizations by the compiler and assembler using relative
locations inside a translation unit since the locations are unknown until
link time.  An example of such an optimization is relaxing calls to short call
instructions.

@item -fstdarg-opt
@opindex fstdarg-opt
Optimize the prologue of variadic argument functions with respect to usage of
those arguments.

@item -fsection-anchors
@opindex fsection-anchors
Try to reduce the number of symbolic address calculations by using
shared ``anchor'' symbols to address nearby objects.  This transformation
can help to reduce the number of GOT entries and GOT accesses on some
targets.

For example, the implementation of the following function @code{foo}:

@smallexample
static int a, b, c;
int foo (void) @{ return a + b + c; @}
@end smallexample

@noindent
usually calculates the addresses of all three variables, but if you
compile it with @option{-fsection-anchors}, it accesses the variables
from a common anchor point instead.  The effect is similar to the
following pseudocode (which isn't valid C):

@smallexample
int foo (void)
@{
  register int *xr = &x;
  return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
@}
@end smallexample

Not all targets support this option.

@item -fzero-call-used-regs=@var{choice}
@opindex fzero-call-used-regs
Zero call-used registers at function return to increase program
security by either mitigating Return-Oriented Programming (ROP)
attacks or preventing information leakage through registers.

The possible values of @var{choice} are the same as for the
@code{zero_call_used_regs} attribute (@pxref{Function Attributes}).
The default is @samp{skip}.

You can control this behavior for a specific function by using the function
attribute @code{zero_call_used_regs} (@pxref{Function Attributes}).

@item --param @var{name}=@var{value}
@opindex param
In some places, GCC uses various constants to control the amount of
optimization that is done.  For example, GCC does not inline functions
that contain more than a certain number of instructions.  You can
control some of these constants on the command line using the
@option{--param} option.

The names of specific parameters, and the meaning of the values, are
tied to the internals of the compiler, and are subject to change
without notice in future releases.

In order to get minimal, maximal and default value of a parameter,
one can use @option{--help=param -Q} options.

In each case, the @var{value} is an integer.  The following choices
of @var{name} are recognized for all targets:

@table @gcctabopt
@item predictable-branch-outcome
When branch is predicted to be taken with probability lower than this threshold
(in percent), then it is considered well predictable.

@item max-rtl-if-conversion-insns
RTL if-conversion tries to remove conditional branches around a block and
replace them with conditionally executed instructions.  This parameter
gives the maximum number of instructions in a block which should be
considered for if-conversion.  The compiler will
also use other heuristics to decide whether if-conversion is likely to be
profitable.

@item max-rtl-if-conversion-predictable-cost
RTL if-conversion will try to remove conditional branches around a block
and replace them with conditionally executed instructions.  These parameters
give the maximum permissible cost for the sequence that would be generated
by if-conversion depending on whether the branch is statically determined
to be predictable or not.  The units for this parameter are the same as
those for the GCC internal seq_cost metric.  The compiler will try to
provide a reasonable default for this parameter using the BRANCH_COST
target macro.

@item max-crossjump-edges
The maximum number of incoming edges to consider for cross-jumping.
The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
the number of edges incoming to each block.  Increasing values mean
more aggressive optimization, making the compilation time increase with
probably small improvement in executable size.

@item min-crossjump-insns
The minimum number of instructions that must be matched at the end
of two blocks before cross-jumping is performed on them.  This
value is ignored in the case where all instructions in the block being
cross-jumped from are matched.

@item max-grow-copy-bb-insns
The maximum code size expansion factor when copying basic blocks
instead of jumping.  The expansion is relative to a jump instruction.

@item max-goto-duplication-insns
The maximum number of instructions to duplicate to a block that jumps
to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
passes, GCC factors computed gotos early in the compilation process,
and unfactors them as late as possible.  Only computed jumps at the
end of a basic blocks with no more than max-goto-duplication-insns are
unfactored.

@item max-delay-slot-insn-search
The maximum number of instructions to consider when looking for an
instruction to fill a delay slot.  If more than this arbitrary number of
instructions are searched, the time savings from filling the delay slot
are minimal, so stop searching.  Increasing values mean more
aggressive optimization, making the compilation time increase with probably
small improvement in execution time.

@item max-delay-slot-live-search
When trying to fill delay slots, the maximum number of instructions to
consider when searching for a block with valid live register
information.  Increasing this arbitrarily chosen value means more
aggressive optimization, increasing the compilation time.  This parameter
should be removed when the delay slot code is rewritten to maintain the
control-flow graph.

@item max-gcse-memory
The approximate maximum amount of memory in @code{kB} that can be allocated in
order to perform the global common subexpression elimination
optimization.  If more memory than specified is required, the
optimization is not done.

@item max-gcse-insertion-ratio
If the ratio of expression insertions to deletions is larger than this value
for any expression, then RTL PRE inserts or removes the expression and thus
leaves partially redundant computations in the instruction stream.

@item max-pending-list-length
The maximum number of pending dependencies scheduling allows
before flushing the current state and starting over.  Large functions
with few branches or calls can create excessively large lists which
needlessly consume memory and resources.

@item max-modulo-backtrack-attempts
The maximum number of backtrack attempts the scheduler should make
when modulo scheduling a loop.  Larger values can exponentially increase
compilation time.

@item max-inline-insns-single
Several parameters control the tree inliner used in GCC@.  This number sets the
maximum number of instructions (counted in GCC's internal representation) in a
single function that the tree inliner considers for inlining.  This only
affects functions declared inline and methods implemented in a class
declaration (C++). 


@item max-inline-insns-auto
When you use @option{-finline-functions} (included in @option{-O3}),
a lot of functions that would otherwise not be considered for inlining
by the compiler are investigated.  To those functions, a different
(more restrictive) limit compared to functions declared inline can
be applied (@option{--param max-inline-insns-auto}).

@item max-inline-insns-small
This is bound applied to calls which are considered relevant with
@option{-finline-small-functions}.

@item max-inline-insns-size
This is bound applied to calls which are optimized for size. Small growth
may be desirable to anticipate optimization oppurtunities exposed by inlining.

@item uninlined-function-insns
Number of instructions accounted by inliner for function overhead such as
function prologue and epilogue.

@item uninlined-function-time
Extra time accounted by inliner for function overhead such as time needed to
execute function prologue and epilogue.

@item inline-heuristics-hint-percent
The scale (in percents) applied to @option{inline-insns-single},
@option{inline-insns-single-O2}, @option{inline-insns-auto}
when inline heuristics hints that inlining is
very profitable (will enable later optimizations).

@item uninlined-thunk-insns
@item uninlined-thunk-time
Same as @option{--param uninlined-function-insns} and
@option{--param uninlined-function-time} but applied to function thunks.

@item inline-min-speedup
When estimated performance improvement of caller + callee runtime exceeds this
threshold (in percent), the function can be inlined regardless of the limit on
@option{--param max-inline-insns-single} and @option{--param
max-inline-insns-auto}.

@item large-function-insns
The limit specifying really large functions.  For functions larger than this
limit after inlining, inlining is constrained by
@option{--param large-function-growth}.  This parameter is useful primarily
to avoid extreme compilation time caused by non-linear algorithms used by the
back end.

@item large-function-growth
Specifies maximal growth of large function caused by inlining in percents.
For example, parameter value 100 limits large function growth to 2.0 times
the original size.

@item large-unit-insns
The limit specifying large translation unit.  Growth caused by inlining of
units larger than this limit is limited by @option{--param inline-unit-growth}.
For small units this might be too tight.
For example, consider a unit consisting of function A
that is inline and B that just calls A three times.  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 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}.

@item lazy-modules
Maximum number of concurrently open C++ module files when lazy loading.

@item inline-unit-growth
Specifies maximal overall growth of the compilation unit caused by inlining.
For example, parameter value 20 limits unit growth to 1.2 times the original
size. Cold functions (either marked cold via an attribute or by profile
feedback) are not accounted into the unit size.

@item ipa-cp-unit-growth
Specifies maximal overall growth of the compilation unit caused by
interprocedural constant propagation.  For example, parameter value 10 limits
unit growth to 1.1 times the original size.

@item ipa-cp-large-unit-insns
The size of translation unit that IPA-CP pass considers large.

@item large-stack-frame
The limit specifying large stack frames.  While inlining the algorithm is trying
to not grow past this limit too much.

@item large-stack-frame-growth
Specifies maximal growth of large stack frames caused by inlining in percents.
For example, parameter value 1000 limits large stack frame growth to 11 times
the original size.

@item max-inline-insns-recursive
@itemx max-inline-insns-recursive-auto
Specifies the maximum number of instructions an out-of-line copy of a
self-recursive inline
function can grow into by performing recursive inlining.

@option{--param max-inline-insns-recursive} applies to functions
declared inline.
For functions not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled; @option{--param max-inline-insns-recursive-auto} applies instead.

@item max-inline-recursive-depth
@itemx max-inline-recursive-depth-auto
Specifies the maximum recursion depth used for recursive inlining.

@option{--param max-inline-recursive-depth} applies to functions
declared inline.  For functions not declared inline, recursive inlining
happens only when @option{-finline-functions} (included in @option{-O3}) is
enabled; @option{--param max-inline-recursive-depth-auto} applies instead.

@item min-inline-recursive-probability
Recursive inlining is profitable only for function having deep recursion
in average and can hurt for function having little recursion depth by
increasing the prologue size or complexity of function body to other
optimizers.

When profile feedback is available (see @option{-fprofile-generate}) the actual
recursion depth can be guessed from the probability that function recurses
via a given call expression.  This parameter limits inlining only to call
expressions whose probability exceeds the given threshold (in percents).

@item early-inlining-insns
Specify growth that the early inliner can make.  In effect it increases
the amount of inlining for code having a large abstraction penalty.

@item max-early-inliner-iterations
Limit of iterations of the early inliner.  This basically bounds
the number of nested indirect calls the early inliner can resolve.
Deeper chains are still handled by late inlining.

@item comdat-sharing-probability
Probability (in percent) that C++ inline function with comdat visibility
are shared across multiple compilation units.

@item modref-max-bases
@item modref-max-refs
@item modref-max-accesses
Specifies the maximal number of base pointers, references and accesses stored
for a single function by mod/ref analysis.

@item modref-max-tests
Specifies the maxmal number of tests alias oracle can perform to disambiguate
memory locations using the mod/ref information.  This parameter ought to be
bigger than @option{--param modref-max-bases} and @option{--param
modref-max-refs}.

@item modref-max-depth
Specifies the maximum depth of DFS walk used by modref escape analysis.
Setting to 0 disables the analysis completely.

@item modref-max-escape-points
Specifies the maximum number of escape points tracked by modref per SSA-name.

@item modref-max-adjustments
Specifies the maximum number the access range is enlarged during modref dataflow
analysis.

@item profile-func-internal-id
A parameter to control whether to use function internal id in profile
database lookup. If the value is 0, the compiler uses an id that
is based on function assembler name and filename, which makes old profile
data more tolerant to source changes such as function reordering etc.

@item min-vect-loop-bound
The minimum number of iterations under which loops are not vectorized
when @option{-ftree-vectorize} is used.  The number of iterations after
vectorization needs to be greater than the value specified by this option
to allow vectorization.

@item gcse-cost-distance-ratio
Scaling factor in calculation of maximum distance an expression
can be moved by GCSE optimizations.  This is currently supported only in the
code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
is with simple expressions, i.e., the expressions that have cost
less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
hoisting of simple expressions.

@item gcse-unrestricted-cost
Cost, roughly measured as the cost of a single typical machine
instruction, at which GCSE optimizations do not constrain
the distance an expression can travel.  This is currently
supported only in the code hoisting pass.  The lesser the cost,
the more aggressive code hoisting is.  Specifying 0 
allows all expressions to travel unrestricted distances.

@item max-hoist-depth
The depth of search in the dominator tree for expressions to hoist.
This is used to avoid quadratic behavior in hoisting algorithm.
The value of 0 does not limit on the search, but may slow down compilation
of huge functions.

@item max-tail-merge-comparisons
The maximum amount of similar bbs to compare a bb with.  This is used to
avoid quadratic behavior in tree tail merging.

@item max-tail-merge-iterations
The maximum amount of iterations of the pass over the function.  This is used to
limit compilation time in tree tail merging.

@item store-merging-allow-unaligned
Allow the store merging pass to introduce unaligned stores if it is legal to
do so.

@item max-stores-to-merge
The maximum number of stores to attempt to merge into wider stores in the store
merging pass.

@item max-store-chains-to-track
The maximum number of store chains to track at the same time in the attempt
to merge them into wider stores in the store merging pass.

@item max-stores-to-track
The maximum number of stores to track at the same time in the attemt to
to merge them into wider stores in the store merging pass.

@item max-unrolled-insns
The maximum number of instructions that a loop may have to be unrolled.
If a loop is unrolled, this parameter also determines how many times
the loop code is unrolled.

@item max-average-unrolled-insns
The maximum number of instructions biased by probabilities of their execution
that a loop may have to be unrolled.  If a loop is unrolled,
this parameter also determines how many times the loop code is unrolled.

@item max-unroll-times
The maximum number of unrollings of a single loop.

@item max-peeled-insns
The maximum number of instructions that a loop may have to be peeled.
If a loop is peeled, this parameter also determines how many times
the loop code is peeled.

@item max-peel-times
The maximum number of peelings of a single loop.

@item max-peel-branches
The maximum number of branches on the hot path through the peeled sequence.

@item max-completely-peeled-insns
The maximum number of insns of a completely peeled loop.

@item max-completely-peel-times
The maximum number of iterations of a loop to be suitable for complete peeling.

@item max-completely-peel-loop-nest-depth
The maximum depth of a loop nest suitable for complete peeling.

@item max-unswitch-insns
The maximum number of insns of an unswitched loop.

@item max-unswitch-level
The maximum number of branches unswitched in a single loop.

@item lim-expensive
The minimum cost of an expensive expression in the loop invariant motion.

@item min-loop-cond-split-prob
When FDO profile information is available, @option{min-loop-cond-split-prob}
specifies minimum threshold for probability of semi-invariant condition
statement to trigger loop split.

@item iv-consider-all-candidates-bound
Bound on number of candidates for induction variables, below which
all candidates are considered for each use in induction variable
optimizations.  If there are more candidates than this,
only the most relevant ones are considered to avoid quadratic time complexity.

@item iv-max-considered-uses
The induction variable optimizations give up on loops that contain more
induction variable uses.

@item iv-always-prune-cand-set-bound
If the number of candidates in the set is smaller than this value,
always try to remove unnecessary ivs from the set
when adding a new one.

@item avg-loop-niter
Average number of iterations of a loop.

@item dse-max-object-size
Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
Larger values may result in larger compilation times.

@item dse-max-alias-queries-per-store
Maximum number of queries into the alias oracle per store.
Larger values result in larger compilation times and may result in more
removed dead stores.

@item scev-max-expr-size
Bound on size of expressions used in the scalar evolutions analyzer.
Large expressions slow the analyzer.

@item scev-max-expr-complexity
Bound on the complexity of the expressions in the scalar evolutions analyzer.
Complex expressions slow the analyzer.

@item max-tree-if-conversion-phi-args
Maximum number of arguments in a PHI supported by TREE if conversion
unless the loop is marked with simd pragma.

@item vect-max-version-for-alignment-checks
The maximum number of run-time checks that can be performed when
doing loop versioning for alignment in the vectorizer.

@item vect-max-version-for-alias-checks
The maximum number of run-time checks that can be performed when
doing loop versioning for alias in the vectorizer.

@item vect-max-peeling-for-alignment
The maximum number of loop peels to enhance access alignment
for vectorizer. Value -1 means no limit.

@item max-iterations-to-track
The maximum number of iterations of a loop the brute-force algorithm
for analysis of the number of iterations of the loop tries to evaluate.

@item hot-bb-count-fraction
The denominator n of fraction 1/n of the maximal execution count of a
basic block in the entire program that a basic block needs to at least
have in order to be considered hot.  The default is 10000, which means
that a basic block is considered hot if its execution count is greater
than 1/10000 of the maximal execution count.  0 means that it is never
considered hot.  Used in non-LTO mode.

@item hot-bb-count-ws-permille
The number of most executed permilles, ranging from 0 to 1000, of the
profiled execution of the entire program to which the execution count
of a basic block must be part of in order to be considered hot.  The
default is 990, which means that a basic block is considered hot if
its execution count contributes to the upper 990 permilles, or 99.0%,
of the profiled execution of the entire program.  0 means that it is
never considered hot.  Used in LTO mode.

@item hot-bb-frequency-fraction
The denominator n of fraction 1/n of the execution frequency of the
entry block of a function that a basic block of this function needs
to at least have in order to be considered hot.  The default is 1000,
which means that a basic block is considered hot in a function if it
is executed more frequently than 1/1000 of the frequency of the entry
block of the function.  0 means that it is never considered hot.

@item unlikely-bb-count-fraction
The denominator n of fraction 1/n of the number of profiled runs of
the entire program below which the execution count of a basic block
must be in order for the basic block to be considered unlikely executed.
The default is 20, which means that a basic block is considered unlikely
executed if it is executed in fewer than 1/20, or 5%, of the runs of
the program.  0 means that it is always considered unlikely executed.

@item max-predicted-iterations
The maximum number of loop iterations we predict statically.  This is useful
in cases where a function contains a single loop with known bound and
another loop with unknown bound.
The known number of iterations is predicted correctly, while
the unknown number of iterations average to roughly 10.  This means that the
loop without bounds appears artificially cold relative to the other one.

@item builtin-expect-probability
Control the probability of the expression having the specified value. This
parameter takes a percentage (i.e.@: 0 ... 100) as input.

@item builtin-string-cmp-inline-length
The maximum length of a constant string for a builtin string cmp call 
eligible for inlining.

@item align-threshold

Select fraction of the maximal frequency of executions of a basic block in
a function to align the basic block.

@item align-loop-iterations

A loop expected to iterate at least the selected number of iterations is
aligned.

@item tracer-dynamic-coverage
@itemx tracer-dynamic-coverage-feedback

This value is used to limit superblock formation once the given percentage of
executed instructions is covered.  This limits unnecessary code size
expansion.

The @option{tracer-dynamic-coverage-feedback} parameter
is used only when profile
feedback is available.  The real profiles (as opposed to statically estimated
ones) are much less balanced allowing the threshold to be larger value.

@item tracer-max-code-growth
Stop tail duplication once code growth has reached given percentage.  This is
a rather artificial limit, as most of the duplicates are eliminated later in
cross jumping, so it may be set to much higher values than is the desired code
growth.

@item tracer-min-branch-ratio

Stop reverse growth when the reverse probability of best edge is less than this
threshold (in percent).

@item tracer-min-branch-probability
@itemx tracer-min-branch-probability-feedback

Stop forward growth if the best edge has probability lower than this
threshold.

Similarly to @option{tracer-dynamic-coverage} two parameters are
provided.  @option{tracer-min-branch-probability-feedback} is used for
compilation with profile feedback and @option{tracer-min-branch-probability}
compilation without.  The value for compilation with profile feedback
needs to be more conservative (higher) in order to make tracer
effective.

@item stack-clash-protection-guard-size
Specify the size of the operating system provided stack guard as
2 raised to @var{num} bytes.  Higher values may reduce the
number of explicit probes, but a value larger than the operating system
provided guard will leave code vulnerable to stack clash style attacks.

@item stack-clash-protection-probe-interval
Stack clash protection involves probing stack space as it is allocated.  This
param controls the maximum distance between probes into the stack as 2 raised
to @var{num} bytes.  Higher values may reduce the number of explicit probes, but a value
larger than the operating system provided guard will leave code vulnerable to
stack clash style attacks.

@item max-cse-path-length

The maximum number of basic blocks on path that CSE considers.

@item max-cse-insns
The maximum number of instructions CSE processes before flushing.

@item ggc-min-expand

GCC uses a garbage collector to manage its own memory allocation.  This
parameter specifies the minimum percentage by which the garbage
collector's heap should be allowed to expand between collections.
Tuning this may improve compilation speed; it has no effect on code
generation.

The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
GCC is not able to calculate RAM on a particular platform, the lower
bound of 30% is used.  Setting this parameter and
@option{ggc-min-heapsize} to zero causes a full collection to occur at
every opportunity.  This is extremely slow, but can be useful for
debugging.

@item ggc-min-heapsize

Minimum size of the garbage collector's heap before it begins bothering
to collect garbage.  The first collection occurs after the heap expands
by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
tuning this may improve compilation speed, and has no effect on code
generation.

The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
with a lower bound of 4096 (four megabytes) and an upper bound of
131072 (128 megabytes).  If GCC is not able to calculate RAM on a
particular platform, the lower bound is used.  Setting this parameter
very large effectively disables garbage collection.  Setting this
parameter and @option{ggc-min-expand} to zero causes a full collection
to occur at every opportunity.

@item max-reload-search-insns
The maximum number of instruction reload should look backward for equivalent
register.  Increasing values mean more aggressive optimization, making the
compilation time increase with probably slightly better performance.

@item max-cselib-memory-locations
The maximum number of memory locations cselib should take into account.
Increasing values mean more aggressive optimization, making the compilation time
increase with probably slightly better performance.

@item max-sched-ready-insns
The maximum number of instructions ready to be issued the scheduler should
consider at any given time during the first scheduling pass.  Increasing
values mean more thorough searches, making the compilation time increase
with probably little benefit.

@item max-sched-region-blocks
The maximum number of blocks in a region to be considered for
interblock scheduling.

@item max-pipeline-region-blocks
The maximum number of blocks in a region to be considered for
pipelining in the selective scheduler.

@item max-sched-region-insns
The maximum number of insns in a region to be considered for
interblock scheduling.

@item max-pipeline-region-insns
The maximum number of insns in a region to be considered for
pipelining in the selective scheduler.

@item min-spec-prob
The minimum probability (in percents) of reaching a source block
for interblock speculative scheduling.

@item max-sched-extend-regions-iters
The maximum number of iterations through CFG to extend regions.
A value of 0 disables region extensions.

@item max-sched-insn-conflict-delay
The maximum conflict delay for an insn to be considered for speculative motion.

@item sched-spec-prob-cutoff
The minimal probability of speculation success (in percents), so that
speculative insns are scheduled.

@item sched-state-edge-prob-cutoff
The minimum probability an edge must have for the scheduler to save its
state across it.

@item sched-mem-true-dep-cost
Minimal distance (in CPU cycles) between store and load targeting same
memory locations.

@item selsched-max-lookahead
The maximum size of the lookahead window of selective scheduling.  It is a
depth of search for available instructions.

@item selsched-max-sched-times
The maximum number of times that an instruction is scheduled during
selective scheduling.  This is the limit on the number of iterations
through which the instruction may be pipelined.

@item selsched-insns-to-rename
The maximum number of best instructions in the ready list that are considered
for renaming in the selective scheduler.

@item sms-min-sc
The minimum value of stage count that swing modulo scheduler
generates.

@item max-last-value-rtl
The maximum size measured as number of RTLs that can be recorded in an expression
in combiner for a pseudo register as last known value of that register.

@item max-combine-insns
The maximum number of instructions the RTL combiner tries to combine.

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

@item ssp-buffer-size
The minimum size of buffers (i.e.@: arrays) that receive stack smashing
protection when @option{-fstack-protection} is used.

@item min-size-for-stack-sharing
The minimum size of variables taking part in stack slot sharing when not
optimizing.

@item max-jump-thread-duplication-stmts
Maximum number of statements allowed in a block that needs to be
duplicated when threading jumps.

@item max-fields-for-field-sensitive
Maximum number of fields in a structure treated in
a field sensitive manner during pointer analysis.

@item prefetch-latency
Estimate on average number of instructions that are executed before
prefetch finishes.  The distance prefetched ahead is proportional
to this constant.  Increasing this number may also lead to less
streams being prefetched (see @option{simultaneous-prefetches}).

@item simultaneous-prefetches
Maximum number of prefetches that can run at the same time.

@item l1-cache-line-size
The size of cache line in L1 data cache, in bytes.

@item l1-cache-size
The size of L1 data cache, in kilobytes.

@item l2-cache-size
The size of L2 data cache, in kilobytes.

@item prefetch-dynamic-strides
Whether the loop array prefetch pass should issue software prefetch hints
for strides that are non-constant.  In some cases this may be
beneficial, though the fact the stride is non-constant may make it
hard to predict when there is clear benefit to issuing these hints.

Set to 1 if the prefetch hints should be issued for non-constant
strides.  Set to 0 if prefetch hints should be issued only for strides that
are known to be constant and below @option{prefetch-minimum-stride}.

@item prefetch-minimum-stride
Minimum constant stride, in bytes, to start using prefetch hints for.  If
the stride is less than this threshold, prefetch hints will not be issued.

This setting is useful for processors that have hardware prefetchers, in
which case there may be conflicts between the hardware prefetchers and
the software prefetchers.  If the hardware prefetchers have a maximum
stride they can handle, it should be used here to improve the use of
software prefetchers.

A value of -1 means we don't have a threshold and therefore
prefetch hints can be issued for any constant stride.

This setting is only useful for strides that are known and constant.

@item destructive-interference-size
@item constructive-interference-size
The values for the C++17 variables
@code{std::hardware_destructive_interference_size} and
@code{std::hardware_constructive_interference_size}.  The destructive
interference size is the minimum recommended offset between two
independent concurrently-accessed objects; the constructive
interference size is the maximum recommended size of contiguous memory
accessed together.  Typically both will be the size of an L1 cache
line for the target, in bytes.  For a generic target covering a range of L1
cache line sizes, typically the constructive interference size will be
the small end of the range and the destructive size will be the large
end.

The destructive interference size is intended to be used for layout,
and thus has ABI impact.  The default value is not expected to be
stable, and on some targets varies with @option{-mtune}, so use of
this variable in a context where ABI stability is important, such as
the public interface of a library, is strongly discouraged; if it is
used in that context, users can stabilize the value using this
option.

The constructive interference size is less sensitive, as it is
typically only used in a @samp{static_assert} to make sure that a type
fits within a cache line.

See also @option{-Winterference-size}.

@item loop-interchange-max-num-stmts
The maximum number of stmts in a loop to be interchanged.

@item loop-interchange-stride-ratio
The minimum ratio between stride of two loops for interchange to be profitable.

@item min-insn-to-prefetch-ratio
The minimum ratio between the number of instructions and the
number of prefetches to enable prefetching in a loop.

@item prefetch-min-insn-to-mem-ratio
The minimum ratio between the number of instructions and the
number of memory references to enable prefetching in a loop.

@item use-canonical-types
Whether the compiler should use the ``canonical'' type system.
Should always be 1, which uses a more efficient internal
mechanism for comparing types in C++ and Objective-C++.  However, if
bugs in the canonical type system are causing compilation failures,
set this value to 0 to disable canonical types.

@item switch-conversion-max-branch-ratio
Switch initialization conversion refuses to create arrays that are
bigger than @option{switch-conversion-max-branch-ratio} times the number of
branches in the switch.

@item max-partial-antic-length
Maximum length of the partial antic set computed during the tree
partial redundancy elimination optimization (@option{-ftree-pre}) when
optimizing at @option{-O3} and above.  For some sorts of source code
the enhanced partial redundancy elimination optimization can run away,
consuming all of the memory available on the host machine.  This
parameter sets a limit on the length of the sets that are computed,
which prevents the runaway behavior.  Setting a value of 0 for
this parameter allows an unlimited set length.

@item rpo-vn-max-loop-depth
Maximum loop depth that is value-numbered optimistically.
When the limit hits the innermost
@var{rpo-vn-max-loop-depth} loops and the outermost loop in the
loop nest are value-numbered optimistically and the remaining ones not.

@item sccvn-max-alias-queries-per-access
Maximum number of alias-oracle queries we perform when looking for
redundancies for loads and stores.  If this limit is hit the search
is aborted and the load or store is not considered redundant.  The
number of queries is algorithmically limited to the number of
stores on all paths from the load to the function entry.

@item ira-max-loops-num
IRA uses regional register allocation by default.  If a function
contains more loops than the number given by this parameter, only at most
the given number of the most frequently-executed loops form regions
for regional register allocation.

@item ira-max-conflict-table-size 
Although IRA uses a sophisticated algorithm to compress the conflict
table, the table can still require excessive amounts of memory for
huge functions.  If the conflict table for a function could be more
than the size in MB given by this parameter, the register allocator
instead uses a faster, simpler, and lower-quality
algorithm that does not require building a pseudo-register conflict table.  

@item ira-loop-reserved-regs
IRA can be used to evaluate more accurate register pressure in loops
for decisions to move loop invariants (see @option{-O3}).  The number
of available registers reserved for some other purposes is given
by this parameter.  Default of the parameter
is the best found from numerous experiments.

@item ira-consider-dup-in-all-alts
Make IRA to consider matching constraint (duplicated operand number)
heavily in all available alternatives for preferred register class.
If it is set as zero, it means IRA only respects the matching
constraint when it's in the only available alternative with an
appropriate register class.  Otherwise, it means IRA will check all
available alternatives for preferred register class even if it has
found some choice with an appropriate register class and respect the
found qualified matching constraint.

@item lra-inheritance-ebb-probability-cutoff
LRA tries to reuse values reloaded in registers in subsequent insns.
This optimization is called inheritance.  EBB is used as a region to
do this optimization.  The parameter defines a minimal fall-through
edge probability in percentage used to add BB to inheritance EBB in
LRA.  The default value was chosen
from numerous runs of SPEC2000 on x86-64.

@item loop-invariant-max-bbs-in-loop
Loop invariant motion can be very expensive, both in compilation time and
in amount of needed compile-time memory, with very large loops.  Loops
with more basic blocks than this parameter won't have loop invariant
motion optimization performed on them.

@item loop-max-datarefs-for-datadeps
Building data dependencies is expensive for very large loops.  This
parameter limits the number of data references in loops that are
considered for data dependence analysis.  These large loops are no
handled by the optimizations using loop data dependencies.

@item max-vartrack-size
Sets a maximum number of hash table slots to use during variable
tracking dataflow analysis of any function.  If this limit is exceeded
with variable tracking at assignments enabled, analysis for that
function is retried without it, after removing all debug insns from
the function.  If the limit is exceeded even without debug insns, var
tracking analysis is completely disabled for the function.  Setting
the parameter to zero makes it unlimited.

@item max-vartrack-expr-depth
Sets a maximum number of recursion levels when attempting to map
variable names or debug temporaries to value expressions.  This trades
compilation time for more complete debug information.  If this is set too
low, value expressions that are available and could be represented in
debug information may end up not being used; setting this higher may
enable the compiler to find more complex debug expressions, but compile
time and memory use may grow.

@item max-debug-marker-count
Sets a threshold on the number of debug markers (e.g.@: begin stmt
markers) to avoid complexity explosion at inlining or expanding to RTL.
If a function has more such gimple stmts than the set limit, such stmts
will be dropped from the inlined copy of a function, and from its RTL
expansion.

@item min-nondebug-insn-uid
Use uids starting at this parameter for nondebug insns.  The range below
the parameter is reserved exclusively for debug insns created by
@option{-fvar-tracking-assignments}, but debug insns may get
(non-overlapping) uids above it if the reserved range is exhausted.

@item ipa-sra-ptr-growth-factor
IPA-SRA replaces a pointer to an aggregate with one or more new
parameters only when their cumulative size is less or equal to
@option{ipa-sra-ptr-growth-factor} times the size of the original
pointer parameter.

@item ipa-sra-max-replacements
Maximum pieces of an aggregate that IPA-SRA tracks.  As a
consequence, it is also the maximum number of replacements of a formal
parameter.

@item sra-max-scalarization-size-Ospeed
@itemx sra-max-scalarization-size-Osize
The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA) aim to
replace scalar parts of aggregates with uses of independent scalar
variables.  These parameters control the maximum size, in storage units,
of aggregate which is considered for replacement when compiling for
speed
(@option{sra-max-scalarization-size-Ospeed}) or size
(@option{sra-max-scalarization-size-Osize}) respectively.

@item sra-max-propagations
The maximum number of artificial accesses that Scalar Replacement of
Aggregates (SRA) will track, per one local variable, in order to
facilitate copy propagation.

@item tm-max-aggregate-size
When making copies of thread-local variables in a transaction, this
parameter specifies the size in bytes after which variables are
saved with the logging functions as opposed to save/restore code
sequence pairs.  This option only applies when using
@option{-fgnu-tm}.

@item graphite-max-nb-scop-params
To avoid exponential effects in the Graphite loop transforms, the
number of parameters in a Static Control Part (SCoP) is bounded.
A value of zero can be used to lift
the bound.  A variable whose value is unknown at compilation time and
defined outside a SCoP is a parameter of the SCoP.

@item loop-block-tile-size
Loop blocking or strip mining transforms, enabled with
@option{-floop-block} or @option{-floop-strip-mine}, strip mine each
loop in the loop nest by a given number of iterations.  The strip
length can be changed using the @option{loop-block-tile-size}
parameter.

@item ipa-jump-function-lookups
Specifies number of statements visited during jump function offset discovery.

@item ipa-cp-value-list-size
IPA-CP attempts to track all possible values and types passed to a function's
parameter in order to propagate them and perform devirtualization.
@option{ipa-cp-value-list-size} is the maximum number of values and types it
stores per one formal parameter of a function.

@item ipa-cp-eval-threshold
IPA-CP calculates its own score of cloning profitability heuristics
and performs those cloning opportunities with scores that exceed
@option{ipa-cp-eval-threshold}.

@item ipa-cp-max-recursive-depth
Maximum depth of recursive cloning for self-recursive function.

@item ipa-cp-min-recursive-probability
Recursive cloning only when the probability of call being executed exceeds
the parameter.

@item ipa-cp-recursive-freq-factor
The number of times interprocedural copy propagation expects recursive
functions to call themselves.

@item ipa-cp-recursion-penalty
Percentage penalty the recursive functions will receive when they
are evaluated for cloning.

@item ipa-cp-single-call-penalty
Percentage penalty functions containing a single call to another
function will receive when they are evaluated for cloning.

@item ipa-max-agg-items
IPA-CP is also capable to propagate a number of scalar values passed
in an aggregate. @option{ipa-max-agg-items} controls the maximum
number of such values per one parameter.

@item ipa-cp-loop-hint-bonus
When IPA-CP determines that a cloning candidate would make the number
of iterations of a loop known, it adds a bonus of
@option{ipa-cp-loop-hint-bonus} to the profitability score of
the candidate.

@item ipa-max-loop-predicates
The maximum number of different predicates IPA will use to describe when
loops in a function have known properties.

@item ipa-max-aa-steps
During its analysis of function bodies, IPA-CP employs alias analysis
in order to track values pointed to by function parameters.  In order
not spend too much time analyzing huge functions, it gives up and
consider all memory clobbered after examining
@option{ipa-max-aa-steps} statements modifying memory.

@item ipa-max-switch-predicate-bounds
Maximal number of boundary endpoints of case ranges of switch statement.
For switch exceeding this limit, IPA-CP will not construct cloning cost
predicate, which is used to estimate cloning benefit, for default case
of the switch statement.

@item ipa-max-param-expr-ops
IPA-CP will analyze conditional statement that references some function
parameter to estimate benefit for cloning upon certain constant value.
But if number of operations in a parameter expression exceeds
@option{ipa-max-param-expr-ops}, the expression is treated as complicated
one, and is not handled by IPA analysis.

@item lto-partitions
Specify desired number of partitions produced during WHOPR compilation.
The number of partitions should exceed the number of CPUs used for compilation.

@item lto-min-partition
Size of minimal partition for WHOPR (in estimated instructions).
This prevents expenses of splitting very small programs into too many
partitions.

@item lto-max-partition
Size of max partition for WHOPR (in estimated instructions).
to provide an upper bound for individual size of partition.
Meant to be used only with balanced partitioning.

@item lto-max-streaming-parallelism
Maximal number of parallel processes used for LTO streaming.

@item cxx-max-namespaces-for-diagnostic-help
The maximum number of namespaces to consult for suggestions when C++
name lookup fails for an identifier.

@item sink-frequency-threshold
The maximum relative execution frequency (in percents) of the target block
relative to a statement's original block to allow statement sinking of a
statement.  Larger numbers result in more aggressive statement sinking.
A small positive adjustment is applied for
statements with memory operands as those are even more profitable so sink.

@item max-stores-to-sink
The maximum number of conditional store pairs that can be sunk.  Set to 0
if either vectorization (@option{-ftree-vectorize}) or if-conversion
(@option{-ftree-loop-if-convert}) is disabled.

@item case-values-threshold
The smallest number of different values for which it is best to use a
jump-table instead of a tree of conditional branches.  If the value is
0, use the default for the machine.

@item jump-table-max-growth-ratio-for-size
The maximum code size growth ratio when expanding
into a jump table (in percent).  The parameter is used when
optimizing for size.

@item jump-table-max-growth-ratio-for-speed
The maximum code size growth ratio when expanding
into a jump table (in percent).  The parameter is used when
optimizing for speed.

@item tree-reassoc-width
Set the maximum number of instructions executed in parallel in
reassociated tree. This parameter overrides target dependent
heuristics used by default if has non zero value.

@item sched-pressure-algorithm
Choose between the two available implementations of
@option{-fsched-pressure}.  Algorithm 1 is the original implementation
and is the more likely to prevent instructions from being reordered.
Algorithm 2 was designed to be a compromise between the relatively
conservative approach taken by algorithm 1 and the rather aggressive
approach taken by the default scheduler.  It relies more heavily on
having a regular register file and accurate register pressure classes.
See @file{haifa-sched.c} in the GCC sources for more details.

The default choice depends on the target.

@item max-slsr-cand-scan
Set the maximum number of existing candidates that are considered when
seeking a basis for a new straight-line strength reduction candidate.

@item asan-globals
Enable buffer overflow detection for global objects.  This kind
of protection is enabled by default if you are using
@option{-fsanitize=address} option.
To disable global objects protection use @option{--param asan-globals=0}.

@item asan-stack
Enable buffer overflow detection for stack objects.  This kind of
protection is enabled by default when using @option{-fsanitize=address}.
To disable stack protection use @option{--param asan-stack=0} option.

@item asan-instrument-reads
Enable buffer overflow detection for memory reads.  This kind of
protection is enabled by default when using @option{-fsanitize=address}.
To disable memory reads protection use
@option{--param asan-instrument-reads=0}.

@item asan-instrument-writes
Enable buffer overflow detection for memory writes.  This kind of
protection is enabled by default when using @option{-fsanitize=address}.
To disable memory writes protection use
@option{--param asan-instrument-writes=0} option.

@item asan-memintrin
Enable detection for built-in functions.  This kind of protection
is enabled by default when using @option{-fsanitize=address}.
To disable built-in functions protection use
@option{--param asan-memintrin=0}.

@item asan-use-after-return
Enable detection of use-after-return.  This kind of protection
is enabled by default when using the @option{-fsanitize=address} option.
To disable it use @option{--param asan-use-after-return=0}.

Note: By default the check is disabled at run time.  To enable it,
add @code{detect_stack_use_after_return=1} to the environment variable
@env{ASAN_OPTIONS}.

@item asan-instrumentation-with-call-threshold
If number of memory accesses in function being instrumented
is greater or equal to this number, use callbacks instead of inline checks.
E.g. to disable inline code use
@option{--param asan-instrumentation-with-call-threshold=0}.

@item hwasan-instrument-stack
Enable hwasan instrumentation of statically sized stack-allocated variables.
This kind of instrumentation is enabled by default when using
@option{-fsanitize=hwaddress} and disabled by default when using
@option{-fsanitize=kernel-hwaddress}.
To disable stack instrumentation use
@option{--param hwasan-instrument-stack=0}, and to enable it use
@option{--param hwasan-instrument-stack=1}.

@item hwasan-random-frame-tag
When using stack instrumentation, decide tags for stack variables using a
deterministic sequence beginning at a random tag for each frame.  With this
parameter unset tags are chosen using the same sequence but beginning from 1.
This is enabled by default for @option{-fsanitize=hwaddress} and unavailable
for @option{-fsanitize=kernel-hwaddress}.
To disable it use @option{--param hwasan-random-frame-tag=0}.

@item hwasan-instrument-allocas
Enable hwasan instrumentation of dynamically sized stack-allocated variables.
This kind of instrumentation is enabled by default when using
@option{-fsanitize=hwaddress} and disabled by default when using
@option{-fsanitize=kernel-hwaddress}.
To disable instrumentation of such variables use
@option{--param hwasan-instrument-allocas=0}, and to enable it use
@option{--param hwasan-instrument-allocas=1}.

@item hwasan-instrument-reads
Enable hwasan checks on memory reads.  Instrumentation of reads is enabled by
default for both @option{-fsanitize=hwaddress} and
@option{-fsanitize=kernel-hwaddress}.
To disable checking memory reads use
@option{--param hwasan-instrument-reads=0}.

@item hwasan-instrument-writes
Enable hwasan checks on memory writes.  Instrumentation of writes is enabled by
default for both @option{-fsanitize=hwaddress} and
@option{-fsanitize=kernel-hwaddress}.
To disable checking memory writes use
@option{--param hwasan-instrument-writes=0}.

@item hwasan-instrument-mem-intrinsics
Enable hwasan instrumentation of builtin functions.  Instrumentation of these
builtin functions is enabled by default for both @option{-fsanitize=hwaddress}
and @option{-fsanitize=kernel-hwaddress}.
To disable instrumentation of builtin functions use
@option{--param hwasan-instrument-mem-intrinsics=0}.

@item use-after-scope-direct-emission-threshold
If the size of a local variable in bytes is smaller or equal to this
number, directly poison (or unpoison) shadow memory instead of using
run-time callbacks.

@item tsan-distinguish-volatile
Emit special instrumentation for accesses to volatiles.

@item tsan-instrument-func-entry-exit
Emit instrumentation calls to __tsan_func_entry() and __tsan_func_exit().

@item max-fsm-thread-path-insns
Maximum number of instructions to copy when duplicating blocks on a
finite state automaton jump thread path.

@item parloops-chunk-size
Chunk size of omp schedule for loops parallelized by parloops.

@item parloops-schedule
Schedule type of omp schedule for loops parallelized by parloops (static,
dynamic, guided, auto, runtime).

@item parloops-min-per-thread
The minimum number of iterations per thread of an innermost parallelized
loop for which the parallelized variant is preferred over the single threaded
one.  Note that for a parallelized loop nest the
minimum number of iterations of the outermost loop per thread is two.

@item max-ssa-name-query-depth
Maximum depth of recursion when querying properties of SSA names in things
like fold routines.  One level of recursion corresponds to following a
use-def chain.

@item max-speculative-devirt-maydefs
The maximum number of may-defs we analyze when looking for a must-def
specifying the dynamic type of an object that invokes a virtual call
we may be able to devirtualize speculatively.

@item max-vrp-switch-assertions
The maximum number of assertions to add along the default edge of a switch
statement during VRP.

@item evrp-sparse-threshold
Maximum number of basic blocks before EVRP uses a sparse cache.

@item evrp-mode
Specifies the mode Early VRP should operate in.

@item evrp-switch-limit
Specifies the maximum number of switch cases before EVRP ignores a switch.

@item unroll-jam-min-percent
The minimum percentage of memory references that must be optimized
away for the unroll-and-jam transformation to be considered profitable.

@item unroll-jam-max-unroll
The maximum number of times the outer loop should be unrolled by
the unroll-and-jam transformation.

@item max-rtl-if-conversion-unpredictable-cost
Maximum permissible cost for the sequence that would be generated
by the RTL if-conversion pass for a branch that is considered unpredictable.

@item max-variable-expansions-in-unroller
If @option{-fvariable-expansion-in-unroller} is used, the maximum number
of times that an individual variable will be expanded during loop unrolling.

@item tracer-min-branch-probability-feedback
Stop forward growth if the probability of best edge is less than
this threshold (in percent). Used when profile feedback is available.

@item partial-inlining-entry-probability
Maximum probability of the entry BB of split region
(in percent relative to entry BB of the function)
to make partial inlining happen.

@item max-tracked-strlens
Maximum number of strings for which strlen optimization pass will
track string lengths.

@item gcse-after-reload-partial-fraction
The threshold ratio for performing partial redundancy
elimination after reload.

@item gcse-after-reload-critical-fraction
The threshold ratio of critical edges execution count that
permit performing redundancy elimination after reload.

@item max-loop-header-insns
The maximum number of insns in loop header duplicated
by the copy loop headers pass.

@item vect-epilogues-nomask
Enable loop epilogue vectorization using smaller vector size.

@item vect-partial-vector-usage
Controls when the loop vectorizer considers using partial vector loads
and stores as an alternative to falling back to scalar code.  0 stops
the vectorizer from ever using partial vector loads and stores.  1 allows
partial vector loads and stores if vectorization removes the need for the
code to iterate.  2 allows partial vector loads and stores in all loops.
The parameter only has an effect on targets that support partial
vector loads and stores.

@item vect-inner-loop-cost-factor
The maximum factor which the loop vectorizer applies to the cost of statements
in an inner loop relative to the loop being vectorized.  The factor applied
is the maximum of the estimated number of iterations of the inner loop and
this parameter.  The default value of this parameter is 50.

@item avoid-fma-max-bits
Maximum number of bits for which we avoid creating FMAs.

@item sms-loop-average-count-threshold
A threshold on the average loop count considered by the swing modulo scheduler.

@item sms-dfa-history
The number of cycles the swing modulo scheduler considers when checking
conflicts using DFA.

@item max-inline-insns-recursive-auto
The maximum number of instructions non-inline function
can grow to via recursive inlining.

@item graphite-allow-codegen-errors
Whether codegen errors should be ICEs when @option{-fchecking}.

@item sms-max-ii-factor
A factor for tuning the upper bound that swing modulo scheduler
uses for scheduling a loop.

@item lra-max-considered-reload-pseudos
The max number of reload pseudos which are considered during
spilling a non-reload pseudo.

@item max-pow-sqrt-depth
Maximum depth of sqrt chains to use when synthesizing exponentiation
by a real constant.

@item max-dse-active-local-stores
Maximum number of active local stores in RTL dead store elimination.

@item asan-instrument-allocas
Enable asan allocas/VLAs protection.

@item max-iterations-computation-cost
Bound on the cost of an expression to compute the number of iterations.

@item max-isl-operations
Maximum number of isl operations, 0 means unlimited.

@item graphite-max-arrays-per-scop
Maximum number of arrays per scop.

@item max-vartrack-reverse-op-size
Max. size of loc list for which reverse ops should be added.

@item tracer-dynamic-coverage-feedback
The percentage of function, weighted by execution frequency,
that must be covered by trace formation.
Used when profile feedback is available.

@item max-inline-recursive-depth-auto
The maximum depth of recursive inlining for non-inline functions.

@item fsm-scale-path-stmts
Scale factor to apply to the number of statements in a threading path
when comparing to the number of (scaled) blocks.

@item uninit-control-dep-attempts
Maximum number of nested calls to search for control dependencies
during uninitialized variable analysis.

@item sra-max-scalarization-size-Osize
Maximum size, in storage units, of an aggregate
which should be considered for scalarization when compiling for size.

@item fsm-scale-path-blocks
Scale factor to apply to the number of blocks in a threading path
when comparing to the number of (scaled) statements.

@item sched-autopref-queue-depth
Hardware autoprefetcher scheduler model control flag.
Number of lookahead cycles the model looks into; at '
' only enable instruction sorting heuristic.

@item loop-versioning-max-inner-insns
The maximum number of instructions that an inner loop can have
before the loop versioning pass considers it too big to copy.

@item loop-versioning-max-outer-insns
The maximum number of instructions that an outer loop can have
before the loop versioning pass considers it too big to copy,
discounting any instructions in inner loops that directly benefit
from versioning.

@item ssa-name-def-chain-limit
The maximum number of SSA_NAME assignments to follow in determining
a property of a variable such as its value.  This limits the number
of iterations or recursive calls GCC performs when optimizing certain
statements or when determining their validity prior to issuing
diagnostics.

@item store-merging-max-size
Maximum size of a single store merging region in bytes.

@item hash-table-verification-limit
The number of elements for which hash table verification is done
for each searched element.

@item max-find-base-term-values
Maximum number of VALUEs handled during a single find_base_term call.

@item analyzer-max-enodes-per-program-point
The maximum number of exploded nodes per program point within
the analyzer, before terminating analysis of that point.

@item analyzer-max-constraints
The maximum number of constraints per state.

@item analyzer-min-snodes-for-call-summary
The minimum number of supernodes within a function for the
analyzer to consider summarizing its effects at call sites.

@item analyzer-max-enodes-for-full-dump
The maximum depth of exploded nodes that should appear in a dot dump
before switching to a less verbose format.

@item analyzer-max-recursion-depth
The maximum number of times a callsite can appear in a call stack
within the analyzer, before terminating analysis of a call that would
recurse deeper.

@item analyzer-max-svalue-depth
The maximum depth of a symbolic value, before approximating
the value as unknown.

@item analyzer-max-infeasible-edges
The maximum number of infeasible edges to reject before declaring
a diagnostic as infeasible.

@item gimple-fe-computed-hot-bb-threshold
The number of executions of a basic block which is considered hot.
The parameter is used only in GIMPLE FE.

@item analyzer-bb-explosion-factor
The maximum number of 'after supernode' exploded nodes within the analyzer
per supernode, before terminating analysis.

@item ranger-logical-depth
Maximum depth of logical expression evaluation ranger will look through
when evaluating outgoing edge ranges.

@item openacc-kernels
Specify mode of OpenACC `kernels' constructs handling.
With @option{--param=openacc-kernels=decompose}, OpenACC `kernels'
constructs are decomposed into parts, a sequence of compute
constructs, each then handled individually.
This is work in progress.
With @option{--param=openacc-kernels=parloops}, OpenACC `kernels'
constructs are handled by the @samp{parloops} pass, en bloc.
This is the current default.

@item openacc-privatization
Specify mode of OpenACC privatization diagnostics for
@option{-fopt-info-omp-note} and applicable
@option{-fdump-tree-*-details}.
With @option{--param=openacc-privatization=quiet}, don't diagnose.
This is the current default.
With @option{--param=openacc-privatization=noisy}, do diagnose.

@end table

The following choices of @var{name} are available on AArch64 targets:

@table @gcctabopt
@item aarch64-sve-compare-costs
When vectorizing for SVE, consider using ``unpacked'' vectors for
smaller elements and use the cost model to pick the cheapest approach.
Also use the cost model to choose between SVE and Advanced SIMD vectorization.

Using unpacked vectors includes storing smaller elements in larger
containers and accessing elements with extending loads and truncating
stores.

@item aarch64-float-recp-precision
The number of Newton iterations for calculating the reciprocal for float type.
The precision of division is proportional to this param when division
approximation is enabled.  The default value is 1.

@item aarch64-double-recp-precision
The number of Newton iterations for calculating the reciprocal for double type.
The precision of division is propotional to this param when division
approximation is enabled.  The default value is 2.

@item aarch64-autovec-preference
Force an ISA selection strategy for auto-vectorization.  Accepts values from
0 to 4, inclusive.
@table @samp
@item 0
Use the default heuristics.
@item 1
Use only Advanced SIMD for auto-vectorization.
@item 2
Use only SVE for auto-vectorization.
@item 3
Use both Advanced SIMD and SVE.  Prefer Advanced SIMD when the costs are
deemed equal.
@item 4
Use both Advanced SIMD and SVE.  Prefer SVE when the costs are deemed equal.
@end table
The default value is 0.

@item aarch64-loop-vect-issue-rate-niters
The tuning for some AArch64 CPUs tries to take both latencies and issue
rates into account when deciding whether a loop should be vectorized
using SVE, vectorized using Advanced SIMD, or not vectorized at all.
If this parameter is set to @var{n}, GCC will not use this heuristic
for loops that are known to execute in fewer than @var{n} Advanced
SIMD iterations.

@end table

@end table

@node Instrumentation Options
@section Program Instrumentation Options
@cindex instrumentation options
@cindex program instrumentation options
@cindex run-time error checking options
@cindex profiling options
@cindex options, program instrumentation
@cindex options, run-time error checking
@cindex options, profiling

GCC supports a number of command-line options that control adding
run-time instrumentation to the code it normally generates.  
For example, one purpose of instrumentation is collect profiling
statistics for use in finding program hot spots, code coverage
analysis, or profile-guided optimizations.
Another class of program instrumentation is adding run-time checking 
to detect programming errors like invalid pointer
dereferences or out-of-bounds array accesses, as well as deliberately
hostile attacks such as stack smashing or C++ vtable hijacking.
There is also a general hook which can be used to implement other
forms of tracing or function-level instrumentation for debug or
program analysis purposes.

@table @gcctabopt
@cindex @command{prof}
@cindex @command{gprof}
@item -p
@itemx -pg
@opindex p
@opindex pg
Generate extra code to write profile information suitable for the
analysis program @command{prof} (for @option{-p}) or @command{gprof}
(for @option{-pg}).  You must use this option when compiling
the source files you want data about, and you must also use it when
linking.

You can use the function attribute @code{no_instrument_function} to
suppress profiling of individual functions when compiling with these options.
@xref{Common Function Attributes}.

@item -fprofile-arcs
@opindex fprofile-arcs
Add code so that program flow @dfn{arcs} are instrumented.  During
execution the program records how many times each branch and call is
executed and how many times it is taken or returns.  On targets that support
constructors with priority support, profiling properly handles constructors,
destructors and C++ constructors (and destructors) of classes which are used
as a type of a global variable.

When the compiled
program exits it saves this data to a file called
@file{@var{auxname}.gcda} for each source file.  The data may be used for
profile-directed optimizations (@option{-fbranch-probabilities}), or for
test coverage analysis (@option{-ftest-coverage}).  Each object file's
@var{auxname} is generated from the name of the output file, if
explicitly specified and it is not the final executable, otherwise it is
the basename of the source file.  In both cases any suffix is removed
(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
@xref{Cross-profiling}.

@cindex @command{gcov}
@item --coverage
@opindex coverage

This option is used to compile and link code instrumented for coverage
analysis.  The option is a synonym for @option{-fprofile-arcs}
@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
linking).  See the documentation for those options for more details.

@itemize

@item
Compile the source files with @option{-fprofile-arcs} plus optimization
and code generation options.  For test coverage analysis, use the
additional @option{-ftest-coverage} option.  You do not need to profile
every source file in a program.

@item
Compile the source files additionally with @option{-fprofile-abs-path}
to create absolute path names in the @file{.gcno} files.  This allows
@command{gcov} to find the correct sources in projects where compilations
occur with different working directories.

@item
Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
(the latter implies the former).

@item
Run the program on a representative workload to generate the arc profile
information.  This may be repeated any number of times.  You can run
concurrent instances of your program, and provided that the file system
supports locking, the data files will be correctly updated.  Unless
a strict ISO C dialect option is in effect, @code{fork} calls are
detected and correctly handled without double counting.

Moreover, an object file can be recompiled multiple times
and the corresponding @file{.gcda} file merges as long as
the source file and the compiler options are unchanged.

@item
For profile-directed optimizations, compile the source files again with
the same optimization and code generation options plus
@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
Control Optimization}).

@item
For test coverage analysis, use @command{gcov} to produce human readable
information from the @file{.gcno} and @file{.gcda} files.  Refer to the
@command{gcov} documentation for further information.

@end itemize

With @option{-fprofile-arcs}, for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the graph.
Only arcs that are not on the spanning tree have to be instrumented: the
compiler adds code to count the number of times that these arcs are
executed.  When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.

@need 2000
@item -ftest-coverage
@opindex ftest-coverage
Produce a notes file that the @command{gcov} code-coverage utility
(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
show program coverage.  Each source file's note file is called
@file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
above for a description of @var{auxname} and instructions on how to
generate test coverage data.  Coverage data matches the source files
more closely if you do not optimize.

@item -fprofile-abs-path
@opindex fprofile-abs-path
Automatically convert relative source file names to absolute path names
in the @file{.gcno} files.  This allows @command{gcov} to find the correct
sources in projects where compilations occur with different working
directories.

@item -fprofile-dir=@var{path}
@opindex fprofile-dir

Set the directory to search for 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.  Both absolute and relative paths can be used.
By default, GCC uses the current directory as @var{path}, thus the
profile data file appears in the same directory as the object file.
In order to prevent the file name clashing, if the object file name is
not an absolute path, we mangle the absolute path of the
@file{@var{sourcename}.gcda} file and use it as the file name of a
@file{.gcda} file.  See similar option @option{-fprofile-note}.

When an executable is run in a massive parallel environment, it is recommended
to save profile to different folders.  That can be done with variables
in @var{path} that are exported during run-time:

@table @gcctabopt

@item %p
process ID.

@item %q@{VAR@}
value of environment variable @var{VAR}

@end table

@item -fprofile-generate
@itemx -fprofile-generate=@var{path}
@opindex fprofile-generate

Enable options usually used for instrumenting application to produce
profile useful for later recompilation with profile feedback based
optimization.  You must use @option{-fprofile-generate} both when
compiling and when linking your program.

The following options are enabled:
@option{-fprofile-arcs}, @option{-fprofile-values},
@option{-finline-functions}, and @option{-fipa-bit-cp}.

If @var{path} is specified, GCC looks at the @var{path} to find
the profile feedback data files. See @option{-fprofile-dir}.

To optimize the program based on the collected profile information, use
@option{-fprofile-use}.  @xref{Optimize Options}, for more information.

@item -fprofile-info-section
@itemx -fprofile-info-section=@var{name}
@opindex fprofile-info-section

Register the profile information in the specified section instead of using a
constructor/destructor.  The section name is @var{name} if it is specified,
otherwise the section name defaults to @code{.gcov_info}.  A pointer to the
profile information generated by @option{-fprofile-arcs} is placed in the
specified section for each translation unit.  This option disables the profile
information registration through a constructor and it disables the profile
information processing through a destructor.  This option is not intended to be
used in hosted environments such as GNU/Linux.  It targets free-standing
environments (for example embedded systems) with limited resources which do not
support constructors/destructors or the C library file I/O.

The linker could collect the input sections in a continuous memory block and
define start and end symbols.  A GNU linker script example which defines a
linker output section follows:

@smallexample
  .gcov_info      :
  @{
    PROVIDE (__gcov_info_start = .);
    KEEP (*(.gcov_info))
    PROVIDE (__gcov_info_end = .);
  @}
@end smallexample

The program could dump the profiling information registered in this linker set
for example like this:

@smallexample
#include <gcov.h>
#include <stdio.h>
#include <stdlib.h>

extern const struct gcov_info *__gcov_info_start[];
extern const struct gcov_info *__gcov_info_end[];

static void
filename (const char *f, void *arg)
@{
  puts (f);
@}

static void
dump (const void *d, unsigned n, void *arg)
@{
  const unsigned char *c = d;

  for (unsigned i = 0; i < n; ++i)
    printf ("%02x", c[i]);
@}

static void *
allocate (unsigned length, void *arg)
@{
  return malloc (length);
@}

static void
dump_gcov_info (void)
@{
  const struct gcov_info **info = __gcov_info_start;
  const struct gcov_info **end = __gcov_info_end;

  /* Obfuscate variable to prevent compiler optimizations.  */
  __asm__ ("" : "+r" (info));

  while (info != end)
  @{
    void *arg = NULL;
    __gcov_info_to_gcda (*info, filename, dump, allocate, arg);
    putchar ('\n');
    ++info;
  @}
@}

int
main()
@{
  dump_gcov_info();
  return 0;
@}
@end smallexample

@item -fprofile-note=@var{path}
@opindex fprofile-note

If @var{path} is specified, GCC saves @file{.gcno} file into @var{path}
location.  If you combine the option with multiple source files,
the @file{.gcno} file will be overwritten.

@item -fprofile-prefix-path=@var{path}
@opindex fprofile-prefix-path

This option can be used in combination with
@option{profile-generate=}@var{profile_dir} and
@option{profile-use=}@var{profile_dir} to inform GCC where is the base
directory of built source tree.  By default @var{profile_dir} will contain
files with mangled absolute paths of all object files in the built project.
This is not desirable when directory used to build the instrumented binary
differs from the directory used to build the binary optimized with profile
feedback because the profile data will not be found during the optimized build.
In such setups @option{-fprofile-prefix-path=}@var{path} with @var{path}
pointing to the base directory of the build can be used to strip the irrelevant
part of the path and keep all file names relative to the main build directory.

@item -fprofile-update=@var{method}
@opindex fprofile-update

Alter the update method for an application instrumented for profile
feedback based optimization.  The @var{method} argument should be one of
@samp{single}, @samp{atomic} or @samp{prefer-atomic}.
The first one is useful for single-threaded applications,
while the second one prevents profile corruption by emitting thread-safe code.

@strong{Warning:} When an application does not properly join all threads
(or creates an detached thread), a profile file can be still corrupted.

Using @samp{prefer-atomic} would be transformed either to @samp{atomic},
when supported by a target, or to @samp{single} otherwise.  The GCC driver
automatically selects @samp{prefer-atomic} when @option{-pthread}
is present in the command line.

@item -fprofile-filter-files=@var{regex}
@opindex fprofile-filter-files

Instrument only functions from files whose name matches
any of the regular expressions (separated by semi-colons).

For example, @option{-fprofile-filter-files=main\.c;module.*\.c} will instrument
only @file{main.c} and all C files starting with 'module'.

@item -fprofile-exclude-files=@var{regex}
@opindex fprofile-exclude-files

Instrument only functions from files whose name does not match
any of the regular expressions (separated by semi-colons).

For example, @option{-fprofile-exclude-files=/usr/.*} will prevent instrumentation
of all files that are located in the @file{/usr/} folder.

@item -fprofile-reproducible=@r{[}multithreaded@r{|}parallel-runs@r{|}serial@r{]}
@opindex fprofile-reproducible
Control level of reproducibility of profile gathered by
@code{-fprofile-generate}.  This makes it possible to rebuild program
with same outcome which is useful, for example, for distribution
packages.

With @option{-fprofile-reproducible=serial} the profile gathered by
@option{-fprofile-generate} is reproducible provided the trained program
behaves the same at each invocation of the train run, it is not
multi-threaded and profile data streaming is always done in the same
order.  Note that profile streaming happens at the end of program run but
also before @code{fork} function is invoked.

Note that it is quite common that execution counts of some part of
programs depends, for example, on length of temporary file names or
memory space randomization (that may affect hash-table collision rate).
Such non-reproducible part of programs may be annotated by
@code{no_instrument_function} function attribute. @command{gcov-dump} with
@option{-l} can be used to dump gathered data and verify that they are
indeed reproducible.

With @option{-fprofile-reproducible=parallel-runs} collected profile
stays reproducible regardless the order of streaming of the data into
gcda files.  This setting makes it possible to run multiple instances of
instrumented program in parallel (such as with @code{make -j}). This
reduces quality of gathered data, in particular of indirect call
profiling.

@item -fsanitize=address
@opindex fsanitize=address
Enable AddressSanitizer, a fast memory error detector.
Memory access instructions are instrumented to detect
out-of-bounds and use-after-free bugs.
The option enables @option{-fsanitize-address-use-after-scope}.
See @uref{https://github.com/google/sanitizers/wiki/AddressSanitizer} for
more details.  The run-time behavior can be influenced using the
@env{ASAN_OPTIONS} environment variable.  When set to @code{help=1},
the available options are shown at startup of the instrumented program.  See
@url{https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags}
for a list of supported options.
The option cannot be combined with @option{-fsanitize=thread} or
@option{-fsanitize=hwaddress}.  Note that the only target
@option{-fsanitize=hwaddress} is currently supported on is AArch64.

@item -fsanitize=kernel-address
@opindex fsanitize=kernel-address
Enable AddressSanitizer for Linux kernel.
See @uref{https://github.com/google/kasan} for more details.

@item -fsanitize=hwaddress
@opindex fsanitize=hwaddress
Enable Hardware-assisted AddressSanitizer, which uses a hardware ability to
ignore the top byte of a pointer to allow the detection of memory errors with
a low memory overhead.
Memory access instructions are instrumented to detect out-of-bounds and
use-after-free bugs.
The option enables @option{-fsanitize-address-use-after-scope}.
See
@uref{https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html}
for more details.  The run-time behavior can be influenced using the
@env{HWASAN_OPTIONS} environment variable.  When set to @code{help=1},
the available options are shown at startup of the instrumented program.
The option cannot be combined with @option{-fsanitize=thread} or
@option{-fsanitize=address}, and is currently only available on AArch64.

@item -fsanitize=kernel-hwaddress
@opindex fsanitize=kernel-hwaddress
Enable Hardware-assisted AddressSanitizer for compilation of the Linux kernel.
Similar to @option{-fsanitize=kernel-address} but using an alternate
instrumentation method, and similar to @option{-fsanitize=hwaddress} but with
instrumentation differences necessary for compiling the Linux kernel.
These differences are to avoid hwasan library initialization calls and to
account for the stack pointer having a different value in its top byte.

@emph{Note:} This option has different defaults to the @option{-fsanitize=hwaddress}.
Instrumenting the stack and alloca calls are not on by default but are still
possible by specifying the command-line options
@option{--param hwasan-instrument-stack=1} and
@option{--param hwasan-instrument-allocas=1} respectively. Using a random frame
tag is not implemented for kernel instrumentation.

@item -fsanitize=pointer-compare
@opindex fsanitize=pointer-compare
Instrument comparison operation (<, <=, >, >=) with pointer operands.
The option must be combined with either @option{-fsanitize=kernel-address} or
@option{-fsanitize=address}
The option cannot be combined with @option{-fsanitize=thread}.
Note: By default the check is disabled at run time.  To enable it,
add @code{detect_invalid_pointer_pairs=2} to the environment variable
@env{ASAN_OPTIONS}. Using @code{detect_invalid_pointer_pairs=1} detects
invalid operation only when both pointers are non-null.

@item -fsanitize=pointer-subtract
@opindex fsanitize=pointer-subtract
Instrument subtraction with pointer operands.
The option must be combined with either @option{-fsanitize=kernel-address} or
@option{-fsanitize=address}
The option cannot be combined with @option{-fsanitize=thread}.
Note: By default the check is disabled at run time.  To enable it,
add @code{detect_invalid_pointer_pairs=2} to the environment variable
@env{ASAN_OPTIONS}. Using @code{detect_invalid_pointer_pairs=1} detects
invalid operation only when both pointers are non-null.

@item -fsanitize=thread
@opindex fsanitize=thread
Enable ThreadSanitizer, a fast data race detector.
Memory access instructions are instrumented to detect
data race bugs.  See @uref{https://github.com/google/sanitizers/wiki#threadsanitizer} for more
details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
environment variable; see
@url{https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags} for a list of
supported options.
The option cannot be combined with @option{-fsanitize=address},
@option{-fsanitize=leak}.

Note that sanitized atomic builtins cannot throw exceptions when
operating on invalid memory addresses with non-call exceptions
(@option{-fnon-call-exceptions}).

@item -fsanitize=leak
@opindex fsanitize=leak
Enable LeakSanitizer, a memory leak detector.
This option only matters for linking of executables and
the executable is linked against a library that overrides @code{malloc}
and other allocator functions.  See
@uref{https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer} for more
details.  The run-time behavior can be influenced using the
@env{LSAN_OPTIONS} environment variable.
The option cannot be combined with @option{-fsanitize=thread}.

@item -fsanitize=undefined
@opindex fsanitize=undefined
Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
Various computations are instrumented to detect undefined behavior
at runtime.  See @uref{https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html} for more details.   The run-time behavior can be influenced using the
@env{UBSAN_OPTIONS} environment variable.  Current suboptions are:

@table @gcctabopt

@item -fsanitize=shift
@opindex fsanitize=shift
This option enables checking that the result of a shift operation is
not undefined.  Note that what exactly is considered undefined differs
slightly between C and C++, as well as between ISO C90 and C99, etc.
This option has two suboptions, @option{-fsanitize=shift-base} and
@option{-fsanitize=shift-exponent}.

@item -fsanitize=shift-exponent
@opindex fsanitize=shift-exponent
This option enables checking that the second argument of a shift operation
is not negative and is smaller than the precision of the promoted first
argument.

@item -fsanitize=shift-base
@opindex fsanitize=shift-base
If the second argument of a shift operation is within range, check that the
result of a shift operation is not undefined.  Note that what exactly is
considered undefined differs slightly between C and C++, as well as between
ISO C90 and C99, etc.

@item -fsanitize=integer-divide-by-zero
@opindex fsanitize=integer-divide-by-zero
Detect integer division by zero.

@item -fsanitize=unreachable
@opindex fsanitize=unreachable
With this option, the compiler turns the @code{__builtin_unreachable}
call into a diagnostics message call instead.  When reaching the
@code{__builtin_unreachable} call, the behavior is undefined.

@item -fsanitize=vla-bound
@opindex fsanitize=vla-bound
This option instructs the compiler to check that the size of a variable
length array is positive.

@item -fsanitize=null
@opindex fsanitize=null
This option enables pointer checking.  Particularly, the application
built with this option turned on will issue an error message when it
tries to dereference a NULL pointer, or if a reference (possibly an
rvalue reference) is bound to a NULL pointer, or if a method is invoked
on an object pointed by a NULL pointer.

@item -fsanitize=return
@opindex fsanitize=return
This option enables return statement checking.  Programs
built with this option turned on will issue an error message
when the end of a non-void function is reached without actually
returning a value.  This option works in C++ only.

@item -fsanitize=signed-integer-overflow
@opindex fsanitize=signed-integer-overflow
This option enables signed integer overflow checking.  We check that
the result of @code{+}, @code{*}, and both unary and binary @code{-}
does not overflow in the signed arithmetics.  This also detects
@code{INT_MIN / -1} signed division.  Note, integer promotion
rules must be taken into account.  That is, the following is not an
overflow:
@smallexample
signed char a = SCHAR_MAX;
a++;
@end smallexample

@item -fsanitize=bounds
@opindex fsanitize=bounds
This option enables instrumentation of array bounds.  Various out of bounds
accesses are detected.  Flexible array members, flexible array member-like
arrays, and initializers of variables with static storage are not instrumented.

@item -fsanitize=bounds-strict
@opindex fsanitize=bounds-strict
This option enables strict instrumentation of array bounds.  Most out of bounds
accesses are detected, including flexible array members and flexible array
member-like arrays.  Initializers of variables with static storage are not
instrumented.

@item -fsanitize=alignment
@opindex fsanitize=alignment

This option enables checking of alignment of pointers when they are
dereferenced, or when a reference is bound to insufficiently aligned target,
or when a method or constructor is invoked on insufficiently aligned object.

@item -fsanitize=object-size
@opindex fsanitize=object-size
This option enables instrumentation of memory references using the
@code{__builtin_object_size} function.  Various out of bounds pointer
accesses are detected.

@item -fsanitize=float-divide-by-zero
@opindex fsanitize=float-divide-by-zero
Detect floating-point division by zero.  Unlike other similar options,
@option{-fsanitize=float-divide-by-zero} is not enabled by
@option{-fsanitize=undefined}, since floating-point division by zero can
be a legitimate way of obtaining infinities and NaNs.

@item -fsanitize=float-cast-overflow
@opindex fsanitize=float-cast-overflow
This option enables floating-point type to integer conversion checking.
We check that the result of the conversion does not overflow.
Unlike other similar options, @option{-fsanitize=float-cast-overflow} is
not enabled by @option{-fsanitize=undefined}.
This option does not work well with @code{FE_INVALID} exceptions enabled.

@item -fsanitize=nonnull-attribute
@opindex fsanitize=nonnull-attribute

This option enables instrumentation of calls, checking whether null values
are not passed to arguments marked as requiring a non-null value by the
@code{nonnull} function attribute.

@item -fsanitize=returns-nonnull-attribute
@opindex fsanitize=returns-nonnull-attribute

This option enables instrumentation of return statements in functions
marked with @code{returns_nonnull} function attribute, to detect returning
of null values from such functions.

@item -fsanitize=bool
@opindex fsanitize=bool

This option enables instrumentation of loads from bool.  If a value other
than 0/1 is loaded, a run-time error is issued.

@item -fsanitize=enum
@opindex fsanitize=enum

This option enables instrumentation of loads from an enum type.  If
a value outside the range of values for the enum type is loaded,
a run-time error is issued.

@item -fsanitize=vptr
@opindex fsanitize=vptr

This option enables instrumentation of C++ member function calls, member
accesses and some conversions between pointers to base and derived classes,
to verify the referenced object has the correct dynamic type.

@item -fsanitize=pointer-overflow
@opindex fsanitize=pointer-overflow

This option enables instrumentation of pointer arithmetics.  If the pointer
arithmetics overflows, a run-time error is issued.

@item -fsanitize=builtin
@opindex fsanitize=builtin

This option enables instrumentation of arguments to selected builtin
functions.  If an invalid value is passed to such arguments, a run-time
error is issued.  E.g.@ passing 0 as the argument to @code{__builtin_ctz}
or @code{__builtin_clz} invokes undefined behavior and is diagnosed
by this option.

@end table

While @option{-ftrapv} causes traps for signed overflows to be emitted,
@option{-fsanitize=undefined} gives a diagnostic message.
This currently works only for the C family of languages.

@item -fno-sanitize=all
@opindex fno-sanitize=all

This option disables all previously enabled sanitizers.
@option{-fsanitize=all} is not allowed, as some sanitizers cannot be used
together.

@item -fasan-shadow-offset=@var{number}
@opindex fasan-shadow-offset
This option forces GCC to use custom shadow offset in AddressSanitizer checks.
It is useful for experimenting with different shadow memory layouts in
Kernel AddressSanitizer.

@item -fsanitize-sections=@var{s1},@var{s2},...
@opindex fsanitize-sections
Sanitize global variables in selected user-defined sections.  @var{si} may
contain wildcards.

@item -fsanitize-recover@r{[}=@var{opts}@r{]}
@opindex fsanitize-recover
@opindex fno-sanitize-recover
@option{-fsanitize-recover=} controls error recovery mode for sanitizers
mentioned in comma-separated list of @var{opts}.  Enabling this option
for a sanitizer component causes it to attempt to continue
running the program as if no error happened.  This means multiple
runtime errors can be reported in a single program run, and the exit
code of the program may indicate success even when errors
have been reported.  The @option{-fno-sanitize-recover=} option
can be used to alter
this behavior: only the first detected error is reported
and program then exits with a non-zero exit code.

Currently this feature only works for @option{-fsanitize=undefined} (and its suboptions
except for @option{-fsanitize=unreachable} and @option{-fsanitize=return}),
@option{-fsanitize=float-cast-overflow}, @option{-fsanitize=float-divide-by-zero},
@option{-fsanitize=bounds-strict},
@option{-fsanitize=kernel-address} and @option{-fsanitize=address}.
For these sanitizers error recovery is turned on by default,
except @option{-fsanitize=address}, for which this feature is experimental.
@option{-fsanitize-recover=all} and @option{-fno-sanitize-recover=all} is also
accepted, the former enables recovery for all sanitizers that support it,
the latter disables recovery for all sanitizers that support it.

Even if a recovery mode is turned on the compiler side, it needs to be also
enabled on the runtime library side, otherwise the failures are still fatal.
The runtime library defaults to @code{halt_on_error=0} for
ThreadSanitizer and UndefinedBehaviorSanitizer, while default value for
AddressSanitizer is @code{halt_on_error=1}. This can be overridden through
setting the @code{halt_on_error} flag in the corresponding environment variable.

Syntax without an explicit @var{opts} parameter is deprecated.  It is
equivalent to specifying an @var{opts} list of:

@smallexample
undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
@end smallexample

@item -fsanitize-address-use-after-scope
@opindex fsanitize-address-use-after-scope
Enable sanitization of local variables to detect use-after-scope bugs.
The option sets @option{-fstack-reuse} to @samp{none}.

@item -fsanitize-undefined-trap-on-error
@opindex fsanitize-undefined-trap-on-error
The @option{-fsanitize-undefined-trap-on-error} option instructs the compiler to
report undefined behavior using @code{__builtin_trap} rather than
a @code{libubsan} library routine.  The advantage of this is that the
@code{libubsan} library is not needed and is not linked in, so this
is usable even in freestanding environments.

@item -fsanitize-coverage=trace-pc
@opindex fsanitize-coverage=trace-pc
Enable coverage-guided fuzzing code instrumentation.
Inserts a call to @code{__sanitizer_cov_trace_pc} into every basic block.

@item -fsanitize-coverage=trace-cmp
@opindex fsanitize-coverage=trace-cmp
Enable dataflow guided fuzzing code instrumentation.
Inserts a call to @code{__sanitizer_cov_trace_cmp1},
@code{__sanitizer_cov_trace_cmp2}, @code{__sanitizer_cov_trace_cmp4} or
@code{__sanitizer_cov_trace_cmp8} for integral comparison with both operands
variable or @code{__sanitizer_cov_trace_const_cmp1},
@code{__sanitizer_cov_trace_const_cmp2},
@code{__sanitizer_cov_trace_const_cmp4} or
@code{__sanitizer_cov_trace_const_cmp8} for integral comparison with one
operand constant, @code{__sanitizer_cov_trace_cmpf} or
@code{__sanitizer_cov_trace_cmpd} for float or double comparisons and
@code{__sanitizer_cov_trace_switch} for switch statements.

@item -fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{|}check@r{]}
@opindex fcf-protection
Enable code instrumentation of control-flow transfers to increase
program security by checking that target addresses of control-flow
transfer instructions (such as indirect function call, function return,
indirect jump) are valid.  This prevents diverting the flow of control
to an unexpected target.  This is intended to protect against such
threats as Return-oriented Programming (ROP), and similarly
call/jmp-oriented programming (COP/JOP).

The value @code{branch} tells the compiler to implement checking of
validity of control-flow transfer at the point of indirect branch
instructions, i.e.@: call/jmp instructions.  The value @code{return}
implements checking of validity at the point of returning from a
function.  The value @code{full} is an alias for specifying both
@code{branch} and @code{return}. The value @code{none} turns off
instrumentation.

The value @code{check} is used for the final link with link-time
optimization (LTO).  An error is issued if LTO object files are
compiled with different @option{-fcf-protection} values.  The
value @code{check} is ignored at the compile time.

The macro @code{__CET__} is defined when @option{-fcf-protection} is
used.  The first bit of @code{__CET__} is set to 1 for the value
@code{branch} and the second bit of @code{__CET__} is set to 1 for
the @code{return}.

You can also use the @code{nocf_check} attribute to identify
which functions and calls should be skipped from instrumentation
(@pxref{Function Attributes}).

Currently the x86 GNU/Linux target provides an implementation based
on Intel Control-flow Enforcement Technology (CET).

@item -fstack-protector
@opindex fstack-protector
Emit extra code to check for buffer overflows, such as stack smashing
attacks.  This is done by adding a guard variable to functions with
vulnerable objects.  This includes functions that call @code{alloca}, and
functions with buffers larger than or equal to 8 bytes.  The guards are
initialized when a function is entered and then checked when the function
exits.  If a guard check fails, an error message is printed and the program
exits.  Only variables that are actually allocated on the stack are
considered, optimized away variables or variables allocated in registers
don't count.

@item -fstack-protector-all
@opindex fstack-protector-all
Like @option{-fstack-protector} except that all functions are protected.

@item -fstack-protector-strong
@opindex fstack-protector-strong
Like @option{-fstack-protector} but includes additional functions to
be protected --- those that have local array definitions, or have
references to local frame addresses.  Only variables that are actually
allocated on the stack are considered, optimized away variables or variables
allocated in registers don't count.

@item -fstack-protector-explicit
@opindex fstack-protector-explicit
Like @option{-fstack-protector} but only protects those functions which
have the @code{stack_protect} attribute.

@item -fstack-check
@opindex fstack-check
Generate code to verify that you do not go beyond the boundary of the
stack.  You should specify this flag if you are running in an
environment with multiple threads, but you only rarely need to specify it in
a single-threaded environment since stack overflow is automatically
detected on nearly all systems if there is only one stack.

Note that this switch does not actually cause checking to be done; the
operating system or the language runtime must do that.  The switch causes
generation of code to ensure that they see the stack being extended.

You can additionally specify a string parameter: @samp{no} means no
checking, @samp{generic} means force the use of old-style checking,
@samp{specific} means use the best checking method and is equivalent
to bare @option{-fstack-check}.

Old-style checking is a generic mechanism that requires no specific
target support in the compiler but comes with the following drawbacks:

@enumerate
@item
Modified allocation strategy for large objects: they are always
allocated dynamically if their size exceeds a fixed threshold.  Note this
may change the semantics of some code.

@item
Fixed limit on the size of the static frame of functions: when it is
topped by a particular function, stack checking is not reliable and
a warning is issued by the compiler.

@item
Inefficiency: because of both the modified allocation strategy and the
generic implementation, code performance is hampered.
@end enumerate

Note that old-style stack checking is also the fallback method for
@samp{specific} if no target support has been added in the compiler.

@samp{-fstack-check=} is designed for Ada's needs to detect infinite recursion
and stack overflows.  @samp{specific} is an excellent choice when compiling
Ada code.  It is not generally sufficient to protect against stack-clash
attacks.  To protect against those you want @samp{-fstack-clash-protection}.

@item -fstack-clash-protection
@opindex fstack-clash-protection
Generate code to prevent stack clash style attacks.  When this option is
enabled, the compiler will only allocate one page of stack space at a time
and each page is accessed immediately after allocation.  Thus, it prevents
allocations from jumping over any stack guard page provided by the
operating system.

Most targets do not fully support stack clash protection.  However, on
those targets @option{-fstack-clash-protection} will protect dynamic stack
allocations.  @option{-fstack-clash-protection} may also provide limited
protection for static stack allocations if the target supports
@option{-fstack-check=specific}.

@item -fstack-limit-register=@var{reg}
@itemx -fstack-limit-symbol=@var{sym}
@itemx -fno-stack-limit
@opindex fstack-limit-register
@opindex fstack-limit-symbol
@opindex fno-stack-limit
Generate code to ensure that the stack does not grow beyond a certain value,
either the value of a register or the address of a symbol.  If a larger
stack is required, a signal is raised at run time.  For most targets,
the signal is raised before the stack overruns the boundary, so
it is possible to catch the signal without taking special precautions.

For instance, if the stack starts at absolute address @samp{0x80000000}
and grows downwards, you can use the flags
@option{-fstack-limit-symbol=__stack_limit} and
@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
of 128KB@.  Note that this may only work with the GNU linker.

You can locally override stack limit checking by using the
@code{no_stack_limit} function attribute (@pxref{Function Attributes}).

@item -fsplit-stack
@opindex fsplit-stack
Generate code to automatically split the stack before it overflows.
The resulting program has a discontiguous stack which can only
overflow if the program is unable to allocate any more memory.  This
is most useful when running threaded programs, as it is no longer
necessary to calculate a good stack size to use for each thread.  This
is currently only implemented for the x86 targets running
GNU/Linux.

When code compiled with @option{-fsplit-stack} calls code compiled
without @option{-fsplit-stack}, there may not be much stack space
available for the latter code to run.  If compiling all code,
including library code, with @option{-fsplit-stack} is not an option,
then the linker can fix up these calls so that the code compiled
without @option{-fsplit-stack} always has a large stack.  Support for
this is implemented in the gold linker in GNU binutils release 2.21
and later.

@item -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]}
@opindex fvtable-verify
This option is only available when compiling C++ code.
It turns on (or off, if using @option{-fvtable-verify=none}) the security
feature that verifies at run time, for every virtual call, that
the vtable pointer through which the call is made is valid for the type of
the object, and has not been corrupted or overwritten.  If an invalid vtable
pointer is detected at run time, an error is reported and execution of the
program is immediately halted.

This option causes run-time data structures to be built at program startup,
which are used for verifying the vtable pointers.  
The options @samp{std} and @samp{preinit}
control the timing of when these data structures are built.  In both cases the
data structures are built before execution reaches @code{main}.  Using
@option{-fvtable-verify=std} causes the data structures to be built after
shared libraries have been loaded and initialized.
@option{-fvtable-verify=preinit} causes them to be built before shared
libraries have been loaded and initialized.

If this option appears multiple times in the command line with different
values specified, @samp{none} takes highest priority over both @samp{std} and
@samp{preinit}; @samp{preinit} takes priority over @samp{std}.

@item -fvtv-debug
@opindex fvtv-debug
When used in conjunction with @option{-fvtable-verify=std} or 
@option{-fvtable-verify=preinit}, causes debug versions of the 
runtime functions for the vtable verification feature to be called.  
This flag also causes the compiler to log information about which 
vtable pointers it finds for each class.
This information is written to a file named @file{vtv_set_ptr_data.log} 
in the directory named by the environment variable @env{VTV_LOGS_DIR} 
if that is defined or the current working directory otherwise.

Note:  This feature @emph{appends} data to the log file. If you want a fresh log
file, be sure to delete any existing one.

@item -fvtv-counts
@opindex fvtv-counts
This is a debugging flag.  When used in conjunction with
@option{-fvtable-verify=std} or @option{-fvtable-verify=preinit}, this
causes the compiler to keep track of the total number of virtual calls
it encounters and the number of verifications it inserts.  It also
counts the number of calls to certain run-time library functions
that it inserts and logs this information for each compilation unit.
The compiler writes this information to a file named
@file{vtv_count_data.log} in the directory named by the environment
variable @env{VTV_LOGS_DIR} if that is defined or the current working
directory otherwise.  It also counts the size of the vtable pointer sets
for each class, and writes this information to @file{vtv_class_set_sizes.log}
in the same directory.

Note:  This feature @emph{appends} data to the log files.  To get fresh log
files, be sure to delete any existing ones.

@item -finstrument-functions
@opindex finstrument-functions
Generate instrumentation calls for entry and exit to functions.  Just
after function entry and just before function exit, the following
profiling functions are called with the address of the current
function and its call site.  (On some platforms,
@code{__builtin_return_address} does not work beyond the current
function, so the call site information may not be available to the
profiling functions otherwise.)

@smallexample
void __cyg_profile_func_enter (void *this_fn,
                               void *call_site);
void __cyg_profile_func_exit  (void *this_fn,
                               void *call_site);
@end smallexample

The first argument is the address of the start of the current function,
which may be looked up exactly in the symbol table.

This instrumentation is also done for functions expanded inline in other
functions.  The profiling calls indicate where, conceptually, the
inline function is entered and exited.  This means that addressable
versions of such functions must be available.  If all your uses of a
function are expanded inline, this may mean an additional expansion of
code size.  If you use @code{extern inline} in your C code, an
addressable version of such functions must be provided.  (This is
normally the case anyway, but if you get lucky and the optimizer always
expands the functions inline, you might have gotten away without
providing static copies.)

A function may be given the attribute @code{no_instrument_function}, in
which case this instrumentation is not done.  This can be used, for
example, for the profiling functions listed above, high-priority
interrupt routines, and any functions from which the profiling functions
cannot safely be called (perhaps signal handlers, if the profiling
routines generate output or allocate memory).
@xref{Common Function Attributes}.

@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
@opindex finstrument-functions-exclude-file-list

Set the list of functions that are excluded from instrumentation (see
the description of @option{-finstrument-functions}).  If the file that
contains a function definition matches with one of @var{file}, then
that function is not instrumented.  The match is done on substrings:
if the @var{file} parameter is a substring of the file name, it is
considered to be a match.

For example:

@smallexample
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
@end smallexample

@noindent
excludes any inline function defined in files whose pathnames
contain @file{/bits/stl} or @file{include/sys}.

If, for some reason, you want to include letter @samp{,} in one of
@var{sym}, write @samp{\,}. For example,
@option{-finstrument-functions-exclude-file-list='\,\,tmp'}
(note the single quote surrounding the option).

@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
@opindex finstrument-functions-exclude-function-list

This is similar to @option{-finstrument-functions-exclude-file-list},
but this option sets the list of function names to be excluded from
instrumentation.  The function name to be matched is its user-visible
name, such as @code{vector<int> blah(const vector<int> &)}, not the
internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
match is done on substrings: if the @var{sym} parameter is a substring
of the function name, it is considered to be a match.  For C99 and C++
extended identifiers, the function name must be given in UTF-8, not
using universal character names.

@item -fpatchable-function-entry=@var{N}[,@var{M}]
@opindex fpatchable-function-entry
Generate @var{N} NOPs right at the beginning
of each function, with the function entry point before the @var{M}th NOP.
If @var{M} is omitted, it defaults to @code{0} so the
function entry points to the address just at the first NOP.
The NOP instructions reserve extra space which can be used to patch in
any desired instrumentation at run time, provided that the code segment
is writable.  The amount of space is controllable indirectly via
the number of NOPs; the NOP instruction used corresponds to the instruction
emitted by the internal GCC back-end interface @code{gen_nop}.  This behavior
is target-specific and may also depend on the architecture variant and/or
other compilation options.

For run-time identification, the starting addresses of these areas,
which correspond to their respective function entries minus @var{M},
are additionally collected in the @code{__patchable_function_entries}
section of the resulting binary.

Note that the value of @code{__attribute__ ((patchable_function_entry
(N,M)))} takes precedence over command-line option
@option{-fpatchable-function-entry=N,M}.  This can be used to increase
the area size or to remove it completely on a single function.
If @code{N=0}, no pad location is recorded.

The NOP instructions are inserted at---and maybe before, depending on
@var{M}---the function entry address, even before the prologue.

The maximum value of @var{N} and @var{M} is 65535.
@end table


@node Preprocessor Options
@section Options Controlling the Preprocessor
@cindex preprocessor options
@cindex options, preprocessor

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

If you use the @option{-E} option, nothing is done except preprocessing.
Some of these options make sense only together with @option{-E} because
they cause the preprocessor output to be unsuitable for actual
compilation.

In addition to the options listed here, there are a number of options 
to control search paths for include files documented in 
@ref{Directory Options}.  
Options to control preprocessor diagnostics are listed in 
@ref{Warning Options}.

@table @gcctabopt
@include cppopts.texi

@item -Wp,@var{option}
@opindex Wp
You can use @option{-Wp,@var{option}} to bypass the compiler driver
and pass @var{option} directly through to the preprocessor.  If
@var{option} contains commas, it is split into multiple options at the
commas.  However, many options are modified, translated or interpreted
by the compiler driver before being passed to the preprocessor, and
@option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
interface is undocumented and subject to change, so whenever possible
you should avoid using @option{-Wp} and let the driver handle the
options instead.

@item -Xpreprocessor @var{option}
@opindex Xpreprocessor
Pass @var{option} as an option to the preprocessor.  You can use this to
supply system-specific preprocessor options that GCC does not 
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xpreprocessor} twice, once for the option and once for the argument.

@item -no-integrated-cpp
@opindex no-integrated-cpp
Perform preprocessing as a separate pass before compilation.
By default, GCC performs preprocessing as an integrated part of
input tokenization and parsing.
If this option is provided, the appropriate language front end
(@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
and Objective-C, respectively) is instead invoked twice,
once for preprocessing only and once for actual compilation
of the preprocessed input.
This option may be useful in conjunction with the @option{-B} or
@option{-wrapper} options to specify an alternate preprocessor or
perform additional processing of the program source between
normal preprocessing and compilation.

@item -flarge-source-files
@opindex flarge-source-files
Adjust GCC to expect large source files, at the expense of slower
compilation and higher memory usage.

Specifically, GCC normally tracks both column numbers and line numbers
within source files and it normally prints both of these numbers in
diagnostics.  However, once it has processed a certain number of source
lines, it stops tracking column numbers and only tracks line numbers.
This means that diagnostics for later lines do not include column numbers.
It also means that options like @option{-Wmisleading-indentation} cease to work
at that point, although the compiler prints a note if this happens.
Passing @option{-flarge-source-files} significantly increases the number
of source lines that GCC can process before it stops tracking columns.

@end table

@node Assembler Options
@section Passing Options to the Assembler

@c prevent bad page break with this line
You can pass options to the assembler.

@table @gcctabopt
@item -Wa,@var{option}
@opindex Wa
Pass @var{option} as an option to the assembler.  If @var{option}
contains commas, it is split into multiple options at the commas.

@item -Xassembler @var{option}
@opindex Xassembler
Pass @var{option} as an option to the assembler.  You can use this to
supply system-specific assembler options that GCC does not
recognize.

If you want to pass an option that takes an argument, you must use
@option{-Xassembler} twice, once for the option and once for the argument.

@end table

@node Link Options
@section Options for Linking
@cindex link options
@cindex options, linking

These options come into play when the compiler links object files into
an executable output file.  They are meaningless if the compiler is
not doing a link step.

@table @gcctabopt
@cindex file names
@item @var{object-file-name}
A file name that does not end in a special recognized suffix is
considered to name an object file or library.  (Object files are
distinguished from libraries by the linker according to the file
contents.)  If linking is done, these object files are used as input
to the linker.

@item -c
@itemx -S
@itemx -E
@opindex c
@opindex S
@opindex E
If any of these options is used, then the linker is not run, and
object file names should not be used as arguments.  @xref{Overall
Options}.

@item -flinker-output=@var{type}
@opindex flinker-output
This option controls code generation of the link-time optimizer.  By
default the linker output is automatically determined by the linker
plugin.  For debugging the compiler and if incremental linking with a 
non-LTO object file is desired, it may be useful to control the type
manually.

If @var{type} is @samp{exec}, code generation produces a static
binary. In this case @option{-fpic} and @option{-fpie} are both
disabled.

If @var{type} is @samp{dyn}, code generation produces a shared
library.  In this case @option{-fpic} or @option{-fPIC} is preserved,
but not enabled automatically.  This allows to build shared libraries
without position-independent code on architectures where this is
possible, i.e.@: on x86.

If @var{type} is @samp{pie}, code generation produces an @option{-fpie}
executable. This results in similar optimizations as @samp{exec}
except that @option{-fpie} is not disabled if specified at compilation
time.

If @var{type} is @samp{rel}, the compiler assumes that incremental linking is
done.  The sections containing intermediate code for link-time optimization are
merged, pre-optimized, and output to the resulting object file. In addition, if
@option{-ffat-lto-objects} is specified, binary code is produced for future
non-LTO linking. The object file produced by incremental linking is smaller
than a static library produced from the same object files.  At link time the
result of incremental linking also loads faster than a static
library assuming that the majority of objects in the library are used.

Finally @samp{nolto-rel} configures the compiler for incremental linking where
code generation is forced, a final binary is produced, and the intermediate
code for later link-time optimization is stripped. When multiple object files
are linked together the resulting code is better optimized than with
link-time optimizations disabled (for example, cross-module inlining 
happens), but most of benefits of whole program optimizations are lost. 

During the incremental link (by @option{-r}) the linker plugin defaults to
@option{rel}. With current interfaces to GNU Binutils it is however not
possible to incrementally link LTO objects and non-LTO objects into a single
mixed object file.  If any of object files in incremental link cannot
be used for link-time optimization, the linker plugin issues a warning and
uses @samp{nolto-rel}. To maintain whole program optimization, it is
recommended to link such objects into static library instead. Alternatively it
is possible to use H.J. Lu's binutils with support for mixed objects.

@item -fuse-ld=bfd
@opindex fuse-ld=bfd
Use the @command{bfd} linker instead of the default linker.

@item -fuse-ld=gold
@opindex fuse-ld=gold
Use the @command{gold} linker instead of the default linker.

@item -fuse-ld=lld
@opindex fuse-ld=lld
Use the LLVM @command{lld} linker instead of the default linker.

@cindex Libraries
@item -l@var{library}
@itemx -l @var{library}
@opindex l
Search the library named @var{library} when linking.  (The second
alternative with the library as a separate argument is only for
POSIX compliance and is not recommended.)

The @option{-l} option is passed directly to the linker by GCC.  Refer
to your linker documentation for exact details.  The general
description below applies to the GNU linker.  

The linker searches a standard list of directories for the library.
The directories searched include several standard system directories
plus any that you specify with @option{-L}.

Static libraries are archives of object files, and have file names
like @file{lib@var{library}.a}.  Some targets also support shared
libraries, which typically have names like @file{lib@var{library}.so}.
If both static and shared libraries are found, the linker gives
preference to linking with the shared library unless the
@option{-static} option is used.

It makes a difference where in the command you write this option; the
linker searches and processes libraries and object files in the order they
are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
to functions in @samp{z}, those functions may not be loaded.

@item -lobjc
@opindex lobjc
You need this special case of the @option{-l} option in order to
link an Objective-C or Objective-C++ program.

@item -nostartfiles
@opindex nostartfiles
Do not use the standard system startup files when linking.
The standard system libraries are used normally, unless @option{-nostdlib},
@option{-nolibc}, or @option{-nodefaultlibs} is used.

@item -nodefaultlibs
@opindex nodefaultlibs
Do not use the standard system libraries when linking.
Only the libraries you specify are passed to the linker, and options
specifying linkage of the system libraries, such as @option{-static-libgcc}
or @option{-shared-libgcc}, are ignored.  
The standard startup files are used normally, unless @option{-nostartfiles}
is used.  

The compiler may generate calls to @code{memcmp},
@code{memset}, @code{memcpy} and @code{memmove}.
These entries are usually resolved by entries in
libc.  These entry points should be supplied through some other
mechanism when this option is specified.

@item -nolibc
@opindex nolibc
Do not use the C library or system libraries tightly coupled with it when
linking.  Still link with the startup files, @file{libgcc} or toolchain
provided language support libraries such as @file{libgnat}, @file{libgfortran}
or @file{libstdc++} unless options preventing their inclusion are used as
well.  This typically removes @option{-lc} from the link command line, as well
as system libraries that normally go with it and become meaningless when
absence of a C library is assumed, for example @option{-lpthread} or
@option{-lm} in some configurations.  This is intended for bare-board
targets when there is indeed no C library available.

@item -nostdlib
@opindex nostdlib
Do not use the standard system startup files or libraries when linking.
No startup files and only the libraries you specify are passed to
the linker, and options specifying linkage of the system libraries, such as
@option{-static-libgcc} or @option{-shared-libgcc}, are ignored.

The compiler may generate calls to @code{memcmp}, @code{memset},
@code{memcpy} and @code{memmove}.
These entries are usually resolved by entries in
libc.  These entry points should be supplied through some other
mechanism when this option is specified.

@cindex @option{-lgcc}, use with @option{-nostdlib}
@cindex @option{-nostdlib} and unresolved references
@cindex unresolved references and @option{-nostdlib}
@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
@cindex @option{-nodefaultlibs} and unresolved references
@cindex unresolved references and @option{-nodefaultlibs}
One of the standard libraries bypassed by @option{-nostdlib} and
@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
which GCC uses to overcome shortcomings of particular machines, or special
needs for some languages.
(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
Collection (GCC) Internals},
for more discussion of @file{libgcc.a}.)
In most cases, you need @file{libgcc.a} even when you want to avoid
other standard libraries.  In other words, when you specify @option{-nostdlib}
or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
This ensures that you have no unresolved references to internal GCC
library subroutines.
(An example of such an internal subroutine is @code{__main}, used to ensure C++
constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
GNU Compiler Collection (GCC) Internals}.)

@item -e @var{entry}
@itemx --entry=@var{entry}
@opindex e
@opindex entry

Specify that the program entry point is @var{entry}.  The argument is
interpreted by the linker; the GNU linker accepts either a symbol name
or an address.

@item -pie
@opindex pie
Produce a dynamically linked position independent executable on targets
that support it.  For predictable results, you must also specify the same
set of options used for compilation (@option{-fpie}, @option{-fPIE},
or model suboptions) when you specify this linker option.

@item -no-pie
@opindex no-pie
Don't produce a dynamically linked position independent executable.

@item -static-pie
@opindex static-pie
Produce a static position independent executable on targets that support
it.  A static position independent executable is similar to a static
executable, but can be loaded at any address without a dynamic linker.
For predictable results, you must also specify the same set of options
used for compilation (@option{-fpie}, @option{-fPIE}, or model
suboptions) when you specify this linker option.

@item -pthread
@opindex pthread
Link with the POSIX threads library.  This option is supported on 
GNU/Linux targets, most other Unix derivatives, and also on 
x86 Cygwin and MinGW targets.  On some targets this option also sets 
flags for the preprocessor, so it should be used consistently for both
compilation and linking.

@item -r
@opindex r
Produce a relocatable object as output.  This is also known as partial
linking.

@item -rdynamic
@opindex rdynamic
Pass the flag @option{-export-dynamic} to the ELF linker, on targets
that support it. This instructs the linker to add all symbols, not
only used ones, to the dynamic symbol table. This option is needed
for some uses of @code{dlopen} or to allow obtaining backtraces
from within a program.

@item -s
@opindex s
Remove all symbol table and relocation information from the executable.

@item -static
@opindex static
On systems that support dynamic linking, this overrides @option{-pie}
and prevents linking with the shared libraries.  On other systems, this
option has no effect.

@item -shared
@opindex shared
Produce a shared object which can then be linked with other objects to
form an executable.  Not all systems support this option.  For predictable
results, you must also specify the same set of options used for compilation
(@option{-fpic}, @option{-fPIC}, or model suboptions) when
you specify this linker 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
@opindex shared-libgcc
@opindex 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}.

Therefore, the G++ driver automatically adds @option{-shared-libgcc}
whenever you build a shared library or a main executable, because C++
programs typically use exceptions, so this is the right thing to do.

If, instead, you use the GCC driver to create shared libraries, you may
find that they are not always linked with the shared @file{libgcc}.
If GCC finds, at its configuration time, that you have a non-GNU linker
or a GNU linker that does not support option @option{--eh-frame-hdr},
it links the shared version of @file{libgcc} into shared libraries
by default.  Otherwise, it takes advantage of the linker and optimizes
away the linking with the shared version of @file{libgcc}, linking with
the static version of libgcc by default.  This allows exceptions to
propagate through such shared libraries, without incurring relocation
costs at library load time.

However, if a library or main executable is supposed to throw or catch
exceptions, you must link it using the G++ driver, or using the option
@option{-shared-libgcc}, such that it is linked with the shared
@file{libgcc}.

@item -static-libasan
@opindex static-libasan
When the @option{-fsanitize=address} option is used to link a program,
the GCC driver automatically links against @option{libasan}.  If
@file{libasan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{libasan}.  The @option{-static-libasan} option directs the GCC
driver to link @file{libasan} statically, without necessarily linking
other libraries statically.

@item -static-libtsan
@opindex static-libtsan
When the @option{-fsanitize=thread} option is used to link a program,
the GCC driver automatically links against @option{libtsan}.  If
@file{libtsan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{libtsan}.  The @option{-static-libtsan} option directs the GCC
driver to link @file{libtsan} statically, without necessarily linking
other libraries statically.

@item -static-liblsan
@opindex static-liblsan
When the @option{-fsanitize=leak} option is used to link a program,
the GCC driver automatically links against @option{liblsan}.  If
@file{liblsan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{liblsan}.  The @option{-static-liblsan} option directs the GCC
driver to link @file{liblsan} statically, without necessarily linking
other libraries statically.

@item -static-libubsan
@opindex static-libubsan
When the @option{-fsanitize=undefined} option is used to link a program,
the GCC driver automatically links against @option{libubsan}.  If
@file{libubsan} is available as a shared library, and the @option{-static}
option is not used, then this links against the shared version of
@file{libubsan}.  The @option{-static-libubsan} option directs the GCC
driver to link @file{libubsan} statically, without necessarily linking
other libraries statically.

@item -static-libstdc++
@opindex static-libstdc++
When the @command{g++} program is used to link a C++ program, it
normally automatically links against @option{libstdc++}.  If
@file{libstdc++} is available as a shared library, and the
@option{-static} option is not used, then this links against the
shared version of @file{libstdc++}.  That is normally fine.  However, it
is sometimes useful to freeze the version of @file{libstdc++} used by
the program without going all the way to a fully static link.  The
@option{-static-libstdc++} option directs the @command{g++} driver to
link @file{libstdc++} statically, without necessarily linking other
libraries statically.

@item -symbolic
@opindex symbolic
Bind references to global symbols when building a shared object.  Warn
about any unresolved references (unless overridden by the link editor
option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
this option.

@item -T @var{script}
@opindex T
@cindex linker script
Use @var{script} as the linker script.  This option is supported by most
systems using the GNU linker.  On some targets, such as bare-board
targets without an operating system, the @option{-T} option may be required
when linking to avoid references to undefined symbols.

@item -Xlinker @var{option}
@opindex Xlinker
Pass @var{option} as an option to the linker.  You can use this to
supply system-specific linker options that GCC does not recognize.

If you want to pass an option that takes a separate argument, you must use
@option{-Xlinker} twice, once for the option and once for the argument.
For example, to pass @option{-assert definitions}, you must write
@option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
@option{-Xlinker "-assert definitions"}, because this passes the entire
string as a single argument, which is not what the linker expects.

When using the GNU linker, it is usually more convenient to pass
arguments to linker options using the @option{@var{option}=@var{value}}
syntax than as separate arguments.  For example, you can specify
@option{-Xlinker -Map=output.map} rather than
@option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
this syntax for command-line options.

@item -Wl,@var{option}
@opindex Wl
Pass @var{option} as an option to the linker.  If @var{option} contains
commas, it is split into multiple options at the commas.  You can use this
syntax to pass an argument to the option.
For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
linker.  When using the GNU linker, you can also get the same effect with
@option{-Wl,-Map=output.map}.

@item -u @var{symbol}
@opindex u
Pretend the symbol @var{symbol} is undefined, to force linking of
library modules to define it.  You can use @option{-u} multiple times with
different symbols to force loading of additional library modules.

@item -z @var{keyword}
@opindex z
@option{-z} is passed directly on to the linker along with the keyword
@var{keyword}. See the section in the documentation of your linker for
permitted values and their meanings.
@end table

@node Directory Options
@section Options for Directory Search
@cindex directory options
@cindex options, directory search
@cindex search path

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

@table @gcctabopt
@include cppdiropts.texi

@item -iplugindir=@var{dir}
@opindex iplugindir=
Set the directory to search for plugins that are passed
by @option{-fplugin=@var{name}} instead of
@option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
to be used by the user, but only passed by the driver.

@item -L@var{dir}
@opindex L
Add directory @var{dir} to the list of directories to be searched
for @option{-l}.

@item -B@var{prefix}
@opindex B
This option specifies where to find the executables, libraries,
include files, and data files of the compiler itself.

The compiler driver program runs one or more of the subprograms
@command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
@var{prefix} as a prefix for each program it tries to run, both with and
without @samp{@var{machine}/@var{version}/} for the corresponding target
machine and compiler version.

For each subprogram to be run, the compiler driver first tries the
@option{-B} prefix, if any.  If that name is not found, or if @option{-B}
is not specified, the driver tries two standard prefixes, 
@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  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
@env{PATH} environment variable.

The compiler checks to see if the path provided by @option{-B}
refers to a directory, and if necessary it adds a directory
separator character at the end of the path.

@option{-B} prefixes that effectively specify directory names also apply
to libraries in the linker, because the compiler translates these
options into @option{-L} options for the linker.  They also apply to
include files in the preprocessor, because the compiler translates these
options into @option{-isystem} options for the preprocessor.  In this case,
the compiler appends @samp{include} to the prefix.

The runtime support file @file{libgcc.a} can also be searched for using
the @option{-B} prefix, if needed.  If it is not found there, the two
standard prefixes above are tried, and that is all.  The file is left
out of the link if it is not found by those means.

Another way to specify a prefix much like the @option{-B} prefix is to use
the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
Variables}.

As a special kludge, if the path provided by @option{-B} is
@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
9, then it is replaced by @file{[dir/]include}.  This is to help
with boot-strapping the compiler.

@item -no-canonical-prefixes
@opindex no-canonical-prefixes
Do not expand any symbolic links, resolve references to @samp{/../}
or @samp{/./}, or make the path absolute when generating a relative
prefix.

@item --sysroot=@var{dir}
@opindex sysroot
Use @var{dir} as the logical root directory for headers and libraries.
For example, if the compiler normally searches for headers in
@file{/usr/include} and libraries in @file{/usr/lib}, it instead
searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.

If you use both this option and the @option{-isysroot} option, then
the @option{--sysroot} option applies to libraries, but the
@option{-isysroot} option applies to header files.

The GNU linker (beginning with version 2.16) has the necessary support
for this option.  If your linker does not support this option, the
header file aspect of @option{--sysroot} still works, but the
library aspect does not.

@item --no-sysroot-suffix
@opindex no-sysroot-suffix
For some targets, a suffix is added to the root directory specified
with @option{--sysroot}, depending on the other options used, so that
headers may for example be found in
@file{@var{dir}/@var{suffix}/usr/include} instead of
@file{@var{dir}/usr/include}.  This option disables the addition of
such a suffix.

@end table

@node Code Gen Options
@section Options for Code Generation Conventions
@cindex code generation conventions
@cindex options, code generation
@cindex run-time options

These machine-independent options control the interface conventions
used in code generation.

Most of them have both positive and negative forms; the negative form
of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
one of the forms is listed---the one that is not the default.  You
can figure out the other form by either removing @samp{no-} or adding
it.

@table @gcctabopt
@item -fstack-reuse=@var{reuse-level}
@opindex fstack_reuse
This option controls stack space reuse for user declared local/auto variables
and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
@samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
local variables and temporaries, @samp{named_vars} enables the reuse only for
user defined local variables with names, and @samp{none} disables stack reuse
completely. The default value is @samp{all}. The option is needed when the
program extends the lifetime of a scoped local variable or a compiler generated
temporary beyond the end point defined by the language.  When a lifetime of
a variable ends, and if the variable lives in memory, the optimizing compiler
has the freedom to reuse its stack space with other temporaries or scoped
local variables whose live range does not overlap with it. Legacy code extending
local lifetime is likely to break with the stack reuse optimization.

For example,

@smallexample
   int *p;
   @{
     int local1;

     p = &local1;
     local1 = 10;
     ....
   @}
   @{
      int local2;
      local2 = 20;
      ...
   @}

   if (*p == 10)  // out of scope use of local1
     @{

     @}
@end smallexample

Another example:
@smallexample

   struct A
   @{
       A(int k) : i(k), j(k) @{ @}
       int i;
       int j;
   @};

   A *ap;

   void foo(const A& ar)
   @{
      ap = &ar;
   @}

   void bar()
   @{
      foo(A(10)); // temp object's lifetime ends when foo returns

      @{
        A a(20);
        ....
      @}
      ap->i+= 10;  // ap references out of scope temp whose space
                   // is reused with a. What is the value of ap->i?
   @}

@end smallexample

The lifetime of a compiler generated temporary is well defined by the C++
standard. When a lifetime of a temporary ends, and if the temporary lives
in memory, the optimizing compiler has the freedom to reuse its stack
space with other temporaries or scoped local variables whose live range
does not overlap with it. However some of the legacy code relies on
the behavior of older compilers in which temporaries' stack space is
not reused, the aggressive stack reuse can lead to runtime errors. This
option is used to control the temporary stack reuse optimization.

@item -ftrapv
@opindex ftrapv
This option generates traps for signed overflow on addition, subtraction,
multiplication operations.
The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
@option{-ftrapv} @option{-fwrapv} on the command-line results in
@option{-fwrapv} being effective.  Note that only active options override, so
using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
results in @option{-ftrapv} being effective.

@item -fwrapv
@opindex fwrapv
This option instructs the compiler to assume that signed arithmetic
overflow of addition, subtraction and multiplication wraps around
using twos-complement representation.  This flag enables some optimizations
and disables others.
The options @option{-ftrapv} and @option{-fwrapv} override each other, so using
@option{-ftrapv} @option{-fwrapv} on the command-line results in
@option{-fwrapv} being effective.  Note that only active options override, so
using @option{-ftrapv} @option{-fwrapv} @option{-fno-wrapv} on the command-line
results in @option{-ftrapv} being effective.

@item -fwrapv-pointer
@opindex fwrapv-pointer
This option instructs the compiler to assume that pointer arithmetic
overflow on addition and subtraction wraps around using twos-complement
representation.  This flag disables some optimizations which assume
pointer overflow is invalid.

@item -fstrict-overflow
@opindex fstrict-overflow
This option implies @option{-fno-wrapv} @option{-fno-wrapv-pointer} and when
negated implies @option{-fwrapv} @option{-fwrapv-pointer}.

@item -fexceptions
@opindex fexceptions
Enable exception handling.  Generates extra code needed to propagate
exceptions.  For some targets, this implies GCC generates frame
unwind information for all functions, which can produce significant data
size overhead, although it does not affect execution.  If you do not
specify this option, GCC enables it by default for languages like
C++ that normally require exception handling, and disables it for
languages like C that do not normally require it.  However, you may need
to enable this option when compiling C code that needs to interoperate
properly with exception handlers written in C++.  You may also wish to
disable this option if you are compiling older C++ programs that don't
use exception handling.

@item -fnon-call-exceptions
@opindex fnon-call-exceptions
Generate code that allows trapping instructions to throw exceptions.
Note that this requires platform-specific runtime support that does
not exist everywhere.  Moreover, it only allows @emph{trapping}
instructions to throw exceptions, i.e.@: memory references or floating-point
instructions.  It does not allow exceptions to be thrown from
arbitrary signal handlers such as @code{SIGALRM}.  This enables
@option{-fexceptions}.

@item -fdelete-dead-exceptions
@opindex fdelete-dead-exceptions
Consider that instructions that may throw exceptions but don't otherwise
contribute to the execution of the program can be optimized away.
This does not affect calls to functions except those with the
@code{pure} or @code{const} attributes.
This option is enabled by default for the Ada and C++ compilers, as permitted by
the language specifications.
Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.

@item -funwind-tables
@opindex funwind-tables
Similar to @option{-fexceptions}, except that it just generates any needed
static data, but does not affect the generated code in any other way.
You normally do not need to enable this option; instead, a language processor
that needs this handling enables it on your behalf.

@item -fasynchronous-unwind-tables
@opindex fasynchronous-unwind-tables
Generate unwind table in DWARF format, if supported by target machine.  The
table is exact at each instruction boundary, so it can be used for stack
unwinding from asynchronous events (such as debugger or garbage collector).

@item -fno-gnu-unique
@opindex fno-gnu-unique
@opindex fgnu-unique
On systems with recent GNU assembler and C library, the C++ compiler
uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions
of template static data members and static local variables in inline
functions are unique even in the presence of @code{RTLD_LOCAL}; this
is necessary to avoid problems with a library used by two different
@code{RTLD_LOCAL} plugins depending on a definition in one of them and
therefore disagreeing with the other one about the binding of the
symbol.  But this causes @code{dlclose} to be ignored for affected
DSOs; if your program relies on reinitialization of a DSO via
@code{dlclose} and @code{dlopen}, you can use
@option{-fno-gnu-unique}.

@item -fpcc-struct-return
@opindex fpcc-struct-return
Return ``short'' @code{struct} and @code{union} values in memory like
longer ones, rather than in registers.  This convention is less
efficient, but it has the advantage of allowing intercallability between
GCC-compiled files and files compiled with other compilers, particularly
the Portable C Compiler (pcc).

The precise convention for returning structures in memory depends
on the target configuration macros.

Short structures and unions are those whose size and alignment match
that of some integer type.

@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
switch is not binary compatible with code compiled with the
@option{-freg-struct-return} switch.
Use it to conform to a non-default application binary interface.

@item -freg-struct-return
@opindex freg-struct-return
Return @code{struct} and @code{union} values in registers when possible.
This is more efficient for small structures than
@option{-fpcc-struct-return}.

If you specify neither @option{-fpcc-struct-return} nor
@option{-freg-struct-return}, GCC defaults to whichever convention is
standard for the target.  If there is no standard convention, GCC
defaults to @option{-fpcc-struct-return}, except on targets where GCC is
the principal compiler.  In those cases, we can choose the standard, and
we chose the more efficient register return alternative.

@strong{Warning:} code compiled with the @option{-freg-struct-return}
switch is not binary compatible with code compiled with the
@option{-fpcc-struct-return} switch.
Use it to conform to a non-default application binary interface.

@item -fshort-enums
@opindex fshort-enums
Allocate to an @code{enum} type only as many bytes as it needs for the
declared range of possible values.  Specifically, the @code{enum} type
is equivalent to the smallest integer type that has enough room.

@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fshort-wchar
@opindex fshort-wchar
Override the underlying type for @code{wchar_t} to be @code{short
unsigned int} instead of the default for the target.  This option is
useful for building programs to run under WINE@.

@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Use it to conform to a non-default application binary interface.

@item -fcommon
@opindex fcommon
@opindex fno-common
@cindex tentative definitions
In C code, this option controls the placement of global variables
defined without an initializer, known as @dfn{tentative definitions}
in the C standard.  Tentative definitions are distinct from declarations
of a variable with the @code{extern} keyword, which do not allocate storage.

The default is @option{-fno-common}, which specifies that the compiler places
uninitialized global variables in the BSS section of the object file.
This inhibits the merging of tentative definitions by the linker so you get a
multiple-definition error if the same variable is accidentally defined in more
than one compilation unit.

The @option{-fcommon} places uninitialized global variables in a common block.
This allows the linker to resolve all tentative definitions of the same variable
in different compilation units to the same object, or to a non-tentative
definition.  This behavior is inconsistent with C++, and on many targets implies
a speed and code size penalty on global variable references.  It is mainly
useful to enable legacy code to link without errors.

@item -fno-ident
@opindex fno-ident
@opindex fident
Ignore the @code{#ident} directive.

@item -finhibit-size-directive
@opindex finhibit-size-directive
Don't output a @code{.size} assembler directive, or anything else that
would cause trouble if the function is split in the middle, and the
two halves are placed at locations far apart in memory.  This option is
used when compiling @file{crtstuff.c}; you should not need to use it
for anything else.

@item -fverbose-asm
@opindex fverbose-asm
Put extra commentary information in the generated assembly code to
make it more readable.  This option is generally only of use to those
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).

@option{-fno-verbose-asm}, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.

The added comments include:

@itemize @bullet

@item
information on the compiler version and command-line options,

@item
the source code lines associated with the assembly instructions,
in the form FILENAME:LINENUMBER:CONTENT OF LINE,

@item
hints on which high-level expressions correspond to
the various assembly instruction operands.

@end itemize

For example, given this C source file:

@smallexample
int test (int n)
@{
  int i;
  int total = 0;

  for (i = 0; i < n; i++)
    total += i * i;

  return total;
@}
@end smallexample

compiling to (x86_64) assembly via @option{-S} and emitting the result
direct to stdout via @option{-o} @option{-}

@smallexample
gcc -S test.c -fverbose-asm -Os -o -
@end smallexample

gives output similar to this:

@smallexample
	.file	"test.c"
# GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
  [...snip...]
# options passed:
  [...snip...]

	.text
	.globl	test
	.type	test, @@function
test:
.LFB0:
	.cfi_startproc
# test.c:4:   int total = 0;
	xorl	%eax, %eax	# <retval>
# test.c:6:   for (i = 0; i < n; i++)
	xorl	%edx, %edx	# i
.L2:
# test.c:6:   for (i = 0; i < n; i++)
	cmpl	%edi, %edx	# n, i
	jge	.L5	#,
# test.c:7:     total += i * i;
	movl	%edx, %ecx	# i, tmp92
	imull	%edx, %ecx	# i, tmp92
# test.c:6:   for (i = 0; i < n; i++)
	incl	%edx	# i
# test.c:7:     total += i * i;
	addl	%ecx, %eax	# tmp92, <retval>
	jmp	.L2	#
.L5:
# test.c:10: @}
	ret
	.cfi_endproc
.LFE0:
	.size	test, .-test
	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
	.section	.note.GNU-stack,"",@@progbits
@end smallexample

The comments are intended for humans rather than machines and hence the
precise format of the comments is subject to change.

@item -frecord-gcc-switches
@opindex frecord-gcc-switches
This switch causes the command line used to invoke the
compiler to be recorded into the object file that is being created.
This switch is only implemented on some targets and the exact format
of the recording is target and binary file format dependent, but it
usually takes the form of a section containing ASCII text.  This
switch is related to the @option{-fverbose-asm} switch, but that
switch only records information in the assembler output file as
comments, so it never reaches the object file.
See also @option{-grecord-gcc-switches} for another
way of storing compiler options into the object file.

@item -fpic
@opindex fpic
@cindex global offset table
@cindex PIC
Generate position-independent code (PIC) suitable for use in a shared
library, if supported for the target machine.  Such code accesses all
constant addresses through a global offset table (GOT)@.  The dynamic
loader resolves the GOT entries when the program starts (the dynamic
loader is not part of GCC; it is part of the operating system).  If
the GOT size for the linked executable exceeds a machine-specific
maximum size, you get an error message from the linker indicating that
@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
instead.  (These maximums are 8k on the SPARC, 28k on AArch64 and 32k
on the m68k and RS/6000.  The x86 has no such limit.)

Position-independent code requires special support, and therefore works
only on certain machines.  For the x86, GCC supports PIC for System V
but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
position-independent.

When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 1.

@item -fPIC
@opindex fPIC
If supported for the target machine, emit position-independent code,
suitable for dynamic linking and avoiding any limit on the size of the
global offset table.  This option makes a difference on AArch64, m68k,
PowerPC and SPARC@.

Position-independent code requires special support, and therefore works
only on certain machines.

When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 2.

@item -fpie
@itemx -fPIE
@opindex fpie
@opindex fPIE
These options are similar to @option{-fpic} and @option{-fPIC}, but the
generated position-independent code can be only linked into executables.
Usually these options are used to compile code that will be linked using
the @option{-pie} GCC option.

@option{-fpie} and @option{-fPIE} both define the macros
@code{__pie__} and @code{__PIE__}.  The macros have the value 1
for @option{-fpie} and 2 for @option{-fPIE}.

@item -fno-plt
@opindex fno-plt
@opindex fplt
Do not use the PLT for external function calls in position-independent code.
Instead, load the callee address at call sites from the GOT and branch to it.
This leads to more efficient code by eliminating PLT stubs and exposing
GOT loads to optimizations.  On architectures such as 32-bit x86 where
PLT stubs expect the GOT pointer in a specific register, this gives more
register allocation freedom to the compiler.
Lazy binding requires use of the PLT; 
with @option{-fno-plt} all external symbols are resolved at load time.

Alternatively, the function attribute @code{noplt} can be used to avoid calls
through the PLT for specific external functions.

In position-dependent code, a few targets also convert calls to
functions that are marked to not use the PLT to use the GOT instead.

@item -fno-jump-tables
@opindex fno-jump-tables
@opindex fjump-tables
Do not use jump tables for switch statements even where it would be
more efficient than other code generation strategies.  This option is
of use in conjunction with @option{-fpic} or @option{-fPIC} for
building code that forms part of a dynamic linker and cannot
reference the address of a jump table.  On some targets, jump tables
do not require a GOT and this option is not needed.

@item -fno-bit-tests
@opindex fno-bit-tests
@opindex fbit-tests
Do not use bit tests for switch statements even where it would be
more efficient than other code generation strategies.

@item -ffixed-@var{reg}
@opindex ffixed
Treat the register named @var{reg} as a fixed register; generated code
should never refer to it (except perhaps as a stack pointer, frame
pointer or in some other fixed role).

@var{reg} must be the name of a register.  The register names accepted
are machine-specific and are defined in the @code{REGISTER_NAMES}
macro in the machine description macro file.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-used-@var{reg}
@opindex fcall-used
Treat the register named @var{reg} as an allocable register that is
clobbered by function calls.  It may be allocated for temporaries or
variables that do not live across a call.  Functions compiled this way
do not save and restore the register @var{reg}.

It is an error to use this flag with the frame pointer or stack pointer.
Use of this flag for other registers that have fixed pervasive roles in
the machine's execution model produces disastrous results.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fcall-saved-@var{reg}
@opindex fcall-saved
Treat the register named @var{reg} as an allocable register saved by
functions.  It may be allocated even for temporaries or variables that
live across a call.  Functions compiled this way save and restore
the register @var{reg} if they use it.

It is an error to use this flag with the frame pointer or stack pointer.
Use of this flag for other registers that have fixed pervasive roles in
the machine's execution model produces disastrous results.

A different sort of disaster results from the use of this flag for
a register in which function values may be returned.

This flag does not have a negative form, because it specifies a
three-way choice.

@item -fpack-struct[=@var{n}]
@opindex fpack-struct
Without a value specified, pack all structure members together without
holes.  When a value is specified (which must be a small power of two), pack
structure members according to this value, representing the maximum
alignment (that is, objects with default alignment requirements larger than
this are output potentially unaligned at the next fitting location.

@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
code that is not binary compatible with code generated without that switch.
Additionally, it makes the code suboptimal.
Use it to conform to a non-default application binary interface.

@item -fleading-underscore
@opindex fleading-underscore
This option and its counterpart, @option{-fno-leading-underscore}, forcibly
change the way C symbols are represented in the object file.  One use
is to help link with legacy assembly code.

@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
generate code that is not binary compatible with code generated without that
switch.  Use it to conform to a non-default application binary interface.
Not all targets provide complete support for this switch.

@item -ftls-model=@var{model}
@opindex ftls-model
Alter the thread-local storage model to be used (@pxref{Thread-Local}).
The @var{model} argument should be one of @samp{global-dynamic},
@samp{local-dynamic}, @samp{initial-exec} or @samp{local-exec}.
Note that the choice is subject to optimization: the compiler may use
a more efficient model for symbols not visible outside of the translation
unit, or if @option{-fpic} is not given on the command line.

The default without @option{-fpic} is @samp{initial-exec}; with
@option{-fpic} the default is @samp{global-dynamic}.

@item -ftrampolines
@opindex ftrampolines
For targets that normally need trampolines for nested functions, always
generate them instead of using descriptors.  Otherwise, for targets that
do not need them, like for example HP-PA or IA-64, do nothing.

A trampoline is a small piece of code that is created at run time on the
stack when the address of a nested function is taken, and is used to call
the nested function indirectly.  Therefore, it requires the stack to be
made executable in order for the program to work properly.

@option{-fno-trampolines} is enabled by default on a language by language
basis to let the compiler avoid generating them, if it computes that this
is safe, and replace them with descriptors.  Descriptors are made up of data
only, but the generated code must be prepared to deal with them.  As of this
writing, @option{-fno-trampolines} is enabled by default only for Ada.

Moreover, code compiled with @option{-ftrampolines} and code compiled with
@option{-fno-trampolines} are not binary compatible if nested functions are
present.  This option must therefore be used on a program-wide basis and be
manipulated with extreme care.

For languages other than Ada, the @code{-ftrampolines} and
@code{-fno-trampolines} options currently have no effect, and
trampolines are always generated on platforms that need them
for nested functions.

@item -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]}
@opindex fvisibility
Set the default ELF image symbol visibility to the specified option---all
symbols are marked with this unless overridden within the code.
Using this feature can very substantially improve linking and
load times of shared object libraries, produce more optimized
code, provide near-perfect API export and prevent symbol clashes.
It is @strong{strongly} recommended that you use this in any shared objects
you distribute.

Despite the nomenclature, @samp{default} always means public; i.e.,
available to be linked against from outside the shared object.
@samp{protected} and @samp{internal} are pretty useless in real-world
usage so the only other commonly used option is @samp{hidden}.
The default if @option{-fvisibility} isn't specified is
@samp{default}, i.e., make every symbol public.

A good explanation of the benefits offered by ensuring ELF
symbols have the correct visibility is given by ``How To Write
Shared Libraries'' by Ulrich Drepper (which can be found at
@w{@uref{https://www.akkadia.org/drepper/}})---however a superior
solution made possible by this option to marking things hidden when
the default is public is to make the default hidden and mark things
public.  This is the norm with DLLs on Windows and with @option{-fvisibility=hidden}
and @code{__attribute__ ((visibility("default")))} instead of
@code{__declspec(dllexport)} you get almost identical semantics with
identical syntax.  This is a great boon to those working with
cross-platform projects.

For those adding visibility support to existing code, you may find
@code{#pragma GCC visibility} of use.  This works by you enclosing
the declarations you wish to set visibility for with (for example)
@code{#pragma GCC visibility push(hidden)} and
@code{#pragma GCC visibility pop}.
Bear in mind that symbol visibility should be viewed @strong{as
part of the API interface contract} and thus all new code should
always specify visibility when it is not the default; i.e., declarations
only for use within the local DSO should @strong{always} be marked explicitly
as hidden as so to avoid PLT indirection overheads---making this
abundantly clear also aids readability and self-documentation of the code.
Note that due to ISO C++ specification requirements, @code{operator new} and
@code{operator delete} must always be of default visibility.

Be aware that headers from outside your project, in particular system
headers and headers from any other library you use, may not be
expecting to be compiled with visibility other than the default.  You
may need to explicitly say @code{#pragma GCC visibility push(default)}
before including any such headers.

@code{extern} declarations are not affected by @option{-fvisibility}, so
a lot of code can be recompiled with @option{-fvisibility=hidden} with
no modifications.  However, this means that calls to @code{extern}
functions with no explicit visibility use the PLT, so it is more
effective to use @code{__attribute ((visibility))} and/or
@code{#pragma GCC visibility} to tell the compiler which @code{extern}
declarations should be treated as hidden.

Note that @option{-fvisibility} does affect C++ vague linkage
entities. This means that, for instance, an exception class that is
be thrown between DSOs must be explicitly marked with default
visibility so that the @samp{type_info} nodes are unified between
the DSOs.

An overview of these techniques, their benefits and how to use them
is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.

@item -fstrict-volatile-bitfields
@opindex fstrict-volatile-bitfields
This option should be used if accesses to volatile bit-fields (or other
structure fields, although the compiler usually honors those types
anyway) should use a single access of the width of the
field's type, aligned to a natural alignment if possible.  For
example, targets with memory-mapped peripheral registers might require
all such accesses to be 16 bits wide; with this flag you can
declare all peripheral bit-fields as @code{unsigned short} (assuming short
is 16 bits on these targets) to force GCC to use 16-bit accesses
instead of, perhaps, a more efficient 32-bit access.

If this option is disabled, the compiler uses the most efficient
instruction.  In the previous example, that might be a 32-bit load
instruction, even though that accesses bytes that do not contain
any portion of the bit-field, or memory-mapped registers unrelated to
the one being updated.

In some cases, such as when the @code{packed} attribute is applied to a 
structure field, it may not be possible to access the field with a single
read or write that is correctly aligned for the target machine.  In this
case GCC falls back to generating multiple accesses rather than code that 
will fault or truncate the result at run time.

Note:  Due to restrictions of the C/C++11 memory model, write accesses are
not allowed to touch non bit-field members.  It is therefore recommended
to define all bits of the field's type as bit-field members.

The default value of this option is determined by the application binary
interface for the target processor.

@item -fsync-libcalls
@opindex fsync-libcalls
This option controls whether any out-of-line instance of the @code{__sync}
family of functions may be used to implement the C++11 @code{__atomic}
family of functions.

The default value of this option is enabled, thus the only useful form
of the option is @option{-fno-sync-libcalls}.  This option is used in
the implementation of the @file{libatomic} runtime library.

@end table

@node Developer Options
@section GCC Developer Options
@cindex developer options
@cindex debugging GCC
@cindex debug dump options
@cindex dump options
@cindex compilation statistics

This section describes command-line options that are primarily of
interest to GCC developers, including options to support compiler
testing and investigation of compiler bugs and compile-time
performance problems.  This includes options that produce debug dumps
at various points in the compilation; that print statistics such as
memory use and execution time; and that print information about GCC's
configuration, such as where it searches for libraries.  You should
rarely need to use any of these options for ordinary compilation and
linking tasks.

Many developer options that cause GCC to dump output to a file take an
optional @samp{=@var{filename}} suffix. You can specify @samp{stdout}
or @samp{-} to dump to standard output, and @samp{stderr} for standard
error.

If @samp{=@var{filename}} is omitted, a default dump file name is
constructed by concatenating the base dump file name, a pass number,
phase letter, and pass name.  The base dump file name is the name of
output file produced by the compiler if explicitly specified and not
an executable; otherwise it is the source file name.
The pass number is determined by the order passes are registered with
the compiler's pass manager. 
This is generally the same as the order of execution, but passes
registered by plugins, target-specific passes, or passes that are
otherwise registered late are numbered higher than the pass named
@samp{final}, even if they are executed earlier.  The phase letter is
one of @samp{i} (inter-procedural analysis), @samp{l}
(language-specific), @samp{r} (RTL), or @samp{t} (tree). 
The files are created in the directory of the output file. 

@table @gcctabopt

@item -fcallgraph-info
@itemx -fcallgraph-info=@var{MARKERS}
@opindex fcallgraph-info
Makes the compiler output callgraph information for the program, on a
per-object-file basis.  The information is generated in the common VCG
format.  It can be decorated with additional, per-node and/or per-edge
information, if a list of comma-separated markers is additionally
specified.  When the @code{su} marker is specified, the callgraph is
decorated with stack usage information; it is equivalent to
@option{-fstack-usage}.  When the @code{da} marker is specified, the
callgraph is decorated with information about dynamically allocated
objects.

When compiling with @option{-flto}, no callgraph information is output
along with the object file.  At LTO link time, @option{-fcallgraph-info}
may generate multiple callgraph information files next to intermediate
LTO output files.

@item -d@var{letters}
@itemx -fdump-rtl-@var{pass}
@itemx -fdump-rtl-@var{pass}=@var{filename}
@opindex d
@opindex fdump-rtl-@var{pass}
Says to make debugging dumps during compilation at times specified by
@var{letters}.  This is used for debugging the RTL-based passes of the
compiler.

Some @option{-d@var{letters}} switches have different meaning when
@option{-E} is used for preprocessing.  @xref{Preprocessor Options},
for information about preprocessor-specific dump options.

Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
@option{-d} option @var{letters}.  Here are the possible
letters for use in @var{pass} and @var{letters}, and their meanings:

@table @gcctabopt

@item -fdump-rtl-alignments
@opindex fdump-rtl-alignments
Dump after branch alignments have been computed.

@item -fdump-rtl-asmcons
@opindex fdump-rtl-asmcons
Dump after fixing rtl statements that have unsatisfied in/out constraints.

@item -fdump-rtl-auto_inc_dec
@opindex fdump-rtl-auto_inc_dec
Dump after auto-inc-dec discovery.  This pass is only run on
architectures that have auto inc or auto dec instructions.

@item -fdump-rtl-barriers
@opindex fdump-rtl-barriers
Dump after cleaning up the barrier instructions.

@item -fdump-rtl-bbpart
@opindex fdump-rtl-bbpart
Dump after partitioning hot and cold basic blocks.

@item -fdump-rtl-bbro
@opindex fdump-rtl-bbro
Dump after block reordering.

@item -fdump-rtl-btl1
@itemx -fdump-rtl-btl2
@opindex fdump-rtl-btl2
@opindex fdump-rtl-btl2
@option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
after the two branch
target load optimization passes.

@item -fdump-rtl-bypass
@opindex fdump-rtl-bypass
Dump after jump bypassing and control flow optimizations.

@item -fdump-rtl-combine
@opindex fdump-rtl-combine
Dump after the RTL instruction combination pass.

@item -fdump-rtl-compgotos
@opindex fdump-rtl-compgotos
Dump after duplicating the computed gotos.

@item -fdump-rtl-ce1
@itemx -fdump-rtl-ce2
@itemx -fdump-rtl-ce3
@opindex fdump-rtl-ce1
@opindex fdump-rtl-ce2
@opindex fdump-rtl-ce3
@option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
@option{-fdump-rtl-ce3} enable dumping after the three
if conversion passes.

@item -fdump-rtl-cprop_hardreg
@opindex fdump-rtl-cprop_hardreg
Dump after hard register copy propagation.

@item -fdump-rtl-csa
@opindex fdump-rtl-csa
Dump after combining stack adjustments.

@item -fdump-rtl-cse1
@itemx -fdump-rtl-cse2
@opindex fdump-rtl-cse1
@opindex fdump-rtl-cse2
@option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
the two common subexpression elimination passes.

@item -fdump-rtl-dce
@opindex fdump-rtl-dce
Dump after the standalone dead code elimination passes.

@item -fdump-rtl-dbr
@opindex fdump-rtl-dbr
Dump after delayed branch scheduling.

@item -fdump-rtl-dce1
@itemx -fdump-rtl-dce2
@opindex fdump-rtl-dce1
@opindex fdump-rtl-dce2
@option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
the two dead store elimination passes.

@item -fdump-rtl-eh
@opindex fdump-rtl-eh
Dump after finalization of EH handling code.

@item -fdump-rtl-eh_ranges
@opindex fdump-rtl-eh_ranges
Dump after conversion of EH handling range regions.

@item -fdump-rtl-expand
@opindex fdump-rtl-expand
Dump after RTL generation.

@item -fdump-rtl-fwprop1
@itemx -fdump-rtl-fwprop2
@opindex fdump-rtl-fwprop1
@opindex fdump-rtl-fwprop2
@option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
dumping after the two forward propagation passes.

@item -fdump-rtl-gcse1
@itemx -fdump-rtl-gcse2
@opindex fdump-rtl-gcse1
@opindex fdump-rtl-gcse2
@option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
after global common subexpression elimination.

@item -fdump-rtl-init-regs
@opindex fdump-rtl-init-regs
Dump after the initialization of the registers.

@item -fdump-rtl-initvals
@opindex fdump-rtl-initvals
Dump after the computation of the initial value sets.

@item -fdump-rtl-into_cfglayout
@opindex fdump-rtl-into_cfglayout
Dump after converting to cfglayout mode.

@item -fdump-rtl-ira
@opindex fdump-rtl-ira
Dump after iterated register allocation.

@item -fdump-rtl-jump
@opindex fdump-rtl-jump
Dump after the second jump optimization.

@item -fdump-rtl-loop2
@opindex fdump-rtl-loop2
@option{-fdump-rtl-loop2} enables dumping after the rtl
loop optimization passes.

@item -fdump-rtl-mach
@opindex fdump-rtl-mach
Dump after performing the machine dependent reorganization pass, if that
pass exists.

@item -fdump-rtl-mode_sw
@opindex fdump-rtl-mode_sw
Dump after removing redundant mode switches.

@item -fdump-rtl-rnreg
@opindex fdump-rtl-rnreg
Dump after register renumbering.

@item -fdump-rtl-outof_cfglayout
@opindex fdump-rtl-outof_cfglayout
Dump after converting from cfglayout mode.

@item -fdump-rtl-peephole2
@opindex fdump-rtl-peephole2
Dump after the peephole pass.

@item -fdump-rtl-postreload
@opindex fdump-rtl-postreload
Dump after post-reload optimizations.

@item -fdump-rtl-pro_and_epilogue
@opindex fdump-rtl-pro_and_epilogue
Dump after generating the function prologues and epilogues.

@item -fdump-rtl-sched1
@itemx -fdump-rtl-sched2
@opindex fdump-rtl-sched1
@opindex fdump-rtl-sched2
@option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
after the basic block scheduling passes.

@item -fdump-rtl-ree
@opindex fdump-rtl-ree
Dump after sign/zero extension elimination.

@item -fdump-rtl-seqabstr
@opindex fdump-rtl-seqabstr
Dump after common sequence discovery.

@item -fdump-rtl-shorten
@opindex fdump-rtl-shorten
Dump after shortening branches.

@item -fdump-rtl-sibling
@opindex fdump-rtl-sibling
Dump after sibling call optimizations.

@item -fdump-rtl-split1
@itemx -fdump-rtl-split2
@itemx -fdump-rtl-split3
@itemx -fdump-rtl-split4
@itemx -fdump-rtl-split5
@opindex fdump-rtl-split1
@opindex fdump-rtl-split2
@opindex fdump-rtl-split3
@opindex fdump-rtl-split4
@opindex fdump-rtl-split5
These options enable dumping after five rounds of
instruction splitting.

@item -fdump-rtl-sms
@opindex fdump-rtl-sms
Dump after modulo scheduling.  This pass is only run on some
architectures.

@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.  This pass is only run on x86 variants.

@item -fdump-rtl-subreg1
@itemx -fdump-rtl-subreg2
@opindex fdump-rtl-subreg1
@opindex fdump-rtl-subreg2
@option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
the two subreg expansion passes.

@item -fdump-rtl-unshare
@opindex fdump-rtl-unshare
Dump after all rtl has been unshared.

@item -fdump-rtl-vartrack
@opindex fdump-rtl-vartrack
Dump after variable tracking.

@item -fdump-rtl-vregs
@opindex fdump-rtl-vregs
Dump after converting virtual registers to hard registers.

@item -fdump-rtl-web
@opindex fdump-rtl-web
Dump after live range splitting.

@item -fdump-rtl-regclass
@itemx -fdump-rtl-subregs_of_mode_init
@itemx -fdump-rtl-subregs_of_mode_finish
@itemx -fdump-rtl-dfinit
@itemx -fdump-rtl-dfinish
@opindex fdump-rtl-regclass
@opindex fdump-rtl-subregs_of_mode_init
@opindex fdump-rtl-subregs_of_mode_finish
@opindex fdump-rtl-dfinit
@opindex fdump-rtl-dfinish
These dumps are defined but always produce empty files.

@item -da
@itemx -fdump-rtl-all
@opindex da
@opindex fdump-rtl-all
Produce all the dumps listed above.

@item -dA
@opindex dA
Annotate the assembler output with miscellaneous debugging information.

@item -dD
@opindex dD
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.

@item -dH
@opindex dH
Produce a core dump whenever an error occurs.

@item -dp
@opindex dp
Annotate the assembler output with a comment indicating which
pattern and alternative is used.  The length and cost of each instruction are
also printed.

@item -dP
@opindex dP
Dump the RTL in the assembler output as a comment before each instruction.
Also turns on @option{-dp} annotation.

@item -dx
@opindex dx
Just generate RTL for a function instead of compiling it.  Usually used
with @option{-fdump-rtl-expand}.
@end table

@item -fdump-debug
@opindex fdump-debug
Dump debugging information generated during the debug
generation phase.

@item -fdump-earlydebug
@opindex fdump-earlydebug
Dump debugging information generated during the early debug
generation phase.

@item -fdump-noaddr
@opindex fdump-noaddr
When doing debugging dumps, suppress address output.  This makes it more
feasible to use diff on debugging dumps for compiler invocations with
different compiler binaries and/or different
text / bss / data / heap / stack / dso start locations.

@item -freport-bug
@opindex freport-bug
Collect and dump debug information into a temporary file if an
internal compiler error (ICE) occurs.

@item -fdump-unnumbered
@opindex fdump-unnumbered
When doing debugging dumps, suppress instruction numbers and address output.
This makes it more feasible to use diff on debugging dumps for compiler
invocations with different options, in particular with and without
@option{-g}.

@item -fdump-unnumbered-links
@opindex fdump-unnumbered-links
When doing debugging dumps (see @option{-d} option above), suppress
instruction numbers for the links to the previous and next instructions
in a sequence.

@item -fdump-ipa-@var{switch}
@itemx -fdump-ipa-@var{switch}-@var{options}
@opindex fdump-ipa
Control the dumping at various stages of inter-procedural analysis
language tree to a file.  The file name is generated by appending a
switch specific suffix to the source file name, and the file is created
in the same directory as the output file.  The following dumps are
possible:

@table @samp
@item all
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

Additionally, the options @option{-optimized}, @option{-missed},
@option{-note}, and @option{-all} can be provided, with the same meaning
as for @option{-fopt-info}, defaulting to @option{-optimized}.

For example, @option{-fdump-ipa-inline-optimized-missed} will emit
information on callsites that were inlined, along with callsites
that were not inlined.

By default, the dump will contain messages about successful
optimizations (equivalent to @option{-optimized}) together with
low-level details about the analysis.

@item -fdump-lang
@opindex fdump-lang
Dump language-specific information.  The file name is made by appending
@file{.lang} to the source file name.

@item -fdump-lang-all
@itemx -fdump-lang-@var{switch}
@itemx -fdump-lang-@var{switch}-@var{options}
@itemx -fdump-lang-@var{switch}-@var{options}=@var{filename}
@opindex fdump-lang-all
@opindex fdump-lang
Control the dumping of language-specific information.  The @var{options}
and @var{filename} portions behave as described in the
@option{-fdump-tree} option.  The following @var{switch} values are
accepted:

@table @samp
@item all

Enable all language-specific dumps.

@item class
Dump class hierarchy information.  Virtual table information is emitted
unless '@option{slim}' is specified.  This option is applicable to C++ only.

@item module
Dump module information.  Options @option{lineno} (locations),
@option{graph} (reachability), @option{blocks} (clusters),
@option{uid} (serialization), @option{alias} (mergeable),
@option{asmname} (Elrond), @option{eh} (mapper) & @option{vops}
(macros) may provide additional information.  This option is
applicable to C++ only.

@item raw
Dump the raw internal tree data.  This option is applicable to C++ only.

@end table

@item -fdump-passes
@opindex fdump-passes
Print on @file{stderr} the list of optimization passes that are turned
on and off by the current command-line options.

@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, and the file is created in
the same directory as the output file.  If the @samp{-@var{option}}
form is used, @samp{-stats} causes counters to be summed over the
whole compilation unit while @samp{-details} dumps every event as
the passes generate them.  The default with no option is to sum
counters for each function compiled.

@item -fdump-tree-all
@itemx -fdump-tree-@var{switch}
@itemx -fdump-tree-@var{switch}-@var{options}
@itemx -fdump-tree-@var{switch}-@var{options}=@var{filename}
@opindex fdump-tree-all
@opindex fdump-tree
Control the dumping at various stages of processing the intermediate
language tree to a file.  If the @samp{-@var{options}}
form is used, @var{options} is a list of @samp{-} separated options
which control the details of the dump.  Not all options are applicable
to all dumps; those that are not meaningful are ignored.  The
following options are available

@table @samp
@item address
Print the address of each node.  Usually this is not meaningful as it
changes according to the environment and source file.  Its primary use
is for tying up a dump file with a debug environment.
@item asmname
If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
use working backward from mangled names in the assembly file.
@item slim
When dumping front-end intermediate representations, inhibit dumping
of members of a scope or body of a function merely because that scope
has been reached.  Only dump such items when they are directly reachable
by some other path.

When dumping pretty-printed trees, this option inhibits dumping the
bodies of control structures.

When dumping RTL, print the RTL in slim (condensed) form instead of
the default LISP-like representation.
@item raw
Print a raw representation of the tree.  By default, trees are
pretty-printed into a C-like representation.
@item details
Enable more detailed dumps (not honored by every dump option). Also
include information from the optimization passes.
@item stats
Enable dumping various statistics about the pass (not honored by every dump
option).
@item blocks
Enable showing basic block boundaries (disabled in raw dumps).
@item graph
For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
dump a representation of the control flow graph suitable for viewing with
GraphViz to @file{@var{file}.@var{passid}.@var{pass}.dot}.  Each function in
the file is pretty-printed as a subgraph, so that GraphViz can render them
all in a single plot.

This option currently only works for RTL dumps, and the RTL is always
dumped in slim form.
@item vops
Enable showing virtual operands for every statement.
@item lineno
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 eh
Enable showing the EH region number holding each statement.
@item scev
Enable showing scalar evolution analysis details.
@item optimized
Enable showing optimization information (only available in certain
passes).
@item missed
Enable showing missed optimization information (only available in certain
passes).
@item note
Enable other detailed optimization information (only available in
certain passes).
@item all
Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
and @option{lineno}.
@item optall
Turn on all optimization options, i.e., @option{optimized},
@option{missed}, and @option{note}.
@end table

To determine what tree dumps are available or find the dump for a pass
of interest follow the steps below.

@enumerate
@item
Invoke GCC with @option{-fdump-passes} and in the @file{stderr} output
look for a code that corresponds to the pass you are interested in.
For example, the codes @code{tree-evrp}, @code{tree-vrp1}, and
@code{tree-vrp2} correspond to the three Value Range Propagation passes.
The number at the end distinguishes distinct invocations of the same pass.
@item
To enable the creation of the dump file, append the pass code to
the @option{-fdump-} option prefix and invoke GCC with it.  For example,
to enable the dump from the Early Value Range Propagation pass, invoke
GCC with the @option{-fdump-tree-evrp} option.  Optionally, you may
specify the name of the dump file.  If you don't specify one, GCC
creates as described below.
@item
Find the pass dump in a file whose name is composed of three components
separated by a period: the name of the source file GCC was invoked to
compile, a numeric suffix indicating the pass number followed by the
letter @samp{t} for tree passes (and the letter @samp{r} for RTL passes),
and finally the pass code.  For example, the Early VRP pass dump might
be in a file named @file{myfile.c.038t.evrp} in the current working
directory.  Note that the numeric codes are not stable and may change
from one version of GCC to another.
@end enumerate

@item -fopt-info
@itemx -fopt-info-@var{options}
@itemx -fopt-info-@var{options}=@var{filename}
@opindex fopt-info
Controls optimization dumps from various optimization passes. If the
@samp{-@var{options}} form is used, @var{options} is a list of
@samp{-} separated option keywords to select the dump details and
optimizations.  

The @var{options} can be divided into three groups:
@enumerate
@item
options describing what kinds of messages should be emitted,
@item
options describing the verbosity of the dump, and
@item
options describing which optimizations should be included.
@end enumerate
The options from each group can be freely mixed as they are
non-overlapping. However, in case of any conflicts,
the later options override the earlier options on the command
line. 

The following options control which kinds of messages should be emitted:

@table @samp
@item optimized
Print information when an optimization is successfully applied. It is
up to a pass to decide which information is relevant. For example, the
vectorizer passes print the source location of loops which are
successfully vectorized.
@item missed
Print information about missed optimizations. Individual passes
control which information to include in the output. 
@item note
Print verbose information about optimizations, such as certain
transformations, more detailed messages about decisions etc.
@item all
Print detailed optimization information. This includes
@samp{optimized}, @samp{missed}, and @samp{note}.
@end table

The following option controls the dump verbosity:

@table @samp
@item internals
By default, only ``high-level'' messages are emitted. This option enables
additional, more detailed, messages, which are likely to only be of interest
to GCC developers.
@end table

One or more of the following option keywords can be used to describe a
group of optimizations:

@table @samp
@item ipa
Enable dumps from all interprocedural optimizations.
@item loop
Enable dumps from all loop optimizations.
@item inline
Enable dumps from all inlining optimizations.
@item omp
Enable dumps from all OMP (Offloading and Multi Processing) optimizations.
@item vec
Enable dumps from all vectorization optimizations.
@item optall
Enable dumps from all optimizations. This is a superset of
the optimization groups listed above.
@end table

If @var{options} is
omitted, it defaults to @samp{optimized-optall}, which means to dump messages
about successful optimizations from all the passes, omitting messages
that are treated as ``internals''.

If the @var{filename} is provided, then the dumps from all the
applicable optimizations are concatenated into the @var{filename}.
Otherwise the dump is output onto @file{stderr}. Though multiple
@option{-fopt-info} options are accepted, only one of them can include
a @var{filename}. If other filenames are provided then all but the
first such option are ignored.

Note that the output @var{filename} is overwritten
in case of multiple translation units. If a combined output from
multiple translation units is desired, @file{stderr} should be used
instead.

In the following example, the optimization info is output to
@file{stderr}:

@smallexample
gcc -O3 -fopt-info
@end smallexample

This example:
@smallexample
gcc -O3 -fopt-info-missed=missed.all
@end smallexample

@noindent
outputs missed optimization report from all the passes into
@file{missed.all}, and this one:

@smallexample
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
@end smallexample

@noindent
prints information about missed optimization opportunities from
vectorization passes on @file{stderr}.  
Note that @option{-fopt-info-vec-missed} is equivalent to 
@option{-fopt-info-missed-vec}.  The order of the optimization group
names and message types listed after @option{-fopt-info} does not matter.

As another example,
@smallexample
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
@end smallexample

@noindent
outputs information about missed optimizations as well as
optimized locations from all the inlining passes into
@file{inline.txt}.

Finally, consider:

@smallexample
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
@end smallexample

@noindent
Here the two output filenames @file{vec.miss} and @file{loop.opt} are
in conflict since only one output file is allowed. In this case, only
the first option takes effect and the subsequent options are
ignored. Thus only @file{vec.miss} is produced which contains
dumps from the vectorizer about missed opportunities.

@item -fsave-optimization-record
@opindex fsave-optimization-record
Write a SRCFILE.opt-record.json.gz file detailing what optimizations
were performed, for those optimizations that support @option{-fopt-info}.

This option is experimental and the format of the data within the
compressed JSON file is subject to change.

It is roughly equivalent to a machine-readable version of
@option{-fopt-info-all}, as a collection of messages with source file,
line number and column number, with the following additional data for
each message:

@itemize @bullet

@item
the execution count of the code being optimized, along with metadata about
whether this was from actual profile data, or just an estimate, allowing
consumers to prioritize messages by code hotness,

@item
the function name of the code being optimized, where applicable,

@item
the ``inlining chain'' for the code being optimized, so that when
a function is inlined into several different places (which might
themselves be inlined), the reader can distinguish between the copies,

@item
objects identifying those parts of the message that refer to expressions,
statements or symbol-table nodes, which of these categories they are, and,
when available, their source code location,

@item
the GCC pass that emitted the message, and

@item
the location in GCC's own code from which the message was emitted

@end itemize

Additionally, some messages are logically nested within other
messages, reflecting implementation details of the optimization
passes.

@item -fsched-verbose=@var{n}
@opindex fsched-verbose
On targets that use instruction scheduling, this option controls the
amount of debugging output the scheduler prints to the dump files.

For @var{n} greater than zero, @option{-fsched-verbose} outputs the
same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
For @var{n} greater than one, it also output basic block probabilities,
detailed ready list information and unit/insn info.  For @var{n} greater
than two, it includes RTL at abort point, control-flow and regions info.
And for @var{n} over four, @option{-fsched-verbose} also includes
dependence info.



@item -fenable-@var{kind}-@var{pass}
@itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
@opindex fdisable-
@opindex fenable-

This is a set of options that are used to explicitly disable/enable
optimization passes.  These options are intended for use for debugging GCC.
Compiler users should use regular options for enabling/disabling
passes instead.

@table @gcctabopt

@item -fdisable-ipa-@var{pass}
Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
statically invoked in the compiler multiple times, the pass name should be
appended with a sequential number starting from 1.

@item -fdisable-rtl-@var{pass}
@itemx -fdisable-rtl-@var{pass}=@var{range-list}
Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
statically invoked in the compiler multiple times, the pass name should be
appended with a sequential number starting from 1.  @var{range-list} is a 
comma-separated list of function ranges or assembler names.  Each range is a number
pair separated by a colon.  The range is inclusive in both ends.  If the range
is trivial, the number pair can be simplified as a single number.  If the
function's call graph node's @var{uid} falls within one of the specified ranges,
the @var{pass} is disabled for that function.  The @var{uid} is shown in the
function header of a dump file, and the pass names can be dumped by using
option @option{-fdump-passes}.

@item -fdisable-tree-@var{pass}
@itemx -fdisable-tree-@var{pass}=@var{range-list}
Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
option arguments.

@item -fenable-ipa-@var{pass}
Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
statically invoked in the compiler multiple times, the pass name should be
appended with a sequential number starting from 1.

@item -fenable-rtl-@var{pass}
@itemx -fenable-rtl-@var{pass}=@var{range-list}
Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
description and examples.

@item -fenable-tree-@var{pass}
@itemx -fenable-tree-@var{pass}=@var{range-list}
Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
of option arguments.

@end table

Here are some examples showing uses of these options.

@smallexample

# disable ccp1 for all functions
   -fdisable-tree-ccp1
# disable complete unroll for function whose cgraph node uid is 1
   -fenable-tree-cunroll=1
# disable gcse2 for functions at the following ranges [1,1],
# [300,400], and [400,1000]
# disable gcse2 for functions foo and foo2
   -fdisable-rtl-gcse2=foo,foo2
# disable early inlining
   -fdisable-tree-einline
# disable ipa inlining
   -fdisable-ipa-inline
# enable tree full unroll
   -fenable-tree-unroll

@end smallexample

@item -fchecking
@itemx -fchecking=@var{n}
@opindex fchecking
@opindex fno-checking
Enable internal consistency checking.  The default depends on
the compiler configuration.  @option{-fchecking=2} enables further
internal consistency checking that might affect code generation.

@item -frandom-seed=@var{string}
@opindex frandom-seed
This option provides a seed that GCC uses in place of
random numbers in generating certain symbol names
that have to be different in every compiled file.  It is also used to
place unique stamps in coverage data files and the object files that
produce them.  You can use the @option{-frandom-seed} option to produce
reproducibly identical object files.

The @var{string} can either be a number (decimal, octal or hex) or an
arbitrary string (in which case it's converted to a number by
computing CRC32).

The @var{string} should be different for every file you compile.

@item -save-temps
@opindex save-temps
Store the usual ``temporary'' intermediate files permanently; name them
as auxiliary output files, as specified described under
@option{-dumpbase} and @option{-dumpdir}.

When used in combination with the @option{-x} command-line option,
@option{-save-temps} is sensible enough to avoid overwriting an
input source file with the same extension as an intermediate file.
The corresponding intermediate file may be obtained by renaming the
source file before using @option{-save-temps}.

@item -save-temps=cwd
@opindex save-temps=cwd
Equivalent to @option{-save-temps -dumpdir ./}.

@item -save-temps=obj
@opindex save-temps=obj
Equivalent to @option{-save-temps -dumpdir @file{outdir/}}, where
@file{outdir/} is the directory of the output file specified after the
@option{-o} option, including any directory separators.  If the
@option{-o} option is not used, the @option{-save-temps=obj} switch
behaves like @option{-save-temps=cwd}.

@item -time@r{[}=@var{file}@r{]}
@opindex time
Report the CPU time taken by each subprocess in the compilation
sequence.  For C source files, this is the compiler proper and assembler
(plus the linker if linking is done).

Without the specification of an output file, the output looks like this:

@smallexample
# cc1 0.12 0.01
# as 0.00 0.01
@end smallexample

The first number on each line is the ``user time'', that is time spent
executing the program itself.  The second number is ``system time'',
time spent executing operating system routines on behalf of the program.
Both numbers are in seconds.

With the specification of an output file, the output is appended to the
named file, and it looks like this:

@smallexample
0.12 0.01 cc1 @var{options}
0.00 0.01 as @var{options}
@end smallexample

The ``user time'' and the ``system time'' are moved before the program
name, and the options passed to the program are displayed, so that one
can later tell what file was being compiled, and with which options.

@item -fdump-final-insns@r{[}=@var{file}@r{]}
@opindex fdump-final-insns
Dump the final internal representation (RTL) to @var{file}.  If the
optional argument is omitted (or if @var{file} is @code{.}), the name
of the dump file is determined by appending @code{.gkd} to the
dump base name, see @option{-dumpbase}.

@item -fcompare-debug@r{[}=@var{opts}@r{]}
@opindex fcompare-debug
@opindex fno-compare-debug
If no error occurs during compilation, run the compiler a second time,
adding @var{opts} and @option{-fcompare-debug-second} to the arguments
passed to the second compilation.  Dump the final internal
representation in both compilations, and print an error if they differ.

If the equal sign is omitted, the default @option{-gtoggle} is used.

The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
and nonzero, implicitly enables @option{-fcompare-debug}.  If
@env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
then it is used for @var{opts}, otherwise the default @option{-gtoggle}
is used.

@option{-fcompare-debug=}, with the equal sign but without @var{opts},
is equivalent to @option{-fno-compare-debug}, which disables the dumping
of the final representation and the second compilation, preventing even
@env{GCC_COMPARE_DEBUG} from taking effect.

To verify full coverage during @option{-fcompare-debug} testing, set
@env{GCC_COMPARE_DEBUG} to say @option{-fcompare-debug-not-overridden},
which GCC rejects as an invalid option in any actual compilation
(rather than preprocessing, assembly or linking).  To get just a
warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
not overridden} will do.

@item -fcompare-debug-second
@opindex fcompare-debug-second
This option is implicitly passed to the compiler for the second
compilation requested by @option{-fcompare-debug}, along with options to
silence warnings, and omitting other options that would cause the compiler
to produce output to files or to standard output as a side effect.  Dump
files and preserved temporary files are renamed so as to contain the
@code{.gk} additional extension during the second compilation, to avoid
overwriting those generated by the first.

When this option is passed to the compiler driver, it causes the
@emph{first} compilation to be skipped, which makes it useful for little
other than debugging the compiler proper.

@item -gtoggle
@opindex gtoggle
Turn off generation of debug info, if leaving out this option
generates it, or turn it on at level 2 otherwise.  The position of this
argument in the command line does not matter; it takes effect after all
other options are processed, and it does so only once, no matter how
many times it is given.  This is mainly intended to be used with
@option{-fcompare-debug}.

@item -fvar-tracking-assignments-toggle
@opindex fvar-tracking-assignments-toggle
@opindex fno-var-tracking-assignments-toggle
Toggle @option{-fvar-tracking-assignments}, in the same way that
@option{-gtoggle} toggles @option{-g}.

@item -Q
@opindex Q
Makes the compiler print out each function name as it is compiled, and
print some statistics about each pass when it finishes.

@item -ftime-report
@opindex ftime-report
Makes the compiler print some statistics about the time consumed by each
pass when it finishes.

@item -ftime-report-details
@opindex ftime-report-details
Record the time consumed by infrastructure parts separately for each pass.

@item -fira-verbose=@var{n}
@opindex fira-verbose
Control the verbosity of the dump file for the integrated register allocator.
The default value is 5.  If the value @var{n} is greater or equal to 10,
the dump output is sent to stderr using the same format as @var{n} minus 10.

@item -flto-report
@opindex flto-report
Prints a report with internal details on the workings of the link-time
optimizer.  The contents of this report vary from version to version.
It is meant to be useful to GCC developers when processing object
files in LTO mode (via @option{-flto}).

Disabled by default.

@item -flto-report-wpa
@opindex flto-report-wpa
Like @option{-flto-report}, but only print for the WPA phase of link-time
optimization.

@item -fmem-report
@opindex fmem-report
Makes the compiler print some statistics about permanent memory
allocation when it finishes.

@item -fmem-report-wpa
@opindex fmem-report-wpa
Makes the compiler print some statistics about permanent memory
allocation for the WPA phase only.

@item -fpre-ipa-mem-report
@opindex fpre-ipa-mem-report
@item -fpost-ipa-mem-report
@opindex fpost-ipa-mem-report
Makes the compiler print some statistics about permanent memory
allocation before or after interprocedural optimization.

@item -fprofile-report
@opindex fprofile-report
Makes the compiler print some statistics about consistency of the
(estimated) profile and effect of individual passes.

@item -fstack-usage
@opindex fstack-usage
Makes the compiler output stack usage information for the program, on a
per-function basis.  The filename for the dump is made by appending
@file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
the output file, if explicitly specified and it is not an executable,
otherwise it is the basename of the source file.  An entry is made up
of three fields:

@itemize
@item
The name of the function.
@item
A number of bytes.
@item
One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
@end itemize

The qualifier @code{static} means that the function manipulates the stack
statically: a fixed number of bytes are allocated for the frame on function
entry and released on function exit; no stack adjustments are otherwise made
in the function.  The second field is this fixed number of bytes.

The qualifier @code{dynamic} means that the function manipulates the stack
dynamically: in addition to the static allocation described above, stack
adjustments are made in the body of the function, for example to push/pop
arguments around function calls.  If the qualifier @code{bounded} is also
present, the amount of these adjustments is bounded at compile time and
the second field is an upper bound of the total amount of stack used by
the function.  If it is not present, the amount of these adjustments is
not bounded at compile time and the second field only represents the
bounded part.

@item -fstats
@opindex fstats
Emit statistics about front-end processing at the end of the compilation.
This option is supported only by the C++ front end, and
the information is generally only useful to the G++ development team.

@item -fdbg-cnt-list
@opindex fdbg-cnt-list
Print the name and the counter upper bound for all debug counters.


@item -fdbg-cnt=@var{counter-value-list}
@opindex fdbg-cnt
Set the internal debug counter lower and upper bound.  @var{counter-value-list}
is a comma-separated list of @var{name}:@var{lower_bound1}-@var{upper_bound1}
[:@var{lower_bound2}-@var{upper_bound2}...] tuples which sets
the name of the counter and list of closed intervals.
The @var{lower_bound} is optional and is zero
initialized if not set.
For example, with @option{-fdbg-cnt=dce:2-4:10-11,tail_call:10},
@code{dbg_cnt(dce)} returns true only for second, third, fourth, tenth and
eleventh invocation.
For @code{dbg_cnt(tail_call)} true is returned for first 10 invocations.

@item -print-file-name=@var{library}
@opindex print-file-name
Print the full absolute name of the library file @var{library} that
would be used when linking---and don't do anything else.  With this
option, GCC does not compile or link anything; it just prints the
file name.

@item -print-multi-directory
@opindex print-multi-directory
Print the directory name corresponding to the multilib selected by any
other switches present in the command line.  This directory is supposed
to exist in @env{GCC_EXEC_PREFIX}.

@item -print-multi-lib
@opindex print-multi-lib
Print the mapping from multilib directory names to compiler switches
that enable them.  The directory name is separated from the switches by
@samp{;}, and each switch starts with an @samp{@@} instead of the
@samp{-}, without spaces between multiple switches.  This is supposed to
ease shell processing.

@item -print-multi-os-directory
@opindex print-multi-os-directory
Print the path to OS libraries for the selected
multilib, relative to some @file{lib} subdirectory.  If OS libraries are
present in the @file{lib} subdirectory and no multilibs are used, this is
usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
@file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.

@item -print-multiarch
@opindex print-multiarch
Print the path to OS libraries for the selected multiarch,
relative to some @file{lib} subdirectory.

@item -print-prog-name=@var{program}
@opindex print-prog-name
Like @option{-print-file-name}, but searches for a program such as @command{cpp}.

@item -print-libgcc-file-name
@opindex print-libgcc-file-name
Same as @option{-print-file-name=libgcc.a}.

This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
but you do want to link with @file{libgcc.a}.  You can do:

@smallexample
gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
@end smallexample

@item -print-search-dirs
@opindex print-search-dirs
Print the name of the configured installation directory and a list of
program and library directories @command{gcc} searches---and don't do anything else.

This is useful when @command{gcc} prints the error message
@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 @command{gcc} expects to find them, or you can set the environment
variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
Don't forget the trailing @samp{/}.
@xref{Environment Variables}.

@item -print-sysroot
@opindex print-sysroot
Print the target sysroot directory that is used during
compilation.  This is the target sysroot specified either at configure
time or using the @option{--sysroot} option, possibly with an extra
suffix that depends on compilation options.  If no target sysroot is
specified, the option prints nothing.

@item -print-sysroot-headers-suffix
@opindex print-sysroot-headers-suffix
Print the suffix added to the target sysroot when searching for
headers, or give an error if the compiler is not configured with such
a suffix---and don't do anything else.

@item -dumpmachine
@opindex dumpmachine
Print the compiler's target machine (for example,
@samp{i686-pc-linux-gnu})---and don't do anything else.

@item -dumpversion
@opindex dumpversion
Print the compiler version (for example, @code{3.0}, @code{6.3.0} or @code{7})---and don't do
anything else.  This is the compiler version used in filesystem paths and
specs. Depending on how the compiler has been configured it can be just
a single number (major version), two numbers separated by a dot (major and
minor version) or three numbers separated by dots (major, minor and patchlevel
version).

@item -dumpfullversion
@opindex dumpfullversion
Print the full compiler version---and don't do anything else. The output is
always three numbers separated by dots, major, minor and patchlevel version.

@item -dumpspecs
@opindex dumpspecs
Print the compiler's built-in specs---and don't do anything else.  (This
is used when GCC itself is being built.)  @xref{Spec Files}.
@end table

@node Submodel Options
@section Machine-Dependent Options
@cindex submodel options
@cindex specifying hardware config
@cindex hardware models and configurations, specifying
@cindex target-dependent options
@cindex machine-dependent options

Each target machine supported by GCC can have its own options---for
example, to allow you to compile for a particular processor variant or
ABI, or to control optimizations specific to that machine.  By
convention, the names of machine-specific options start with
@samp{-m}.

Some configurations of the compiler also support additional target-specific
options, usually for compatibility with other compilers on the same
platform.

@c This list is ordered alphanumerically by subsection name.
@c It should be the same order and spelling as these options are listed
@c in Machine Dependent Options

@menu
* AArch64 Options::
* Adapteva Epiphany Options::
* AMD GCN Options::
* ARC Options::
* ARM Options::
* AVR Options::
* Blackfin Options::
* C6X Options::
* CRIS Options::
* CR16 Options::
* C-SKY Options::
* Darwin Options::
* DEC Alpha Options::
* eBPF Options::
* FR30 Options::
* FT32 Options::
* FRV Options::
* GNU/Linux Options::
* H8/300 Options::
* HPPA Options::
* IA-64 Options::
* LM32 Options::
* M32C Options::
* M32R/D Options::
* M680x0 Options::
* MCore Options::
* MeP Options::
* MicroBlaze Options::
* MIPS Options::
* MMIX Options::
* MN10300 Options::
* Moxie Options::
* MSP430 Options::
* NDS32 Options::
* Nios II Options::
* Nvidia PTX Options::
* OpenRISC Options::
* PDP-11 Options::
* picoChip Options::
* PowerPC Options::
* PRU Options::
* RISC-V Options::
* RL78 Options::
* RS/6000 and PowerPC Options::
* RX Options::
* S/390 and zSeries Options::
* Score Options::
* SH Options::
* Solaris 2 Options::
* SPARC Options::
* System V Options::
* TILE-Gx Options::
* TILEPro Options::
* V850 Options::
* VAX Options::
* Visium Options::
* VMS Options::
* VxWorks Options::
* x86 Options::
* x86 Windows Options::
* Xstormy16 Options::
* Xtensa Options::
* zSeries Options::
@end menu

@node AArch64 Options
@subsection AArch64 Options
@cindex AArch64 Options

These options are defined for AArch64 implementations:

@table @gcctabopt

@item -mabi=@var{name}
@opindex mabi
Generate code for the specified data model.  Permissible values
are @samp{ilp32} for SysV-like data model where int, long int and pointers
are 32 bits, and @samp{lp64} for SysV-like data model where int is 32 bits,
but long int and pointers are 64 bits.

The default depends on the specific target configuration.  Note that
the LP64 and ILP32 ABIs are not link-compatible; you must compile your
entire program with the same ABI, and link with a compatible set of libraries.

@item -mbig-endian
@opindex mbig-endian
Generate big-endian code.  This is the default when GCC is configured for an
@samp{aarch64_be-*-*} target.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code which uses only the general-purpose registers.  This will prevent
the compiler from using floating-point and Advanced SIMD registers but will not
impose any restrictions on the assembler.

@item -mlittle-endian
@opindex mlittle-endian
Generate little-endian code.  This is the default when GCC is configured for an
@samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.

@item -mcmodel=tiny
@opindex mcmodel=tiny
Generate code for the tiny code model.  The program and its statically defined
symbols must be within 1MB of each other.  Programs can be statically or
dynamically linked.

@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small code model.  The program and its statically defined
symbols must be within 4GB of each other.  Programs can be statically or
dynamically linked.  This is the default code model.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large code model.  This makes no assumptions about
addresses and sizes of sections.  Programs can be statically linked only.  The
@option{-mcmodel=large} option is incompatible with @option{-mabi=ilp32},
@option{-fpic} and @option{-fPIC}.

@item -mstrict-align
@itemx -mno-strict-align
@opindex mstrict-align
@opindex mno-strict-align
Avoid or allow generating memory accesses that may not be aligned on a natural
object boundary as described in the architecture specification.

@item -momit-leaf-frame-pointer
@itemx -mno-omit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
@opindex mno-omit-leaf-frame-pointer
Omit or keep the frame pointer in leaf functions.  The former behavior is the
default.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for a global canary or @samp{sysreg} for a
canary in an appropriate system register.

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which system register to use as base register for reading the canary,
and from what offset from that base register. There is no default
register or offset as this is entirely for use within the Linux
kernel.

@item -mtls-dialect=desc
@opindex mtls-dialect=desc
Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
of TLS variables.  This is the default.

@item -mtls-dialect=traditional
@opindex mtls-dialect=traditional
Use traditional TLS as the thread-local storage mechanism for dynamic accesses
of TLS variables.

@item -mtls-size=@var{size}
@opindex mtls-size
Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
This option requires binutils 2.26 or newer.

@item -mfix-cortex-a53-835769
@itemx -mno-fix-cortex-a53-835769
@opindex mfix-cortex-a53-835769
@opindex mno-fix-cortex-a53-835769
Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
This involves inserting a NOP instruction between memory instructions and
64-bit integer multiply-accumulate instructions.

@item -mfix-cortex-a53-843419
@itemx -mno-fix-cortex-a53-843419
@opindex mfix-cortex-a53-843419
@opindex mno-fix-cortex-a53-843419
Enable or disable the workaround for the ARM Cortex-A53 erratum number 843419.
This erratum workaround is made at link time and this will only pass the
corresponding flag to the linker.

@item -mlow-precision-recip-sqrt
@itemx -mno-low-precision-recip-sqrt
@opindex mlow-precision-recip-sqrt
@opindex mno-low-precision-recip-sqrt
Enable or disable the reciprocal square root approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of reciprocal square root results to about 16 bits for
single precision and to 32 bits for double precision.

@item -mlow-precision-sqrt
@itemx -mno-low-precision-sqrt
@opindex mlow-precision-sqrt
@opindex mno-low-precision-sqrt
Enable or disable the square root approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of square root results to about 16 bits for
single precision and to 32 bits for double precision.
If enabled, it implies @option{-mlow-precision-recip-sqrt}.

@item -mlow-precision-div
@itemx -mno-low-precision-div
@opindex mlow-precision-div
@opindex mno-low-precision-div
Enable or disable the division approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of division results to about 16 bits for
single precision and to 32 bits for double precision.

@item -mtrack-speculation
@itemx -mno-track-speculation
Enable or disable generation of additional code to track speculative
execution through conditional branches.  The tracking state can then
be used by the compiler when expanding calls to
@code{__builtin_speculation_safe_copy} to permit a more efficient code
sequence to be generated.

@item -moutline-atomics
@itemx -mno-outline-atomics
Enable or disable calls to out-of-line helpers to implement atomic operations.
These helpers will, at runtime, determine if the LSE instructions from
ARMv8.1-A can be used; if not, they will use the load/store-exclusive
instructions that are present in the base ARMv8.0 ISA.

This option is only applicable when compiling for the base ARMv8.0
instruction set.  If using a later revision, e.g. @option{-march=armv8.1-a}
or @option{-march=armv8-a+lse}, the ARMv8.1-Atomics instructions will be
used directly.  The same applies when using @option{-mcpu=} when the
selected cpu supports the @samp{lse} feature.
This option is on by default.

@item -march=@var{name}
@opindex march
Specify the name of the target architecture and, optionally, one or
more feature modifiers.  This option has the form
@option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}.

The table below summarizes the permissible values for @var{arch}
and the features that they enable by default:

@multitable @columnfractions 0.20 0.20 0.60
@headitem @var{arch} value @tab Architecture @tab Includes by default
@item @samp{armv8-a} @tab Armv8-A @tab @samp{+fp}, @samp{+simd}
@item @samp{armv8.1-a} @tab Armv8.1-A @tab @samp{armv8-a}, @samp{+crc}, @samp{+lse}, @samp{+rdma}
@item @samp{armv8.2-a} @tab Armv8.2-A @tab @samp{armv8.1-a}
@item @samp{armv8.3-a} @tab Armv8.3-A @tab @samp{armv8.2-a}, @samp{+pauth}
@item @samp{armv8.4-a} @tab Armv8.4-A @tab @samp{armv8.3-a}, @samp{+flagm}, @samp{+fp16fml}, @samp{+dotprod}
@item @samp{armv8.5-a} @tab Armv8.5-A @tab @samp{armv8.4-a}, @samp{+sb}, @samp{+ssbs}, @samp{+predres}
@item @samp{armv8.6-a} @tab Armv8.6-A @tab @samp{armv8.5-a}, @samp{+bf16}, @samp{+i8mm}
@item @samp{armv8.7-a} @tab Armv8.7-A @tab @samp{armv8.6-a}, @samp{+ls64}
@item @samp{armv9-a} @tab Armv9-A @tab @samp{armv8.5-a}, @samp{+sve}, @samp{+sve2}
@item @samp{armv8-r} @tab Armv8-R @tab @samp{armv8-r}
@end multitable

The value @samp{native} is available on native AArch64 GNU/Linux and
causes the compiler to pick the architecture of the host system.  This
option has no effect if the compiler is unable to recognize the
architecture of the host system,

The permissible values for @var{feature} are listed in the sub-section
on @ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
Feature Modifiers}.  Where conflicting feature modifiers are
specified, the right-most feature is used.

GCC uses @var{name} to determine what kind of instructions it can emit
when generating assembly code.  If @option{-march} is specified
without either of @option{-mtune} or @option{-mcpu} also being
specified, the code is tuned to perform well across a range of target
processors implementing the target architecture.

@item -mtune=@var{name}
@opindex mtune
Specify the name of the target processor for which GCC should tune the
performance of the code.  Permissible values for this option are:
@samp{generic}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55},
@samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75},
@samp{cortex-a76}, @samp{cortex-a76ae}, @samp{cortex-a77},
@samp{cortex-a65}, @samp{cortex-a65ae}, @samp{cortex-a34},
@samp{cortex-a78}, @samp{cortex-a78ae}, @samp{cortex-a78c},
@samp{ares}, @samp{exynos-m1}, @samp{emag}, @samp{falkor},
@samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1},
@samp{neoverse-n2}, @samp{neoverse-v1}, @samp{qdf24xx},
@samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan},
@samp{octeontx}, @samp{octeontx81},  @samp{octeontx83},
@samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96}
@samp{octeontx2t93}, @samp{octeontx2f95}, @samp{octeontx2f95n},
@samp{octeontx2f95mm},
@samp{a64fx},
@samp{thunderx}, @samp{thunderxt88},
@samp{thunderxt88p1}, @samp{thunderxt81}, @samp{tsv110},
@samp{thunderxt83}, @samp{thunderx2t99}, @samp{thunderx3t110}, @samp{zeus},
@samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55},
@samp{cortex-r82}, @samp{cortex-x1}, @samp{cortex-x2},
@samp{cortex-a510}, @samp{cortex-a710}, @samp{native}.

The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55} specify that GCC
should tune for a big.LITTLE system.

The value @samp{neoverse-512tvb} specifies that GCC should tune
for Neoverse cores that (a) implement SVE and (b) have a total vector
bandwidth of 512 bits per cycle.  In other words, the option tells GCC to
tune for Neoverse cores that can execute 4 128-bit Advanced SIMD arithmetic
instructions a cycle and that can execute an equivalent number of SVE
arithmetic instructions per cycle (2 for 256-bit SVE, 4 for 128-bit SVE).
This is more general than tuning for a specific core like Neoverse V1
but is more specific than the default tuning described below.

Additionally on native AArch64 GNU/Linux systems the value
@samp{native} tunes performance to the host system.  This option has no effect
if the compiler is unable to recognize the processor of the host system.

Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
are specified, the code is tuned to perform well across a range
of target processors.

This option cannot be suffixed by feature modifiers.

@item -mcpu=@var{name}
@opindex mcpu
Specify the name of the target processor, optionally suffixed by one
or more feature modifiers.  This option has the form
@option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where
the permissible values for @var{cpu} are the same as those available
for @option{-mtune}.  The permissible values for @var{feature} are
documented in the sub-section on
@ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
Feature Modifiers}.  Where conflicting feature modifiers are
specified, the right-most feature is used.

GCC uses @var{name} to determine what kind of instructions it can emit when
generating assembly code (as if by @option{-march}) and to determine
the target processor for which to tune for performance (as if
by @option{-mtune}).  Where this option is used in conjunction
with @option{-march} or @option{-mtune}, those options take precedence
over the appropriate part of this option.

@option{-mcpu=neoverse-512tvb} is special in that it does not refer
to a specific core, but instead refers to all Neoverse cores that
(a) implement SVE and (b) have a total vector bandwidth of 512 bits
a cycle.  Unless overridden by @option{-march},
@option{-mcpu=neoverse-512tvb} generates code that can run on a
Neoverse V1 core, since Neoverse V1 is the first Neoverse core with
these properties.  Unless overridden by @option{-mtune},
@option{-mcpu=neoverse-512tvb} tunes code in the same way as for
@option{-mtune=neoverse-512tvb}.

@item -moverride=@var{string}
@opindex moverride
Override tuning decisions made by the back-end in response to a
@option{-mtune=} switch.  The syntax, semantics, and accepted values
for @var{string} in this option are not guaranteed to be consistent
across releases.

This option is only intended to be useful when developing GCC.

@item -mverbose-cost-dump
@opindex mverbose-cost-dump
Enable verbose cost model dumping in the debug dump files.  This option is
provided for use in debugging the compiler.

@item -mpc-relative-literal-loads
@itemx -mno-pc-relative-literal-loads
@opindex mpc-relative-literal-loads
@opindex mno-pc-relative-literal-loads
Enable or disable PC-relative literal loads.  With this option literal pools are
accessed using a single instruction and emitted after each function.  This
limits the maximum size of functions to 1MB.  This is enabled by default for
@option{-mcmodel=tiny}.

@item -msign-return-address=@var{scope}
@opindex msign-return-address
Select the function scope on which return address signing will be applied.
Permissible values are @samp{none}, which disables return address signing,
@samp{non-leaf}, which enables pointer signing for functions which are not leaf
functions, and @samp{all}, which enables pointer signing for all functions.  The
default value is @samp{none}. This option has been deprecated by
-mbranch-protection.

@item -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}+@var{b-key}]|@var{bti}
@opindex mbranch-protection
Select the branch protection features to use.
@samp{none} is the default and turns off all types of branch protection.
@samp{standard} turns on all types of branch protection features.  If a feature
has additional tuning options, then @samp{standard} sets it to its standard
level.
@samp{pac-ret[+@var{leaf}]} turns on return address signing to its standard
level: signing functions that save the return address to memory (non-leaf
functions will practically always do this) using the a-key.  The optional
argument @samp{leaf} can be used to extend the signing to include leaf
functions.  The optional argument @samp{b-key} can be used to sign the functions
with the B-key instead of the A-key.
@samp{bti} turns on branch target identification mechanism.

@item -mharden-sls=@var{opts}
@opindex mharden-sls
Enable compiler hardening against straight line speculation (SLS).
@var{opts} is a comma-separated list of the following options:
@table @samp
@item retbr
@item blr
@end table
In addition, @samp{-mharden-sls=all} enables all SLS hardening while
@samp{-mharden-sls=none} disables all SLS hardening.

@item -msve-vector-bits=@var{bits}
@opindex msve-vector-bits
Specify the number of bits in an SVE vector register.  This option only has
an effect when SVE is enabled.

GCC supports two forms of SVE code generation: ``vector-length
agnostic'' output that works with any size of vector register and
``vector-length specific'' output that allows GCC to make assumptions
about the vector length when it is useful for optimization reasons.
The possible values of @samp{bits} are: @samp{scalable}, @samp{128},
@samp{256}, @samp{512}, @samp{1024} and @samp{2048}.
Specifying @samp{scalable} selects vector-length agnostic
output.  At present @samp{-msve-vector-bits=128} also generates vector-length
agnostic output for big-endian targets.  All other values generate
vector-length specific code.  The behavior of these values may change
in future releases and no value except @samp{scalable} should be
relied on for producing code that is portable across different
hardware SVE vector lengths.

The default is @samp{-msve-vector-bits=scalable}, which produces
vector-length agnostic code.
@end table

@subsubsection @option{-march} and @option{-mcpu} Feature Modifiers
@anchor{aarch64-feature-modifiers}
@cindex @option{-march} feature modifiers
@cindex @option{-mcpu} feature modifiers
Feature modifiers used with @option{-march} and @option{-mcpu} can be any of
the following and their inverses @option{no@var{feature}}:

@table @samp
@item crc
Enable CRC extension.  This is on by default for
@option{-march=armv8.1-a}.
@item crypto
Enable Crypto extension.  This also enables Advanced SIMD and floating-point
instructions.
@item fp
Enable floating-point instructions.  This is on by default for all possible
values for options @option{-march} and @option{-mcpu}.
@item simd
Enable Advanced SIMD instructions.  This also enables floating-point
instructions.  This is on by default for all possible values for options
@option{-march} and @option{-mcpu}.
@item sve
Enable Scalable Vector Extension instructions.  This also enables Advanced
SIMD and floating-point instructions.
@item lse
Enable Large System Extension instructions.  This is on by default for
@option{-march=armv8.1-a}.
@item rdma
Enable Round Double Multiply Accumulate instructions.  This is on by default
for @option{-march=armv8.1-a}.
@item fp16
Enable FP16 extension.  This also enables floating-point instructions.
@item fp16fml
Enable FP16 fmla extension.  This also enables FP16 extensions and
floating-point instructions. This option is enabled by default for @option{-march=armv8.4-a}. Use of this option with architectures prior to Armv8.2-A is not supported.

@item rcpc
Enable the RcPc extension.  This does not change code generation from GCC,
but is passed on to the assembler, enabling inline asm statements to use
instructions from the RcPc extension.
@item dotprod
Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
@item aes
Enable the Armv8-a aes and pmull crypto extension.  This also enables Advanced
SIMD instructions.
@item sha2
Enable the Armv8-a sha2 crypto extension.  This also enables Advanced SIMD instructions.
@item sha3
Enable the sha512 and sha3 crypto extension.  This also enables Advanced SIMD
instructions. Use of this option with architectures prior to Armv8.2-A is not supported.
@item sm4
Enable the sm3 and sm4 crypto extension.  This also enables Advanced SIMD instructions.
Use of this option with architectures prior to Armv8.2-A is not supported.
@item profile
Enable the Statistical Profiling extension.  This option is only to enable the
extension at the assembler level and does not affect code generation.
@item rng
Enable the Armv8.5-a Random Number instructions.  This option is only to
enable the extension at the assembler level and does not affect code
generation.
@item memtag
Enable the Armv8.5-a Memory Tagging Extensions.
Use of this option with architectures prior to Armv8.5-A is not supported.
@item sb
Enable the Armv8-a Speculation Barrier instruction.  This option is only to
enable the extension at the assembler level and does not affect code
generation.  This option is enabled by default for @option{-march=armv8.5-a}.
@item ssbs
Enable the Armv8-a Speculative Store Bypass Safe instruction.  This option
is only to enable the extension at the assembler level and does not affect code
generation.  This option is enabled by default for @option{-march=armv8.5-a}.
@item predres
Enable the Armv8-a Execution and Data Prediction Restriction instructions.
This option is only to enable the extension at the assembler level and does
not affect code generation.  This option is enabled by default for
@option{-march=armv8.5-a}.
@item sve2
Enable the Armv8-a Scalable Vector Extension 2.  This also enables SVE
instructions.
@item sve2-bitperm
Enable SVE2 bitperm instructions.  This also enables SVE2 instructions.
@item sve2-sm4
Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
@item sve2-aes
Enable SVE2 aes instructions.  This also enables SVE2 instructions.
@item sve2-sha3
Enable SVE2 sha3 instructions.  This also enables SVE2 instructions.
@item tme
Enable the Transactional Memory Extension.
@item i8mm
Enable 8-bit Integer Matrix Multiply instructions.  This also enables
Advanced SIMD and floating-point instructions.  This option is enabled by
default for @option{-march=armv8.6-a}.  Use of this option with architectures
prior to Armv8.2-A is not supported.
@item f32mm
Enable 32-bit Floating point Matrix Multiply instructions.  This also enables
SVE instructions.  Use of this option with architectures prior to Armv8.2-A is
not supported.
@item f64mm
Enable 64-bit Floating point Matrix Multiply instructions.  This also enables
SVE instructions.  Use of this option with architectures prior to Armv8.2-A is
not supported.
@item bf16
Enable brain half-precision floating-point instructions.  This also enables
Advanced SIMD and floating-point instructions.  This option is enabled by
default for @option{-march=armv8.6-a}.  Use of this option with architectures
prior to Armv8.2-A is not supported.
@item ls64
Enable the 64-byte atomic load and store instructions for accelerators.
This option is enabled by default for @option{-march=armv8.7-a}.
@item flagm
Enable the Flag Manipulation instructions Extension.
@item pauth
Enable the Pointer Authentication Extension.

@end table

Feature @option{crypto} implies @option{aes}, @option{sha2}, and @option{simd},
which implies @option{fp}.
Conversely, @option{nofp} implies @option{nosimd}, which implies
@option{nocrypto}, @option{noaes} and @option{nosha2}.

@node Adapteva Epiphany Options
@subsection Adapteva Epiphany Options

These @samp{-m} options are defined for Adapteva Epiphany:

@table @gcctabopt
@item -mhalf-reg-file
@opindex mhalf-reg-file
Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
That allows code to run on hardware variants that lack these registers.

@item -mprefer-short-insn-regs
@opindex mprefer-short-insn-regs
Preferentially allocate registers that allow short instruction generation.
This can result in increased instruction count, so this may either reduce or
increase overall code size.

@item -mbranch-cost=@var{num}
@opindex mbranch-cost
Set the cost of branches to roughly @var{num} ``simple'' instructions.
This cost is only a heuristic and is not guaranteed to produce
consistent results across releases.

@item -mcmove
@opindex mcmove
Enable the generation of conditional moves.

@item -mnops=@var{num}
@opindex mnops
Emit @var{num} NOPs before every other generated instruction.

@item -mno-soft-cmpsf
@opindex mno-soft-cmpsf
@opindex msoft-cmpsf
For single-precision floating-point comparisons, emit an @code{fsub} instruction
and test the flags.  This is faster than a software comparison, but can
get incorrect results in the presence of NaNs, or when two different small
numbers are compared such that their difference is calculated as zero.
The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
software comparisons.

@item -mstack-offset=@var{num}
@opindex mstack-offset
Set the offset between the top of the stack and the stack pointer.
E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
can be used by leaf functions without stack allocation.
Values other than @samp{8} or @samp{16} are untested and unlikely to work.
Note also that this option changes the ABI; compiling a program with a
different stack offset than the libraries have been compiled with
generally does not work.
This option can be useful if you want to evaluate if a different stack
offset would give you better code, but to actually use a different stack
offset to build working programs, it is recommended to configure the
toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.

@item -mno-round-nearest
@opindex mno-round-nearest
@opindex mround-nearest
Make the scheduler assume that the rounding mode has been set to
truncating.  The default is @option{-mround-nearest}.

@item -mlong-calls
@opindex mlong-calls
If not otherwise specified by an attribute, assume all calls might be beyond
the offset range of the @code{b} / @code{bl} instructions, and therefore load the
function address into a register before performing a (otherwise direct) call.
This is the default.

@item -mshort-calls
@opindex short-calls
If not otherwise specified by an attribute, assume all direct calls are
in the range of the @code{b} / @code{bl} instructions, so use these instructions
for direct calls.  The default is @option{-mlong-calls}.

@item -msmall16
@opindex msmall16
Assume addresses can be loaded as 16-bit unsigned values.  This does not
apply to function addresses for which @option{-mlong-calls} semantics
are in effect.

@item -mfp-mode=@var{mode}
@opindex mfp-mode
Set the prevailing mode of the floating-point unit.
This determines the floating-point mode that is provided and expected
at function call and return time.  Making this mode match the mode you
predominantly need at function start can make your programs smaller and
faster by avoiding unnecessary mode switches.

@var{mode} can be set to one the following values:

@table @samp
@item caller
Any mode at function entry is valid, and retained or restored when
the function returns, and when it calls other functions.
This mode is useful for compiling libraries or other compilation units
you might want to incorporate into different programs with different
prevailing FPU modes, and the convenience of being able to use a single
object file outweighs the size and speed overhead for any extra
mode switching that might be needed, compared with what would be needed
with a more specific choice of prevailing FPU mode.

@item truncate
This is the mode used for floating-point calculations with
truncating (i.e.@: round towards zero) rounding mode.  That includes
conversion from floating point to integer.

@item round-nearest
This is the mode used for floating-point calculations with
round-to-nearest-or-even rounding mode.

@item int
This is the mode used to perform integer calculations in the FPU, e.g.@:
integer multiply, or integer multiply-and-accumulate.
@end table

The default is @option{-mfp-mode=caller}

@item -mno-split-lohi
@itemx -mno-postinc
@itemx -mno-postmodify
@opindex mno-split-lohi
@opindex msplit-lohi
@opindex mno-postinc
@opindex mpostinc
@opindex mno-postmodify
@opindex mpostmodify
Code generation tweaks that disable, respectively, splitting of 32-bit
loads, generation of post-increment addresses, and generation of
post-modify addresses.  The defaults are @option{msplit-lohi},
@option{-mpost-inc}, and @option{-mpost-modify}.

@item -mnovect-double
@opindex mno-vect-double
@opindex mvect-double
Change the preferred SIMD mode to SImode.  The default is
@option{-mvect-double}, which uses DImode as preferred SIMD mode.

@item -max-vect-align=@var{num}
@opindex max-vect-align
The maximum alignment for SIMD vector mode types.
@var{num} may be 4 or 8.  The default is 8.
Note that this is an ABI change, even though many library function
interfaces are unaffected if they don't use SIMD vector modes
in places that affect size and/or alignment of relevant types.

@item -msplit-vecmove-early
@opindex msplit-vecmove-early
Split vector moves into single word moves before reload.  In theory this
can give better register allocation, but so far the reverse seems to be
generally the case.

@item -m1reg-@var{reg}
@opindex m1reg-
Specify a register to hold the constant @minus{}1, which makes loading small negative
constants and certain bitmasks faster.
Allowable values for @var{reg} are @samp{r43} and @samp{r63},
which specify use of that register as a fixed register,
and @samp{none}, which means that no register is used for this
purpose.  The default is @option{-m1reg-none}.

@end table

@node AMD GCN Options
@subsection AMD GCN Options
@cindex AMD GCN Options

These options are defined specifically for the AMD GCN port.

@table @gcctabopt

@item -march=@var{gpu}
@opindex march
@itemx -mtune=@var{gpu}
@opindex mtune
Set architecture type or tuning for @var{gpu}. Supported values for @var{gpu}
are

@table @samp
@opindex fiji
@item fiji
Compile for GCN3 Fiji devices (gfx803).

@item gfx900
Compile for GCN5 Vega 10 devices (gfx900).

@item gfx906
Compile for GCN5 Vega 20 devices (gfx906).

@end table

@item -msram-ecc=on
@itemx -msram-ecc=off
@itemx -msram-ecc=any
@opindex msram-ecc
Compile binaries suitable for devices with the SRAM-ECC feature enabled,
disabled, or either mode.  This feature can be enabled per-process on some
devices.  The compiled code must match the device mode. The default is
@samp{any}, for devices that support it.

@item -mstack-size=@var{bytes}
@opindex mstack-size
Specify how many @var{bytes} of stack space will be requested for each GPU
thread (wave-front).  Beware that there may be many threads and limited memory
available.  The size of the stack allocation may also have an impact on
run-time performance.  The default is 32KB when using OpenACC or OpenMP, and
1MB otherwise.

@item -mxnack
@opindex mxnack
Compile binaries suitable for devices with the XNACK feature enabled.  Some
devices always require XNACK and some allow the user to configure XNACK.  The
compiled code must match the device mode.  The default is @samp{-mno-xnack}.
At present this option is a placeholder for support that is not yet
implemented.

@end table

@node ARC Options
@subsection ARC Options
@cindex ARC options

The following options control the architecture variant for which code
is being compiled:

@c architecture variants
@table @gcctabopt

@item -mbarrel-shifter
@opindex mbarrel-shifter
Generate instructions supported by barrel shifter.  This is the default
unless @option{-mcpu=ARC601} or @samp{-mcpu=ARCEM} is in effect.

@item -mjli-always
@opindex mjli-alawys
Force to call a function using jli_s instruction.  This option is
valid only for ARCv2 architecture.

@item -mcpu=@var{cpu}
@opindex mcpu
Set architecture type, register usage, and instruction scheduling
parameters for @var{cpu}.  There are also shortcut alias options
available for backward compatibility and convenience.  Supported
values for @var{cpu} are

@table @samp
@opindex mA6
@opindex mARC600
@item arc600
Compile for ARC600.  Aliases: @option{-mA6}, @option{-mARC600}.

@item arc601
@opindex mARC601
Compile for ARC601.  Alias: @option{-mARC601}.

@item arc700
@opindex mA7
@opindex mARC700
Compile for ARC700.  Aliases: @option{-mA7}, @option{-mARC700}.
This is the default when configured with @option{--with-cpu=arc700}@.

@item arcem
Compile for ARC EM.

@item archs
Compile for ARC HS.

@item em
Compile for ARC EM CPU with no hardware extensions.

@item em4
Compile for ARC EM4 CPU.

@item em4_dmips
Compile for ARC EM4 DMIPS CPU.

@item em4_fpus
Compile for ARC EM4 DMIPS CPU with the single-precision floating-point
extension.

@item em4_fpuda
Compile for ARC EM4 DMIPS CPU with single-precision floating-point and
double assist instructions.

@item hs
Compile for ARC HS CPU with no hardware extensions except the atomic
instructions.

@item hs34
Compile for ARC HS34 CPU.

@item hs38
Compile for ARC HS38 CPU.

@item hs38_linux
Compile for ARC HS38 CPU with all hardware extensions on.

@item arc600_norm
Compile for ARC 600 CPU with @code{norm} instructions enabled.

@item arc600_mul32x16
Compile for ARC 600 CPU with @code{norm} and 32x16-bit multiply 
instructions enabled.

@item arc600_mul64
Compile for ARC 600 CPU with @code{norm} and @code{mul64}-family 
instructions enabled.

@item arc601_norm
Compile for ARC 601 CPU with @code{norm} instructions enabled.

@item arc601_mul32x16
Compile for ARC 601 CPU with @code{norm} and 32x16-bit multiply
instructions enabled.

@item arc601_mul64
Compile for ARC 601 CPU with @code{norm} and @code{mul64}-family
instructions enabled.

@item nps400
Compile for ARC 700 on NPS400 chip.

@item em_mini
Compile for ARC EM minimalist configuration featuring reduced register
set.

@end table

@item -mdpfp
@opindex mdpfp
@itemx -mdpfp-compact
@opindex mdpfp-compact
Generate double-precision FPX instructions, tuned for the compact
implementation.

@item -mdpfp-fast
@opindex mdpfp-fast
Generate double-precision FPX instructions, tuned for the fast
implementation.

@item -mno-dpfp-lrsr
@opindex mno-dpfp-lrsr
Disable @code{lr} and @code{sr} instructions from using FPX extension
aux registers.

@item -mea
@opindex mea
Generate extended arithmetic instructions.  Currently only
@code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
supported.  Only valid for @option{-mcpu=ARC700}.

@item -mno-mpy
@opindex mno-mpy
@opindex mmpy
Do not generate @code{mpy}-family instructions for ARC700.  This option is
deprecated.

@item -mmul32x16
@opindex mmul32x16
Generate 32x16-bit multiply and multiply-accumulate instructions.

@item -mmul64
@opindex mmul64
Generate @code{mul64} and @code{mulu64} instructions.  
Only valid for @option{-mcpu=ARC600}.

@item -mnorm
@opindex mnorm
Generate @code{norm} instructions.  This is the default if @option{-mcpu=ARC700}
is in effect.

@item -mspfp
@opindex mspfp
@itemx -mspfp-compact
@opindex mspfp-compact
Generate single-precision FPX instructions, tuned for the compact
implementation.

@item -mspfp-fast
@opindex mspfp-fast
Generate single-precision FPX instructions, tuned for the fast
implementation.

@item -msimd
@opindex msimd
Enable generation of ARC SIMD instructions via target-specific
builtins.  Only valid for @option{-mcpu=ARC700}.

@item -msoft-float
@opindex msoft-float
This option ignored; it is provided for compatibility purposes only.
Software floating-point code is emitted by default, and this default
can overridden by FPX options; @option{-mspfp}, @option{-mspfp-compact}, or
@option{-mspfp-fast} for single precision, and @option{-mdpfp},
@option{-mdpfp-compact}, or @option{-mdpfp-fast} for double precision.

@item -mswap
@opindex mswap
Generate @code{swap} instructions.

@item -matomic
@opindex matomic
This enables use of the locked load/store conditional extension to implement
atomic memory built-in functions.  Not available for ARC 6xx or ARC
EM cores.

@item -mdiv-rem
@opindex mdiv-rem
Enable @code{div} and @code{rem} instructions for ARCv2 cores.

@item -mcode-density
@opindex mcode-density
Enable code density instructions for ARC EM.  
This option is on by default for ARC HS.

@item -mll64
@opindex mll64
Enable double load/store operations for ARC HS cores.

@item -mtp-regno=@var{regno}
@opindex mtp-regno
Specify thread pointer register number.

@item -mmpy-option=@var{multo}
@opindex mmpy-option
Compile ARCv2 code with a multiplier design option.  You can specify 
the option using either a string or numeric value for @var{multo}.  
@samp{wlh1} is the default value.  The recognized values are:

@table @samp
@item 0
@itemx none
No multiplier available.

@item 1
@itemx w
16x16 multiplier, fully pipelined.
The following instructions are enabled: @code{mpyw} and @code{mpyuw}.

@item 2
@itemx wlh1
32x32 multiplier, fully
pipelined (1 stage).  The following instructions are additionally
enabled: @code{mpy}, @code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 3
@itemx wlh2
32x32 multiplier, fully pipelined
(2 stages).  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 4
@itemx wlh3
Two 16x16 multipliers, blocking,
sequential.  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 5
@itemx wlh4
One 16x16 multiplier, blocking,
sequential.  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 6
@itemx wlh5
One 32x4 multiplier, blocking,
sequential.  The following instructions are additionally enabled: @code{mpy},
@code{mpyu}, @code{mpym}, @code{mpymu}, and @code{mpy_s}.

@item 7
@itemx plus_dmpy
ARC HS SIMD support.

@item 8
@itemx plus_macd
ARC HS SIMD support.

@item 9
@itemx plus_qmacw
ARC HS SIMD support.

@end table

This option is only available for ARCv2 cores@.

@item -mfpu=@var{fpu}
@opindex mfpu
Enables support for specific floating-point hardware extensions for ARCv2
cores.  Supported values for @var{fpu} are:

@table @samp

@item fpus
Enables support for single-precision floating-point hardware
extensions@.

@item fpud
Enables support for double-precision floating-point hardware
extensions.  The single-precision floating-point extension is also
enabled.  Not available for ARC EM@.

@item fpuda
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.  The single-precision
floating-point extension is also enabled.  This option is
only available for ARC EM@.

@item fpuda_div
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.
The single-precision floating-point, square-root, and divide 
extensions are also enabled.  This option is
only available for ARC EM@.

@item fpuda_fma
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.
The single-precision floating-point and fused multiply and add 
hardware extensions are also enabled.  This option is
only available for ARC EM@.

@item fpuda_all
Enables support for double-precision floating-point hardware
extensions using double-precision assist instructions.
All single-precision floating-point hardware extensions are also
enabled.  This option is only available for ARC EM@.

@item fpus_div
Enables support for single-precision floating-point, square-root and divide 
hardware extensions@.

@item fpud_div
Enables support for double-precision floating-point, square-root and divide 
hardware extensions.  This option
includes option @samp{fpus_div}. Not available for ARC EM@.

@item fpus_fma
Enables support for single-precision floating-point and 
fused multiply and add hardware extensions@.

@item fpud_fma
Enables support for double-precision floating-point and 
fused multiply and add hardware extensions.  This option
includes option @samp{fpus_fma}.  Not available for ARC EM@.

@item fpus_all
Enables support for all single-precision floating-point hardware
extensions@.

@item fpud_all
Enables support for all single- and double-precision floating-point
hardware extensions.  Not available for ARC EM@.

@end table

@item -mirq-ctrl-saved=@var{register-range}, @var{blink}, @var{lp_count}
@opindex mirq-ctrl-saved
Specifies general-purposes registers that the processor automatically
saves/restores on interrupt entry and exit.  @var{register-range} is
specified as two registers separated by a dash.  The register range
always starts with @code{r0}, the upper limit is @code{fp} register.
@var{blink} and @var{lp_count} are optional.  This option is only
valid for ARC EM and ARC HS cores.

@item -mrgf-banked-regs=@var{number}
@opindex mrgf-banked-regs
Specifies the number of registers replicated in second register bank
on entry to fast interrupt.  Fast interrupts are interrupts with the
highest priority level P0.  These interrupts save only PC and STATUS32
registers to avoid memory transactions during interrupt entry and exit
sequences.  Use this option when you are using fast interrupts in an
ARC V2 family processor.  Permitted values are 4, 8, 16, and 32.

@item -mlpc-width=@var{width}
@opindex mlpc-width
Specify the width of the @code{lp_count} register.  Valid values for
@var{width} are 8, 16, 20, 24, 28 and 32 bits.  The default width is
fixed to 32 bits.  If the width is less than 32, the compiler does not
attempt to transform loops in your program to use the zero-delay loop
mechanism unless it is known that the @code{lp_count} register can
hold the required loop-counter value.  Depending on the width
specified, the compiler and run-time library might continue to use the
loop mechanism for various needs.  This option defines macro
@code{__ARC_LPC_WIDTH__} with the value of @var{width}.

@item -mrf16
@opindex mrf16
This option instructs the compiler to generate code for a 16-entry
register file.  This option defines the @code{__ARC_RF16__}
preprocessor macro.

@item -mbranch-index
@opindex mbranch-index
Enable use of @code{bi} or @code{bih} instructions to implement jump
tables.

@end table

The following options are passed through to the assembler, and also
define preprocessor macro symbols.

@c Flags used by the assembler, but for which we define preprocessor
@c macro symbols as well.
@table @gcctabopt
@item -mdsp-packa
@opindex mdsp-packa
Passed down to the assembler to enable the DSP Pack A extensions.
Also sets the preprocessor symbol @code{__Xdsp_packa}.  This option is
deprecated.

@item -mdvbf
@opindex mdvbf
Passed down to the assembler to enable the dual Viterbi butterfly
extension.  Also sets the preprocessor symbol @code{__Xdvbf}.  This
option is deprecated.

@c ARC700 4.10 extension instruction
@item -mlock
@opindex mlock
Passed down to the assembler to enable the locked load/store
conditional extension.  Also sets the preprocessor symbol
@code{__Xlock}.

@item -mmac-d16
@opindex mmac-d16
Passed down to the assembler.  Also sets the preprocessor symbol
@code{__Xxmac_d16}.  This option is deprecated.

@item -mmac-24
@opindex mmac-24
Passed down to the assembler.  Also sets the preprocessor symbol
@code{__Xxmac_24}.  This option is deprecated.

@c ARC700 4.10 extension instruction
@item -mrtsc
@opindex mrtsc
Passed down to the assembler to enable the 64-bit time-stamp counter
extension instruction.  Also sets the preprocessor symbol
@code{__Xrtsc}.  This option is deprecated.

@c ARC700 4.10 extension instruction
@item -mswape
@opindex mswape
Passed down to the assembler to enable the swap byte ordering
extension instruction.  Also sets the preprocessor symbol
@code{__Xswape}.

@item -mtelephony
@opindex mtelephony
Passed down to the assembler to enable dual- and single-operand
instructions for telephony.  Also sets the preprocessor symbol
@code{__Xtelephony}.  This option is deprecated.

@item -mxy
@opindex mxy
Passed down to the assembler to enable the XY memory extension.  Also
sets the preprocessor symbol @code{__Xxy}.

@end table

The following options control how the assembly code is annotated:

@c Assembly annotation options
@table @gcctabopt
@item -misize
@opindex misize
Annotate assembler instructions with estimated addresses.

@item -mannotate-align
@opindex mannotate-align
Explain what alignment considerations lead to the decision to make an
instruction short or long.

@end table

The following options are passed through to the linker:

@c options passed through to the linker
@table @gcctabopt
@item -marclinux
@opindex marclinux
Passed through to the linker, to specify use of the @code{arclinux} emulation.
This option is enabled by default in tool chains built for
@w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
when profiling is not requested.

@item -marclinux_prof
@opindex marclinux_prof
Passed through to the linker, to specify use of the
@code{arclinux_prof} emulation.  This option is enabled by default in
tool chains built for @w{@code{arc-linux-uclibc}} and
@w{@code{arceb-linux-uclibc}} targets when profiling is requested.

@end table

The following options control the semantics of generated code:

@c semantically relevant code generation options
@table @gcctabopt
@item -mlong-calls
@opindex mlong-calls
Generate calls as register indirect calls, thus providing access
to the full 32-bit address range.

@item -mmedium-calls
@opindex mmedium-calls
Don't use less than 25-bit addressing range for calls, which is the
offset available for an unconditional branch-and-link
instruction.  Conditional execution of function calls is suppressed, to
allow use of the 25-bit range, rather than the 21-bit range with
conditional branch-and-link.  This is the default for tool chains built
for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets.

@item -G @var{num}
@opindex G
Put definitions of externally-visible data in a small data section if
that data is no bigger than @var{num} bytes.  The default value of
@var{num} is 4 for any ARC configuration, or 8 when we have double
load/store operations.

@item -mno-sdata
@opindex mno-sdata
@opindex msdata
Do not generate sdata references.  This is the default for tool chains
built for @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}}
targets.

@item -mvolatile-cache
@opindex mvolatile-cache
Use ordinarily cached memory accesses for volatile references.  This is the
default.

@item -mno-volatile-cache
@opindex mno-volatile-cache
@opindex mvolatile-cache
Enable cache bypass for volatile references.

@end table

The following options fine tune code generation:
@c code generation tuning options
@table @gcctabopt
@item -malign-call
@opindex malign-call
Does nothing.  Preserved for backward compatibility.

@item -mauto-modify-reg
@opindex mauto-modify-reg
Enable the use of pre/post modify with register displacement.

@item -mbbit-peephole
@opindex mbbit-peephole
Enable bbit peephole2.

@item -mno-brcc
@opindex mno-brcc
This option disables a target-specific pass in @file{arc_reorg} to
generate compare-and-branch (@code{br@var{cc}}) instructions.  
It has no effect on
generation of these instructions driven by the combiner pass.

@item -mcase-vector-pcrel
@opindex mcase-vector-pcrel
Use PC-relative switch case tables to enable case table shortening.
This is the default for @option{-Os}.

@item -mcompact-casesi
@opindex mcompact-casesi
Enable compact @code{casesi} pattern.  This is the default for @option{-Os},
and only available for ARCv1 cores.  This option is deprecated.

@item -mno-cond-exec
@opindex mno-cond-exec
Disable the ARCompact-specific pass to generate conditional 
execution instructions.

Due to delay slot scheduling and interactions between operand numbers,
literal sizes, instruction lengths, and the support for conditional execution,
the target-independent pass to generate conditional execution is often lacking,
so the ARC port has kept a special pass around that tries to find more
conditional execution generation opportunities after register allocation,
branch shortening, and delay slot scheduling have been done.  This pass
generally, but not always, improves performance and code size, at the cost of
extra compilation time, which is why there is an option to switch it off.
If you have a problem with call instructions exceeding their allowable
offset range because they are conditionalized, you should consider using
@option{-mmedium-calls} instead.

@item -mearly-cbranchsi
@opindex mearly-cbranchsi
Enable pre-reload use of the @code{cbranchsi} pattern.

@item -mexpand-adddi
@opindex mexpand-adddi
Expand @code{adddi3} and @code{subdi3} at RTL generation time into
@code{add.f}, @code{adc} etc.  This option is deprecated.

@item -mindexed-loads
@opindex mindexed-loads
Enable the use of indexed loads.  This can be problematic because some
optimizers then assume that indexed stores exist, which is not
the case.

@item -mlra
@opindex mlra
Enable Local Register Allocation.  This is still experimental for ARC,
so by default the compiler uses standard reload
(i.e.@: @option{-mno-lra}).

@item -mlra-priority-none
@opindex mlra-priority-none
Don't indicate any priority for target registers.

@item -mlra-priority-compact
@opindex mlra-priority-compact
Indicate target register priority for r0..r3 / r12..r15.

@item -mlra-priority-noncompact
@opindex mlra-priority-noncompact
Reduce target register priority for r0..r3 / r12..r15.

@item -mmillicode
@opindex mmillicode
When optimizing for size (using @option{-Os}), prologues and epilogues
that have to save or restore a large number of registers are often
shortened by using call to a special function in libgcc; this is
referred to as a @emph{millicode} call.  As these calls can pose
performance issues, and/or cause linking issues when linking in a
nonstandard way, this option is provided to turn on or off millicode
call generation.

@item -mcode-density-frame
@opindex mcode-density-frame
This option enable the compiler to emit @code{enter} and @code{leave}
instructions.  These instructions are only valid for CPUs with
code-density feature.

@item -mmixed-code
@opindex mmixed-code
Does nothing.  Preserved for backward compatibility.

@item -mq-class
@opindex mq-class
Ths option is deprecated.  Enable @samp{q} instruction alternatives.
This is the default for @option{-Os}.

@item -mRcq
@opindex mRcq
Enable @samp{Rcq} constraint handling.  
Most short code generation depends on this.
This is the default.

@item -mRcw
@opindex mRcw
Enable @samp{Rcw} constraint handling.  
Most ccfsm condexec mostly depends on this.
This is the default.

@item -msize-level=@var{level}
@opindex msize-level
Fine-tune size optimization with regards to instruction lengths and alignment.
The recognized values for @var{level} are:
@table @samp
@item 0
No size optimization.  This level is deprecated and treated like @samp{1}.

@item 1
Short instructions are used opportunistically.

@item 2
In addition, alignment of loops and of code after barriers are dropped.

@item 3
In addition, optional data alignment is dropped, and the option @option{Os} is enabled.

@end table

This defaults to @samp{3} when @option{-Os} is in effect.  Otherwise,
the behavior when this is not set is equivalent to level @samp{1}.

@item -mtune=@var{cpu}
@opindex mtune
Set instruction scheduling parameters for @var{cpu}, overriding any implied
by @option{-mcpu=}.

Supported values for @var{cpu} are

@table @samp
@item ARC600
Tune for ARC600 CPU.

@item ARC601
Tune for ARC601 CPU.

@item ARC700
Tune for ARC700 CPU with standard multiplier block.

@item ARC700-xmac
Tune for ARC700 CPU with XMAC block.

@item ARC725D
Tune for ARC725D CPU.

@item ARC750D
Tune for ARC750D CPU.

@end table

@item -mmultcost=@var{num}
@opindex mmultcost
Cost to assume for a multiply instruction, with @samp{4} being equal to a
normal instruction.

@item -munalign-prob-threshold=@var{probability}
@opindex munalign-prob-threshold
Does nothing.  Preserved for backward compatibility.

@end table

The following options are maintained for backward compatibility, but
are now deprecated and will be removed in a future release:

@c Deprecated options
@table @gcctabopt

@item -margonaut
@opindex margonaut
Obsolete FPX.

@item -mbig-endian
@opindex mbig-endian
@itemx -EB
@opindex EB
Compile code for big-endian targets.  Use of these options is now
deprecated.  Big-endian code is supported by configuring GCC to build
@w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets,
for which big endian is the default.

@item -mlittle-endian
@opindex mlittle-endian
@itemx -EL
@opindex EL
Compile code for little-endian targets.  Use of these options is now
deprecated.  Little-endian code is supported by configuring GCC to build 
@w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets,
for which little endian is the default.

@item -mbarrel_shifter
@opindex mbarrel_shifter
Replaced by @option{-mbarrel-shifter}.

@item -mdpfp_compact
@opindex mdpfp_compact
Replaced by @option{-mdpfp-compact}.

@item -mdpfp_fast
@opindex mdpfp_fast
Replaced by @option{-mdpfp-fast}.

@item -mdsp_packa
@opindex mdsp_packa
Replaced by @option{-mdsp-packa}.

@item -mEA
@opindex mEA
Replaced by @option{-mea}.

@item -mmac_24
@opindex mmac_24
Replaced by @option{-mmac-24}.

@item -mmac_d16
@opindex mmac_d16
Replaced by @option{-mmac-d16}.

@item -mspfp_compact
@opindex mspfp_compact
Replaced by @option{-mspfp-compact}.

@item -mspfp_fast
@opindex mspfp_fast
Replaced by @option{-mspfp-fast}.

@item -mtune=@var{cpu}
@opindex mtune
Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
@samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
@samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively.

@item -multcost=@var{num}
@opindex multcost
Replaced by @option{-mmultcost}.

@end table

@node ARM Options
@subsection ARM Options
@cindex ARM options

These @samp{-m} options are defined for the ARM port:

@table @gcctabopt
@item -mabi=@var{name}
@opindex mabi
Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.

@item -mapcs-frame
@opindex mapcs-frame
Generate a stack frame that is compliant with the ARM Procedure Call
Standard for all functions, even if this is not strictly necessary for
correct execution of the code.  Specifying @option{-fomit-frame-pointer}
with this option causes the stack frames not to be generated for
leaf functions.  The default is @option{-mno-apcs-frame}.
This option is deprecated.

@item -mapcs
@opindex mapcs
This is a synonym for @option{-mapcs-frame} and is deprecated.

@ignore
@c not currently implemented
@item -mapcs-stack-check
@opindex mapcs-stack-check
Generate code to check the amount of stack space available upon entry to
every function (that actually uses some stack space).  If there is
insufficient space available then either the function
@code{__rt_stkovf_split_small} or @code{__rt_stkovf_split_big} is
called, depending upon the amount of stack space required.  The runtime
system is required to provide these functions.  The default is
@option{-mno-apcs-stack-check}, since this produces smaller code.

@c not currently implemented
@item -mapcs-reentrant
@opindex mapcs-reentrant
Generate reentrant, position-independent code.  The default is
@option{-mno-apcs-reentrant}.
@end ignore

@item -mthumb-interwork
@opindex mthumb-interwork
Generate code that supports calling between the ARM and Thumb
instruction sets.  Without this option, on pre-v5 architectures, the
two instruction sets cannot be reliably used inside one program.  The
default is @option{-mno-thumb-interwork}, since slightly larger code
is generated when @option{-mthumb-interwork} is specified.  In AAPCS
configurations this option is meaningless.

@item -mno-sched-prolog
@opindex mno-sched-prolog
@opindex msched-prolog
Prevent the reordering of instructions in the function prologue, or the
merging of those instruction with the instructions in the function's
body.  This means that all functions start with a recognizable set
of instructions (or in fact one of a choice from a small set of
different function prologues), and this information can be used to
locate the start of functions inside an executable piece of code.  The
default is @option{-msched-prolog}.

@item -mfloat-abi=@var{name}
@opindex mfloat-abi
Specifies which floating-point ABI to use.  Permissible values
are: @samp{soft}, @samp{softfp} and @samp{hard}.

Specifying @samp{soft} causes GCC to generate output containing
library calls for floating-point operations.
@samp{softfp} allows the generation of code using hardware floating-point
instructions, but still uses the soft-float calling conventions.
@samp{hard} allows generation of floating-point instructions
and uses FPU-specific calling conventions.

The default depends on the specific target configuration.  Note that
the hard-float and soft-float ABIs are not link-compatible; you must
compile your entire program with the same ABI, and link with a
compatible set of libraries.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code which uses only the general-purpose registers.  This will prevent
the compiler from using floating-point and Advanced SIMD registers but will not
impose any restrictions on the assembler.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a processor running in little-endian mode.  This is
the default for all standard configurations.

@item -mbig-endian
@opindex mbig-endian
Generate code for a processor running in big-endian mode; the default is
to compile code for a little-endian processor.

@item -mbe8
@itemx -mbe32
@opindex mbe8
When linking a big-endian image select between BE8 and BE32 formats.
The option has no effect for little-endian images and is ignored.  The
default is dependent on the selected target architecture.  For ARMv6
and later architectures the default is BE8, for older architectures
the default is BE32.  BE32 format has been deprecated by ARM.

@item -march=@var{name}@r{[}+extension@dots{}@r{]}
@opindex march
This specifies the name of the target ARM architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  This option can be used in conjunction with or instead
of the @option{-mcpu=} option.

Permissible names are:
@samp{armv4t},
@samp{armv5t}, @samp{armv5te},
@samp{armv6}, @samp{armv6j}, @samp{armv6k}, @samp{armv6kz}, @samp{armv6t2},
@samp{armv6z}, @samp{armv6zk},
@samp{armv7}, @samp{armv7-a}, @samp{armv7ve}, 
@samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a},
@samp{armv8.4-a},
@samp{armv8.5-a},
@samp{armv8.6-a},
@samp{armv9-a},
@samp{armv7-r},
@samp{armv8-r},
@samp{armv6-m}, @samp{armv6s-m},
@samp{armv7-m}, @samp{armv7e-m},
@samp{armv8-m.base}, @samp{armv8-m.main},
@samp{armv8.1-m.main},
@samp{iwmmxt} and @samp{iwmmxt2}.

Additionally, the following architectures, which lack support for the
Thumb execution state, are recognized but support is deprecated: @samp{armv4}.

Many of the architectures support extensions.  These can be added by
appending @samp{+@var{extension}} to the architecture name.  Extension
options are processed in order and capabilities accumulate.  An extension
will also enable any necessary base extensions
upon which it depends.  For example, the @samp{+crypto} extension
will always enable the @samp{+simd} extension.  The exception to the
additive construction is for extensions that are prefixed with
@samp{+no@dots{}}: these extensions disable the specified option and
any other extensions that may depend on the presence of that
extension.

For example, @samp{-march=armv7-a+simd+nofp+vfpv4} is equivalent to
writing @samp{-march=armv7-a+vfpv4} since the @samp{+simd} option is
entirely disabled by the @samp{+nofp} option that follows it.

Most extension names are generically named, but have an effect that is
dependent upon the architecture to which it is applied.  For example,
the @samp{+simd} option can be applied to both @samp{armv7-a} and
@samp{armv8-a} architectures, but will enable the original ARMv7-A
Advanced SIMD (Neon) extensions for @samp{armv7-a} and the ARMv8-A
variant for @samp{armv8-a}.

The table below lists the supported extensions for each architecture.
Architectures not mentioned do not support any extensions.

@table @samp
@item armv5te
@itemx armv6
@itemx armv6j
@itemx armv6k
@itemx armv6kz
@itemx armv6t2
@itemx armv6z
@itemx armv6zk
@table @samp
@item +fp
The VFPv2 floating-point instructions.  The extension @samp{+vfpv2} can be
used as an alias for this extension.

@item +nofp
Disable the floating-point instructions.
@end table

@item armv7
The common subset of the ARMv7-A, ARMv7-R and ARMv7-M architectures.
@table @samp
@item +fp
The VFPv3 floating-point instructions, with 16 double-precision
registers.  The extension @samp{+vfpv3-d16} can be used as an alias
for this extension.  Note that floating-point is not supported by the
base ARMv7-M architecture, but is compatible with both the ARMv7-A and
ARMv7-R architectures.

@item +nofp
Disable the floating-point instructions.
@end table

@item armv7-a
@table @samp
@item +mp
The multiprocessing extension.

@item +sec
The security extension.

@item +fp
The VFPv3 floating-point instructions, with 16 double-precision
registers.  The extension @samp{+vfpv3-d16} can be used as an alias
for this extension.

@item +simd
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions.
The extensions @samp{+neon} and @samp{+neon-vfpv3} can be used as aliases
for this extension.

@item +vfpv3
The VFPv3 floating-point instructions, with 32 double-precision
registers.

@item +vfpv3-d16-fp16
The VFPv3 floating-point instructions, with 16 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv3-fp16
The VFPv3 floating-point instructions, with 32 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv4-d16
The VFPv4 floating-point instructions, with 16 double-precision
registers.

@item +vfpv4
The VFPv4 floating-point instructions, with 32 double-precision
registers.

@item +neon-fp16
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions, with
the half-precision floating-point conversion operations.

@item +neon-vfpv4
The Advanced SIMD (Neon) v2 and the VFPv4 floating-point instructions.

@item +nosimd
Disable the Advanced SIMD instructions (does not disable floating point).

@item +nofp
Disable the floating-point and Advanced SIMD instructions.
@end table

@item armv7ve
The extended version of the ARMv7-A architecture with support for
virtualization.
@table @samp
@item +fp
The VFPv4 floating-point instructions, with 16 double-precision registers.
The extension @samp{+vfpv4-d16} can be used as an alias for this extension.

@item +simd
The Advanced SIMD (Neon) v2 and the VFPv4 floating-point instructions.  The
extension @samp{+neon-vfpv4} can be used as an alias for this extension.

@item +vfpv3-d16
The VFPv3 floating-point instructions, with 16 double-precision
registers.

@item +vfpv3
The VFPv3 floating-point instructions, with 32 double-precision
registers.

@item +vfpv3-d16-fp16
The VFPv3 floating-point instructions, with 16 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv3-fp16
The VFPv3 floating-point instructions, with 32 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv4-d16
The VFPv4 floating-point instructions, with 16 double-precision
registers.

@item +vfpv4
The VFPv4 floating-point instructions, with 32 double-precision
registers.

@item +neon
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions.
The extension @samp{+neon-vfpv3} can be used as an alias for this extension.

@item +neon-fp16
The Advanced SIMD (Neon) v1 and the VFPv3 floating-point instructions, with
the half-precision floating-point conversion operations.

@item +nosimd
Disable the Advanced SIMD instructions (does not disable floating point).

@item +nofp
Disable the floating-point and Advanced SIMD instructions.
@end table

@item armv8-a
@table @samp
@item +crc
The Cyclic Redundancy Check (CRC) instructions.
@item +simd
The ARMv8-A Advanced SIMD and floating-point instructions.
@item +crypto
The cryptographic instructions.
@item +nocrypto
Disable the cryptographic instructions.
@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@item +sb
Speculation Barrier Instruction.
@item +predres
Execution and Data Prediction Restriction Instructions.
@end table

@item armv8.1-a
@table @samp
@item +simd
The ARMv8.1-A Advanced SIMD and floating-point instructions.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions.

@item +nocrypto
Disable the cryptographic instructions.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.

@item +sb
Speculation Barrier Instruction.

@item +predres
Execution and Data Prediction Restriction Instructions.
@end table

@item armv8.2-a
@itemx armv8.3-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions.

@item +fp16fml
The half-precision floating-point fmla extension.  This also enables
the half-precision floating-point extension and Advanced SIMD and
floating-point instructions.

@item +simd
The ARMv8.1-A Advanced SIMD and floating-point instructions.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions.

@item +dotprod
Enable the Dot Product extension.  This also enables Advanced SIMD instructions.

@item +nocrypto
Disable the cryptographic extension.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.

@item +sb
Speculation Barrier Instruction.

@item +predres
Execution and Data Prediction Restriction Instructions.

@item +i8mm
8-bit Integer Matrix Multiply instructions.
This also enables Advanced SIMD and floating-point instructions.

@item +bf16
Brain half-precision floating-point instructions.
This also enables Advanced SIMD and floating-point instructions.
@end table

@item armv8.4-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions as well
as the Dot Product extension and the half-precision floating-point fmla
extension.

@item +simd
The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
Dot Product extension.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions as well as the Dot Product extension.

@item +nocrypto
Disable the cryptographic extension.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.

@item +sb
Speculation Barrier Instruction.

@item +predres
Execution and Data Prediction Restriction Instructions.

@item +i8mm
8-bit Integer Matrix Multiply instructions.
This also enables Advanced SIMD and floating-point instructions.

@item +bf16
Brain half-precision floating-point instructions.
This also enables Advanced SIMD and floating-point instructions.
@end table

@item armv8.5-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions as well
as the Dot Product extension and the half-precision floating-point fmla
extension.

@item +simd
The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
Dot Product extension.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions as well as the Dot Product extension.

@item +nocrypto
Disable the cryptographic extension.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.

@item +i8mm
8-bit Integer Matrix Multiply instructions.
This also enables Advanced SIMD and floating-point instructions.

@item +bf16
Brain half-precision floating-point instructions.
This also enables Advanced SIMD and floating-point instructions.
@end table

@item armv8.6-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions as well
as the Dot Product extension and the half-precision floating-point fmla
extension.

@item +simd
The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
Dot Product extension.

@item +crypto
The cryptographic instructions.  This also enables the Advanced SIMD and
floating-point instructions as well as the Dot Product extension.

@item +nocrypto
Disable the cryptographic extension.

@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.

@item +i8mm
8-bit Integer Matrix Multiply instructions.
This also enables Advanced SIMD and floating-point instructions.

@item +bf16
Brain half-precision floating-point instructions.
This also enables Advanced SIMD and floating-point instructions.
@end table

@item armv7-r
@table @samp
@item +fp.sp
The single-precision VFPv3 floating-point instructions.  The extension
@samp{+vfpv3xd} can be used as an alias for this extension.

@item +fp
The VFPv3 floating-point instructions with 16 double-precision registers.
The extension +vfpv3-d16 can be used as an alias for this extension.

@item +vfpv3xd-d16-fp16
The single-precision VFPv3 floating-point instructions with 16 double-precision
registers and the half-precision floating-point conversion operations.

@item +vfpv3-d16-fp16
The VFPv3 floating-point instructions with 16 double-precision
registers and the half-precision floating-point conversion operations.

@item +nofp
Disable the floating-point extension.

@item +idiv
The ARM-state integer division instructions.

@item +noidiv
Disable the ARM-state integer division extension.
@end table

@item armv7e-m
@table @samp
@item +fp
The single-precision VFPv4 floating-point instructions.

@item +fpv5
The single-precision FPv5 floating-point instructions.

@item +fp.dp
The single- and double-precision FPv5 floating-point instructions.

@item +nofp
Disable the floating-point extensions.
@end table

@item  armv8.1-m.main
@table @samp

@item +dsp
The DSP instructions.

@item +mve
The M-Profile Vector Extension (MVE) integer instructions.

@item +mve.fp
The M-Profile Vector Extension (MVE) integer and single precision
floating-point instructions.

@item +fp
The single-precision floating-point instructions.

@item +fp.dp
The single- and double-precision floating-point instructions.

@item +nofp
Disable the floating-point extension.

@item +cdecp0, +cdecp1, ... , +cdecp7
Enable the Custom Datapath Extension (CDE) on selected coprocessors according
to the numbers given in the options in the range 0 to 7.
@end table

@item  armv8-m.main
@table @samp
@item +dsp
The DSP instructions.

@item +nodsp
Disable the DSP extension.

@item +fp
The single-precision floating-point instructions.

@item +fp.dp
The single- and double-precision floating-point instructions.

@item +nofp
Disable the floating-point extension.

@item +cdecp0, +cdecp1, ... , +cdecp7
Enable the Custom Datapath Extension (CDE) on selected coprocessors according
to the numbers given in the options in the range 0 to 7.
@end table

@item armv8-r
@table @samp
@item +crc
The Cyclic Redundancy Check (CRC) instructions.
@item +fp.sp
The single-precision FPv5 floating-point instructions.
@item +simd
The ARMv8-A Advanced SIMD and floating-point instructions.
@item +crypto
The cryptographic instructions.
@item +nocrypto
Disable the cryptographic instructions.
@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table

@end table

@option{-march=native} causes the compiler to auto-detect the architecture
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect
is unsuccessful the option has no effect.

@item -mtune=@var{name}
@opindex mtune
This option specifies the name of the target ARM processor for
which GCC should tune the performance of the code.
For some ARM implementations better performance can be obtained by using
this option.
Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t},
@samp{arm720t}, @samp{arm740t}, @samp{strongarm}, @samp{strongarm110},
@samp{strongarm1100}, @samp{strongarm1110}, @samp{arm8}, @samp{arm810},
@samp{arm9}, @samp{arm9e}, @samp{arm920}, @samp{arm920t}, @samp{arm922t},
@samp{arm946e-s}, @samp{arm966e-s}, @samp{arm968e-s}, @samp{arm926ej-s},
@samp{arm940t}, @samp{arm9tdmi}, @samp{arm10tdmi}, @samp{arm1020t},
@samp{arm1026ej-s}, @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8},
@samp{cortex-a9}, @samp{cortex-a12}, @samp{cortex-a15}, @samp{cortex-a17},
@samp{cortex-a32}, @samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55},
@samp{cortex-a57}, @samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75},
@samp{cortex-a76}, @samp{cortex-a76ae}, @samp{cortex-a77},
@samp{cortex-a78}, @samp{cortex-a78ae}, @samp{cortex-a78c},
@samp{ares}, @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5},
@samp{cortex-r7}, @samp{cortex-r8}, @samp{cortex-r52}, @samp{cortex-r52plus},
@samp{cortex-m0}, @samp{cortex-m0plus}, @samp{cortex-m1}, @samp{cortex-m3},
@samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m23}, @samp{cortex-m33},
@samp{cortex-m35p}, @samp{cortex-m55}, @samp{cortex-x1},
@samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply},
@samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4},
@samp{neoverse-n1}, @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{xscale},
@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626},
@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}.

Additionally, this option can specify that GCC should tune the performance
of the code for a big.LITTLE system.  Permissible names are:
@samp{cortex-a15.cortex-a7}, @samp{cortex-a17.cortex-a7},
@samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a72.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55}.

@option{-mtune=generic-@var{arch}} specifies that GCC should tune the
performance for a blend of processors within architecture @var{arch}.
The aim is to generate code that run well on the current most popular
processors, balancing between optimizations that benefit some CPUs in the
range, and avoiding performance pitfalls of other CPUs.  The effects of
this option may change in future GCC versions as CPU models come and go.

@option{-mtune} permits the same extension options as @option{-mcpu}, but
the extension options do not affect the tuning of the generated code.

@option{-mtune=native} causes the compiler to auto-detect the CPU
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect is
unsuccessful the option has no effect.

@item -mcpu=@var{name}@r{[}+extension@dots{}@r{]}
@opindex mcpu
This specifies the name of the target ARM processor.  GCC uses this name
to derive the name of the target ARM architecture (as if specified
by @option{-march}) and the ARM processor type for which to tune for
performance (as if specified by @option{-mtune}).  Where this option
is used in conjunction with @option{-march} or @option{-mtune},
those options take precedence over the appropriate part of this option.

Many of the supported CPUs implement optional architectural
extensions.  Where this is so the architectural extensions are
normally enabled by default.  If implementations that lack the
extension exist, then the extension syntax can be used to disable
those extensions that have been omitted.  For floating-point and
Advanced SIMD (Neon) instructions, the settings of the options
@option{-mfloat-abi} and @option{-mfpu} must also be considered:
floating-point and Advanced SIMD instructions will only be used if
@option{-mfloat-abi} is not set to @samp{soft}; and any setting of
@option{-mfpu} other than @samp{auto} will override the available
floating-point and SIMD extension instructions.

For example, @samp{cortex-a9} can be found in three major
configurations: integer only, with just a floating-point unit or with
floating-point and Advanced SIMD.  The default is to enable all the
instructions, but the extensions @samp{+nosimd} and @samp{+nofp} can
be used to disable just the SIMD or both the SIMD and floating-point
instructions respectively.

Permissible names for this option are the same as those for
@option{-mtune}.

The following extension options are common to the listed CPUs:

@table @samp
@item +nodsp
Disable the DSP instructions on @samp{cortex-m33}, @samp{cortex-m35p}.

@item  +nofp
Disables the floating-point instructions on @samp{arm9e},
@samp{arm946e-s}, @samp{arm966e-s}, @samp{arm968e-s}, @samp{arm10e},
@samp{arm1020e}, @samp{arm1022e}, @samp{arm926ej-s},
@samp{arm1026ej-s}, @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8},
@samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m33} and @samp{cortex-m35p}.
Disables the floating-point and SIMD instructions on
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7},
@samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a12},
@samp{cortex-a15}, @samp{cortex-a17}, @samp{cortex-a15.cortex-a7},
@samp{cortex-a17.cortex-a7}, @samp{cortex-a32}, @samp{cortex-a35},
@samp{cortex-a53} and @samp{cortex-a55}.

@item +nofp.dp
Disables the double-precision component of the floating-point instructions
on @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8}, @samp{cortex-r52},
@samp{cortex-r52plus} and @samp{cortex-m7}.

@item +nosimd
Disables the SIMD (but not floating-point) instructions on
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}
and @samp{cortex-a9}.

@item +crypto
Enables the cryptographic instructions on @samp{cortex-a32},
@samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55}, @samp{cortex-a57},
@samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75}, @samp{exynos-m1},
@samp{xgene1}, @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53} and
@samp{cortex-a75.cortex-a55}.
@end table

Additionally the @samp{generic-armv7-a} pseudo target defaults to
VFPv3 with 16 double-precision registers.  It supports the following
extension options: @samp{mp}, @samp{sec}, @samp{vfpv3-d16},
@samp{vfpv3}, @samp{vfpv3-d16-fp16}, @samp{vfpv3-fp16},
@samp{vfpv4-d16}, @samp{vfpv4}, @samp{neon}, @samp{neon-vfpv3},
@samp{neon-fp16}, @samp{neon-vfpv4}.  The meanings are the same as for
the extensions to @option{-march=armv7-a}.

@option{-mcpu=generic-@var{arch}} is also permissible, and is
equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
See @option{-mtune} for more information.

@option{-mcpu=native} causes the compiler to auto-detect the CPU
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect
is unsuccessful the option has no effect.

@item -mfpu=@var{name}
@opindex mfpu
This specifies what floating-point hardware (or hardware emulation) is
available on the target.  Permissible names are: @samp{auto}, @samp{vfpv2},
@samp{vfpv3},
@samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
@samp{vfpv3xd-fp16}, @samp{neon-vfpv3}, @samp{neon-fp16}, @samp{vfpv4},
@samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
@samp{fpv5-d16}, @samp{fpv5-sp-d16},
@samp{fp-armv8}, @samp{neon-fp-armv8} and @samp{crypto-neon-fp-armv8}.
Note that @samp{neon} is an alias for @samp{neon-vfpv3} and @samp{vfp}
is an alias for @samp{vfpv2}.

The setting @samp{auto} is the default and is special.  It causes the
compiler to select the floating-point and Advanced SIMD instructions
based on the settings of @option{-mcpu} and @option{-march}.

If the selected floating-point hardware includes the NEON extension
(e.g.@: @option{-mfpu=neon}), note that floating-point
operations are not generated by GCC's auto-vectorization pass unless
@option{-funsafe-math-optimizations} is also specified.  This is
because NEON hardware does not fully implement the IEEE 754 standard for
floating-point arithmetic (in particular denormal values are treated as
zero), so the use of NEON instructions may lead to a loss of precision.

You can also set the fpu name at function level by using the @code{target("fpu=")} function attributes (@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mfp16-format=@var{name}
@opindex mfp16-format
Specify the format of the @code{__fp16} half-precision floating-point type.
Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
the default is @samp{none}, in which case the @code{__fp16} type is not
defined.  @xref{Half-Precision}, for more information.

@item -mstructure-size-boundary=@var{n}
@opindex mstructure-size-boundary
The sizes of all structures and unions are rounded up to a multiple
of the number of bits set by this option.  Permissible values are 8, 32
and 64.  The default value varies for different toolchains.  For the COFF
targeted toolchain the default value is 8.  A value of 64 is only allowed
if the underlying ABI supports it.

Specifying a larger number can produce faster, more efficient code, but
can also increase the size of the program.  Different values are potentially
incompatible.  Code compiled with one value cannot necessarily expect to
work with code or libraries compiled with another value, if they exchange
information using structures or unions.

This option is deprecated.

@item -mabort-on-noreturn
@opindex mabort-on-noreturn
Generate a call to the function @code{abort} at the end of a
@code{noreturn} function.  It is executed if the function tries to
return.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
lies outside of the 64-megabyte addressing range of the offset-based
version of subroutine call instruction.

Even if this switch is enabled, not all function calls are turned
into long calls.  The heuristic is that static functions, functions
that have the @code{short_call} attribute, functions that are inside
the scope of a @code{#pragma no_long_calls} directive, and functions whose
definitions have already been compiled within the current compilation
unit are not turned into long calls.  The exceptions to this rule are
that weak function definitions, functions with the @code{long_call}
attribute or the @code{section} attribute, and functions that are within
the scope of a @code{#pragma long_calls} directive are always
turned into long calls.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} restores the default behavior, as does
placing the function calls within the scope of a @code{#pragma
long_calls_off} directive.  Note these switches have no effect on how
the compiler generates code to handle function calls via function
pointers.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The runtime system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mpic-register=@var{reg}
@opindex mpic-register
Specify the register to be used for PIC addressing.
For standard PIC base case, the default is any suitable register
determined by compiler.  For single PIC base case, the default is
@samp{R9} if target is EABI based or stack-checking is enabled,
otherwise the default is @samp{R10}.

@item -mpic-data-is-text-relative
@opindex mpic-data-is-text-relative
Assume that the displacement between the text and data segments is fixed
at static link time.  This permits using PC-relative addressing
operations to access data known to be in the data segment.  For
non-VxWorks RTP targets, this option is enabled by default.  When
disabled on such targets, it will enable @option{-msingle-pic-base} by
default.

@item -mpoke-function-name
@opindex mpoke-function-name
Write the name of each function into the text section, directly
preceding the function prologue.  The generated code is similar to this:

@smallexample
     t0
         .ascii "arm_poke_function_name", 0
         .align
     t1
         .word 0xff000000 + (t1 - t0)
     arm_poke_function_name
         mov     ip, sp
         stmfd   sp!, @{fp, ip, lr, pc@}
         sub     fp, ip, #4
@end smallexample

When performing a stack backtrace, code can inspect the value of
@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
location @code{pc - 12} and the top 8 bits are set, then we know that
there is a function name embedded immediately preceding this location
and has length @code{((pc[-3]) & 0xff000000)}.

@item -mthumb
@itemx -marm
@opindex marm
@opindex mthumb

Select between generating code that executes in ARM and Thumb
states.  The default for most configurations is to generate code
that executes in ARM state, but the default can be changed by
configuring GCC with the @option{--with-mode=}@var{state}
configure option.

You can also override the ARM and Thumb mode for each function
by using the @code{target("thumb")} and @code{target("arm")} function attributes
(@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mflip-thumb 
@opindex mflip-thumb
Switch ARM/Thumb modes on alternating functions.
This option is provided for regression testing of mixed Thumb/ARM code
generation, and is not intended for ordinary use in compiling code.

@item -mtpcs-frame
@opindex mtpcs-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all non-leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-tpcs-frame}.

@item -mtpcs-leaf-frame
@opindex mtpcs-leaf-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.

@item -mcallee-super-interworking
@opindex mcallee-super-interworking
Gives all externally visible functions in the file being compiled an ARM
instruction set header which switches to Thumb mode before executing the
rest of the function.  This allows these functions to be called from
non-interworking code.  This option is not valid in AAPCS configurations
because interworking is enabled by default.

@item -mcaller-super-interworking
@opindex mcaller-super-interworking
Allows calls via function pointers (including virtual functions) to
execute correctly regardless of whether the target code has been
compiled for interworking or not.  There is a small overhead in the cost
of executing a function pointer if this option is enabled.  This option
is not valid in AAPCS configurations because interworking is enabled
by default.

@item -mtp=@var{name}
@opindex mtp
Specify the access model for the thread local storage pointer.  The valid
models are @samp{soft}, which generates calls to @code{__aeabi_read_tp},
@samp{cp15}, which fetches the thread pointer from @code{cp15} directly
(supported in the arm6k architecture), and @samp{auto}, which uses the
best available method for the selected processor.  The default setting is
@samp{auto}.

@item -mtls-dialect=@var{dialect}
@opindex mtls-dialect
Specify the dialect to use for accessing thread local storage.  Two
@var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
@samp{gnu} dialect selects the original GNU scheme for supporting
local and global dynamic TLS models.  The @samp{gnu2} dialect
selects the GNU descriptor scheme, which provides better performance
for shared libraries.  The GNU descriptor scheme is compatible with
the original scheme, but does require new assembler, linker and
library support.  Initial and local exec TLS models are unaffected by
this option and always use the original scheme.

@item -mword-relocations
@opindex mword-relocations
Only generate absolute relocations on word-sized values (i.e.@: R_ARM_ABS32).
This is enabled by default on targets (uClinux, SymbianOS) where the runtime
loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
is specified. This option conflicts with @option{-mslow-flash-data}.

@item -mfix-cortex-m3-ldrd
@opindex mfix-cortex-m3-ldrd
Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
with overlapping destination and base registers are used.  This option avoids
generating these instructions.  This option is enabled by default when
@option{-mcpu=cortex-m3} is specified.

@item -munaligned-access
@itemx -mno-unaligned-access
@opindex munaligned-access
@opindex mno-unaligned-access
Enables (or disables) reading and writing of 16- and 32- bit values
from addresses that are not 16- or 32- bit aligned.  By default
unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
ARMv8-M Baseline architectures, and enabled for all other
architectures.  If unaligned access is not enabled then words in packed
data structures are accessed a byte at a time.

The ARM attribute @code{Tag_CPU_unaligned_access} is set in the
generated object file to either true or false, depending upon the
setting of this option.  If unaligned access is enabled then the
preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} is also
defined.

@item -mneon-for-64bits
@opindex mneon-for-64bits
This option is deprecated and has no effect.

@item -mslow-flash-data
@opindex mslow-flash-data
Assume loading data from flash is slower than fetching instruction.
Therefore literal load is minimized for better performance.
This option is only supported when compiling for ARMv7 M-profile and
off by default. It conflicts with @option{-mword-relocations}.

@item -masm-syntax-unified
@opindex masm-syntax-unified
Assume inline assembler is using unified asm syntax.  The default is
currently off which implies divided syntax.  This option has no impact
on Thumb2. However, this may change in future releases of GCC.
Divided syntax should be considered deprecated.

@item -mrestrict-it
@opindex mrestrict-it
Restricts generation of IT blocks to conform to the rules of ARMv8-A.
IT blocks can only contain a single 16-bit instruction from a select
set of instructions. This option is on by default for ARMv8-A Thumb mode.

@item -mprint-tune-info
@opindex mprint-tune-info
Print CPU tuning information as comment in assembler file.  This is
an option used only for regression testing of the compiler and not
intended for ordinary use in compiling code.  This option is disabled
by default.

@item -mverbose-cost-dump
@opindex mverbose-cost-dump
Enable verbose cost model dumping in the debug dump files.  This option is
provided for use in debugging the compiler.

@item -mpure-code
@opindex mpure-code
Do not allow constant data to be placed in code sections.
Additionally, when compiling for ELF object format give all text sections the
ELF processor-specific section attribute @code{SHF_ARM_PURECODE}.  This option
is only available when generating non-pic code for M-profile targets.

@item -mcmse
@opindex mcmse
Generate secure code as per the "ARMv8-M Security Extensions: Requirements on
Development Tools Engineering Specification", which can be found on
@url{https://developer.arm.com/documentation/ecm0359818/latest/}.

@item -mfix-cmse-cve-2021-35465
@opindex mfix-cmse-cve-2021-35465
Mitigate against a potential security issue with the @code{VLLDM} instruction
in some M-profile devices when using CMSE (CVE-2021-365465).  This option is
enabled by default when the option @option{-mcpu=} is used with
@code{cortex-m33}, @code{cortex-m35p} or @code{cortex-m55}.  The option
@option{-mno-fix-cmse-cve-2021-35465} can be used to disable the mitigation.

@item -mfdpic
@itemx -mno-fdpic
@opindex mfdpic
@opindex mno-fdpic
Select the FDPIC ABI, which uses 64-bit function descriptors to
represent pointers to functions.  When the compiler is configured for
@code{arm-*-uclinuxfdpiceabi} targets, this option is on by default
and implies @option{-fPIE} if none of the PIC/PIE-related options is
provided.  On other targets, it only enables the FDPIC-specific code
generation features, and the user should explicitly provide the
PIC/PIE-related options as needed.

Note that static linking is not supported because it would still
involve the dynamic linker when the program self-relocates.  If such
behavior is acceptable, use -static and -Wl,-dynamic-linker options.

The opposite @option{-mno-fdpic} option is useful (and required) to
build the Linux kernel using the same (@code{arm-*-uclinuxfdpiceabi})
toolchain as the one used to build the userland programs.

@end table

@node AVR Options
@subsection AVR Options
@cindex AVR Options

These options are defined for AVR implementations:

@table @gcctabopt
@item -mmcu=@var{mcu}
@opindex mmcu
Specify Atmel AVR instruction set architectures (ISA) or MCU type.

The default for this option is@tie{}@samp{avr2}.

GCC supports the following AVR devices and ISAs:

@include avr-mmcu.texi

@item -mabsdata
@opindex mabsdata

Assume that all data in static storage can be accessed by LDS / STS
instructions.  This option has only an effect on reduced Tiny devices like
ATtiny40.  See also the @code{absdata}
@ref{AVR Variable Attributes,variable attribute}.

@item -maccumulate-args
@opindex maccumulate-args
Accumulate outgoing function arguments and acquire/release the needed
stack space for outgoing function arguments once in function
prologue/epilogue.  Without this option, outgoing arguments are pushed
before calling a function and popped afterwards.

Popping the arguments after the function call can be expensive on
AVR so that accumulating the stack space might lead to smaller
executables because arguments need not be removed from the
stack after such a function call.

This option can lead to reduced code size for functions that perform
several calls to functions that get their arguments on the stack like
calls to printf-like functions.

@item -mbranch-cost=@var{cost}
@opindex mbranch-cost
Set the branch costs for conditional branch instructions to
@var{cost}.  Reasonable values for @var{cost} are small, non-negative
integers. The default branch cost is 0.

@item -mcall-prologues
@opindex mcall-prologues
Functions prologues/epilogues are expanded as calls to appropriate
subroutines.  Code size is smaller.

@item -mdouble=@var{bits}
@itemx -mlong-double=@var{bits}
@opindex mdouble
@opindex mlong-double
Set the size (in bits) of the @code{double} or @code{long double} type,
respectively.  Possible values for @var{bits} are 32 and 64.
Whether or not a specific value for @var{bits} is allowed depends on
the @code{--with-double=} and @code{--with-long-double=}
@w{@uref{https://gcc.gnu.org/install/configure.html#avr,configure options}},
and the same applies for the default values of the options.

@item -mgas-isr-prologues
@opindex mgas-isr-prologues
Interrupt service routines (ISRs) may use the @code{__gcc_isr} pseudo
instruction supported by GNU Binutils.
If this option is on, the feature can still be disabled for individual
ISRs by means of the @ref{AVR Function Attributes,,@code{no_gccisr}}
function attribute.  This feature is activated per default
if optimization is on (but not with @option{-Og}, @pxref{Optimize Options}),
and if GNU Binutils support @w{@uref{https://sourceware.org/PR21683,PR21683}}.

@item -mint8
@opindex mint8
Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
@code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
and @code{long long} is 4 bytes.  Please note that this option does not
conform to the C standards, but it results in smaller code
size.

@item -mmain-is-OS_task
@opindex mmain-is-OS_task
Do not save registers in @code{main}.  The effect is the same like
attaching attribute @ref{AVR Function Attributes,,@code{OS_task}}
to @code{main}. It is activated per default if optimization is on.

@item -mn-flash=@var{num}
@opindex mn-flash
Assume that the flash memory has a size of 
@var{num} times 64@tie{}KiB.

@item -mno-interrupts
@opindex mno-interrupts
Generated code is not compatible with hardware interrupts.
Code size is smaller.

@item -mrelax
@opindex mrelax
Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
@code{RCALL} resp.@: @code{RJMP} instruction if applicable.
Setting @option{-mrelax} just adds the @option{--mlink-relax} option to
the assembler's command line and the @option{--relax} option to the
linker's command line.

Jump relaxing is performed by the linker because jump offsets are not
known before code is located. Therefore, the assembler code generated by the
compiler is the same, but the instructions in the executable may
differ from instructions in the assembler code.

Relaxing must be turned on if linker stubs are needed, see the
section on @code{EIND} and linker stubs below.

@item -mrmw
@opindex mrmw
Assume that the device supports the Read-Modify-Write
instructions @code{XCH}, @code{LAC}, @code{LAS} and @code{LAT}.

@item -mshort-calls
@opindex mshort-calls

Assume that @code{RJMP} and @code{RCALL} can target the whole
program memory.

This option is used internally for multilib selection.  It is
not an optimization option, and you don't need to set it by hand.

@item -msp8
@opindex msp8
Treat the stack pointer register as an 8-bit register,
i.e.@: assume the high byte of the stack pointer is zero.
In general, you don't need to set this option by hand.

This option is used internally by the compiler to select and
build multilibs for architectures @code{avr2} and @code{avr25}.
These architectures mix devices with and without @code{SPH}.
For any setting other than @option{-mmcu=avr2} or @option{-mmcu=avr25}
the compiler driver adds or removes this option from the compiler
proper's command line, because the compiler then knows if the device
or architecture has an 8-bit stack pointer and thus no @code{SPH}
register or not.

@item -mstrict-X
@opindex mstrict-X
Use address register @code{X} in a way proposed by the hardware.  This means
that @code{X} is only used in indirect, post-increment or
pre-decrement addressing.

Without this option, the @code{X} register may be used in the same way
as @code{Y} or @code{Z} which then is emulated by additional
instructions.  
For example, loading a value with @code{X+const} addressing with a
small non-negative @code{const < 64} to a register @var{Rn} is
performed as

@example
adiw r26, const   ; X += const
ld   @var{Rn}, X        ; @var{Rn} = *X
sbiw r26, const   ; X -= const
@end example

@item -mtiny-stack
@opindex mtiny-stack
Only change the lower 8@tie{}bits of the stack pointer.

@item -mfract-convert-truncate
@opindex mfract-convert-truncate
Allow to use truncation instead of rounding towards zero for fractional fixed-point types.

@item -nodevicelib
@opindex nodevicelib
Don't link against AVR-LibC's device specific library @code{lib<mcu>.a}.

@item -nodevicespecs
@opindex nodevicespecs
Don't add @option{-specs=device-specs/specs-@var{mcu}} to the compiler driver's
command line.  The user takes responsibility for supplying the sub-processes
like compiler proper, assembler and linker with appropriate command line
options.  This means that the user has to supply her private device specs
file by means of @option{-specs=@var{path-to-specs-file}}.  There is no
more need for option @option{-mmcu=@var{mcu}}.

This option can also serve as a replacement for the older way of
specifying custom device-specs files that needed @option{-B @var{some-path}} to point to a directory
which contains a folder named @code{device-specs} which contains a specs file named
@code{specs-@var{mcu}}, where @var{mcu} was specified by @option{-mmcu=@var{mcu}}.

@item -Waddr-space-convert
@opindex Waddr-space-convert
@opindex Wno-addr-space-convert
Warn about conversions between address spaces in the case where the
resulting address space is not contained in the incoming address space.

@item -Wmisspelled-isr
@opindex Wmisspelled-isr
@opindex Wno-misspelled-isr
Warn if the ISR is misspelled, i.e.@: without __vector prefix.
Enabled by default.
@end table

@subsubsection @code{EIND} and Devices with More Than 128 Ki Bytes of Flash
@cindex @code{EIND}
Pointers in the implementation are 16@tie{}bits wide.
The address of a function or label is represented as word address so
that indirect jumps and calls can target any code address in the
range of 64@tie{}Ki words.

In order to facilitate indirect jump on devices with more than 128@tie{}Ki
bytes of program memory space, there is a special function register called
@code{EIND} that serves as most significant part of the target address
when @code{EICALL} or @code{EIJMP} instructions are used.

Indirect jumps and calls on these devices are handled as follows by
the compiler and are subject to some limitations:

@itemize @bullet

@item
The compiler never sets @code{EIND}.

@item
The compiler uses @code{EIND} implicitly in @code{EICALL}/@code{EIJMP}
instructions or might read @code{EIND} directly in order to emulate an
indirect call/jump by means of a @code{RET} instruction.

@item
The compiler assumes that @code{EIND} never changes during the startup
code or during the application. In particular, @code{EIND} is not
saved/restored in function or interrupt service routine
prologue/epilogue.

@item
For indirect calls to functions and computed goto, the linker
generates @emph{stubs}. Stubs are jump pads sometimes also called
@emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
The stub contains a direct jump to the desired address.

@item
Linker relaxation must be turned on so that the linker generates
the stubs correctly in all situations. See the compiler option
@option{-mrelax} and the linker option @option{--relax}.
There are corner cases where the linker is supposed to generate stubs
but aborts without relaxation and without a helpful error message.

@item
The default linker script is arranged for code with @code{EIND = 0}.
If code is supposed to work for a setup with @code{EIND != 0}, a custom
linker script has to be used in order to place the sections whose
name start with @code{.trampolines} into the segment where @code{EIND}
points to.

@item
The startup code from libgcc never sets @code{EIND}.
Notice that startup code is a blend of code from libgcc and AVR-LibC.
For the impact of AVR-LibC on @code{EIND}, see the
@w{@uref{http://nongnu.org/avr-libc/user-manual/,AVR-LibC user manual}}.

@item
It is legitimate for user-specific startup code to set up @code{EIND}
early, for example by means of initialization code located in
section @code{.init3}. Such code runs prior to general startup code
that initializes RAM and calls constructors, but after the bit
of startup code from AVR-LibC that sets @code{EIND} to the segment
where the vector table is located.
@example
#include <avr/io.h>

static void
__attribute__((section(".init3"),naked,used,no_instrument_function))
init3_set_eind (void)
@{
  __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
                  "out %i0,r24" :: "n" (&EIND) : "r24","memory");
@}
@end example

@noindent
The @code{__trampolines_start} symbol is defined in the linker script.

@item
Stubs are generated automatically by the linker if
the following two conditions are met:
@itemize @minus

@item The address of a label is taken by means of the @code{gs} modifier
(short for @emph{generate stubs}) like so:
@example
LDI r24, lo8(gs(@var{func}))
LDI r25, hi8(gs(@var{func}))
@end example
@item The final location of that label is in a code segment
@emph{outside} the segment where the stubs are located.
@end itemize

@item
The compiler emits such @code{gs} modifiers for code labels in the
following situations:
@itemize @minus
@item Taking address of a function or code label.
@item Computed goto.
@item If prologue-save function is used, see @option{-mcall-prologues}
command-line option.
@item Switch/case dispatch tables. If you do not want such dispatch
tables you can specify the @option{-fno-jump-tables} command-line option.
@item C and C++ constructors/destructors called during startup/shutdown.
@item If the tools hit a @code{gs()} modifier explained above.
@end itemize

@item
Jumping to non-symbolic addresses like so is @emph{not} supported:

@example
int main (void)
@{
    /* Call function at word address 0x2 */
    return ((int(*)(void)) 0x2)();
@}
@end example

Instead, a stub has to be set up, i.e.@: the function has to be called
through a symbol (@code{func_4} in the example):

@example
int main (void)
@{
    extern int func_4 (void);

    /* Call function at byte address 0x4 */
    return func_4();
@}
@end example

and the application be linked with @option{-Wl,--defsym,func_4=0x4}.
Alternatively, @code{func_4} can be defined in the linker script.
@end itemize

@subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
@cindex @code{RAMPD}
@cindex @code{RAMPX}
@cindex @code{RAMPY}
@cindex @code{RAMPZ}
Some AVR devices support memories larger than the 64@tie{}KiB range
that can be accessed with 16-bit pointers.  To access memory locations
outside this 64@tie{}KiB range, the content of a @code{RAMP}
register is used as high part of the address:
The @code{X}, @code{Y}, @code{Z} address register is concatenated
with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
register, respectively, to get a wide address. Similarly,
@code{RAMPD} is used together with direct addressing.

@itemize
@item
The startup code initializes the @code{RAMP} special function
registers with zero.

@item
If a @ref{AVR Named Address Spaces,named address space} other than
generic or @code{__flash} is used, then @code{RAMPZ} is set
as needed before the operation.

@item
If the device supports RAM larger than 64@tie{}KiB and the compiler
needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
is reset to zero after the operation.

@item
If the device comes with a specific @code{RAMP} register, the ISR
prologue/epilogue saves/restores that SFR and initializes it with
zero in case the ISR code might (implicitly) use it.

@item
RAM larger than 64@tie{}KiB is not supported by GCC for AVR targets.
If you use inline assembler to read from locations outside the
16-bit address range and change one of the @code{RAMP} registers,
you must reset it to zero after the access.

@end itemize

@subsubsection AVR Built-in Macros

GCC defines several built-in macros so that the user code can test
for the presence or absence of features.  Almost any of the following
built-in macros are deduced from device capabilities and thus
triggered by the @option{-mmcu=} command-line option.

For even more AVR-specific built-in macros see
@ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.

@table @code

@item __AVR_ARCH__
Build-in macro that resolves to a decimal number that identifies the
architecture and depends on the @option{-mmcu=@var{mcu}} option.
Possible values are:

@code{2}, @code{25}, @code{3}, @code{31}, @code{35},
@code{4}, @code{5}, @code{51}, @code{6}

for @var{mcu}=@code{avr2}, @code{avr25}, @code{avr3}, @code{avr31},
@code{avr35}, @code{avr4}, @code{avr5}, @code{avr51}, @code{avr6},

respectively and

@code{100},
@code{102}, @code{103}, @code{104},
@code{105}, @code{106}, @code{107}

for @var{mcu}=@code{avrtiny},
@code{avrxmega2}, @code{avrxmega3}, @code{avrxmega4},
@code{avrxmega5}, @code{avrxmega6}, @code{avrxmega7}, respectively.
If @var{mcu} specifies a device, this built-in macro is set
accordingly. For example, with @option{-mmcu=atmega8} the macro is
defined to @code{4}.

@item __AVR_@var{Device}__
Setting @option{-mmcu=@var{device}} defines this built-in macro which reflects
the device's name. For example, @option{-mmcu=atmega8} defines the
built-in macro @code{__AVR_ATmega8__}, @option{-mmcu=attiny261a} defines
@code{__AVR_ATtiny261A__}, etc.

The built-in macros' names follow
the scheme @code{__AVR_@var{Device}__} where @var{Device} is
the device name as from the AVR user manual. The difference between
@var{Device} in the built-in macro and @var{device} in
@option{-mmcu=@var{device}} is that the latter is always lowercase.

If @var{device} is not a device but only a core architecture like
@samp{avr51}, this macro is not defined.

@item __AVR_DEVICE_NAME__
Setting @option{-mmcu=@var{device}} defines this built-in macro to
the device's name. For example, with @option{-mmcu=atmega8} the macro
is defined to @code{atmega8}.

If @var{device} is not a device but only a core architecture like
@samp{avr51}, this macro is not defined.

@item __AVR_XMEGA__
The device / architecture belongs to the XMEGA family of devices.

@item __AVR_HAVE_ELPM__
The device has the @code{ELPM} instruction.

@item __AVR_HAVE_ELPMX__
The device has the @code{ELPM R@var{n},Z} and @code{ELPM
R@var{n},Z+} instructions.

@item __AVR_HAVE_MOVW__
The device has the @code{MOVW} instruction to perform 16-bit
register-register moves.

@item __AVR_HAVE_LPMX__
The device has the @code{LPM R@var{n},Z} and
@code{LPM R@var{n},Z+} instructions.

@item __AVR_HAVE_MUL__
The device has a hardware multiplier. 

@item __AVR_HAVE_JMP_CALL__
The device has the @code{JMP} and @code{CALL} instructions.
This is the case for devices with more than 8@tie{}KiB of program
memory.

@item __AVR_HAVE_EIJMP_EICALL__
@itemx __AVR_3_BYTE_PC__
The device has the @code{EIJMP} and @code{EICALL} instructions.
This is the case for devices with more than 128@tie{}KiB of program memory.
This also means that the program counter
(PC) is 3@tie{}bytes wide.

@item __AVR_2_BYTE_PC__
The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
with up to 128@tie{}KiB of program memory.

@item __AVR_HAVE_8BIT_SP__
@itemx __AVR_HAVE_16BIT_SP__
The stack pointer (SP) register is treated as 8-bit respectively
16-bit register by the compiler.
The definition of these macros is affected by @option{-mtiny-stack}.

@item __AVR_HAVE_SPH__
@itemx __AVR_SP8__
The device has the SPH (high part of stack pointer) special function
register or has an 8-bit stack pointer, respectively.
The definition of these macros is affected by @option{-mmcu=} and
in the cases of @option{-mmcu=avr2} and @option{-mmcu=avr25} also
by @option{-msp8}.

@item __AVR_HAVE_RAMPD__
@itemx __AVR_HAVE_RAMPX__
@itemx __AVR_HAVE_RAMPY__
@itemx __AVR_HAVE_RAMPZ__
The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
@code{RAMPZ} special function register, respectively.

@item __NO_INTERRUPTS__
This macro reflects the @option{-mno-interrupts} command-line option.

@item __AVR_ERRATA_SKIP__
@itemx __AVR_ERRATA_SKIP_JMP_CALL__
Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
instructions because of a hardware erratum.  Skip instructions are
@code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
set.

@item __AVR_ISA_RMW__
The device has Read-Modify-Write instructions (XCH, LAC, LAS and LAT).

@item __AVR_SFR_OFFSET__=@var{offset}
Instructions that can address I/O special function registers directly
like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
address as if addressed by an instruction to access RAM like @code{LD}
or @code{STS}. This offset depends on the device architecture and has
to be subtracted from the RAM address in order to get the
respective I/O@tie{}address.

@item __AVR_SHORT_CALLS__
The @option{-mshort-calls} command line option is set.

@item __AVR_PM_BASE_ADDRESS__=@var{addr}
Some devices support reading from flash memory by means of @code{LD*}
instructions.  The flash memory is seen in the data address space
at an offset of @code{__AVR_PM_BASE_ADDRESS__}.  If this macro
is not defined, this feature is not available.  If defined,
the address space is linear and there is no need to put
@code{.rodata} into RAM.  This is handled by the default linker
description file, and is currently available for
@code{avrtiny} and @code{avrxmega3}.  Even more convenient,
there is no need to use address spaces like @code{__flash} or
features like attribute @code{progmem} and @code{pgm_read_*}.

@item __WITH_AVRLIBC__
The compiler is configured to be used together with AVR-Libc.
See the @option{--with-avrlibc} configure option.

@item __HAVE_DOUBLE_MULTILIB__
Defined if @option{-mdouble=} acts as a multilib option.

@item __HAVE_DOUBLE32__
@itemx __HAVE_DOUBLE64__
Defined if the compiler supports 32-bit double resp. 64-bit double.
The actual layout is specified by option @option{-mdouble=}.

@item __DEFAULT_DOUBLE__
The size in bits of @code{double} if @option{-mdouble=} is not set.
To test the layout of @code{double} in a program, use the built-in
macro @code{__SIZEOF_DOUBLE__}.

@item __HAVE_LONG_DOUBLE32__
@itemx __HAVE_LONG_DOUBLE64__
@itemx __HAVE_LONG_DOUBLE_MULTILIB__
@itemx __DEFAULT_LONG_DOUBLE__
Same as above, but for @code{long double} instead of @code{double}.

@item __WITH_DOUBLE_COMPARISON__
Reflects the @code{--with-double-comparison=@{tristate|bool|libf7@}}
@w{@uref{https://gcc.gnu.org/install/configure.html#avr,configure option}}
and is defined to @code{2} or @code{3}.

@item __WITH_LIBF7_LIBGCC__
@itemx __WITH_LIBF7_MATH__
@itemx __WITH_LIBF7_MATH_SYMBOLS__
Reflects the @code{--with-libf7=@{libgcc|math|math-symbols@}}
@w{@uref{https://gcc.gnu.org/install/configure.html#avr,configure option}}.

@end table

@node Blackfin Options
@subsection Blackfin Options
@cindex Blackfin Options

@table @gcctabopt
@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{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
@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{bf547}, @samp{bf548}, @samp{bf549},
@samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
@samp{bf561}, @samp{bf592}.

The optional @var{sirevision} specifies the silicon revision of the target
Blackfin processor.  Any workarounds available for the targeted silicon revision
are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
hexadecimal digits representing the major and minor numbers in the silicon
revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
is not defined.  If @var{sirevision} is @samp{any}, the
@code{__SILICON_REVISION__} is defined to be @code{0xffff}.
If this optional @var{sirevision} is not used, GCC assumes the latest known
silicon revision of the targeted Blackfin processor.

GCC defines a preprocessor macro for the specified @var{cpu}.
For the @samp{bfin-elf} toolchain, this option causes the hardware BSP
provided by libgloss to be linked in if @option{-msim} is not given.

Without this option, @samp{bf532} is used as the processor by default.

Note that support for @samp{bf561} is incomplete.  For @samp{bf561},
only the preprocessor macro is defined.

@item -msim
@opindex msim
Specifies that the program will be run on the simulator.  This causes
the simulator BSP provided by libgloss to be linked in.  This option
has effect only for @samp{bfin-elf} toolchain.
Certain other options, such as @option{-mid-shared-library} and
@option{-mfdpic}, imply @option{-msim}.

@item -momit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
Don't keep the frame pointer in a register for leaf functions.  This
avoids the instructions to save, set up and restore frame pointers and
makes an extra register available in leaf functions.

@item -mspecld-anomaly
@opindex mspecld-anomaly
When enabled, the compiler ensures that the generated code does not
contain speculative loads after jump instructions. If this option is used,
@code{__WORKAROUND_SPECULATIVE_LOADS} is defined.

@item -mno-specld-anomaly
@opindex mno-specld-anomaly
@opindex mspecld-anomaly
Don't generate extra code to prevent speculative loads from occurring.

@item -mcsync-anomaly
@opindex mcsync-anomaly
When enabled, the compiler ensures that the generated code does not
contain CSYNC or SSYNC instructions too soon after conditional branches.
If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.

@item -mno-csync-anomaly
@opindex mno-csync-anomaly
@opindex mcsync-anomaly
Don't generate extra code to prevent CSYNC or SSYNC instructions from
occurring too soon after a conditional branch.

@item -mlow64k
@opindex mlow64k
When enabled, the compiler is free to take advantage of the knowledge that
the entire program fits into the low 64k of memory.

@item -mno-low64k
@opindex mno-low64k
Assume that the program is arbitrarily large.  This is the default.

@item -mstack-check-l1
@opindex mstack-check-l1
Do stack checking using information placed into L1 scratchpad memory by the
uClinux kernel.

@item -mid-shared-library
@opindex mid-shared-library
Generate code that supports shared libraries via the library ID method.
This allows for execute in place and shared libraries in an environment
without virtual memory management.  This option implies @option{-fPIC}.
With a @samp{bfin-elf} target, this option implies @option{-msim}.

@item -mno-id-shared-library
@opindex mno-id-shared-library
@opindex mid-shared-library
Generate code that doesn't assume ID-based shared libraries are being used.
This is the default.

@item -mleaf-id-shared-library
@opindex mleaf-id-shared-library
Generate code that supports shared libraries via the library ID method,
but assumes that this library or executable won't link against any other
ID shared libraries.  That allows the compiler to use faster code for jumps
and calls.

@item -mno-leaf-id-shared-library
@opindex mno-leaf-id-shared-library
@opindex mleaf-id-shared-library
Do not assume that the code being compiled won't link against any ID shared
libraries.  Slower code is generated for jump and call insns.

@item -mshared-library-id=n
@opindex mshared-library-id
Specifies the identification number of the ID-based shared library being
compiled.  Specifying a value of 0 generates more compact code; specifying
other values forces the allocation of that number to the current
library but is no more space- or time-efficient than omitting this option.

@item -msep-data
@opindex msep-data
Generate code that allows the data segment to be located in a different
area of memory from the text segment.  This allows for execute in place in
an environment without virtual memory management by eliminating relocations
against the text section.

@item -mno-sep-data
@opindex mno-sep-data
@opindex msep-data
Generate code that assumes that the data segment follows the text segment.
This is the default.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
lies outside of the 24-bit addressing range of the offset-based
version of subroutine call instruction.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} restores the default behavior.  Note these
switches have no effect on how the compiler generates code to handle
function calls via function pointers.

@item -mfast-fp
@opindex mfast-fp
Link with the fast floating-point library. This library relaxes some of
the IEEE floating-point standard's rules for checking inputs against
Not-a-Number (NAN), in the interest of performance.

@item -minline-plt
@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}.

@item -mmulticore
@opindex mmulticore
Build a standalone application for multicore Blackfin processors. 
This option causes proper start files and link scripts supporting 
multicore to be used, and defines the macro @code{__BFIN_MULTICORE}. 
It can only be used with @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. 

This option can be used with @option{-mcorea} or @option{-mcoreb}, which
selects the one-application-per-core programming model.  Without
@option{-mcorea} or @option{-mcoreb}, the single-application/dual-core
programming model is used. In this model, the main function of Core B
should be named as @code{coreb_main}.

If this option is not used, the single-core application programming
model is used.

@item -mcorea
@opindex mcorea
Build a standalone application for Core A of BF561 when using
the one-application-per-core programming model. Proper start files
and link scripts are used to support Core A, and the macro
@code{__BFIN_COREA} is defined.
This option can only be used in conjunction with @option{-mmulticore}.

@item -mcoreb
@opindex mcoreb
Build a standalone application for Core B of BF561 when using
the one-application-per-core programming model. Proper start files
and link scripts are used to support Core B, and the macro
@code{__BFIN_COREB} is defined. When this option is used, @code{coreb_main}
should be used instead of @code{main}. 
This option can only be used in conjunction with @option{-mmulticore}.

@item -msdram
@opindex msdram
Build a standalone application for SDRAM. Proper start files and
link scripts are used to put the application into SDRAM, and the macro
@code{__BFIN_SDRAM} is defined.
The loader should initialize SDRAM before loading the application.

@item -micplb
@opindex micplb
Assume that ICPLBs are enabled at run time.  This has an effect on certain
anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
are enabled; for standalone applications the default is off.
@end table

@node C6X Options
@subsection C6X Options
@cindex C6X Options

@table @gcctabopt
@item -march=@var{name}
@opindex march
This specifies the name of the target architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  Permissible names are: @samp{c62x},
@samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.

@item -mbig-endian
@opindex mbig-endian
Generate code for a big-endian target.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.  This is the default.

@item -msim
@opindex msim
Choose startup files and linker script suitable for the simulator.

@item -msdata=default
@opindex msdata=default
Put small global and static data in the @code{.neardata} section,
which is pointed to by register @code{B14}.  Put small uninitialized
global and static data in the @code{.bss} section, which is adjacent
to the @code{.neardata} section.  Put small read-only data into the
@code{.rodata} section.  The corresponding sections used for large
pieces of data are @code{.fardata}, @code{.far} and @code{.const}.

@item -msdata=all
@opindex msdata=all
Put all data, not just small objects, into the sections reserved for
small data, and use addressing relative to the @code{B14} register to
access them.

@item -msdata=none
@opindex msdata=none
Make no use of the sections reserved for small data, and use absolute
addresses to access all data.  Put all initialized global and static
data in the @code{.fardata} section, and all uninitialized data in the
@code{.far} section.  Put all constant data into the @code{.const}
section.
@end table

@node CRIS Options
@subsection CRIS Options
@cindex CRIS Options

These options are defined specifically for the CRIS ports.

@table @gcctabopt
@item -march=@var{architecture-type}
@itemx -mcpu=@var{architecture-type}
@opindex march
@opindex mcpu
Generate code for the specified architecture.  The choices for
@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
@samp{v10}.

@item -mtune=@var{architecture-type}
@opindex mtune
Tune to @var{architecture-type} everything applicable about the generated
code, except for the ABI and the set of available instructions.  The
choices for @var{architecture-type} are the same as for
@option{-march=@var{architecture-type}}.

@item -mmax-stack-frame=@var{n}
@opindex mmax-stack-frame
Warn when the stack frame of a function exceeds @var{n} bytes.

@item -metrax4
@itemx -metrax100
@opindex metrax4
@opindex metrax100
The options @option{-metrax4} and @option{-metrax100} are synonyms for
@option{-march=v3} and @option{-march=v8} respectively.

@item -mmul-bug-workaround
@itemx -mno-mul-bug-workaround
@opindex mmul-bug-workaround
@opindex mno-mul-bug-workaround
Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
models where it applies.  This option is active by default.

@item -mpdebug
@opindex mpdebug
Enable CRIS-specific verbose debug-related information in the assembly
code.  This option also has the effect of turning off the @samp{#NO_APP}
formatted-code indicator to the assembler at the beginning of the
assembly file.

@item -mcc-init
@opindex mcc-init
Do not use condition-code results from previous instruction; always emit
compare and test instructions before use of condition codes.

@item -mno-side-effects
@opindex mno-side-effects
@opindex mside-effects
Do not emit instructions with side effects in addressing modes other than
post-increment.

@item -mstack-align
@itemx -mno-stack-align
@itemx -mdata-align
@itemx -mno-data-align
@itemx -mconst-align
@itemx -mno-const-align
@opindex mstack-align
@opindex mno-stack-align
@opindex mdata-align
@opindex mno-data-align
@opindex mconst-align
@opindex mno-const-align
These options (@samp{no-} options) arrange (eliminate arrangements) for the
stack frame, individual data and constants to be aligned for the maximum
single data access size for the chosen CPU model.  The default is to
arrange for 32-bit alignment.  ABI details such as structure layout are
not affected by these options.

@item -m32-bit
@itemx -m16-bit
@itemx -m8-bit
@opindex m32-bit
@opindex m16-bit
@opindex m8-bit
Similar to the stack- data- and const-align options above, these options
arrange for stack frame, writable data and constants to all be 32-bit,
16-bit or 8-bit aligned.  The default is 32-bit alignment.

@item -mno-prologue-epilogue
@itemx -mprologue-epilogue
@opindex mno-prologue-epilogue
@opindex mprologue-epilogue
With @option{-mno-prologue-epilogue}, the normal function prologue and
epilogue which set up the stack frame are omitted and no return
instructions or return sequences are generated in the code.  Use this
option only together with visual inspection of the compiled code: no
warnings or errors are generated when call-saved registers must be saved,
or storage for local variables needs to be allocated.

@item -mno-gotplt
@itemx -mgotplt
@opindex mno-gotplt
@opindex mgotplt
With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
instruction sequences that load addresses for functions from the PLT part
of the GOT rather than (traditional on other architectures) calls to the
PLT@.  The default is @option{-mgotplt}.

@item -melf
@opindex melf
Legacy no-op option only recognized with the cris-axis-elf and
cris-axis-linux-gnu targets.

@item -mlinux
@opindex mlinux
Legacy no-op option only recognized with the cris-axis-linux-gnu target.

@item -sim
@opindex sim
This option, recognized for the cris-axis-elf, arranges
to link with input-output functions from a simulator library.  Code,
initialized data and zero-initialized data are allocated consecutively.

@item -sim2
@opindex sim2
Like @option{-sim}, but pass linker options to locate initialized data at
0x40000000 and zero-initialized data at 0x80000000.
@end table

@node CR16 Options
@subsection CR16 Options
@cindex CR16 Options

These options are defined specifically for the CR16 ports.

@table @gcctabopt

@item -mmac
@opindex mmac
Enable the use of multiply-accumulate instructions. Disabled by default.

@item -mcr16cplus
@itemx -mcr16c
@opindex mcr16cplus
@opindex mcr16c
Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 
is default.

@item -msim
@opindex msim
Links the library libsim.a which is in compatible with simulator. Applicable
to ELF compiler only.

@item -mint32
@opindex mint32
Choose integer type as 32-bit wide.

@item -mbit-ops
@opindex mbit-ops
Generates @code{sbit}/@code{cbit} instructions for bit manipulations.

@item -mdata-model=@var{model}
@opindex mdata-model
Choose a data model. The choices for @var{model} are @samp{near},
@samp{far} or @samp{medium}. @samp{medium} is default.
However, @samp{far} is not valid with @option{-mcr16c}, as the
CR16C architecture does not support the far data model.
@end table

@node C-SKY Options
@subsection C-SKY Options
@cindex C-SKY Options

GCC supports these options when compiling for C-SKY V2 processors.

@table @gcctabopt

@item -march=@var{arch}
@opindex march=
Specify the C-SKY target architecture.  Valid values for @var{arch} are:
@samp{ck801}, @samp{ck802}, @samp{ck803}, @samp{ck807}, and @samp{ck810}.
The default is @samp{ck810}.

@item -mcpu=@var{cpu}
@opindex mcpu=
Specify the C-SKY target processor.  Valid values for @var{cpu} are:
@samp{ck801}, @samp{ck801t},
@samp{ck802}, @samp{ck802t}, @samp{ck802j},
@samp{ck803}, @samp{ck803h}, @samp{ck803t}, @samp{ck803ht},
@samp{ck803f}, @samp{ck803fh}, @samp{ck803e}, @samp{ck803eh},
@samp{ck803et}, @samp{ck803eht}, @samp{ck803ef}, @samp{ck803efh},
@samp{ck803ft}, @samp{ck803eft}, @samp{ck803efht}, @samp{ck803r1},
@samp{ck803hr1}, @samp{ck803tr1}, @samp{ck803htr1}, @samp{ck803fr1},
@samp{ck803fhr1}, @samp{ck803er1}, @samp{ck803ehr1}, @samp{ck803etr1},
@samp{ck803ehtr1}, @samp{ck803efr1}, @samp{ck803efhr1}, @samp{ck803ftr1},
@samp{ck803eftr1}, @samp{ck803efhtr1},
@samp{ck803s}, @samp{ck803st}, @samp{ck803se}, @samp{ck803sf},
@samp{ck803sef}, @samp{ck803seft},
@samp{ck807e}, @samp{ck807ef}, @samp{ck807}, @samp{ck807f},
@samp{ck810e}, @samp{ck810et}, @samp{ck810ef}, @samp{ck810eft},
@samp{ck810}, @samp{ck810v}, @samp{ck810f}, @samp{ck810t}, @samp{ck810fv},
@samp{ck810tv}, @samp{ck810ft}, and @samp{ck810ftv}.

@item -mbig-endian
@opindex mbig-endian
@itemx -EB
@opindex EB
@itemx -mlittle-endian
@opindex mlittle-endian
@itemx -EL
@opindex EL

Select big- or little-endian code.  The default is little-endian.

@item -mfloat-abi=@var{name}
@opindex mfloat-abi
Specifies which floating-point ABI to use.  Permissible values
are: @samp{soft}, @samp{softfp} and @samp{hard}.

Specifying @samp{soft} causes GCC to generate output containing
library calls for floating-point operations.
@samp{softfp} allows the generation of code using hardware floating-point
instructions, but still uses the soft-float calling conventions.
@samp{hard} allows generation of floating-point instructions
and uses FPU-specific calling conventions.

The default depends on the specific target configuration.  Note that
the hard-float and soft-float ABIs are not link-compatible; you must
compile your entire program with the same ABI, and link with a
compatible set of libraries.

@item -mhard-float
@opindex mhard-float
@itemx -msoft-float
@opindex msoft-float

Select hardware or software floating-point implementations.
The default is soft float.

@item -mdouble-float
@itemx -mno-double-float
@opindex mdouble-float
When @option{-mhard-float} is in effect, enable generation of
double-precision float instructions.  This is the default except
when compiling for CK803.

@item -mfdivdu
@itemx -mno-fdivdu
@opindex mfdivdu
When @option{-mhard-float} is in effect, enable generation of
@code{frecipd}, @code{fsqrtd}, and @code{fdivd} instructions.
This is the default except when compiling for CK803.

@item -mfpu=@var{fpu}
@opindex mfpu=
Select the floating-point processor.  This option can only be used with
@option{-mhard-float}.
Values for @var{fpu} are
@samp{fpv2_sf} (equivalent to @samp{-mno-double-float -mno-fdivdu}),
@samp{fpv2} (@samp{-mdouble-float -mno-divdu}), and
@samp{fpv2_divd} (@samp{-mdouble-float -mdivdu}).

@item -melrw
@itemx -mno-elrw
@opindex melrw
Enable the extended @code{lrw} instruction.  This option defaults to on
for CK801 and off otherwise.

@item -mistack
@itemx -mno-istack
@opindex mistack
Enable interrupt stack instructions; the default is off.

The @option{-mistack} option is required to handle the
@code{interrupt} and @code{isr} function attributes
(@pxref{C-SKY Function Attributes}).

@item -mmp
@opindex mmp
Enable multiprocessor instructions; the default is off.

@item -mcp
@opindex mcp
Enable coprocessor instructions; the default is off.

@item -mcache
@opindex mcache
Enable coprocessor instructions; the default is off.

@item -msecurity
@opindex msecurity
Enable C-SKY security instructions; the default is off.

@item -mtrust
@opindex mtrust
Enable C-SKY trust instructions; the default is off.

@item -mdsp
@opindex mdsp
@itemx -medsp
@opindex medsp
@itemx -mvdsp
@opindex mvdsp
Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions, respectively.
All of these options default to off.

@item -mdiv
@itemx -mno-div
@opindex mdiv
Generate divide instructions.  Default is off.

@item -msmart
@itemx -mno-smart
@opindex msmart
Generate code for Smart Mode, using only registers numbered 0-7 to allow
use of 16-bit instructions.  This option is ignored for CK801 where this
is the required behavior, and it defaults to on for CK802.
For other targets, the default is off.

@item -mhigh-registers
@itemx -mno-high-registers
@opindex mhigh-registers
Generate code using the high registers numbered 16-31.  This option
is not supported on CK801, CK802, or CK803, and is enabled by default
for other processors.

@item -manchor
@itemx -mno-anchor
@opindex manchor
Generate code using global anchor symbol addresses.

@item -mpushpop
@itemx -mno-pushpop
@opindex mpushpop
Generate code using @code{push} and @code{pop} instructions.  This option
defaults to on.

@item -mmultiple-stld
@itemx -mstm
@itemx -mno-multiple-stld
@itemx -mno-stm
@opindex mmultiple-stld
Generate code using @code{stm} and @code{ldm} instructions.  This option
isn't supported on CK801 but is enabled by default on other processors.

@item -mconstpool
@itemx -mno-constpool
@opindex mconstpool
Create constant pools in the compiler instead of deferring it to the
assembler.  This option is the default and required for correct code
generation on CK801 and CK802, and is optional on other processors.

@item -mstack-size
@item -mno-stack-size
@opindex mstack-size
Emit @code{.stack_size} directives for each function in the assembly
output.  This option defaults to off.

@item -mccrt
@itemx -mno-ccrt
@opindex mccrt
Generate code for the C-SKY compiler runtime instead of libgcc.  This
option defaults to off.

@item -mbranch-cost=@var{n}
@opindex mbranch-cost=
Set the branch costs to roughly @code{n} instructions.  The default is 1.

@item -msched-prolog
@itemx -mno-sched-prolog
@opindex msched-prolog
Permit scheduling of function prologue and epilogue sequences.  Using
this option can result in code that is not compliant with the C-SKY V2 ABI
prologue requirements and that cannot be debugged or backtraced.
It is disabled by default.

@item -msim
@opindex msim
Links the library libsemi.a which is in compatible with simulator. Applicable
to ELF compiler only.

@end table

@node Darwin Options
@subsection Darwin Options
@cindex Darwin options

These options are defined for all architectures running the Darwin operating
system.

FSF GCC on Darwin does not create ``fat'' object files; it creates
an object file for the single architecture that GCC was built to
target.  Apple's GCC on Darwin does create ``fat'' files if multiple
@option{-arch} options are used; it does so by running the compiler or
linker multiple times and joining the results together with
@file{lipo}.

The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
@samp{i686}) is determined by the flags that specify the ISA
that GCC is targeting, like @option{-mcpu} or @option{-march}.  The
@option{-force_cpusubtype_ALL} option can be used to override this.

The Darwin tools vary in their behavior when presented with an ISA
mismatch.  The assembler, @file{as}, only permits instructions to
be used that are valid for the subtype of the file it is generating,
so you cannot put 64-bit instructions in a @samp{ppc750} object file.
The linker for shared libraries, @file{/usr/bin/libtool}, fails
and prints an error if asked to create a shared library with a less
restrictive subtype than its input files (for instance, trying to put
a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
for executables, @command{ld}, quietly gives the executable the most
restrictive subtype of any of its input files.

@table @gcctabopt
@item -F@var{dir}
@opindex F
Add the framework directory @var{dir} to the head of the list of
directories to be searched for header files.  These directories are
interleaved with those specified by @option{-I} options and are
scanned in a left-to-right order.

A framework directory is a directory with frameworks in it.  A
framework is a directory with a @file{Headers} and/or
@file{PrivateHeaders} directory contained directly in it that ends
in @file{.framework}.  The name of a framework is the name of this
directory excluding the @file{.framework}.  Headers associated with
the framework are found in one of those two directories, with
@file{Headers} being searched first.  A subframework is a framework
directory that is in a framework's @file{Frameworks} directory.
Includes of subframework headers can only appear in a header of a
framework that contains the subframework, or in a sibling subframework
header.  Two subframeworks are siblings if they occur in the same
framework.  A subframework should not have the same name as a
framework; a warning is issued if this is violated.  Currently a
subframework cannot have subframeworks; in the future, the mechanism
may be extended to support this.  The standard frameworks can be found
in @file{/System/Library/Frameworks} and
@file{/Library/Frameworks}.  An example include looks like
@code{#include <Framework/header.h>}, where @file{Framework} denotes
the name of the framework and @file{header.h} is found in the
@file{PrivateHeaders} or @file{Headers} directory.

@item -iframework@var{dir}
@opindex iframework
Like @option{-F} except the directory is a treated as a system
directory.  The main difference between this @option{-iframework} and
@option{-F} is that with @option{-iframework} the compiler does not
warn about constructs contained within header files found via
@var{dir}.  This option is valid only for the C family of languages.

@item -gused
@opindex gused
Emit debugging information for symbols that are used.  For stabs
debugging format, this enables @option{-feliminate-unused-debug-symbols}.
This is by default ON@.

@item -gfull
@opindex gfull
Emit debugging information for all symbols and types.

@item -mmacosx-version-min=@var{version}
The earliest version of MacOS X that this executable will run on
is @var{version}.  Typical values of @var{version} include @code{10.1},
@code{10.2}, and @code{10.3.9}.

If the compiler was built to use the system's headers by default,
then the default for this option is the system version on which the
compiler is running, otherwise the default is to make choices that
are compatible with as many systems and code bases as possible.

@item -mkernel
@opindex mkernel
Enable kernel development mode.  The @option{-mkernel} option sets
@option{-static}, @option{-fno-common}, @option{-fno-use-cxa-atexit},
@option{-fno-exceptions}, @option{-fno-non-call-exceptions},
@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
applicable.  This mode also sets @option{-mno-altivec},
@option{-msoft-float}, @option{-fno-builtin} and
@option{-mlong-branch} for PowerPC targets.

@item -mone-byte-bool
@opindex mone-byte-bool
Override the defaults for @code{bool} so that @code{sizeof(bool)==1}.
By default @code{sizeof(bool)} is @code{4} when compiling for
Darwin/PowerPC and @code{1} when compiling for Darwin/x86, so this
option has no effect on x86.

@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
to generate code that is not binary compatible with code generated
without that switch.  Using this switch may require recompiling all
other modules in a program, including system libraries.  Use this
switch to conform to a non-default data model.

@item -mfix-and-continue
@itemx -ffix-and-continue
@itemx -findirect-data
@opindex mfix-and-continue
@opindex ffix-and-continue
@opindex findirect-data
Generate code suitable for fast turnaround development, such as to
allow GDB to dynamically load @file{.o} files into already-running
programs.  @option{-findirect-data} and @option{-ffix-and-continue}
are provided for backwards compatibility.

@item -all_load
@opindex all_load
Loads all members of static archive libraries.
See man ld(1) for more information.

@item -arch_errors_fatal
@opindex arch_errors_fatal
Cause the errors having to do with files that have the wrong architecture
to be fatal.

@item -bind_at_load
@opindex bind_at_load
Causes the output file to be marked such that the dynamic linker will
bind all undefined references when the file is loaded or launched.

@item -bundle
@opindex bundle
Produce a Mach-o bundle format file.
See man ld(1) for more information.

@item -bundle_loader @var{executable}
@opindex bundle_loader
This option specifies the @var{executable} that will load the build
output file being linked.  See man ld(1) for more information.

@item -dynamiclib
@opindex dynamiclib
When passed this option, GCC produces a dynamic library instead of
an executable when linking, using the Darwin @file{libtool} command.

@item -force_cpusubtype_ALL
@opindex force_cpusubtype_ALL
This causes GCC's output file to have the @samp{ALL} subtype, instead of
one controlled by the @option{-mcpu} or @option{-march} option.

@item -allowable_client  @var{client_name}
@itemx -client_name
@itemx -compatibility_version
@itemx -current_version
@itemx -dead_strip
@itemx -dependency-file
@itemx -dylib_file
@itemx -dylinker_install_name
@itemx -dynamic
@itemx -exported_symbols_list
@itemx -filelist
@need 800
@itemx -flat_namespace
@itemx -force_flat_namespace
@itemx -headerpad_max_install_names
@itemx -image_base
@itemx -init
@itemx -install_name
@itemx -keep_private_externs
@itemx -multi_module
@itemx -multiply_defined
@itemx -multiply_defined_unused
@need 800
@itemx -noall_load
@itemx -no_dead_strip_inits_and_terms
@itemx -nofixprebinding
@itemx -nomultidefs
@itemx -noprebind
@itemx -noseglinkedit
@itemx -pagezero_size
@itemx -prebind
@itemx -prebind_all_twolevel_modules
@itemx -private_bundle
@need 800
@itemx -read_only_relocs
@itemx -sectalign
@itemx -sectobjectsymbols
@itemx -whyload
@itemx -seg1addr
@itemx -sectcreate
@itemx -sectobjectsymbols
@itemx -sectorder
@itemx -segaddr
@itemx -segs_read_only_addr
@need 800
@itemx -segs_read_write_addr
@itemx -seg_addr_table
@itemx -seg_addr_table_filename
@itemx -seglinkedit
@itemx -segprot
@itemx -segs_read_only_addr
@itemx -segs_read_write_addr
@itemx -single_module
@itemx -static
@itemx -sub_library
@need 800
@itemx -sub_umbrella
@itemx -twolevel_namespace
@itemx -umbrella
@itemx -undefined
@itemx -unexported_symbols_list
@itemx -weak_reference_mismatches
@itemx -whatsloaded
@opindex allowable_client
@opindex client_name
@opindex compatibility_version
@opindex current_version
@opindex dead_strip
@opindex dependency-file
@opindex dylib_file
@opindex dylinker_install_name
@opindex dynamic
@opindex exported_symbols_list
@opindex filelist
@opindex flat_namespace
@opindex force_flat_namespace
@opindex headerpad_max_install_names
@opindex image_base
@opindex init
@opindex install_name
@opindex keep_private_externs
@opindex multi_module
@opindex multiply_defined
@opindex multiply_defined_unused
@opindex noall_load
@opindex no_dead_strip_inits_and_terms
@opindex nofixprebinding
@opindex nomultidefs
@opindex noprebind
@opindex noseglinkedit
@opindex pagezero_size
@opindex prebind
@opindex prebind_all_twolevel_modules
@opindex private_bundle
@opindex read_only_relocs
@opindex sectalign
@opindex sectobjectsymbols
@opindex whyload
@opindex seg1addr
@opindex sectcreate
@opindex sectobjectsymbols
@opindex sectorder
@opindex segaddr
@opindex segs_read_only_addr
@opindex segs_read_write_addr
@opindex seg_addr_table
@opindex seg_addr_table_filename
@opindex seglinkedit
@opindex segprot
@opindex segs_read_only_addr
@opindex segs_read_write_addr
@opindex single_module
@opindex static
@opindex sub_library
@opindex sub_umbrella
@opindex twolevel_namespace
@opindex umbrella
@opindex undefined
@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

@node DEC Alpha Options
@subsection DEC Alpha Options

These @samp{-m} options are defined for the DEC Alpha implementations:

@table @gcctabopt
@item -mno-soft-float
@itemx -msoft-float
@opindex mno-soft-float
@opindex msoft-float
Use (do not use) the hardware floating-point instructions for
floating-point operations.  When @option{-msoft-float} is specified,
functions in @file{libgcc.a} are used to perform floating-point
operations.  Unless they are replaced by routines that emulate the
floating-point operations, or compiled in such a way as to call such
emulations routines, these routines issue floating-point
operations.   If you are compiling for an Alpha without floating-point
operations, you must ensure that the library is built so as not to call
them.

Note that Alpha implementations without floating-point operations are
required to have floating-point registers.

@item -mfp-reg
@itemx -mno-fp-regs
@opindex mfp-reg
@opindex mno-fp-regs
Generate code that uses (does not use) the floating-point register set.
@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 @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
so any function with a floating-point argument or return value called by code
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,
and hence need not save and restore, any floating-point registers.

@item -mieee
@opindex mieee
The Alpha architecture implements floating-point hardware optimized for
maximum performance.  It is mostly compliant with the IEEE floating-point
standard.  However, for full compliance, software assistance is
required.  This option generates code fully IEEE-compliant code
@emph{except} that the @var{inexact-flag} is not maintained (see below).
If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
defined during compilation.  The resulting 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 @option{-ieee_with_no_inexact}.

@item -mieee-with-inexact
@opindex mieee-with-inexact
This is like @option{-mieee} except the generated code also maintains
the IEEE @var{inexact-flag}.  Turning on this option causes the
generated code to implement fully-compliant IEEE math.  In addition to
@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
macro.  On some Alpha implementations the resulting code may execute
significantly slower than the code generated by default.  Since there is
very little code that depends on the @var{inexact-flag}, you should
normally not specify this option.  Other Alpha compilers call this
option @option{-ieee_with_inexact}.

@item -mfp-trap-mode=@var{trap-mode}
@opindex mfp-trap-mode
This option controls what floating-point related traps are enabled.
Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
The trap mode can be set to one of four values:

@table @samp
@item n
This is the default (normal) setting.  The only traps that are enabled
are the ones that cannot be disabled in software (e.g., division by zero
trap).

@item u
In addition to the traps enabled by @samp{n}, underflow traps are enabled
as well.

@item su
Like @samp{u}, but the instructions are marked to be safe for software
completion (see Alpha architecture manual for details).

@item sui
Like @samp{su}, but inexact traps are enabled as well.
@end table

@item -mfp-rounding-mode=@var{rounding-mode}
@opindex mfp-rounding-mode
Selects the IEEE rounding mode.  Other Alpha compilers call this option
@option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
of:

@table @samp
@item n
Normal IEEE rounding mode.  Floating-point numbers are rounded towards
the nearest machine number or towards the even machine number in case
of a tie.

@item m
Round towards minus infinity.

@item c
Chopped rounding mode.  Floating-point numbers are rounded towards zero.

@item d
Dynamic rounding mode.  A field in the floating-point control register
(@var{fpcr}, see Alpha architecture reference manual) controls the
rounding mode in effect.  The C library initializes this register for
rounding towards plus infinity.  Thus, unless your program modifies the
@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
@end table

@item -mtrap-precision=@var{trap-precision}
@opindex mtrap-precision
In the Alpha architecture, floating-point traps are imprecise.  This
means without software assistance it is impossible to recover from a
floating trap and program execution normally needs to be terminated.
GCC can generate code that can assist operating system trap handlers
in determining the exact location that caused a floating-point trap.
Depending on the requirements of an application, different levels of
precisions can be selected:

@table @samp
@item p
Program precision.  This option is the default and means a trap handler
can only identify which program caused a floating-point exception.

@item f
Function precision.  The trap handler can determine the function that
caused a floating-point exception.

@item i
Instruction precision.  The trap handler can determine the exact
instruction that caused a floating-point exception.
@end table

Other Alpha compilers provide the equivalent options called
@option{-scope_safe} and @option{-resumption_safe}.

@item -mieee-conformant
@opindex mieee-conformant
This option marks the generated code as IEEE conformant.  You must not
use this option unless you also specify @option{-mtrap-precision=i} and either
@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
is to emit the line @samp{.eflag 48} in the function prologue of the
generated assembly file.

@item -mbuild-constants
@opindex mbuild-constants
Normally GCC examines a 32- or 64-bit integer constant to
see if it can construct it from smaller constants in two or three
instructions.  If it cannot, it outputs the constant as a literal and
generates code to load it from the data segment at run time.

Use this option to require GCC to construct @emph{all} integer constants
using code, even if it takes more instructions (the maximum is six).

You typically use this option to build a shared library dynamic
loader.  Itself a shared library, it must relocate itself in memory
before it can find the variables and constants in its own data segment.

@item -mbwx
@itemx -mno-bwx
@itemx -mcix
@itemx -mno-cix
@itemx -mfix
@itemx -mno-fix
@itemx -mmax
@itemx -mno-max
@opindex mbwx
@opindex mno-bwx
@opindex mcix
@opindex mno-cix
@opindex mfix
@opindex mno-fix
@opindex mmax
@opindex mno-max
Indicate whether GCC should generate code to use the optional BWX,
CIX, FIX and MAX instruction sets.  The default is to use the instruction
sets supported by the CPU type specified via @option{-mcpu=} option or that
of the CPU on which GCC was built if none is specified.

@item -mfloat-vax
@itemx -mfloat-ieee
@opindex mfloat-vax
@opindex mfloat-ieee
Generate code that uses (does not use) VAX F and G floating-point
arithmetic instead of IEEE single and double precision.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-relocs
Older Alpha assemblers provided no way to generate symbol relocations
except via assembler macros.  Use of these macros does not allow
optimal instruction scheduling.  GNU binutils as of version 2.12
supports a new syntax that allows the compiler to explicitly mark
which relocations should apply to which instructions.  This option
is mostly useful for debugging, as GCC detects the capabilities of
the assembler when it is built and sets the default accordingly.

@item -msmall-data
@itemx -mlarge-data
@opindex msmall-data
@opindex mlarge-data
When @option{-mexplicit-relocs} is in effect, static data is
accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
(the @code{.sdata} and @code{.sbss} sections) and are accessed via
16-bit relocations off of the @code{$gp} register.  This limits the
size of the small data area to 64KB, but allows the variables to be
directly accessed via a single instruction.

The default is @option{-mlarge-data}.  With this option the data area
is limited to just below 2GB@.  Programs that require more than 2GB of
data must use @code{malloc} or @code{mmap} to allocate the data in the
heap instead of in the program's data segment.

When generating code for shared libraries, @option{-fpic} implies
@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.

@item -msmall-text
@itemx -mlarge-text
@opindex msmall-text
@opindex mlarge-text
When @option{-msmall-text} is used, the compiler assumes that the
code of the entire program (or shared library) fits in 4MB, and is
thus reachable with a branch instruction.  When @option{-msmall-data}
is used, the compiler can assume that all local symbols share the
same @code{$gp} value, and thus reduce the number of instructions
required for a function call from 4 to 1.

The default is @option{-mlarge-text}.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set the instruction set and instruction scheduling parameters for
machine type @var{cpu_type}.  You can specify either the @samp{EV}
style name or the corresponding chip number.  GCC supports scheduling
parameters for the EV4, EV5 and EV6 family of processors and
chooses the default values for the instruction set from the processor
you specify.  If you do not specify a processor type, GCC defaults
to the processor on which the compiler was built.

Supported values for @var{cpu_type} are

@table @samp
@item ev4
@itemx ev45
@itemx 21064
Schedules as an EV4 and has no instruction set extensions.

@item ev5
@itemx 21164
Schedules as an EV5 and has no instruction set extensions.

@item ev56
@itemx 21164a
Schedules as an EV5 and supports the BWX extension.

@item pca56
@itemx 21164pc
@itemx 21164PC
Schedules as an EV5 and supports the BWX and MAX extensions.

@item ev6
@itemx 21264
Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.

@item ev67
@itemx 21264a
Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
@end table

Native toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@option{-mcpu=native} has no effect if GCC does not recognize
the processor.

@item -mtune=@var{cpu_type}
@opindex mtune
Set only the instruction scheduling parameters for machine type
@var{cpu_type}.  The instruction set is not changed.

Native toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@option{-mtune=native} has no effect if GCC does not recognize
the processor.

@item -mmemory-latency=@var{time}
@opindex mmemory-latency
Sets the latency the scheduler should assume for typical memory
references as seen by the application.  This number is highly
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

@table @samp
@item @var{number}
A decimal number representing clock cycles.

@item L1
@itemx L2
@itemx L3
@itemx main
The compiler contains estimates of the number of clock cycles for
``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
(also called Dcache, Scache, and Bcache), as well as to main memory.
Note that L3 is only valid for EV5.

@end table
@end table

@node eBPF Options
@subsection eBPF Options
@cindex eBPF Options

@table @gcctabopt
@item -mframe-limit=@var{bytes}
This specifies the hard limit for frame sizes, in bytes.  Currently,
the value that can be specified should be less than or equal to
@samp{32767}.  Defaults to whatever limit is imposed by the version of
the Linux kernel targeted.

@item -mkernel=@var{version}
@opindex mkernel
This specifies the minimum version of the kernel that will run the
compiled program.  GCC uses this version to determine which
instructions to use, what kernel helpers to allow, etc.  Currently,
@var{version} can be one of @samp{4.0}, @samp{4.1}, @samp{4.2},
@samp{4.3}, @samp{4.4}, @samp{4.5}, @samp{4.6}, @samp{4.7},
@samp{4.8}, @samp{4.9}, @samp{4.10}, @samp{4.11}, @samp{4.12},
@samp{4.13}, @samp{4.14}, @samp{4.15}, @samp{4.16}, @samp{4.17},
@samp{4.18}, @samp{4.19}, @samp{4.20}, @samp{5.0}, @samp{5.1},
@samp{5.2}, @samp{latest} and @samp{native}.

@item -mbig-endian
@opindex mbig-endian
Generate code for a big-endian target.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.  This is the default.

@item -mjmpext
@opindex mjmpext
Enable generation of extra conditional-branch instructions.
Enabled for CPU v2 and above.

@item -mjmp32
@opindex mjmp32
Enable 32-bit jump instructions. Enabled for CPU v3 and above.

@item -malu32
@opindex malu32
Enable 32-bit ALU instructions. Enabled for CPU v3 and above.

@item -mcpu=@var{version}
@opindex mcpu
This specifies which version of the eBPF ISA to target. Newer versions
may not be supported by all kernels. The default is @samp{v3}.

Supported values for @var{version} are:

@table @samp
@item v1
The first stable eBPF ISA with no special features or extensions.

@item v2
Supports the jump extensions, as in @option{-mjmpext}.

@item v3
All features of v2, plus:
@itemize @minus
@item 32-bit jump operations, as in @option{-mjmp32}
@item 32-bit ALU operations, as in @option{-malu32}
@end itemize

@end table

@item -mco-re
@opindex mco-re
Enable BPF Compile Once - Run Everywhere (CO-RE) support. Requires and
is implied by @option{-gbtf}.

@item -mno-co-re
@opindex mno-co-re
Disable BPF Compile Once - Run Everywhere (CO-RE) support. BPF CO-RE
support is enabled by default when generating BTF debug information for
the BPF target.

@item -mxbpf
Generate code for an expanded version of BPF, which relaxes some of
the restrictions imposed by the BPF architecture:
@itemize @minus
@item Save and restore callee-saved registers at function entry and
exit, respectively.
@end itemize
@end table

@node FR30 Options
@subsection FR30 Options
@cindex FR30 Options

These options are defined specifically for the FR30 port.

@table @gcctabopt

@item -msmall-model
@opindex msmall-model
Use the small address space model.  This can produce smaller code, but
it does assume that all symbolic values and addresses fit into a
20-bit range.

@item -mno-lsim
@opindex mno-lsim
Assume that runtime support has been provided and so there is no need
to include the simulator library (@file{libsim.a}) on the linker
command line.

@end table

@node FT32 Options
@subsection FT32 Options
@cindex FT32 Options

These options are defined specifically for the FT32 port.

@table @gcctabopt

@item -msim
@opindex msim
Specifies that the program will be run on the simulator.  This causes
an alternate runtime startup and library to be linked.
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 -mlra
@opindex mlra
Enable Local Register Allocation.  This is still experimental for FT32,
so by default the compiler uses standard reload.

@item -mnodiv
@opindex mnodiv
Do not use div and mod instructions.

@item -mft32b
@opindex mft32b
Enable use of the extended instructions of the FT32B processor.

@item -mcompress
@opindex mcompress
Compress all code using the Ft32B code compression scheme.

@item -mnopm
@opindex  mnopm
Do not generate code that reads program memory.

@end table

@node FRV Options
@subsection FRV Options
@cindex FRV Options

@table @gcctabopt
@item -mgpr-32
@opindex mgpr-32

Only use the first 32 general-purpose registers.

@item -mgpr-64
@opindex mgpr-64

Use all 64 general-purpose registers.

@item -mfpr-32
@opindex mfpr-32

Use only the first 32 floating-point registers.

@item -mfpr-64
@opindex mfpr-64

Use all 64 floating-point registers.

@item -mhard-float
@opindex mhard-float

Use hardware instructions for floating-point operations.

@item -msoft-float
@opindex msoft-float

Use library routines for floating-point operations.

@item -malloc-cc
@opindex malloc-cc

Dynamically allocate condition code registers.

@item -mfixed-cc
@opindex mfixed-cc

Do not try to dynamically allocate condition code registers, only
use @code{icc0} and @code{fcc0}.

@item -mdword
@opindex mdword

Change ABI to use double word insns.

@item -mno-dword
@opindex mno-dword
@opindex mdword

Do not use double word instructions.

@item -mdouble
@opindex mdouble

Use floating-point double instructions.

@item -mno-double
@opindex mno-double

Do not use floating-point double instructions.

@item -mmedia
@opindex mmedia

Use media instructions.

@item -mno-media
@opindex mno-media

Do not use media instructions.

@item -mmuladd
@opindex mmuladd

Use multiply and add/subtract instructions.

@item -mno-muladd
@opindex mno-muladd

Do not use multiply and add/subtract instructions.

@item -mfdpic
@opindex mfdpic

Select the FDPIC ABI, which uses function descriptors to represent
pointers to functions.  Without any PIC/PIE-related options, it
implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
assumes GOT entries and small data are within a 12-bit range from the
GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
are computed with 32 bits.
With a @samp{bfin-elf} target, this option implies @option{-msim}.

@item -minline-plt
@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}.
It's enabled by default if optimizing for speed and compiling for
shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
optimization option such as @option{-O3} or above is present in the
command line.

@item -mTLS
@opindex mTLS

Assume a large TLS segment when generating thread-local code.

@item -mtls
@opindex mtls

Do not assume a large TLS segment when generating thread-local code.

@item -mgprel-ro
@opindex mgprel-ro

Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
that is known to be in read-only sections.  It's enabled by default,
except for @option{-fpic} or @option{-fpie}: even though it may help
make the global offset table smaller, it trades 1 instruction for 4.
With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
one of which may be shared by multiple symbols, and it avoids the need
for a GOT entry for the referenced symbol, so it's more likely to be a
win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.

@item -multilib-library-pic
@opindex multilib-library-pic

Link with the (library, not FD) pic libraries.  It's implied by
@option{-mlibrary-pic}, as well as by @option{-fPIC} and
@option{-fpic} without @option{-mfdpic}.  You should never have to use
it explicitly.

@item -mlinked-fp
@opindex mlinked-fp

Follow the EABI requirement of always creating a frame pointer whenever
a stack frame is allocated.  This option is enabled by default and can
be disabled with @option{-mno-linked-fp}.

@item -mlong-calls
@opindex mlong-calls

Use indirect addressing to call functions outside the current
compilation unit.  This allows the functions to be placed anywhere
within the 32-bit address space.

@item -malign-labels
@opindex malign-labels

Try to align labels to an 8-byte boundary by inserting NOPs into the
previous packet.  This option only has an effect when VLIW packing
is enabled.  It doesn't create new packets; it merely adds NOPs to
existing ones.

@item -mlibrary-pic
@opindex mlibrary-pic

Generate position-independent EABI code.

@item -macc-4
@opindex macc-4

Use only the first four media accumulator registers.

@item -macc-8
@opindex macc-8

Use all eight media accumulator registers.

@item -mpack
@opindex mpack

Pack VLIW instructions.

@item -mno-pack
@opindex mno-pack

Do not pack VLIW instructions.

@item -mno-eflags
@opindex mno-eflags

Do not mark ABI switches in e_flags.

@item -mcond-move
@opindex mcond-move

Enable the use of conditional-move instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-cond-move
@opindex mno-cond-move

Disable the use of conditional-move instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mscc
@opindex mscc

Enable the use of conditional set instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-scc
@opindex mno-scc

Disable the use of conditional set instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mcond-exec
@opindex mcond-exec

Enable the use of conditional execution (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-cond-exec
@opindex mno-cond-exec

Disable the use of conditional execution.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mvliw-branch
@opindex mvliw-branch

Run a pass to pack branches into VLIW instructions (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-vliw-branch
@opindex mno-vliw-branch

Do not run a pass to pack branches into VLIW instructions.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mmulti-cond-exec
@opindex mmulti-cond-exec

Enable optimization of @code{&&} and @code{||} in conditional execution
(default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-multi-cond-exec
@opindex mno-multi-cond-exec

Disable optimization of @code{&&} and @code{||} in conditional execution.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mnested-cond-exec
@opindex mnested-cond-exec

Enable nested conditional execution optimizations (default).

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -mno-nested-cond-exec
@opindex mno-nested-cond-exec

Disable nested conditional execution optimizations.

This switch is mainly for debugging the compiler and will likely be removed
in a future version.

@item -moptimize-membar
@opindex moptimize-membar

This switch removes redundant @code{membar} instructions from the
compiler-generated code.  It is enabled by default.

@item -mno-optimize-membar
@opindex mno-optimize-membar
@opindex moptimize-membar

This switch disables the automatic removal of redundant @code{membar}
instructions from the generated code.

@item -mtomcat-stats
@opindex mtomcat-stats

Cause gas to print out tomcat statistics.

@item -mcpu=@var{cpu}
@opindex mcpu

Select the processor type for which to generate code.  Possible values are
@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.

@end table

@node GNU/Linux Options
@subsection GNU/Linux Options

These @samp{-m} options are defined for GNU/Linux targets:

@table @gcctabopt
@item -mglibc
@opindex mglibc
Use the GNU C library.  This is the default except
on @samp{*-*-linux-*uclibc*}, @samp{*-*-linux-*musl*} and
@samp{*-*-linux-*android*} targets.

@item -muclibc
@opindex muclibc
Use uClibc C library.  This is the default on
@samp{*-*-linux-*uclibc*} targets.

@item -mmusl
@opindex mmusl
Use the musl C library.  This is the default on
@samp{*-*-linux-*musl*} targets.

@item -mbionic
@opindex mbionic
Use Bionic C library.  This is the default on
@samp{*-*-linux-*android*} targets.

@item -mandroid
@opindex mandroid
Compile code compatible with Android platform.  This is the default on
@samp{*-*-linux-*android*} targets.

When compiling, this option enables @option{-mbionic}, @option{-fPIC},
@option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
this option makes the GCC driver pass Android-specific options to the linker.
Finally, this option causes the preprocessor macro @code{__ANDROID__}
to be defined.

@item -tno-android-cc
@opindex tno-android-cc
Disable compilation effects of @option{-mandroid}, i.e., do not enable
@option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
@option{-fno-rtti} by default.

@item -tno-android-ld
@opindex tno-android-ld
Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
linking options to the linker.

@end table

@node H8/300 Options
@subsection H8/300 Options

These @samp{-m} options are defined for the H8/300 implementations:

@table @gcctabopt
@item -mrelax
@opindex mrelax
Shorten some address references at link time, when possible; uses the
linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
ld, Using ld}, for a fuller description.

@item -mh
@opindex mh
Generate code for the H8/300H@.

@item -ms
@opindex ms
Generate code for the H8S@.

@item -mn
@opindex mn
Generate code for the H8S and H8/300H in the normal mode.  This switch
must be used either with @option{-mh} or @option{-ms}.

@item -ms2600
@opindex ms2600
Generate code for the H8S/2600.  This switch must be used with @option{-ms}.

@item -mexr
@opindex mexr
Extended registers are stored on stack before execution of function
with monitor attribute. Default option is @option{-mexr}.
This option is valid only for H8S targets.

@item -mno-exr
@opindex mno-exr
@opindex mexr
Extended registers are not stored on stack before execution of function 
with monitor attribute. Default option is @option{-mno-exr}. 
This option is valid only for H8S targets.

@item -mint32
@opindex mint32
Make @code{int} data 32 bits by default.

@item -malign-300
@opindex malign-300
On the H8/300H and H8S, use the same alignment rules as for the H8/300.
The default for the H8/300H and H8S is to align longs and floats on
4-byte boundaries.
@option{-malign-300} causes them to be aligned on 2-byte boundaries.
This option has no effect on the H8/300.
@end table

@node HPPA Options
@subsection HPPA Options
@cindex HPPA Options

These @samp{-m} options are defined for the HPPA family of computers:

@table @gcctabopt
@item -march=@var{architecture-type}
@opindex march
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
1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
architecture option for your machine.  Code compiled for lower numbered
architectures runs on higher numbered architectures, but not the
other way around.

@item -mpa-risc-1-0
@itemx -mpa-risc-1-1
@itemx -mpa-risc-2-0
@opindex mpa-risc-1-0
@opindex mpa-risc-1-1
@opindex mpa-risc-2-0
Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.

@item -mcaller-copies
@opindex mcaller-copies
The caller copies function arguments passed by hidden reference.  This
option should be used with care as it is not compatible with the default
32-bit runtime.  However, only aggregates larger than eight bytes are
passed by hidden reference and the option provides better compatibility
with OpenMP.

@item -mjump-in-delay
@opindex mjump-in-delay
This option is ignored and provided for compatibility purposes only.

@item -mdisable-fpregs
@opindex mdisable-fpregs
Prevent floating-point registers from being used in any manner.  This is
necessary for compiling kernels that perform lazy context switching of
floating-point registers.  If you use this option and attempt to perform
floating-point operations, the compiler aborts.

@item -mdisable-indexing
@opindex mdisable-indexing
Prevent the compiler from using indexing address modes.  This avoids some
rather obscure problems when compiling MIG generated code under MACH@.

@item -mno-space-regs
@opindex mno-space-regs
@opindex mspace-regs
Generate code that assumes the target has no space registers.  This allows
GCC to generate faster indirect calls and use unscaled index address modes.

Such code is suitable for level 0 PA systems and kernels.

@item -mfast-indirect-calls
@opindex mfast-indirect-calls
Generate code that assumes calls never cross space boundaries.  This
allows GCC to emit code that performs faster indirect calls.

This option does not work in the presence of shared libraries or nested
functions.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot 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.

@item -mlong-load-store
@opindex mlong-load-store
Generate 3-instruction load and store sequences as sometimes required by
the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
the HP compilers.

@item -mportable-runtime
@opindex mportable-runtime
Use the portable calling conventions proposed by HP for ELF systems.

@item -mgas
@opindex mgas
Enable the use of assembler directives only GAS understands.

@item -mschedule=@var{cpu-type}
@opindex mschedule
Schedule code according to the constraints for the machine type
@var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
to @file{/usr/lib/sched.models} on an HP-UX system to determine the
proper scheduling option for your machine.  The default scheduling is
@samp{8000}.

@item -mlinker-opt
@opindex mlinker-opt
Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
linkers in which they give bogus error messages when linking some programs.

@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all HPPA
targets.  Normally the facilities of the machine's usual C compiler are
used, but this cannot be done directly in cross-compilation.  You must make
your own arrangements to provide suitable library functions for
cross-compilation.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -msio
@opindex msio
Generate the predefine, @code{_SIO}, for server IO@.  The default is
@option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
options are available under HP-UX and HI-UX@.

@item -mgnu-ld
@opindex mgnu-ld
Use options specific to GNU @command{ld}.
This passes @option{-shared} to @command{ld} when
building a shared library.  It is the default when GCC is configured,
explicitly or implicitly, with the GNU linker.  This option does not
affect which @command{ld} is called; it only changes what parameters
are passed to that @command{ld}.
The @command{ld} that is called is determined by the
@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*}.

@item -mhp-ld
@opindex mhp-ld
Use options specific to HP @command{ld}.
This passes @option{-b} to @command{ld} when building
a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
links.  It is the default when GCC is configured, explicitly or
implicitly, with the HP linker.  This option does not affect
which @command{ld} is called; it only changes what parameters are passed to that
@command{ld}.
The @command{ld} that is called is determined by the @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*}.

@item -mlong-calls
@opindex mno-long-calls
@opindex mlong-calls
Generate code that uses long call sequences.  This ensures that a call
is always able to reach linker generated stubs.  The default is to generate
long calls only when the distance from the call site to the beginning
of the function or translation unit, as the case may be, exceeds a
predefined limit set by the branch type being used.  The limits for
normal calls are 7,600,000 and 240,000 bytes, respectively for the
PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
240,000 bytes.

Distances are measured from the beginning of functions when using the
@option{-ffunction-sections} option, or when using the @option{-mgas}
and @option{-mno-portable-runtime} options together under HP-UX with
the SOM linker.

It is normally not desirable to use this option as it degrades
performance.  However, it may be useful in large applications,
particularly when partial linking is used to build the application.

The types of long calls used depends on the capabilities of the
assembler and linker, and the type of code being generated.  The
impact on systems that support long absolute calls, and long pic
symbol-difference or pc-relative calls should be relatively small.
However, an indirect call is used on 32-bit ELF systems in pic code
and it is quite long.

@item -munix=@var{unix-std}
@opindex march
Generate compiler predefines and select a startfile for the specified
UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
and later.

@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.

It is @emph{important} to note that this option changes the interfaces
for various library routines.  It also affects the operational behavior
of the C library.  Thus, @emph{extreme} care is needed in using this
option.

Library code that is intended to operate with more than one UNIX
standard must test, set and restore the variable @code{__xpg4_extended_mask}
as appropriate.  Most GNU software doesn't provide this capability.

@item -nolibdld
@opindex nolibdld
Suppress the generation of link options to search libdld.sl when the
@option{-static} option is specified on HP-UX 10 and later.

@item -static
@opindex static
The HP-UX implementation of setlocale in libc has a dependency on
libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
when the @option{-static} option is specified, special link options
are needed to resolve this dependency.

On HP-UX 10 and later, the GCC driver adds the necessary options to
link with libdld.sl when the @option{-static} option is specified.
This causes the resulting binary to be dynamic.  On the 64-bit port,
the linkers generate dynamic binaries by default in any case.  The
@option{-nolibdld} option can be used to prevent the GCC driver from
adding these link options.

@item -threads
@opindex threads
Add support for multithreading with the @dfn{dce thread} library
under HP-UX@.  This option sets flags for both the preprocessor and
linker.
@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
@opindex mbig-endian
Generate code for a big-endian target.  This is the default for HP-UX@.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.  This is the default for AIX5
and GNU/Linux.

@item -mgnu-as
@itemx -mno-gnu-as
@opindex mgnu-as
@opindex 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 @option{--with-gnu-as}
@c is used.

@item -mgnu-ld
@itemx -mno-gnu-ld
@opindex mgnu-ld
@opindex 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 @option{--with-gnu-ld}
@c is used.

@item -mno-pic
@opindex 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
@opindex mvolatile-asm-stop
@opindex mno-volatile-asm-stop
Generate (or don't) a stop bit immediately before and after volatile asm
statements.

@item -mregister-names
@itemx -mno-register-names
@opindex mregister-names
@opindex 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
@opindex mno-sdata
@opindex msdata
Disable (or enable) optimizations that use the small data section.  This may
be useful for working around optimizer bugs.

@item -mconstant-gp
@opindex mconstant-gp
Generate code that uses a single constant global pointer value.  This is
useful when compiling kernel code.

@item -mauto-pic
@opindex mauto-pic
Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
This is useful when compiling firmware code.

@item -minline-float-divide-min-latency
@opindex minline-float-divide-min-latency
Generate code for inline divides of floating-point values
using the minimum latency algorithm.

@item -minline-float-divide-max-throughput
@opindex minline-float-divide-max-throughput
Generate code for inline divides of floating-point values
using the maximum throughput algorithm.

@item -mno-inline-float-divide
@opindex mno-inline-float-divide
Do not generate inline code for divides of floating-point values.

@item -minline-int-divide-min-latency
@opindex minline-int-divide-min-latency
Generate code for inline divides of integer values
using the minimum latency algorithm.

@item -minline-int-divide-max-throughput
@opindex minline-int-divide-max-throughput
Generate code for inline divides of integer values
using the maximum throughput algorithm.

@item -mno-inline-int-divide
@opindex mno-inline-int-divide
@opindex minline-int-divide
Do not generate inline code for divides of integer values.

@item -minline-sqrt-min-latency
@opindex minline-sqrt-min-latency
Generate code for inline square roots
using the minimum latency algorithm.

@item -minline-sqrt-max-throughput
@opindex minline-sqrt-max-throughput
Generate code for inline square roots
using the maximum throughput algorithm.

@item -mno-inline-sqrt
@opindex mno-inline-sqrt
Do not generate inline code for @code{sqrt}.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Do (don't) generate code that uses the fused multiply/add or multiply/subtract
instructions.  The default is to use these instructions.

@item -mno-dwarf2-asm
@itemx -mdwarf2-asm
@opindex mno-dwarf2-asm
@opindex mdwarf2-asm
Don't (or do) generate assembler code for the DWARF line number debugging
info.  This may be useful when not using the GNU assembler.

@item -mearly-stop-bits
@itemx -mno-early-stop-bits
@opindex mearly-stop-bits
@opindex mno-early-stop-bits
Allow stop bits to be placed earlier than immediately preceding the
instruction that triggered the stop bit.  This can improve instruction
scheduling, but does not always do so.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot 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.

@item -mtls-size=@var{tls-size}
@opindex mtls-size
Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
64.

@item -mtune=@var{cpu-type}
@opindex mtune
Tune the instruction scheduling for a particular CPU, Valid values are
@samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
and @samp{mckinley}.

@item -milp32
@itemx -mlp64
@opindex milp32
@opindex mlp64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits.  These are HP-UX specific flags.

@item -mno-sched-br-data-spec
@itemx -msched-br-data-spec
@opindex mno-sched-br-data-spec
@opindex msched-br-data-spec
(Dis/En)able data speculative scheduling before reload.
This results in generation of @code{ld.a} instructions and
the corresponding check instructions (@code{ld.c} / @code{chk.a}).
The default setting is disabled.

@item -msched-ar-data-spec
@itemx -mno-sched-ar-data-spec
@opindex msched-ar-data-spec
@opindex mno-sched-ar-data-spec
(En/Dis)able data speculative scheduling after reload.
This results in generation of @code{ld.a} instructions and
the corresponding check instructions (@code{ld.c} / @code{chk.a}).
The default setting is enabled.

@item -mno-sched-control-spec
@itemx -msched-control-spec
@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).
This results in generation of the @code{ld.s} instructions and
the corresponding check instructions @code{chk.s}.
The default setting is disabled.

@item -msched-br-in-data-spec
@itemx -mno-sched-br-in-data-spec
@opindex msched-br-in-data-spec
@opindex mno-sched-br-in-data-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads before reload.
This is effective only with @option{-msched-br-data-spec} enabled.
The default setting is enabled.

@item -msched-ar-in-data-spec
@itemx -mno-sched-ar-in-data-spec
@opindex msched-ar-in-data-spec
@opindex mno-sched-ar-in-data-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the data speculative loads after reload.
This is effective only with @option{-msched-ar-data-spec} enabled.
The default setting is enabled.

@item -msched-in-control-spec
@itemx -mno-sched-in-control-spec
@opindex msched-in-control-spec
@opindex mno-sched-in-control-spec
(En/Dis)able speculative scheduling of the instructions that
are dependent on the control speculative loads.
This is effective only with @option{-msched-control-spec} enabled.
The default setting is enabled.

@item -mno-sched-prefer-non-data-spec-insns
@itemx -msched-prefer-non-data-spec-insns
@opindex mno-sched-prefer-non-data-spec-insns
@opindex msched-prefer-non-data-spec-insns
If enabled, data-speculative instructions are chosen for schedule
only if there are no other choices at the moment.  This makes
the use of the data speculation much more conservative.
The default setting is disabled.

@item -mno-sched-prefer-non-control-spec-insns
@itemx -msched-prefer-non-control-spec-insns
@opindex mno-sched-prefer-non-control-spec-insns
@opindex msched-prefer-non-control-spec-insns
If enabled, control-speculative instructions are chosen for schedule
only if there are no other choices at the moment.  This makes
the use of the control speculation much more conservative.
The default setting is disabled.

@item -mno-sched-count-spec-in-critical-path
@itemx -msched-count-spec-in-critical-path
@opindex mno-sched-count-spec-in-critical-path
@opindex msched-count-spec-in-critical-path
If enabled, speculative dependencies are considered during
computation of the instructions priorities.  This makes the use of the
speculation a bit more conservative.
The default setting is disabled.

@item -msched-spec-ldc
@opindex msched-spec-ldc
Use a simple data speculation check.  This option is on by default.

@item -msched-control-spec-ldc
@opindex msched-spec-ldc
Use a simple check for control speculation.  This option is on by default.

@item -msched-stop-bits-after-every-cycle
@opindex msched-stop-bits-after-every-cycle
Place a stop bit after every cycle when scheduling.  This option is on
by default.

@item -msched-fp-mem-deps-zero-cost
@opindex msched-fp-mem-deps-zero-cost
Assume that floating-point stores and loads are not likely to cause a conflict
when placed into the same instruction group.  This option is disabled by
default.

@item -msel-sched-dont-check-control-spec
@opindex msel-sched-dont-check-control-spec
Generate checks for control speculation in selective scheduling.
This flag is disabled by default.

@item -msched-max-memory-insns=@var{max-insns}
@opindex msched-max-memory-insns
Limit on the number of memory insns per instruction group, giving lower
priority to subsequent memory insns attempting to schedule in the same
instruction group. Frequently useful to prevent cache bank conflicts.
The default value is 1.

@item -msched-max-memory-insns-hard-limit
@opindex msched-max-memory-insns-hard-limit
Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
disallowing more than that number in an instruction group.
Otherwise, the limit is ``soft'', meaning that non-memory operations
are preferred when the limit is reached, but memory operations may still
be scheduled.

@end table

@node LM32 Options
@subsection LM32 Options
@cindex LM32 options

These @option{-m} options are defined for the LatticeMico32 architecture:

@table @gcctabopt
@item -mbarrel-shift-enabled
@opindex mbarrel-shift-enabled
Enable barrel-shift instructions.

@item -mdivide-enabled
@opindex mdivide-enabled
Enable divide and modulus instructions.

@item -mmultiply-enabled
@opindex multiply-enabled
Enable multiply instructions.

@item -msign-extend-enabled
@opindex msign-extend-enabled
Enable sign extend instructions.

@item -muser-enabled
@opindex muser-enabled
Enable user-defined instructions.

@end table

@node M32C Options
@subsection M32C Options
@cindex M32C options

@table @gcctabopt
@item -mcpu=@var{name}
@opindex mcpu=
Select the CPU for which code is generated.  @var{name} may be one of
@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
the M32C/80 series.

@item -msim
@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
programs that will run on real hardware; you must provide your own
runtime library for whatever I/O functions are needed.

@item -memregs=@var{number}
@opindex memregs=
Specifies the number of memory-based pseudo-registers GCC uses
during code generation.  These pseudo-registers are used like real
registers, so there is a tradeoff between GCC's ability to fit the
code into available registers, and the performance penalty of using
memory instead of registers.  Note that all modules in a program must
be compiled with the same value for this option.  Because of that, you
must not use this option with GCC's default runtime libraries.

@end table

@node M32R/D Options
@subsection M32R/D Options
@cindex M32R/D options

These @option{-m} options are defined for Renesas M32R/D architectures:

@table @gcctabopt
@item -m32r2
@opindex m32r2
Generate code for the M32R/2@.

@item -m32rx
@opindex m32rx
Generate code for the M32R/X@.

@item -m32r
@opindex m32r
Generate code for the M32R@.  This is the default.

@item -mmodel=small
@opindex mmodel=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
are reachable with the @code{bl} instruction.
This is the default.

The addressability of a particular object can be set with the
@code{model} attribute.

@item -mmodel=medium
@opindex mmodel=medium
Assume objects may be anywhere in the 32-bit address space (the compiler
generates @code{seth/add3} instructions to load their addresses), and
assume all subroutines are reachable with the @code{bl} instruction.

@item -mmodel=large
@opindex mmodel=large
Assume objects may be anywhere in the 32-bit address space (the compiler
generates @code{seth/add3} instructions to load their addresses), and
assume subroutines may not be reachable with the @code{bl} instruction
(the compiler generates the much slower @code{seth/add3/jl}
instruction sequence).

@item -msdata=none
@opindex msdata=none
Disable use of the small data area.  Variables are put into
one of @code{.data}, @code{.bss}, or @code{.rodata} (unless the
@code{section} attribute has been specified).
This is the default.

The small data area consists of sections @code{.sdata} and @code{.sbss}.
Objects may be explicitly put in the small data area with the
@code{section} attribute using one of these sections.

@item -msdata=sdata
@opindex msdata=sdata
Put small global and static data in the small data area, but do not
generate special code to reference them.

@item -msdata=use
@opindex msdata=use
Put small global and static data in the small data area, and generate
special instructions to reference them.

@item -G @var{num}
@opindex G
@cindex smaller data references
Put global and static objects less than or equal to @var{num} bytes
into the small data or BSS sections instead of the normal data or BSS
sections.  The default value of @var{num} is 8.
The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
for this option to have any effect.

All modules should be compiled with the same @option{-G @var{num}} value.
Compiling with different values of @var{num} may or may not work; if it
doesn't the linker gives an error message---incorrect code is not
generated.

@item -mdebug
@opindex mdebug
Makes the M32R-specific code in the compiler display some statistics
that might help in debugging programs.

@item -malign-loops
@opindex malign-loops
Align all loops to a 32-byte boundary.

@item -mno-align-loops
@opindex mno-align-loops
Do not enforce a 32-byte alignment for loops.  This is the default.

@item -missue-rate=@var{number}
@opindex missue-rate=@var{number}
Issue @var{number} instructions per cycle.  @var{number} can only be 1
or 2.

@item -mbranch-cost=@var{number}
@opindex mbranch-cost=@var{number}
@var{number} can only be 1 or 2.  If it is 1 then branches are
preferred over conditional code, if it is 2, then the opposite applies.

@item -mflush-trap=@var{number}
@opindex mflush-trap=@var{number}
Specifies the trap number to use to flush the cache.  The default is
12.  Valid numbers are between 0 and 15 inclusive.

@item -mno-flush-trap
@opindex mno-flush-trap
Specifies that the cache cannot be flushed by using a trap.

@item -mflush-func=@var{name}
@opindex mflush-func=@var{name}
Specifies the name of the operating system function to call to flush
the cache.  The default is @samp{_flush_cache}, but a function call
is only used if a trap is not available.

@item -mno-flush-func
@opindex mno-flush-func
Indicates that there is no OS function for flushing the cache.

@end table

@node M680x0 Options
@subsection M680x0 Options
@cindex M680x0 options

These are the @samp{-m} options defined for M680x0 and ColdFire processors.
The default settings depend on which architecture was selected when
the compiler was configured; the defaults for the most common choices
are given below.

@table @gcctabopt
@item -march=@var{arch}
@opindex march
Generate code for a specific M680x0 or ColdFire instruction set
architecture.  Permissible values of @var{arch} for M680x0
architectures are: @samp{68000}, @samp{68010}, @samp{68020},
@samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
architectures are selected according to Freescale's ISA classification
and the permissible values are: @samp{isaa}, @samp{isaaplus},
@samp{isab} and @samp{isac}.

GCC defines a macro @code{__mcf@var{arch}__} whenever it is generating
code for a ColdFire target.  The @var{arch} in this macro is one of the
@option{-march} arguments given above.

When used together, @option{-march} and @option{-mtune} select code
that runs on a family of similar processors but that is optimized
for a particular microarchitecture.

@item -mcpu=@var{cpu}
@opindex mcpu
Generate code for a specific M680x0 or ColdFire processor.
The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
@samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
below, which also classifies the CPUs into families:

@multitable @columnfractions 0.20 0.80
@headitem @strong{Family} @tab @strong{@samp{-mcpu} arguments}
@item @samp{51} @tab @samp{51} @samp{51ac} @samp{51ag} @samp{51cn} @samp{51em} @samp{51je} @samp{51jf} @samp{51jg} @samp{51jm} @samp{51mm} @samp{51qe} @samp{51qm}
@item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
@item @samp{5206e} @tab @samp{5206e}
@item @samp{5208} @tab @samp{5207} @samp{5208}
@item @samp{5211a} @tab @samp{5210a} @samp{5211a}
@item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
@item @samp{5216} @tab @samp{5214} @samp{5216}
@item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
@item @samp{5225} @tab @samp{5224} @samp{5225}
@item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
@item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
@item @samp{5249} @tab @samp{5249}
@item @samp{5250} @tab @samp{5250}
@item @samp{5271} @tab @samp{5270} @samp{5271}
@item @samp{5272} @tab @samp{5272}
@item @samp{5275} @tab @samp{5274} @samp{5275}
@item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
@item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
@item @samp{5307} @tab @samp{5307}
@item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
@item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
@item @samp{5407} @tab @samp{5407}
@item @samp{5475} @tab @samp{5470} @samp{5471} @samp{5472} @samp{5473} @samp{5474} @samp{5475} @samp{547x} @samp{5480} @samp{5481} @samp{5482} @samp{5483} @samp{5484} @samp{5485}
@end multitable

@option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
@var{arch} is compatible with @var{cpu}.  Other combinations of
@option{-mcpu} and @option{-march} are rejected.

GCC defines the macro @code{__mcf_cpu_@var{cpu}} when ColdFire target
@var{cpu} is selected.  It also defines @code{__mcf_family_@var{family}},
where the value of @var{family} is given by the table above.

@item -mtune=@var{tune}
@opindex mtune
Tune the code for a particular microarchitecture within the
constraints set by @option{-march} and @option{-mcpu}.
The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
@samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
and @samp{cpu32}.  The ColdFire microarchitectures
are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.

You can also use @option{-mtune=68020-40} for code that needs
to run relatively well on 68020, 68030 and 68040 targets.
@option{-mtune=68020-60} is similar but includes 68060 targets
as well.  These two options select the same tuning decisions as
@option{-m68020-40} and @option{-m68020-60} respectively.

GCC defines the macros @code{__mc@var{arch}} and @code{__mc@var{arch}__}
when tuning for 680x0 architecture @var{arch}.  It also defines
@code{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
option is used.  If GCC is tuning for a range of architectures,
as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
it defines the macros for every architecture in the range.

GCC also defines the macro @code{__m@var{uarch}__} when tuning for
ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
of the arguments given above.

@item -m68000
@itemx -mc68000
@opindex m68000
@opindex mc68000
Generate output for a 68000.  This is the default
when the compiler is configured for 68000-based systems.
It is equivalent to @option{-march=68000}.

Use this option for microcontrollers with a 68000 or EC000 core,
including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.

@item -m68010
@opindex m68010
Generate output for a 68010.  This is the default
when the compiler is configured for 68010-based systems.
It is equivalent to @option{-march=68010}.

@item -m68020
@itemx -mc68020
@opindex m68020
@opindex mc68020
Generate output for a 68020.  This is the default
when the compiler is configured for 68020-based systems.
It is equivalent to @option{-march=68020}.

@item -m68030
@opindex m68030
Generate output for a 68030.  This is the default when the compiler is
configured for 68030-based systems.  It is equivalent to
@option{-march=68030}.

@item -m68040
@opindex m68040
Generate output for a 68040.  This is the default when the compiler is
configured for 68040-based systems.  It is equivalent to
@option{-march=68040}.

This option inhibits the use of 68881/68882 instructions that have to be
emulated by software on the 68040.  Use this option if your 68040 does not
have code to emulate those instructions.

@item -m68060
@opindex m68060
Generate output for a 68060.  This is the default when the compiler is
configured for 68060-based systems.  It is equivalent to
@option{-march=68060}.

This option inhibits the use of 68020 and 68881/68882 instructions that
have to be emulated by software on the 68060.  Use this option if your 68060
does not have code to emulate those instructions.

@item -mcpu32
@opindex mcpu32
Generate output for a CPU32.  This is the default
when the compiler is configured for CPU32-based systems.
It is equivalent to @option{-march=cpu32}.

Use this option for microcontrollers with a
CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
68336, 68340, 68341, 68349 and 68360.

@item -m5200
@opindex m5200
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.

Use this option for microcontroller with a 5200 core, including
the MCF5202, MCF5203, MCF5204 and MCF5206.

@item -m5206e
@opindex m5206e
Generate output for a 5206e ColdFire CPU@.  The option is now
deprecated in favor of the equivalent @option{-mcpu=5206e}.

@item -m528x
@opindex m528x
Generate output for a member of the ColdFire 528X family.
The option is now deprecated in favor of the equivalent
@option{-mcpu=528x}.

@item -m5307
@opindex m5307
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
in favor of the equivalent @option{-mcpu=5407}.

@item -mcfv4e
@opindex mcfv4e
Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
This includes use of hardware floating-point instructions.
The option is equivalent to @option{-mcpu=547x}, and is now
deprecated in favor of that option.

@item -m68020-40
@opindex m68020-40
Generate output for a 68040, without using any of the new instructions.
This results in code that can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.  The generated code does use the
68881 instructions that are emulated on the 68040.

The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.

@item -m68020-60
@opindex m68020-60
Generate output for a 68060, without using any of the new instructions.
This results in code that can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040.  The generated code does use the
68881 instructions that are emulated on the 68060.

The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.

@item -mhard-float
@itemx -m68881
@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
macro @code{__HAVE_68881__} on M680x0 targets and @code{__mcffpu__}
on ColdFire targets.

@item -msoft-float
@opindex msoft-float
Do not generate floating-point instructions; use library calls instead.
This is the default for 68000, 68010, and 68832 targets.  It is also
the default for ColdFire devices that have no FPU.

@item -mdiv
@itemx -mno-div
@opindex mdiv
@opindex mno-div
Generate (do not generate) ColdFire hardware divide and remainder
instructions.  If @option{-march} is used without @option{-mcpu},
the default is ``on'' for ColdFire architectures and ``off'' for M680x0
architectures.  Otherwise, the default is taken from the target CPU
(either the default CPU, or the one specified by @option{-mcpu}).  For
example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
@option{-mcpu=5206e}.

GCC defines the macro @code{__mcfhwdiv__} when this option is enabled.

@item -mshort
@opindex mshort
Consider type @code{int} to be 16 bits wide, like @code{short int}.
Additionally, parameters passed on the stack are also aligned to a
16-bit boundary even on targets whose API mandates promotion to 32-bit.

@item -mno-short
@opindex mno-short
Do not consider type @code{int} to be 16 bits wide.  This is the default.

@item -mnobitfield
@itemx -mno-bitfield
@opindex mnobitfield
@opindex mno-bitfield
Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
and @option{-m5200} options imply @w{@option{-mnobitfield}}.

@item -mbitfield
@opindex mbitfield
Do use the bit-field instructions.  The @option{-m68020} option implies
@option{-mbitfield}.  This is the default if you use a configuration
designed for a 68020.

@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions
that take a fixed number of arguments return with the @code{rtd}
instruction, which pops their arguments while returning.  This
saves one instruction in the caller since there is no need to pop
the arguments there.

This calling convention is incompatible with the one normally
used on Unix, so you cannot use it if you need to call libraries
compiled with the Unix compiler.

Also, you must provide function prototypes for all functions that
take variable numbers of arguments (including @code{printf});
otherwise incorrect code is generated for calls to those
functions.

In addition, seriously incorrect code results if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)

The @code{rtd} instruction is supported by the 68010, 68020, 68030,
68040, 68060 and CPU32 processors, but not by the 68000 or 5200.

The default is @option{-mno-rtd}.

@item -malign-int
@itemx -mno-align-int
@opindex malign-int
@opindex mno-align-int
Control whether GCC aligns @code{int}, @code{long}, @code{long long},
@code{float}, @code{double}, and @code{long double} variables on a 32-bit
boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
Aligning variables on 32-bit boundaries produces code that runs somewhat
faster on processors with 32-bit busses at the expense of more memory.

@strong{Warning:} if you use the @option{-malign-int} switch, GCC
aligns structures containing the above types differently than
most published application binary interface specifications for the m68k.

@opindex mpcrel
Use the pc-relative addressing mode of the 68000 directly, instead of
using a global offset table.  At present, this option implies @option{-fpic},
allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
not presently supported with @option{-mpcrel}, though this could be supported for
68020 and higher processors.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
Do not (do) assume that unaligned memory references are handled by
the system.

@item -msep-data
Generate code that allows the data segment to be located in a different
area of memory from the text segment.  This allows for execute-in-place in
an environment without virtual memory management.  This option implies
@option{-fPIC}.

@item -mno-sep-data
Generate code that assumes that the data segment follows the text segment.
This is the default.

@item -mid-shared-library
Generate code that supports shared libraries via the library ID method.
This allows for execute-in-place and shared libraries in an environment
without virtual memory management.  This option implies @option{-fPIC}.

@item -mno-id-shared-library
Generate code that doesn't assume ID-based shared libraries are being used.
This is the default.

@item -mshared-library-id=n
Specifies the identification number of the ID-based shared library being
compiled.  Specifying a value of 0 generates more compact code; specifying
other values forces the allocation of that number to the current
library, but is no more space- or time-efficient than omitting this option.

@item -mxgot
@itemx -mno-xgot
@opindex mxgot
@opindex mno-xgot
When generating position-independent code for ColdFire, generate code
that works if the GOT has more than 8192 entries.  This code is
larger and slower than code generated without this option.  On M680x0
processors, this option is not needed; @option{-fPIC} suffices.

GCC normally uses a single instruction to load values from the GOT@.
While this is relatively efficient, it only works if the GOT
is smaller than about 64k.  Anything larger causes the linker
to report an error such as:

@cindex relocation truncated to fit (ColdFire)
@smallexample
relocation truncated to fit: R_68K_GOT16O foobar
@end smallexample

If this happens, you should recompile your code with @option{-mxgot}.
It should then work with very large GOTs.  However, code generated with
@option{-mxgot} is less efficient, since it takes 4 instructions to fetch
the value of a global symbol.

Note that some linkers, including newer versions of the GNU linker,
can create multiple GOTs and sort GOT entries.  If you have such a linker,
you should only need to use @option{-mxgot} when compiling a single
object file that accesses more than 8192 GOT entries.  Very few do.

These options have no effect unless GCC is generating
position-independent code.

@item -mlong-jump-table-offsets
@opindex mlong-jump-table-offsets
Use 32-bit offsets in @code{switch} tables.  The default is to use
16-bit offsets.

@end table

@node MCore Options
@subsection MCore Options
@cindex MCore options

These are the @samp{-m} options defined for the Motorola M*Core
processors.

@table @gcctabopt

@item -mhardlit
@itemx -mno-hardlit
@opindex mhardlit
@opindex mno-hardlit
Inline constants into the code stream if it can be done in two
instructions or less.

@item -mdiv
@itemx -mno-div
@opindex mdiv
@opindex mno-div
Use the divide instruction.  (Enabled by default).

@item -mrelax-immediate
@itemx -mno-relax-immediate
@opindex mrelax-immediate
@opindex mno-relax-immediate
Allow arbitrary-sized immediates in bit operations.

@item -mwide-bitfields
@itemx -mno-wide-bitfields
@opindex mwide-bitfields
@opindex mno-wide-bitfields
Always treat bit-fields as @code{int}-sized.

@item -m4byte-functions
@itemx -mno-4byte-functions
@opindex m4byte-functions
@opindex mno-4byte-functions
Force all functions to be aligned to a 4-byte boundary.

@item -mcallgraph-data
@itemx -mno-callgraph-data
@opindex mcallgraph-data
@opindex mno-callgraph-data
Emit callgraph information.

@item -mslow-bytes
@itemx -mno-slow-bytes
@opindex mslow-bytes
@opindex mno-slow-bytes
Prefer word access when reading byte quantities.

@item -mlittle-endian
@itemx -mbig-endian
@opindex mlittle-endian
@opindex mbig-endian
Generate code for a little-endian target.

@item -m210
@itemx -m340
@opindex m210
@opindex m340
Generate code for the 210 processor.

@item -mno-lsim
@opindex mno-lsim
Assume that runtime support has been provided and so omit the
simulator library (@file{libsim.a)} from the linker command line.

@item -mstack-increment=@var{size}
@opindex mstack-increment
Set the maximum amount for a single stack increment operation.  Large
values can increase the speed of programs that contain functions
that need a large amount of stack space, but they can also trigger a
segmentation fault if the stack is extended too much.  The default
value is 0x1000.

@end table

@node MeP Options
@subsection MeP Options
@cindex MeP options

@table @gcctabopt

@item -mabsdiff
@opindex mabsdiff
Enables the @code{abs} instruction, which is the absolute difference
between two registers.

@item -mall-opts
@opindex mall-opts
Enables all the optional instructions---average, multiply, divide, bit
operations, leading zero, absolute difference, min/max, clip, and
saturation.


@item -maverage
@opindex maverage
Enables the @code{ave} instruction, which computes the average of two
registers.

@item -mbased=@var{n}
@opindex mbased=
Variables of size @var{n} bytes or smaller are placed in the
@code{.based} section by default.  Based variables use the @code{$tp}
register as a base register, and there is a 128-byte limit to the
@code{.based} section.

@item -mbitops
@opindex mbitops
Enables the bit operation instructions---bit test (@code{btstm}), set
(@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
test-and-set (@code{tas}).

@item -mc=@var{name}
@opindex mc=
Selects which section constant data is placed in.  @var{name} may
be @samp{tiny}, @samp{near}, or @samp{far}.

@item -mclip
@opindex mclip
Enables the @code{clip} instruction.  Note that @option{-mclip} is not
useful unless you also provide @option{-mminmax}.

@item -mconfig=@var{name}
@opindex mconfig=
Selects one of the built-in core configurations.  Each MeP chip has
one or more modules in it; each module has a core CPU and a variety of
coprocessors, optional instructions, and peripherals.  The
@code{MeP-Integrator} tool, not part of GCC, provides these
configurations through this option; using this option is the same as
using all the corresponding command-line options.  The default
configuration is @samp{default}.

@item -mcop
@opindex mcop
Enables the coprocessor instructions.  By default, this is a 32-bit
coprocessor.  Note that the coprocessor is normally enabled via the
@option{-mconfig=} option.

@item -mcop32
@opindex mcop32
Enables the 32-bit coprocessor's instructions.

@item -mcop64
@opindex mcop64
Enables the 64-bit coprocessor's instructions.

@item -mivc2
@opindex mivc2
Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.

@item -mdc
@opindex mdc
Causes constant variables to be placed in the @code{.near} section.

@item -mdiv
@opindex mdiv
Enables the @code{div} and @code{divu} instructions.

@item -meb
@opindex meb
Generate big-endian code.

@item -mel
@opindex mel
Generate little-endian code.

@item -mio-volatile
@opindex mio-volatile
Tells the compiler that any variable marked with the @code{io}
attribute is to be considered volatile.

@item -ml
@opindex ml
Causes variables to be assigned to the @code{.far} section by default.

@item -mleadz
@opindex mleadz
Enables the @code{leadz} (leading zero) instruction.

@item -mm
@opindex mm
Causes variables to be assigned to the @code{.near} section by default.

@item -mminmax
@opindex mminmax
Enables the @code{min} and @code{max} instructions.

@item -mmult
@opindex mmult
Enables the multiplication and multiply-accumulate instructions.

@item -mno-opts
@opindex mno-opts
Disables all the optional instructions enabled by @option{-mall-opts}.

@item -mrepeat
@opindex mrepeat
Enables the @code{repeat} and @code{erepeat} instructions, used for
low-overhead looping.

@item -ms
@opindex ms
Causes all variables to default to the @code{.tiny} section.  Note
that there is a 65536-byte limit to this section.  Accesses to these
variables use the @code{%gp} base register.

@item -msatur
@opindex msatur
Enables the saturation instructions.  Note that the compiler does not
currently generate these itself, but this option is included for
compatibility with other tools, like @code{as}.

@item -msdram
@opindex msdram
Link the SDRAM-based runtime instead of the default ROM-based runtime.

@item -msim
@opindex msim
Link the simulator run-time libraries.

@item -msimnovec
@opindex msimnovec
Link the simulator runtime libraries, excluding built-in support
for reset and exception vectors and tables.

@item -mtf
@opindex mtf
Causes all functions to default to the @code{.far} section.  Without
this option, functions default to the @code{.near} section.

@item -mtiny=@var{n}
@opindex mtiny=
Variables that are @var{n} bytes or smaller are allocated to the
@code{.tiny} section.  These variables use the @code{$gp} base
register.  The default for this option is 4, but note that there's a
65536-byte limit to the @code{.tiny} section.

@end table

@node MicroBlaze Options
@subsection MicroBlaze Options
@cindex MicroBlaze Options

@table @gcctabopt

@item -msoft-float
@opindex msoft-float
Use software emulation for floating point (default).

@item -mhard-float
@opindex mhard-float
Use hardware floating-point instructions.

@item -mmemcpy
@opindex mmemcpy
Do not optimize block moves, use @code{memcpy}.

@item -mno-clearbss
@opindex mno-clearbss
This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.

@item -mcpu=@var{cpu-type}
@opindex mcpu=
Use features of, and schedule code for, the given CPU.
Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
where @var{X} is a major version, @var{YY} is the minor version, and
@var{Z} is compatibility code.  Example values are @samp{v3.00.a},
@samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v6.00.a}.

@item -mxl-soft-mul
@opindex mxl-soft-mul
Use software multiply emulation (default).

@item -mxl-soft-div
@opindex mxl-soft-div
Use software emulation for divides (default).

@item -mxl-barrel-shift
@opindex mxl-barrel-shift
Use the hardware barrel shifter.

@item -mxl-pattern-compare
@opindex mxl-pattern-compare
Use pattern compare instructions.

@item -msmall-divides
@opindex msmall-divides
Use table lookup optimization for small signed integer divisions.

@item -mxl-stack-check
@opindex mxl-stack-check
This option is deprecated.  Use @option{-fstack-check} instead.

@item -mxl-gp-opt
@opindex mxl-gp-opt
Use GP-relative @code{.sdata}/@code{.sbss} sections.

@item -mxl-multiply-high
@opindex mxl-multiply-high
Use multiply high instructions for high part of 32x32 multiply.

@item -mxl-float-convert
@opindex mxl-float-convert
Use hardware floating-point conversion instructions.

@item -mxl-float-sqrt
@opindex mxl-float-sqrt
Use hardware floating-point square root instruction.

@item -mbig-endian
@opindex mbig-endian
Generate code for a big-endian target.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a little-endian target.

@item -mxl-reorder
@opindex mxl-reorder
Use reorder instructions (swap and byte reversed load/store).

@item -mxl-mode-@var{app-model}
Select application model @var{app-model}.  Valid models are
@table @samp
@item executable
normal executable (default), uses startup code @file{crt0.o}.

@item xmdstub
for use with Xilinx Microprocessor Debugger (XMD) based
software intrusive debug agent called xmdstub. This uses startup file
@file{crt1.o} and sets the start address of the program to 0x800.

@item bootstrap
for applications that are loaded using a bootloader.
This model uses startup file @file{crt2.o} which does not contain a processor
reset vector handler. This is suitable for transferring control on a
processor reset to the bootloader rather than the application.

@item novectors
for applications that do not require any of the
MicroBlaze vectors. This option may be useful for applications running
within a monitoring application. This model uses @file{crt3.o} as a startup file.
@end table

Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
@option{-mxl-mode-@var{app-model}}.

@item -mpic-data-is-text-relative
@opindex mpic-data-is-text-relative
Assume that the displacement between the text and data segments is fixed
at static link time.  This allows data to be referenced by offset from start of
text address instead of GOT since PC-relative addressing is not supported.

@end table

@node MIPS Options
@subsection MIPS Options
@cindex MIPS options

@table @gcctabopt

@item -EB
@opindex EB
Generate big-endian code.

@item -EL
@opindex EL
Generate little-endian code.  This is the default for @samp{mips*el-*-*}
configurations.

@item -march=@var{arch}
@opindex march
Generate code that runs on @var{arch}, which can be the name of a
generic MIPS ISA, or the name of a particular processor.
The ISA names are:
@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
@samp{mips32}, @samp{mips32r2}, @samp{mips32r3}, @samp{mips32r5},
@samp{mips32r6}, @samp{mips64}, @samp{mips64r2}, @samp{mips64r3},
@samp{mips64r5} and @samp{mips64r6}.
The processor names are:
@samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
@samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
@samp{5kc}, @samp{5kf},
@samp{20kc},
@samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
@samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
@samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1}, @samp{34kn},
@samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
@samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
@samp{i6400}, @samp{i6500},
@samp{interaptiv},
@samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a}, @samp{gs464},
@samp{gs464e}, @samp{gs264e},
@samp{m4k},
@samp{m14k}, @samp{m14kc}, @samp{m14ke}, @samp{m14kec},
@samp{m5100}, @samp{m5101},
@samp{octeon}, @samp{octeon+}, @samp{octeon2}, @samp{octeon3},
@samp{orion},
@samp{p5600}, @samp{p6600},
@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
@samp{r4600}, @samp{r4650}, @samp{r4700}, @samp{r5900},
@samp{r6000}, @samp{r8000},
@samp{rm7000}, @samp{rm9000},
@samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
@samp{sb1},
@samp{sr71000},
@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
@samp{vr5000}, @samp{vr5400}, @samp{vr5500},
@samp{xlr} and @samp{xlp}.
The special value @samp{from-abi} selects the
most compatible architecture for the selected ABI (that is,
@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.

The native Linux/GNU toolchain also supports the value @samp{native},
which selects the best architecture option for the host processor.
@option{-march=native} has no effect if GCC does not recognize
the processor.

In processor names, a final @samp{000} can be abbreviated as @samp{k}
(for example, @option{-march=r2k}).  Prefixes are optional, and
@samp{vr} may be written @samp{r}.

Names of the form @samp{@var{n}f2_1} refer to processors with
FPUs clocked at half the rate of the core, names of the form
@samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
rate as the core, and names of the form @samp{@var{n}f3_2} refer to
processors with FPUs clocked a ratio of 3:2 with respect to the core.
For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
accepted as synonyms for @samp{@var{n}f1_1}.

GCC defines two macros based on the value of this option.  The first
is @code{_MIPS_ARCH}, which gives the name of target architecture, as
a string.  The second has the form @code{_MIPS_ARCH_@var{foo}},
where @var{foo} is the capitalized value of @code{_MIPS_ARCH}@.
For example, @option{-march=r2000} sets @code{_MIPS_ARCH}
to @code{"r2000"} and defines the macro @code{_MIPS_ARCH_R2000}.

Note that the @code{_MIPS_ARCH} macro uses the processor names given
above.  In other words, it has the full prefix and does not
abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
the macro names the resolved architecture (either @code{"mips1"} or
@code{"mips3"}).  It names the default architecture when no
@option{-march} option is given.

@item -mtune=@var{arch}
@opindex mtune
Optimize for @var{arch}.  Among other things, this option controls
the way instructions are scheduled, and the perceived cost of arithmetic
operations.  The list of @var{arch} values is the same as for
@option{-march}.

When this option is not used, GCC optimizes for the processor
specified by @option{-march}.  By using @option{-march} and
@option{-mtune} together, it is possible to generate code that
runs on a family of processors, but optimize the code for one
particular member of that family.

@option{-mtune} defines the macros @code{_MIPS_TUNE} and
@code{_MIPS_TUNE_@var{foo}}, which work in the same way as the
@option{-march} ones described above.

@item -mips1
@opindex mips1
Equivalent to @option{-march=mips1}.

@item -mips2
@opindex mips2
Equivalent to @option{-march=mips2}.

@item -mips3
@opindex mips3
Equivalent to @option{-march=mips3}.

@item -mips4
@opindex mips4
Equivalent to @option{-march=mips4}.

@item -mips32
@opindex mips32
Equivalent to @option{-march=mips32}.

@item -mips32r3
@opindex mips32r3
Equivalent to @option{-march=mips32r3}.

@item -mips32r5
@opindex mips32r5
Equivalent to @option{-march=mips32r5}.

@item -mips32r6
@opindex mips32r6
Equivalent to @option{-march=mips32r6}.

@item -mips64
@opindex mips64
Equivalent to @option{-march=mips64}.

@item -mips64r2
@opindex mips64r2
Equivalent to @option{-march=mips64r2}.

@item -mips64r3
@opindex mips64r3
Equivalent to @option{-march=mips64r3}.

@item -mips64r5
@opindex mips64r5
Equivalent to @option{-march=mips64r5}.

@item -mips64r6
@opindex mips64r6
Equivalent to @option{-march=mips64r6}.

@item -mips16
@itemx -mno-mips16
@opindex mips16
@opindex mno-mips16
Generate (do not generate) MIPS16 code.  If GCC is targeting a
MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.

MIPS16 code generation can also be controlled on a per-function basis
by means of @code{mips16} and @code{nomips16} attributes.
@xref{Function Attributes}, for more information.

@item -mflip-mips16
@opindex mflip-mips16
Generate MIPS16 code on alternating functions.  This option is provided
for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
not intended for ordinary use in compiling user code.

@item -minterlink-compressed
@itemx -mno-interlink-compressed
@opindex minterlink-compressed
@opindex mno-interlink-compressed
Require (do not require) that code using the standard (uncompressed) MIPS ISA
be link-compatible with MIPS16 and microMIPS code, and vice versa.

For example, code using the standard ISA encoding cannot jump directly
to MIPS16 or microMIPS code; it must either use a call or an indirect jump.
@option{-minterlink-compressed} therefore disables direct jumps unless GCC
knows that the target of the jump is not compressed.

@item -minterlink-mips16
@itemx -mno-interlink-mips16
@opindex minterlink-mips16
@opindex mno-interlink-mips16
Aliases of @option{-minterlink-compressed} and
@option{-mno-interlink-compressed}.  These options predate the microMIPS ASE
and are retained for backwards compatibility.

@item -mabi=32
@itemx -mabi=o64
@itemx -mabi=n32
@itemx -mabi=64
@itemx -mabi=eabi
@opindex mabi=32
@opindex mabi=o64
@opindex mabi=n32
@opindex mabi=64
@opindex mabi=eabi
Generate code for the given ABI@.

Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
generates 64-bit code when you select a 64-bit architecture, but you
can use @option{-mgp32} to get 32-bit code instead.

For information about the O64 ABI, see
@uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.

GCC supports a variant of the o32 ABI in which floating-point registers
are 64 rather than 32 bits wide.  You can select this combination with
@option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
and @code{mfhc1} instructions and is therefore only supported for
MIPS32R2, MIPS32R3 and MIPS32R5 processors.

The register assignments for arguments and return values remain the
same, but each scalar value is passed in a single 64-bit register
rather than a pair of 32-bit registers.  For example, scalar
floating-point values are returned in @samp{$f0} only, not a
@samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
remains the same in that the even-numbered double-precision registers
are saved.

Two additional variants of the o32 ABI are supported to enable
a transition from 32-bit to 64-bit registers.  These are FPXX
(@option{-mfpxx}) and FP64A (@option{-mfp64} @option{-mno-odd-spreg}).
The FPXX extension mandates that all code must execute correctly
when run using 32-bit or 64-bit registers.  The code can be interlinked
with either FP32 or FP64, but not both.
The FP64A extension is similar to the FP64 extension but forbids the
use of odd-numbered single-precision registers.  This can be used
in conjunction with the @code{FRE} mode of FPUs in MIPS32R5
processors and allows both FP32 and FP64A code to interlink and
run in the same process without changing FPU modes.

@item -mabicalls
@itemx -mno-abicalls
@opindex mabicalls
@opindex mno-abicalls
Generate (do not generate) code that is suitable for SVR4-style
dynamic objects.  @option{-mabicalls} is the default for SVR4-based
systems.

@item -mshared
@itemx -mno-shared
Generate (do not generate) code that is fully position-independent,
and that can therefore be linked into shared libraries.  This option
only affects @option{-mabicalls}.

All @option{-mabicalls} code has traditionally been position-independent,
regardless of options like @option{-fPIC} and @option{-fpic}.  However,
as an extension, the GNU toolchain allows executables to use absolute
accesses for locally-binding symbols.  It can also use shorter GP
initialization sequences and generate direct calls to locally-defined
functions.  This mode is selected by @option{-mno-shared}.

@option{-mno-shared} depends on binutils 2.16 or higher and generates
objects that can only be linked by the GNU linker.  However, the option
does not affect the ABI of the final executable; it only affects the ABI
of relocatable objects.  Using @option{-mno-shared} generally makes
executables both smaller and quicker.

@option{-mshared} is the default.

@item -mplt
@itemx -mno-plt
@opindex mplt
@opindex mno-plt
Assume (do not assume) that the static and dynamic linkers
support PLTs and copy relocations.  This option only affects
@option{-mno-shared -mabicalls}.  For the n64 ABI, this option
has no effect without @option{-msym32}.

You can make @option{-mplt} the default by configuring
GCC with @option{--with-mips-plt}.  The default is
@option{-mno-plt} otherwise.

@item -mxgot
@itemx -mno-xgot
@opindex mxgot
@opindex mno-xgot
Lift (do not lift) the usual restrictions on the size of the global
offset table.

GCC normally uses a single instruction to load values from the GOT@.
While this is relatively efficient, it only works if the GOT
is smaller than about 64k.  Anything larger causes the linker
to report an error such as:

@cindex relocation truncated to fit (MIPS)
@smallexample
relocation truncated to fit: R_MIPS_GOT16 foobar
@end smallexample

If this happens, you should recompile your code with @option{-mxgot}.
This works with very large GOTs, although the code is also
less efficient, since it takes three instructions to fetch the
value of a global symbol.

Note that some linkers can create multiple GOTs.  If you have such a
linker, you should only need to use @option{-mxgot} when a single object
file accesses more than 64k's worth of GOT entries.  Very few do.

These options have no effect unless GCC is generating position
independent code.

@item -mgp32
@opindex mgp32
Assume that general-purpose registers are 32 bits wide.

@item -mgp64
@opindex mgp64
Assume that general-purpose registers are 64 bits wide.

@item -mfp32
@opindex mfp32
Assume that floating-point registers are 32 bits wide.

@item -mfp64
@opindex mfp64
Assume that floating-point registers are 64 bits wide.

@item -mfpxx
@opindex mfpxx
Do not assume the width of floating-point registers.

@item -mhard-float
@opindex mhard-float
Use floating-point coprocessor instructions.

@item -msoft-float
@opindex msoft-float
Do not use floating-point coprocessor instructions.  Implement
floating-point calculations using library calls instead.

@item -mno-float
@opindex mno-float
Equivalent to @option{-msoft-float}, but additionally asserts that the
program being compiled does not perform any floating-point operations.
This option is presently supported only by some bare-metal MIPS
configurations, where it may select a special set of libraries
that lack all floating-point support (including, for example, the
floating-point @code{printf} formats).  
If code compiled with @option{-mno-float} accidentally contains
floating-point operations, it is likely to suffer a link-time
or run-time failure.

@item -msingle-float
@opindex msingle-float
Assume that the floating-point coprocessor only supports single-precision
operations.

@item -mdouble-float
@opindex mdouble-float
Assume that the floating-point coprocessor supports double-precision
operations.  This is the default.

@item -modd-spreg
@itemx -mno-odd-spreg
@opindex modd-spreg
@opindex mno-odd-spreg
Enable the use of odd-numbered single-precision floating-point registers
for the o32 ABI.  This is the default for processors that are known to
support these registers.  When using the o32 FPXX ABI, @option{-mno-odd-spreg}
is set by default.

@item -mabs=2008
@itemx -mabs=legacy
@opindex mabs=2008
@opindex mabs=legacy
These options control the treatment of the special not-a-number (NaN)
IEEE 754 floating-point data with the @code{abs.@i{fmt}} and
@code{neg.@i{fmt}} machine instructions.

By default or when @option{-mabs=legacy} is used the legacy
treatment is selected.  In this case these instructions are considered
arithmetic and avoided where correct operation is required and the
input operand might be a NaN.  A longer sequence of instructions that
manipulate the sign bit of floating-point datum manually is used
instead unless the @option{-ffinite-math-only} option has also been
specified.

The @option{-mabs=2008} option selects the IEEE 754-2008 treatment.  In
this case these instructions are considered non-arithmetic and therefore
operating correctly in all cases, including in particular where the
input operand is a NaN.  These instructions are therefore always used
for the respective operations.

@item -mnan=2008
@itemx -mnan=legacy
@opindex mnan=2008
@opindex mnan=legacy
These options control the encoding of the special not-a-number (NaN)
IEEE 754 floating-point data.

The @option{-mnan=legacy} option selects the legacy encoding.  In this
case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
significand field being 0, whereas signaling NaNs (sNaNs) are denoted
by the first bit of their trailing significand field being 1.

The @option{-mnan=2008} option selects the IEEE 754-2008 encoding.  In
this case qNaNs are denoted by the first bit of their trailing
significand field being 1, whereas sNaNs are denoted by the first bit of
their trailing significand field being 0.

The default is @option{-mnan=legacy} unless GCC has been configured with
@option{--with-nan=2008}.

@item -mllsc
@itemx -mno-llsc
@opindex mllsc
@opindex mno-llsc
Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
implement atomic memory built-in functions.  When neither option is
specified, GCC uses the instructions if the target architecture
supports them.

@option{-mllsc} is useful if the runtime environment can emulate the
instructions and @option{-mno-llsc} can be useful when compiling for
nonstandard ISAs.  You can make either option the default by
configuring GCC with @option{--with-llsc} and @option{--without-llsc}
respectively.  @option{--with-llsc} is the default for some
configurations; see the installation documentation for details.

@item -mdsp
@itemx -mno-dsp
@opindex mdsp
@opindex mno-dsp
Use (do not use) revision 1 of the MIPS DSP ASE@.
@xref{MIPS DSP Built-in Functions}.  This option defines the
preprocessor macro @code{__mips_dsp}.  It also defines
@code{__mips_dsp_rev} to 1.

@item -mdspr2
@itemx -mno-dspr2
@opindex mdspr2
@opindex mno-dspr2
Use (do not use) revision 2 of the MIPS DSP ASE@.
@xref{MIPS DSP Built-in Functions}.  This option defines the
preprocessor macros @code{__mips_dsp} and @code{__mips_dspr2}.
It also defines @code{__mips_dsp_rev} to 2.

@item -msmartmips
@itemx -mno-smartmips
@opindex msmartmips
@opindex mno-smartmips
Use (do not use) the MIPS SmartMIPS ASE.

@item -mpaired-single
@itemx -mno-paired-single
@opindex mpaired-single
@opindex mno-paired-single
Use (do not use) paired-single floating-point instructions.
@xref{MIPS Paired-Single Support}.  This option requires
hardware floating-point support to be enabled.

@item -mdmx
@itemx -mno-mdmx
@opindex mdmx
@opindex mno-mdmx
Use (do not use) MIPS Digital Media Extension instructions.
This option can only be used when generating 64-bit code and requires
hardware floating-point support to be enabled.

@item -mips3d
@itemx -mno-mips3d
@opindex mips3d
@opindex mno-mips3d
Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
The option @option{-mips3d} implies @option{-mpaired-single}.

@item -mmicromips
@itemx -mno-micromips
@opindex mmicromips
@opindex mno-mmicromips
Generate (do not generate) microMIPS code.

MicroMIPS code generation can also be controlled on a per-function basis
by means of @code{micromips} and @code{nomicromips} attributes.
@xref{Function Attributes}, for more information.

@item -mmt
@itemx -mno-mt
@opindex mmt
@opindex mno-mt
Use (do not use) MT Multithreading instructions.

@item -mmcu
@itemx -mno-mcu
@opindex mmcu
@opindex mno-mcu
Use (do not use) the MIPS MCU ASE instructions.

@item -meva
@itemx -mno-eva
@opindex meva
@opindex mno-eva
Use (do not use) the MIPS Enhanced Virtual Addressing instructions.

@item -mvirt
@itemx -mno-virt
@opindex mvirt
@opindex mno-virt
Use (do not use) the MIPS Virtualization (VZ) instructions.

@item -mxpa
@itemx -mno-xpa
@opindex mxpa
@opindex mno-xpa
Use (do not use) the MIPS eXtended Physical Address (XPA) instructions.

@item -mcrc
@itemx -mno-crc
@opindex mcrc
@opindex mno-crc
Use (do not use) the MIPS Cyclic Redundancy Check (CRC) instructions.

@item -mginv
@itemx -mno-ginv
@opindex mginv
@opindex mno-ginv
Use (do not use) the MIPS Global INValidate (GINV) instructions.

@item -mloongson-mmi
@itemx -mno-loongson-mmi
@opindex mloongson-mmi
@opindex mno-loongson-mmi
Use (do not use) the MIPS Loongson MultiMedia extensions Instructions (MMI).

@item -mloongson-ext
@itemx -mno-loongson-ext
@opindex mloongson-ext
@opindex mno-loongson-ext
Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.

@item -mloongson-ext2
@itemx -mno-loongson-ext2
@opindex mloongson-ext2
@opindex mno-loongson-ext2
Use (do not use) the MIPS Loongson EXTensions r2 (EXT2) instructions.

@item -mlong64
@opindex mlong64
Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
an explanation of the default and the way that the pointer size is
determined.

@item -mlong32
@opindex mlong32
Force @code{long}, @code{int}, and pointer types to be 32 bits wide.

The default size of @code{int}s, @code{long}s and pointers depends on
the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
32-bit @code{long}s.  Pointers are the same size as @code{long}s,
or the same size as integer registers, whichever is smaller.

@item -msym32
@itemx -mno-sym32
@opindex msym32
@opindex mno-sym32
Assume (do not assume) that all symbols have 32-bit values, regardless
of the selected ABI@.  This option is useful in combination with
@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
to generate shorter and faster references to symbolic addresses.

@item -G @var{num}
@opindex G
Put definitions of externally-visible data in a small data section
if that data is no bigger than @var{num} bytes.  GCC can then generate
more efficient accesses to the data; see @option{-mgpopt} for details.

The default @option{-G} option depends on the configuration.

@item -mlocal-sdata
@itemx -mno-local-sdata
@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
default for all configurations.

If the linker complains that an application is using too much small data,
you might want to try rebuilding the less performance-critical parts with
@option{-mno-local-sdata}.  You might also want to build large
libraries with @option{-mno-local-sdata}, so that the libraries leave
more room for the main program.

@item -mextern-sdata
@itemx -mno-extern-sdata
@opindex mextern-sdata
@opindex mno-extern-sdata
Assume (do not assume) that externally-defined data is in
a small data section if the size of that data is within the @option{-G} limit.
@option{-mextern-sdata} is the default for all configurations.

If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
@var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
that is no bigger than @var{num} bytes, you must make sure that @var{Var}
is placed in a small data section.  If @var{Var} is defined by another
module, you must either compile that module with a high-enough
@option{-G} setting or attach a @code{section} attribute to @var{Var}'s
definition.  If @var{Var} is common, you must link the application
with a high-enough @option{-G} setting.

The easiest way of satisfying these restrictions is to compile
and link every module with the same @option{-G} option.  However,
you may wish to build a library that supports several different
small data limits.  You can do this by compiling the library with
the highest supported @option{-G} setting and additionally using
@option{-mno-extern-sdata} to stop the library from making assumptions
about externally-defined data.

@item -mgpopt
@itemx -mno-gpopt
@opindex mgpopt
@opindex mno-gpopt
Use (do not use) GP-relative accesses for symbols that are known to be
in a small data section; see @option{-G}, @option{-mlocal-sdata} and
@option{-mextern-sdata}.  @option{-mgpopt} is the default for all
configurations.

@option{-mno-gpopt} is useful for cases where the @code{$gp} register
might not hold the value of @code{_gp}.  For example, if the code is
part of a library that might be used in a boot monitor, programs that
call boot monitor routines pass an unknown value in @code{$gp}.
(In such situations, the boot monitor itself is usually compiled
with @option{-G0}.)

@option{-mno-gpopt} implies @option{-mno-local-sdata} and
@option{-mno-extern-sdata}.

@item -membedded-data
@itemx -mno-embedded-data
@opindex membedded-data
@opindex mno-embedded-data
Allocate variables to the read-only data section first if possible, then
next in the small data section if possible, otherwise in data.  This gives
slightly slower code than the default, but reduces the amount of RAM required
when executing, and thus may be preferred for some embedded systems.

@item -muninit-const-in-rodata
@itemx -mno-uninit-const-in-rodata
@opindex muninit-const-in-rodata
@opindex mno-uninit-const-in-rodata
Put uninitialized @code{const} variables in the read-only data section.
This option is only meaningful in conjunction with @option{-membedded-data}.

@item -mcode-readable=@var{setting}
@opindex mcode-readable
Specify whether GCC may generate code that reads from executable sections.
There are three possible settings:

@table @gcctabopt
@item -mcode-readable=yes
Instructions may freely access executable sections.  This is the
default setting.

@item -mcode-readable=pcrel
MIPS16 PC-relative load instructions can access executable sections,
but other instructions must not do so.  This option is useful on 4KSc
and 4KSd processors when the code TLBs have the Read Inhibit bit set.
It is also useful on processors that can be configured to have a dual
instruction/data SRAM interface and that, like the M4K, automatically
redirect PC-relative loads to the instruction RAM.

@item -mcode-readable=no
Instructions must not access executable sections.  This option can be
useful on targets that are configured to have a dual instruction/data
SRAM interface but that (unlike the M4K) do not automatically redirect
PC-relative loads to the instruction RAM.
@end table

@item -msplit-addresses
@itemx -mno-split-addresses
@opindex msplit-addresses
@opindex mno-split-addresses
Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
relocation operators.  This option has been superseded by
@option{-mexplicit-relocs} but is retained for backwards compatibility.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-relocs
Use (do not use) assembler relocation operators when dealing with symbolic
addresses.  The alternative, selected by @option{-mno-explicit-relocs},
is to use assembler macros instead.

@option{-mexplicit-relocs} is the default if GCC was configured
to use an assembler that supports relocation operators.

@item -mcheck-zero-division
@itemx -mno-check-zero-division
@opindex mcheck-zero-division
@opindex mno-check-zero-division
Trap (do not trap) on integer division by zero.

The default is @option{-mcheck-zero-division}.

@item -mdivide-traps
@itemx -mdivide-breaks
@opindex mdivide-traps
@opindex mdivide-breaks
MIPS systems check for division by zero by generating either a
conditional trap or a break instruction.  Using traps results in
smaller code, but is only supported on MIPS II and later.  Also, some
versions of the Linux kernel have a bug that prevents trap from
generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
allow conditional traps on architectures that support them and
@option{-mdivide-breaks} to force the use of breaks.

The default is usually @option{-mdivide-traps}, but this can be
overridden at configure time using @option{--with-divide=breaks}.
Divide-by-zero checks can be completely disabled using
@option{-mno-check-zero-division}.

@item -mload-store-pairs
@itemx -mno-load-store-pairs
@opindex mload-store-pairs
@opindex mno-load-store-pairs
Enable (disable) an optimization that pairs consecutive load or store
instructions to enable load/store bonding.  This option is enabled by
default but only takes effect when the selected architecture is known
to support bonding.

@item -mmemcpy
@itemx -mno-memcpy
@opindex mmemcpy
@opindex mno-memcpy
Force (do not force) the use of @code{memcpy} for non-trivial block
moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
most constant-sized copies.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Disable (do not disable) use of the @code{jal} instruction.  Calling
functions using @code{jal} is more efficient but requires the caller
and callee to be in the same 256 megabyte segment.

This option has no effect on abicalls code.  The default is
@option{-mno-long-calls}.

@item -mmad
@itemx -mno-mad
@opindex mmad
@opindex mno-mad
Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
instructions, as provided by the R4650 ISA@.

@item -mimadd
@itemx -mno-imadd
@opindex mimadd
@opindex mno-imadd
Enable (disable) use of the @code{madd} and @code{msub} integer
instructions.  The default is @option{-mimadd} on architectures
that support @code{madd} and @code{msub} except for the 74k 
architecture where it was found to generate slower code.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Enable (disable) use of the floating-point multiply-accumulate
instructions, when they are available.  The default is
@option{-mfused-madd}.

On the R8000 CPU when multiply-accumulate instructions are used,
the intermediate product is calculated to infinite precision
and is not subject to the FCSR Flush to Zero bit.  This may be
undesirable in some circumstances.  On other processors the result
is numerically identical to the equivalent computation using
separate multiply, add, subtract and negate instructions.

@item -nocpp
@opindex nocpp
Tell the MIPS assembler to not run its preprocessor over user
assembler files (with a @samp{.s} suffix) when assembling them.

@item -mfix-24k
@itemx -mno-fix-24k
@opindex mfix-24k
@opindex mno-fix-24k
Work around the 24K E48 (lost data on stores during refill) errata.
The workarounds are implemented by the assembler rather than by GCC@.

@item -mfix-r4000
@itemx -mno-fix-r4000
@opindex mfix-r4000
@opindex mno-fix-r4000
Work around certain R4000 CPU errata:
@itemize @minus
@item
A double-word or a variable shift may give an incorrect result if executed
immediately after starting an integer division.
@item
A double-word or a variable shift may give an incorrect result if executed
while an integer multiplication is in progress.
@item
An integer division may give an incorrect result if started in a delay slot
of a taken branch or a jump.
@end itemize

@item -mfix-r4400
@itemx -mno-fix-r4400
@opindex mfix-r4400
@opindex mno-fix-r4400
Work around certain R4400 CPU errata:
@itemize @minus
@item
A double-word or a variable shift may give an incorrect result if executed
immediately after starting an integer division.
@end itemize

@item -mfix-r10000
@itemx -mno-fix-r10000
@opindex mfix-r10000
@opindex mno-fix-r10000
Work around certain R10000 errata:
@itemize @minus
@item
@code{ll}/@code{sc} sequences may not behave atomically on revisions
prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
@end itemize

This option can only be used if the target architecture supports
branch-likely instructions.  @option{-mfix-r10000} is the default when
@option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
otherwise.

@item -mfix-r5900
@itemx -mno-fix-r5900
@opindex mfix-r5900
Do not attempt to schedule the preceding instruction into the delay slot
of a branch instruction placed at the end of a short loop of six
instructions or fewer and always schedule a @code{nop} instruction there
instead.  The short loop bug under certain conditions causes loops to
execute only once or twice, due to a hardware bug in the R5900 chip.  The
workaround is implemented by the assembler rather than by GCC@.

@item -mfix-rm7000
@itemx -mno-fix-rm7000
@opindex mfix-rm7000
Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
workarounds are implemented by the assembler rather than by GCC@.

@item -mfix-vr4120
@itemx -mno-fix-vr4120
@opindex mfix-vr4120
Work around certain VR4120 errata:
@itemize @minus
@item
@code{dmultu} does not always produce the correct result.
@item
@code{div} and @code{ddiv} do not always produce the correct result if one
of the operands is negative.
@end itemize
The workarounds for the division errata rely on special functions in
@file{libgcc.a}.  At present, these functions are only provided by
the @code{mips64vr*-elf} configurations.

Other VR4120 errata require a NOP to be inserted between certain pairs of
instructions.  These errata are handled by the assembler, not by GCC itself.

@item -mfix-vr4130
@opindex mfix-vr4130
Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
workarounds are implemented by the assembler rather than by GCC,
although GCC avoids using @code{mflo} and @code{mfhi} if the
VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
instructions are available instead.

@item -mfix-sb1
@itemx -mno-fix-sb1
@opindex mfix-sb1
Work around certain SB-1 CPU core errata.
(This flag currently works around the SB-1 revision 2
``F1'' and ``F2'' floating-point errata.)

@item -mr10k-cache-barrier=@var{setting}
@opindex mr10k-cache-barrier
Specify whether GCC should insert cache barriers to avoid the
side effects of speculation on R10K processors.

In common with many processors, the R10K tries to predict the outcome
of a conditional branch and speculatively executes instructions from
the ``taken'' branch.  It later aborts these instructions if the
predicted outcome is wrong.  However, on the R10K, even aborted
instructions can have side effects.

This problem only affects kernel stores and, depending on the system,
kernel loads.  As an example, a speculatively-executed store may load
the target memory into cache and mark the cache line as dirty, even if
the store itself is later aborted.  If a DMA operation writes to the
same area of memory before the ``dirty'' line is flushed, the cached
data overwrites the DMA-ed data.  See the R10K processor manual
for a full description, including other potential problems.

One workaround is to insert cache barrier instructions before every memory
access that might be speculatively executed and that might have side
effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
controls GCC's implementation of this workaround.  It assumes that
aborted accesses to any byte in the following regions does not have
side effects:

@enumerate
@item
the memory occupied by the current function's stack frame;

@item
the memory occupied by an incoming stack argument;

@item
the memory occupied by an object with a link-time-constant address.
@end enumerate

It is the kernel's responsibility to ensure that speculative
accesses to these regions are indeed safe.

If the input program contains a function declaration such as:

@smallexample
void foo (void);
@end smallexample

then the implementation of @code{foo} must allow @code{j foo} and
@code{jal foo} to be executed speculatively.  GCC honors this
restriction for functions it compiles itself.  It expects non-GCC
functions (such as hand-written assembly code) to do the same.

The option has three forms:

@table @gcctabopt
@item -mr10k-cache-barrier=load-store
Insert a cache barrier before a load or store that might be
speculatively executed and that might have side effects even
if aborted.

@item -mr10k-cache-barrier=store
Insert a cache barrier before a store that might be speculatively
executed and that might have side effects even if aborted.

@item -mr10k-cache-barrier=none
Disable the insertion of cache barriers.  This is the default setting.
@end table

@item -mflush-func=@var{func}
@itemx -mno-flush-func
@opindex mflush-func
Specifies the function to call to flush the I and D caches, or to not
call any such function.  If called, the function must take the same
arguments as the common @code{_flush_func}, that is, the address of the
memory range for which the cache is being flushed, the size of the
memory range, and the number 3 (to flush both caches).  The default
depends on the target GCC was configured for, but commonly is either
@code{_flush_func} or @code{__cpu_flush}.

@item mbranch-cost=@var{num}
@opindex mbranch-cost
Set the cost of branches to roughly @var{num} ``simple'' instructions.
This cost is only a heuristic and is not guaranteed to produce
consistent results across releases.  A zero cost redundantly selects
the default, which is based on the @option{-mtune} setting.

@item -mbranch-likely
@itemx -mno-branch-likely
@opindex mbranch-likely
@opindex mno-branch-likely
Enable or disable use of Branch Likely instructions, regardless of the
default for the selected architecture.  By default, Branch Likely
instructions may be generated if they are supported by the selected
architecture.  An exception is for the MIPS32 and MIPS64 architectures
and processors that implement those architectures; for those, Branch
Likely instructions are not be generated by default because the MIPS32
and MIPS64 architectures specifically deprecate their use.

@item -mcompact-branches=never
@itemx -mcompact-branches=optimal
@itemx -mcompact-branches=always
@opindex mcompact-branches=never
@opindex mcompact-branches=optimal
@opindex mcompact-branches=always
These options control which form of branches will be generated.  The
default is @option{-mcompact-branches=optimal}.

The @option{-mcompact-branches=never} option ensures that compact branch
instructions will never be generated.

The @option{-mcompact-branches=always} option ensures that a compact
branch instruction will be generated if available.  If a compact branch
instruction is not available, a delay slot form of the branch will be
used instead.

This option is supported from MIPS Release 6 onwards.

The @option{-mcompact-branches=optimal} option will cause a delay slot
branch to be used if one is available in the current ISA and the delay
slot is successfully filled.  If the delay slot is not filled, a compact
branch will be chosen if one is available.

@item -mfp-exceptions
@itemx -mno-fp-exceptions
@opindex mfp-exceptions
Specifies whether FP exceptions are enabled.  This affects how
FP instructions are scheduled for some processors.
The default is that FP exceptions are
enabled.

For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
FP pipe.

@item -mvr4130-align
@itemx -mno-vr4130-align
@opindex mvr4130-align
The VR4130 pipeline is two-way superscalar, but can only issue two
instructions together if the first one is 8-byte aligned.  When this
option is enabled, GCC aligns pairs of instructions that it
thinks should execute in parallel.

This option only has an effect when optimizing for the VR4130.
It normally makes code faster, but at the expense of making it bigger.
It is enabled by default at optimization level @option{-O3}.

@item -msynci
@itemx -mno-synci
@opindex msynci
Enable (disable) generation of @code{synci} instructions on
architectures that support it.  The @code{synci} instructions (if
enabled) are generated when @code{__builtin___clear_cache} is
compiled.

This option defaults to @option{-mno-synci}, but the default can be
overridden by configuring GCC with @option{--with-synci}.

When compiling code for single processor systems, it is generally safe
to use @code{synci}.  However, on many multi-core (SMP) systems, it
does not invalidate the instruction caches on all cores and may lead
to undefined behavior.

@item -mrelax-pic-calls
@itemx -mno-relax-pic-calls
@opindex mrelax-pic-calls
Try to turn PIC calls that are normally dispatched via register
@code{$25} into direct calls.  This is only possible if the linker can
resolve the destination at link time and if the destination is within
range for a direct call.

@option{-mrelax-pic-calls} is the default if GCC was configured to use
an assembler and a linker that support the @code{.reloc} assembly
directive and @option{-mexplicit-relocs} is in effect.  With
@option{-mno-explicit-relocs}, this optimization can be performed by the
assembler and the linker alone without help from the compiler.

@item -mmcount-ra-address
@itemx -mno-mcount-ra-address
@opindex mmcount-ra-address
@opindex mno-mcount-ra-address
Emit (do not emit) code that allows @code{_mcount} to modify the
calling function's return address.  When enabled, this option extends
the usual @code{_mcount} interface with a new @var{ra-address}
parameter, which has type @code{intptr_t *} and is passed in register
@code{$12}.  @code{_mcount} can then modify the return address by
doing both of the following:
@itemize
@item
Returning the new address in register @code{$31}.
@item
Storing the new address in @code{*@var{ra-address}},
if @var{ra-address} is nonnull.
@end itemize

The default is @option{-mno-mcount-ra-address}.

@item -mframe-header-opt
@itemx -mno-frame-header-opt
@opindex mframe-header-opt
Enable (disable) frame header optimization in the o32 ABI.  When using the
o32 ABI, calling functions will allocate 16 bytes on the stack for the called
function to write out register arguments.  When enabled, this optimization
will suppress the allocation of the frame header if it can be determined that
it is unused.

This optimization is off by default at all optimization levels.

@item -mlxc1-sxc1
@itemx -mno-lxc1-sxc1
@opindex mlxc1-sxc1
When applicable, enable (disable) the generation of @code{lwxc1},
@code{swxc1}, @code{ldxc1}, @code{sdxc1} instructions.  Enabled by default.

@item -mmadd4
@itemx -mno-madd4
@opindex mmadd4
When applicable, enable (disable) the generation of 4-operand @code{madd.s},
@code{madd.d} and related instructions.  Enabled by default.

@end table

@node MMIX Options
@subsection MMIX Options
@cindex MMIX Options

These options are defined for the MMIX:

@table @gcctabopt
@item -mlibfuncs
@itemx -mno-libfuncs
@opindex mlibfuncs
@opindex mno-libfuncs
Specify that intrinsic library functions are being compiled, passing all
values in registers, no matter the size.

@item -mepsilon
@itemx -mno-epsilon
@opindex mepsilon
@opindex mno-epsilon
Generate floating-point comparison instructions that compare with respect
to the @code{rE} epsilon register.

@item -mabi=mmixware
@itemx -mabi=gnu
@opindex mabi=mmixware
@opindex mabi=gnu
Generate code that passes function parameters and return values that (in
the called function) are seen as registers @code{$0} and up, as opposed to
the GNU ABI which uses global registers @code{$231} and up.

@item -mzero-extend
@itemx -mno-zero-extend
@opindex mzero-extend
@opindex mno-zero-extend
When reading data from memory in sizes shorter than 64 bits, use (do not
use) zero-extending load instructions by default, rather than
sign-extending ones.

@item -mknuthdiv
@itemx -mno-knuthdiv
@opindex mknuthdiv
@opindex mno-knuthdiv
Make the result of a division yielding a remainder have the same sign as
the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
remainder follows the sign of the dividend.  Both methods are
arithmetically valid, the latter being almost exclusively used.

@item -mtoplevel-symbols
@itemx -mno-toplevel-symbols
@opindex mtoplevel-symbols
@opindex mno-toplevel-symbols
Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
code can be used with the @code{PREFIX} assembly directive.

@item -melf
@opindex melf
Generate an executable in the ELF format, rather than the default
@samp{mmo} format used by the @command{mmix} simulator.

@item -mbranch-predict
@itemx -mno-branch-predict
@opindex mbranch-predict
@opindex mno-branch-predict
Use (do not use) the probable-branch instructions, when static branch
prediction indicates a probable branch.

@item -mbase-addresses
@itemx -mno-base-addresses
@opindex mbase-addresses
@opindex mno-base-addresses
Generate (do not generate) code that uses @emph{base addresses}.  Using a
base address automatically generates a request (handled by the assembler
and the linker) for a constant to be set up in a global register.  The
register is used for one or more base address requests within the range 0
to 255 from the value held in the register.  The generally leads to short
and fast code, but the number of different data items that can be
addressed is limited.  This means that a program that uses lots of static
data may require @option{-mno-base-addresses}.

@item -msingle-exit
@itemx -mno-single-exit
@opindex msingle-exit
@opindex mno-single-exit
Force (do not force) generated code to have a single exit point in each
function.
@end table

@node MN10300 Options
@subsection MN10300 Options
@cindex MN10300 options

These @option{-m} options are defined for Matsushita MN10300 architectures:

@table @gcctabopt
@item -mmult-bug
@opindex mmult-bug
Generate code to avoid bugs in the multiply instructions for the MN10300
processors.  This is the default.

@item -mno-mult-bug
@opindex mno-mult-bug
Do not generate code to avoid bugs in the multiply instructions for the
MN10300 processors.

@item -mam33
@opindex mam33
Generate code using features specific to the AM33 processor.

@item -mno-am33
@opindex mno-am33
Do not generate code using features specific to the AM33 processor.  This
is the default.

@item -mam33-2
@opindex mam33-2
Generate code using features specific to the AM33/2.0 processor.

@item -mam34
@opindex mam34
Generate code using features specific to the AM34 processor.

@item -mtune=@var{cpu-type}
@opindex mtune
Use the timing characteristics of the indicated CPU type when
scheduling instructions.  This does not change the targeted processor
type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
@samp{am33-2} or @samp{am34}.

@item -mreturn-pointer-on-d0
@opindex mreturn-pointer-on-d0
When generating a function that returns a pointer, return the pointer
in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
only in @code{a0}, and attempts to call such functions without a prototype
result in errors.  Note that this option is on by default; use
@option{-mno-return-pointer-on-d0} to disable it.

@item -mno-crt0
@opindex mno-crt0
Do not link in the C run-time initialization object file.

@item -mrelax
@opindex mrelax
Indicate to the linker that it should perform a relaxation optimization pass
to shorten branches, calls and absolute memory addresses.  This option only
has an effect when used on the command line for the final link step.

This option makes symbolic debugging impossible.

@item -mliw
@opindex mliw
Allow the compiler to generate @emph{Long Instruction Word}
instructions if the target is the @samp{AM33} or later.  This is the
default.  This option defines the preprocessor macro @code{__LIW__}.

@item -mno-liw
@opindex mno-liw
Do not allow the compiler to generate @emph{Long Instruction Word}
instructions.  This option defines the preprocessor macro
@code{__NO_LIW__}.

@item -msetlb
@opindex msetlb
Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
instructions if the target is the @samp{AM33} or later.  This is the
default.  This option defines the preprocessor macro @code{__SETLB__}.

@item -mno-setlb
@opindex mno-setlb
Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
instructions.  This option defines the preprocessor macro
@code{__NO_SETLB__}.

@end table

@node Moxie Options
@subsection Moxie Options
@cindex Moxie Options

@table @gcctabopt

@item -meb
@opindex meb
Generate big-endian code.  This is the default for @samp{moxie-*-*}
configurations.

@item -mel
@opindex mel
Generate little-endian code.

@item -mmul.x
@opindex mmul.x
Generate mul.x and umul.x instructions.  This is the default for
@samp{moxiebox-*-*} configurations.

@item -mno-crt0
@opindex mno-crt0
Do not link in the C run-time initialization object file.

@end table

@node MSP430 Options
@subsection MSP430 Options
@cindex MSP430 Options

These options are defined for the MSP430:

@table @gcctabopt

@item -masm-hex
@opindex masm-hex
Force assembly output to always use hex constants.  Normally such
constants are signed decimals, but this option is available for
testsuite and/or aesthetic purposes.

@item -mmcu=
@opindex mmcu=
Select the MCU to target.  This is used to create a C preprocessor
symbol based upon the MCU name, converted to upper case and pre- and
post-fixed with @samp{__}.  This in turn is used by the
@file{msp430.h} header file to select an MCU-specific supplementary
header file.

The option also sets the ISA to use.  If the MCU name is one that is
known to only support the 430 ISA then that is selected, otherwise the
430X ISA is selected.  A generic MCU name of @samp{msp430} can also be
used to select the 430 ISA.  Similarly the generic @samp{msp430x} MCU
name selects the 430X ISA.

In addition an MCU-specific linker script is added to the linker
command line.  The script's name is the name of the MCU with
@file{.ld} appended.  Thus specifying @option{-mmcu=xxx} on the @command{gcc}
command line defines the C preprocessor symbol @code{__XXX__} and
cause the linker to search for a script called @file{xxx.ld}.

The ISA and hardware multiply supported for the different MCUs is hard-coded
into GCC.  However, an external @samp{devices.csv} file can be used to
extend device support beyond those that have been hard-coded.

GCC searches for the @samp{devices.csv} file using the following methods in the
given precedence order, where the first method takes precendence over the
second which takes precedence over the third.

@table @asis
@item Include path specified with @code{-I} and @code{-L}
@samp{devices.csv} will be searched for in each of the directories specified by
include paths and linker library search paths.
@item Path specified by the environment variable @samp{MSP430_GCC_INCLUDE_DIR}
Define the value of the global environment variable
@samp{MSP430_GCC_INCLUDE_DIR}
to the full path to the directory containing devices.csv, and GCC will search
this directory for devices.csv.  If devices.csv is found, this directory will
also be registered as an include path, and linker library path.  Header files
and linker scripts in this directory can therefore be used without manually
specifying @code{-I} and @code{-L} on the command line.
@item The @samp{msp430-elf@{,bare@}/include/devices} directory
Finally, GCC will examine @samp{msp430-elf@{,bare@}/include/devices} from the
toolchain root directory.  This directory does not exist in a default
installation, but if the user has created it and copied @samp{devices.csv}
there, then the MCU data will be read.  As above, this directory will
also be registered as an include path, and linker library path.

@end table
If none of the above search methods find @samp{devices.csv}, then the
hard-coded MCU data is used.


@item -mwarn-mcu
@itemx -mno-warn-mcu
@opindex mwarn-mcu
@opindex mno-warn-mcu
This option enables or disables warnings about conflicts between the
MCU name specified by the @option{-mmcu} option and the ISA set by the
@option{-mcpu} option and/or the hardware multiply support set by the
@option{-mhwmult} option.  It also toggles warnings about unrecognized
MCU names.  This option is on by default.

@item -mcpu=
@opindex mcpu=
Specifies the ISA to use.  Accepted values are @samp{msp430},
@samp{msp430x} and @samp{msp430xv2}.  This option is deprecated.  The
@option{-mmcu=} option should be used to select the ISA.

@item -msim
@opindex msim
Link to the simulator runtime libraries and linker script.  Overrides
any scripts that would be selected by the @option{-mmcu=} option.

@item -mlarge
@opindex mlarge
Use large-model addressing (20-bit pointers, 20-bit @code{size_t}).

@item -msmall
@opindex msmall
Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).

@item -mrelax
@opindex mrelax
This option is passed to the assembler and linker, and allows the
linker to perform certain optimizations that cannot be done until
the final link.

@item mhwmult=
@opindex mhwmult=
Describes the type of hardware multiply supported by the target.
Accepted values are @samp{none} for no hardware multiply, @samp{16bit}
for the original 16-bit-only multiply supported by early MCUs.
@samp{32bit} for the 16/32-bit multiply supported by later MCUs and
@samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
A value of @samp{auto} can also be given.  This tells GCC to deduce
the hardware multiply support based upon the MCU name provided by the
@option{-mmcu} option.  If no @option{-mmcu} option is specified or if
the MCU name is not recognized then no hardware multiply support is
assumed.  @code{auto} is the default setting.

Hardware multiplies are normally performed by calling a library
routine.  This saves space in the generated code.  When compiling at
@option{-O3} or higher however the hardware multiplier is invoked
inline.  This makes for bigger, but faster code.

The hardware multiply routines disable interrupts whilst running and
restore the previous interrupt state when they finish.  This makes
them safe to use inside interrupt handlers as well as in normal code.

@item -minrt
@opindex minrt
Enable the use of a minimum runtime environment - no static
initializers or constructors.  This is intended for memory-constrained
devices.  The compiler includes special symbols in some objects
that tell the linker and runtime which code fragments are required.

@item -mtiny-printf
@opindex mtiny-printf
Enable reduced code size @code{printf} and @code{puts} library functions.
The @samp{tiny} implementations of these functions are not reentrant, so
must be used with caution in multi-threaded applications.

Support for streams has been removed and the string to be printed will
always be sent to stdout via the @code{write} syscall.  The string is not
buffered before it is sent to write.

This option requires Newlib Nano IO, so GCC must be configured with
@samp{--enable-newlib-nano-formatted-io}.

@item -mmax-inline-shift=
@opindex mmax-inline-shift=
This option takes an integer between 0 and 64 inclusive, and sets
the maximum number of inline shift instructions which should be emitted to
perform a shift operation by a constant amount.  When this value needs to be
exceeded, an mspabi helper function is used instead.  The default value is 4.

This only affects cases where a shift by multiple positions cannot be
completed with a single instruction (e.g. all shifts >1 on the 430 ISA).

Shifts of a 32-bit value are at least twice as costly, so the value passed for
this option is divided by 2 and the resulting value used instead.

@item -mcode-region=
@itemx -mdata-region=
@opindex mcode-region
@opindex mdata-region
These options tell the compiler where to place functions and data that
do not have one of the @code{lower}, @code{upper}, @code{either} or
@code{section} attributes.  Possible values are @code{lower},
@code{upper}, @code{either} or @code{any}.  The first three behave
like the corresponding attribute.  The fourth possible value -
@code{any} - is the default.  It leaves placement entirely up to the
linker script and how it assigns the standard sections
(@code{.text}, @code{.data}, etc) to the memory regions.

@item -msilicon-errata=
@opindex msilicon-errata
This option passes on a request to assembler to enable the fixes for
the named silicon errata.

@item -msilicon-errata-warn=
@opindex msilicon-errata-warn
This option passes on a request to the assembler to enable warning
messages when a silicon errata might need to be applied.

@item -mwarn-devices-csv
@itemx -mno-warn-devices-csv
@opindex mwarn-devices-csv
@opindex mno-warn-devices-csv
Warn if @samp{devices.csv} is not found or there are problem parsing it
(default: on).

@end table

@node NDS32 Options
@subsection NDS32 Options
@cindex NDS32 Options

These options are defined for NDS32 implementations:

@table @gcctabopt

@item -mbig-endian
@opindex mbig-endian
Generate code in big-endian mode.

@item -mlittle-endian
@opindex mlittle-endian
Generate code in little-endian mode.

@item -mreduced-regs
@opindex mreduced-regs
Use reduced-set registers for register allocation.

@item -mfull-regs
@opindex mfull-regs
Use full-set registers for register allocation.

@item -mcmov
@opindex mcmov
Generate conditional move instructions.

@item -mno-cmov
@opindex mno-cmov
Do not generate conditional move instructions.

@item -mext-perf
@opindex mext-perf
Generate performance extension instructions.

@item -mno-ext-perf
@opindex mno-ext-perf
Do not generate performance extension instructions.

@item -mext-perf2
@opindex mext-perf2
Generate performance extension 2 instructions.

@item -mno-ext-perf2
@opindex mno-ext-perf2
Do not generate performance extension 2 instructions.

@item -mext-string
@opindex mext-string
Generate string extension instructions.

@item -mno-ext-string
@opindex mno-ext-string
Do not generate string extension instructions.

@item -mv3push
@opindex mv3push
Generate v3 push25/pop25 instructions.

@item -mno-v3push
@opindex mno-v3push
Do not generate v3 push25/pop25 instructions.

@item -m16-bit
@opindex m16-bit
Generate 16-bit instructions.

@item -mno-16-bit
@opindex mno-16-bit
Do not generate 16-bit instructions.

@item -misr-vector-size=@var{num}
@opindex misr-vector-size
Specify the size of each interrupt vector, which must be 4 or 16.

@item -mcache-block-size=@var{num}
@opindex mcache-block-size
Specify the size of each cache block,
which must be a power of 2 between 4 and 512.

@item -march=@var{arch}
@opindex march
Specify the name of the target architecture.

@item -mcmodel=@var{code-model}
@opindex mcmodel
Set the code model to one of
@table @asis
@item @samp{small}
All the data and read-only data segments must be within 512KB addressing space.
The text segment must be within 16MB addressing space.
@item @samp{medium}
The data segment must be within 512KB while the read-only data segment can be
within 4GB addressing space.  The text segment should be still within 16MB
addressing space.
@item @samp{large}
All the text and data segments can be within 4GB addressing space.
@end table

@item -mctor-dtor
@opindex mctor-dtor
Enable constructor/destructor feature.

@item -mrelax
@opindex mrelax
Guide linker to relax instructions.

@end table

@node Nios II Options
@subsection Nios II Options
@cindex Nios II options
@cindex Altera Nios II options

These are the options defined for the Altera Nios II processor.

@table @gcctabopt

@item -G @var{num}
@opindex G
@cindex smaller data references
Put global and static objects less than or equal to @var{num} bytes
into the small data or BSS sections instead of the normal data or BSS
sections.  The default value of @var{num} is 8.

@item -mgpopt=@var{option}
@itemx -mgpopt
@itemx -mno-gpopt
@opindex mgpopt
@opindex mno-gpopt
Generate (do not generate) GP-relative accesses.  The following 
@var{option} names are recognized:

@table @samp

@item none
Do not generate GP-relative accesses.

@item local
Generate GP-relative accesses for small data objects that are not 
external, weak, or uninitialized common symbols.  
Also use GP-relative addressing for objects that
have been explicitly placed in a small data section via a @code{section}
attribute.

@item global
As for @samp{local}, but also generate GP-relative accesses for
small data objects that are external, weak, or common.  If you use this option,
you must ensure that all parts of your program (including libraries) are
compiled with the same @option{-G} setting.

@item data
Generate GP-relative accesses for all data objects in the program.  If you
use this option, the entire data and BSS segments
of your program must fit in 64K of memory and you must use an appropriate
linker script to allocate them within the addressable range of the
global pointer.

@item all
Generate GP-relative addresses for function pointers as well as data
pointers.  If you use this option, the entire text, data, and BSS segments
of your program must fit in 64K of memory and you must use an appropriate
linker script to allocate them within the addressable range of the
global pointer.

@end table

@option{-mgpopt} is equivalent to @option{-mgpopt=local}, and
@option{-mno-gpopt} is equivalent to @option{-mgpopt=none}.

The default is @option{-mgpopt} except when @option{-fpic} or
@option{-fPIC} is specified to generate position-independent code.
Note that the Nios II ABI does not permit GP-relative accesses from
shared libraries.

You may need to specify @option{-mno-gpopt} explicitly when building
programs that include large amounts of small data, including large
GOT data sections.  In this case, the 16-bit offset for GP-relative
addressing may not be large enough to allow access to the entire 
small data section.

@item -mgprel-sec=@var{regexp}
@opindex mgprel-sec
This option specifies additional section names that can be accessed via
GP-relative addressing.  It is most useful in conjunction with 
@code{section} attributes on variable declarations 
(@pxref{Common Variable Attributes}) and a custom linker script.  
The @var{regexp} is a POSIX Extended Regular Expression.

This option does not affect the behavior of the @option{-G} option, and 
the specified sections are in addition to the standard @code{.sdata}
and @code{.sbss} small-data sections that are recognized by @option{-mgpopt}.

@item -mr0rel-sec=@var{regexp}
@opindex mr0rel-sec
This option specifies names of sections that can be accessed via a 
16-bit offset from @code{r0}; that is, in the low 32K or high 32K 
of the 32-bit address space.  It is most useful in conjunction with 
@code{section} attributes on variable declarations 
(@pxref{Common Variable Attributes}) and a custom linker script.  
The @var{regexp} is a POSIX Extended Regular Expression.

In contrast to the use of GP-relative addressing for small data, 
zero-based addressing is never generated by default and there are no 
conventional section names used in standard linker scripts for sections
in the low or high areas of memory.

@item -mel
@itemx -meb
@opindex mel
@opindex meb
Generate little-endian (default) or big-endian (experimental) code,
respectively.

@item -march=@var{arch}
@opindex march
This specifies the name of the target Nios II architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  Permissible names are: @samp{r1}, @samp{r2}.

The preprocessor macro @code{__nios2_arch__} is available to programs,
with value 1 or 2, indicating the targeted ISA level.

@item -mbypass-cache
@itemx -mno-bypass-cache
@opindex mno-bypass-cache
@opindex mbypass-cache
Force all load and store instructions to always bypass cache by 
using I/O variants of the instructions. The default is not to
bypass the cache.

@item -mno-cache-volatile 
@itemx -mcache-volatile       
@opindex mcache-volatile 
@opindex mno-cache-volatile
Volatile memory access bypass the cache using the I/O variants of 
the load and store instructions. The default is not to bypass the cache.

@item -mno-fast-sw-div
@itemx -mfast-sw-div
@opindex mno-fast-sw-div
@opindex mfast-sw-div
Do not use table-based fast divide for small numbers. The default 
is to use the fast divide at @option{-O3} and above.

@item -mno-hw-mul
@itemx -mhw-mul
@itemx -mno-hw-mulx
@itemx -mhw-mulx
@itemx -mno-hw-div
@itemx -mhw-div
@opindex mno-hw-mul
@opindex mhw-mul
@opindex mno-hw-mulx
@opindex mhw-mulx
@opindex mno-hw-div
@opindex mhw-div
Enable or disable emitting @code{mul}, @code{mulx} and @code{div} family of 
instructions by the compiler. The default is to emit @code{mul}
and not emit @code{div} and @code{mulx}.

@item -mbmx
@itemx -mno-bmx
@itemx -mcdx
@itemx -mno-cdx
Enable or disable generation of Nios II R2 BMX (bit manipulation) and
CDX (code density) instructions.  Enabling these instructions also
requires @option{-march=r2}.  Since these instructions are optional
extensions to the R2 architecture, the default is not to emit them.

@item -mcustom-@var{insn}=@var{N}
@itemx -mno-custom-@var{insn}
@opindex mcustom-@var{insn}
@opindex mno-custom-@var{insn}
Each @option{-mcustom-@var{insn}=@var{N}} option enables use of a
custom instruction with encoding @var{N} when generating code that uses 
@var{insn}.  For example, @option{-mcustom-fadds=253} generates custom
instruction 253 for single-precision floating-point add operations instead
of the default behavior of using a library call.

The following values of @var{insn} are supported.  Except as otherwise
noted, floating-point operations are expected to be implemented with
normal IEEE 754 semantics and correspond directly to the C operators or the
equivalent GCC built-in functions (@pxref{Other Builtins}).

Single-precision floating point:
@table @asis

@item @samp{fadds}, @samp{fsubs}, @samp{fdivs}, @samp{fmuls}
Binary arithmetic operations.

@item @samp{fnegs}
Unary negation.

@item @samp{fabss}
Unary absolute value.

@item @samp{fcmpeqs}, @samp{fcmpges}, @samp{fcmpgts}, @samp{fcmples}, @samp{fcmplts}, @samp{fcmpnes}
Comparison operations.

@item @samp{fmins}, @samp{fmaxs}
Floating-point minimum and maximum.  These instructions are only
generated if @option{-ffinite-math-only} is specified.

@item @samp{fsqrts}
Unary square root operation.

@item @samp{fcoss}, @samp{fsins}, @samp{ftans}, @samp{fatans}, @samp{fexps}, @samp{flogs}
Floating-point trigonometric and exponential functions.  These instructions
are only generated if @option{-funsafe-math-optimizations} is also specified.

@end table

Double-precision floating point:
@table @asis

@item @samp{faddd}, @samp{fsubd}, @samp{fdivd}, @samp{fmuld}
Binary arithmetic operations.

@item @samp{fnegd}
Unary negation.

@item @samp{fabsd}
Unary absolute value.

@item @samp{fcmpeqd}, @samp{fcmpged}, @samp{fcmpgtd}, @samp{fcmpled}, @samp{fcmpltd}, @samp{fcmpned}
Comparison operations.

@item @samp{fmind}, @samp{fmaxd}
Double-precision minimum and maximum.  These instructions are only
generated if @option{-ffinite-math-only} is specified.

@item @samp{fsqrtd}
Unary square root operation.

@item @samp{fcosd}, @samp{fsind}, @samp{ftand}, @samp{fatand}, @samp{fexpd}, @samp{flogd}
Double-precision trigonometric and exponential functions.  These instructions
are only generated if @option{-funsafe-math-optimizations} is also specified.

@end table

Conversions:
@table @asis
@item @samp{fextsd}
Conversion from single precision to double precision.

@item @samp{ftruncds}
Conversion from double precision to single precision.

@item @samp{fixsi}, @samp{fixsu}, @samp{fixdi}, @samp{fixdu}
Conversion from floating point to signed or unsigned integer types, with
truncation towards zero.

@item @samp{round}
Conversion from single-precision floating point to signed integer,
rounding to the nearest integer and ties away from zero.
This corresponds to the @code{__builtin_lroundf} function when
@option{-fno-math-errno} is used.

@item @samp{floatis}, @samp{floatus}, @samp{floatid}, @samp{floatud}
Conversion from signed or unsigned integer types to floating-point types.

@end table

In addition, all of the following transfer instructions for internal
registers X and Y must be provided to use any of the double-precision
floating-point instructions.  Custom instructions taking two
double-precision source operands expect the first operand in the
64-bit register X.  The other operand (or only operand of a unary
operation) is given to the custom arithmetic instruction with the
least significant half in source register @var{src1} and the most
significant half in @var{src2}.  A custom instruction that returns a
double-precision result returns the most significant 32 bits in the
destination register and the other half in 32-bit register Y.  
GCC automatically generates the necessary code sequences to write
register X and/or read register Y when double-precision floating-point
instructions are used.

@table @asis

@item @samp{fwrx}
Write @var{src1} into the least significant half of X and @var{src2} into
the most significant half of X.

@item @samp{fwry}
Write @var{src1} into Y.

@item @samp{frdxhi}, @samp{frdxlo}
Read the most or least (respectively) significant half of X and store it in
@var{dest}.

@item @samp{frdy}
Read the value of Y and store it into @var{dest}.
@end table

Note that you can gain more local control over generation of Nios II custom
instructions by using the @code{target("custom-@var{insn}=@var{N}")}
and @code{target("no-custom-@var{insn}")} function attributes
(@pxref{Function Attributes})
or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mcustom-fpu-cfg=@var{name}
@opindex mcustom-fpu-cfg

This option enables a predefined, named set of custom instruction encodings
(see @option{-mcustom-@var{insn}} above).  
Currently, the following sets are defined:

@option{-mcustom-fpu-cfg=60-1} is equivalent to:
@gccoptlist{-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-fsingle-precision-constant}

@option{-mcustom-fpu-cfg=60-2} is equivalent to:
@gccoptlist{-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-mcustom-fdivs=255 @gol
-fsingle-precision-constant}

@option{-mcustom-fpu-cfg=72-3} is equivalent to:
@gccoptlist{-mcustom-floatus=243 @gol
-mcustom-fixsi=244 @gol
-mcustom-floatis=245 @gol
-mcustom-fcmpgts=246 @gol
-mcustom-fcmples=249 @gol
-mcustom-fcmpeqs=250 @gol
-mcustom-fcmpnes=251 @gol
-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-mcustom-fdivs=255 @gol
-fsingle-precision-constant}

@option{-mcustom-fpu-cfg=fph2} is equivalent to:
@gccoptlist{-mcustom-fabss=224 @gol
-mcustom-fnegs=225 @gol
-mcustom-fcmpnes=226 @gol
-mcustom-fcmpeqs=227 @gol
-mcustom-fcmpges=228 @gol
-mcustom-fcmpgts=229 @gol
-mcustom-fcmples=230 @gol
-mcustom-fcmplts=231 @gol
-mcustom-fmaxs=232 @gol
-mcustom-fmins=233 @gol
-mcustom-round=248 @gol
-mcustom-fixsi=249 @gol
-mcustom-floatis=250 @gol
-mcustom-fsqrts=251 @gol
-mcustom-fmuls=252 @gol
-mcustom-fadds=253 @gol
-mcustom-fsubs=254 @gol
-mcustom-fdivs=255 @gol}

Custom instruction assignments given by individual
@option{-mcustom-@var{insn}=} options override those given by
@option{-mcustom-fpu-cfg=}, regardless of the
order of the options on the command line.

Note that you can gain more local control over selection of a FPU
configuration by using the @code{target("custom-fpu-cfg=@var{name}")}
function attribute (@pxref{Function Attributes})
or pragma (@pxref{Function Specific Option Pragmas}).

The name @var{fph2} is an abbreviation for @emph{Nios II Floating Point
Hardware 2 Component}.  Please note that the custom instructions enabled by
@option{-mcustom-fmins=233} and @option{-mcustom-fmaxs=234} are only generated
if @option{-ffinite-math-only} is specified.  The custom instruction enabled by
@option{-mcustom-round=248} is only generated if @option{-fno-math-errno} is
specified.  In contrast to the other configurations,
@option{-fsingle-precision-constant} is not set.

@end table

These additional @samp{-m} options are available for the Altera Nios II
ELF (bare-metal) target:

@table @gcctabopt

@item -mhal
@opindex mhal
Link with HAL BSP.  This suppresses linking with the GCC-provided C runtime
startup and termination code, and is typically used in conjunction with
@option{-msys-crt0=} to specify the location of the alternate startup code
provided by the HAL BSP.

@item -msmallc
@opindex msmallc
Link with a limited version of the C library, @option{-lsmallc}, rather than
Newlib.

@item -msys-crt0=@var{startfile}
@opindex msys-crt0
@var{startfile} is the file name of the startfile (crt0) to use 
when linking.  This option is only useful in conjunction with @option{-mhal}.

@item -msys-lib=@var{systemlib}
@opindex msys-lib
@var{systemlib} is the library name of the library that provides
low-level system calls required by the C library,
e.g.@: @code{read} and @code{write}.
This option is typically used to link with a library provided by a HAL BSP.

@end table

@node Nvidia PTX Options
@subsection Nvidia PTX Options
@cindex Nvidia PTX options
@cindex nvptx options

These options are defined for Nvidia PTX:

@table @gcctabopt

@item -m64
@opindex m64
Ignored, but preserved for backward compatibility.  Only 64-bit ABI is
supported.

@item -misa=@var{ISA-string}
@opindex march
Generate code for given the specified PTX ISA (e.g.@: @samp{sm_35}).  ISA
strings must be lower-case.  Valid ISA strings include @samp{sm_30} and
@samp{sm_35}.  The default ISA is sm_35.

@item -mptx=@var{version-string}
@opindex mptx
Generate code for given the specified PTX version (e.g.@: @samp{6.3}).
Valid version strings include @samp{3.1} and @samp{6.3}.  The default PTX
version is 3.1.

@item -mmainkernel
@opindex mmainkernel
Link in code for a __main kernel.  This is for stand-alone instead of
offloading execution.

@item -moptimize
@opindex moptimize
Apply partitioned execution optimizations.  This is the default when any
level of optimization is selected.

@item -msoft-stack
@opindex msoft-stack
Generate code that does not use @code{.local} memory
directly for stack storage. Instead, a per-warp stack pointer is
maintained explicitly. This enables variable-length stack allocation (with
variable-length arrays or @code{alloca}), and when global memory is used for
underlying storage, makes it possible to access automatic variables from other
threads, or with atomic instructions. This code generation variant is used
for OpenMP offloading, but the option is exposed on its own for the purpose
of testing the compiler; to generate code suitable for linking into programs
using OpenMP offloading, use option @option{-mgomp}.

@item -muniform-simt
@opindex muniform-simt
Switch to code generation variant that allows to execute all threads in each
warp, while maintaining memory state and side effects as if only one thread
in each warp was active outside of OpenMP SIMD regions.  All atomic operations
and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
current lane index equals the master lane index), and the register being
assigned is copied via a shuffle instruction from the master lane.  Outside of
SIMD regions lane 0 is the master; inside, each thread sees itself as the
master.  Shared memory array @code{int __nvptx_uni[]} stores all-zeros or
all-ones bitmasks for each warp, indicating current mode (0 outside of SIMD
regions).  Each thread can bitwise-and the bitmask at position @code{tid.y}
with current lane index to compute the master lane index.

@item -mgomp
@opindex mgomp
Generate code for use in OpenMP offloading: enables @option{-msoft-stack} and
@option{-muniform-simt} options, and selects corresponding multilib variant.

@end table

@node OpenRISC Options
@subsection OpenRISC Options
@cindex OpenRISC Options

These options are defined for OpenRISC:

@table @gcctabopt

@item -mboard=@var{name}
@opindex mboard
Configure a board specific runtime.  This will be passed to the linker for
newlib board library linking.  The default is @code{or1ksim}.

@item -mnewlib
@opindex mnewlib
This option is ignored; it is for compatibility purposes only.  This used to
select linker and preprocessor options for use with newlib.

@item -msoft-div
@itemx -mhard-div
@opindex msoft-div
@opindex mhard-div
Select software or hardware divide (@code{l.div}, @code{l.divu}) instructions.
This default is hardware divide.

@item -msoft-mul
@itemx -mhard-mul
@opindex msoft-mul
@opindex mhard-mul
Select software or hardware multiply (@code{l.mul}, @code{l.muli}) instructions.
This default is hardware multiply.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Select software or hardware for floating point operations.
The default is software.

@item -mdouble-float
@opindex mdouble-float
When @option{-mhard-float} is selected, enables generation of double-precision
floating point instructions.  By default functions from @file{libgcc} are used
to perform double-precision floating point operations.

@item -munordered-float
@opindex munordered-float
When @option{-mhard-float} is selected, enables generation of unordered
floating point compare and set flag (@code{lf.sfun*}) instructions.  By default
functions from @file{libgcc} are used to perform unordered floating point
compare and set flag operations.

@item -mcmov
@opindex mcmov
Enable generation of conditional move (@code{l.cmov}) instructions.  By
default the equivalent will be generated using set and branch.

@item -mror
@opindex mror
Enable generation of rotate right (@code{l.ror}) instructions.  By default
functions from @file{libgcc} are used to perform rotate right operations.

@item -mrori
@opindex mrori
Enable generation of rotate right with immediate (@code{l.rori}) instructions.
By default functions from @file{libgcc} are used to perform rotate right with
immediate operations.

@item -msext
@opindex msext
Enable generation of sign extension (@code{l.ext*}) instructions.  By default
memory loads are used to perform sign extension.

@item -msfimm
@opindex msfimm
Enable generation of compare and set flag with immediate (@code{l.sf*i})
instructions.  By default extra instructions will be generated to store the
immediate to a register first.

@item -mshftimm
@opindex mshftimm
Enable generation of shift with immediate (@code{l.srai}, @code{l.srli},
@code{l.slli}) instructions.  By default extra instructions will be generated
to store the immediate to a register first.

@item -mcmodel=small
@opindex mcmodel=small
Generate OpenRISC code for the small model: The GOT is limited to 64k. This is
the default model.

@item -mcmodel=large
@opindex mcmodel=large
Generate OpenRISC code for the large model: The GOT may grow up to 4G in size.


@end table

@node PDP-11 Options
@subsection PDP-11 Options
@cindex PDP-11 Options

These options are defined for the PDP-11:

@table @gcctabopt
@item -mfpu
@opindex mfpu
Use hardware FPP floating point.  This is the default.  (FIS floating
point on the PDP-11/40 is not supported.)  Implies -m45.

@item -msoft-float
@opindex msoft-float
Do not use hardware floating point.

@item -mac0
@opindex mac0
Return floating-point results in ac0 (fr0 in Unix assembler syntax).

@item -mno-ac0
@opindex mno-ac0
Return floating-point results in memory.  This is the default.

@item -m40
@opindex m40
Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.

@item -m45
@opindex m45
Generate code for a PDP-11/45.  This is the default.

@item -m10
@opindex m10
Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.

@item -mint16
@itemx -mno-int32
@opindex mint16
@opindex mno-int32
Use 16-bit @code{int}.  This is the default.

@item -mint32
@itemx -mno-int16
@opindex mint32
@opindex mno-int16
Use 32-bit @code{int}.

@item -msplit
@opindex msplit
Target has split instruction and data space.  Implies -m45.

@item -munix-asm
@opindex munix-asm
Use Unix assembler syntax.

@item -mdec-asm
@opindex mdec-asm
Use DEC assembler syntax.

@item -mgnu-asm
@opindex mgnu-asm
Use GNU assembler syntax.  This is the default.

@item -mlra
@opindex mlra
Use the new LRA register allocator.  By default, the old ``reload''
allocator is used.
@end table

@node picoChip Options
@subsection picoChip Options
@cindex picoChip options

These @samp{-m} options are defined for picoChip implementations:

@table @gcctabopt

@item -mae=@var{ae_type}
@opindex mcpu
Set the instruction set, register set, and instruction scheduling
parameters for array element type @var{ae_type}.  Supported values
for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.

@option{-mae=ANY} selects a completely generic AE type.  Code
generated with this option runs on any of the other AE types.  The
code is not as efficient as it would be if compiled for a specific
AE type, and some types of operation (e.g., multiplication) do not
work properly on all types of AE.

@option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
for compiled code, and is the default.

@option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
option may suffer from poor performance of byte (char) manipulation,
since the DSP AE does not provide hardware support for byte load/stores.

@item -msymbol-as-address
Enable the compiler to directly use a symbol name as an address in a
load/store instruction, without first loading it into a
register.  Typically, the use of this option generates larger
programs, which run faster than when the option isn't used.  However, the
results vary from program to program, so it is left as a user option,
rather than being permanently enabled.

@item -mno-inefficient-warnings
Disables warnings about the generation of inefficient code.  These
warnings can be generated, for example, when compiling code that
performs byte-level memory operations on the MAC AE type.  The MAC AE has
no hardware support for byte-level memory operations, so all byte
load/stores must be synthesized from word load/store operations.  This is
inefficient and a warning is generated to indicate
that you should rewrite the code to avoid byte operations, or to target
an AE type that has the necessary hardware support.  This option disables
these warnings.

@end table

@node PowerPC Options
@subsection PowerPC Options
@cindex PowerPC options

These are listed under @xref{RS/6000 and PowerPC Options}.

@node PRU Options
@subsection PRU Options
@cindex PRU Options

These command-line options are defined for PRU target:

@table @gcctabopt
@item -minrt
@opindex minrt
Link with a minimum runtime environment, with no support for static
initializers and constructors.  Using this option can significantly reduce
the size of the final ELF binary.  Beware that the compiler could still
generate code with static initializers and constructors.  It is up to the
programmer to ensure that the source program will not use those features.

@item -mmcu=@var{mcu}
@opindex mmcu
Specify the PRU MCU variant to use.  Check Newlib for the exact list of
supported MCUs.

@item -mno-relax
@opindex mno-relax
Make GCC pass the @option{--no-relax} command-line option to the linker
instead of the @option{--relax} option.

@item -mloop
@opindex mloop
Allow (or do not allow) GCC to use the LOOP instruction.

@item -mabi=@var{variant}
@opindex mabi
Specify the ABI variant to output code for.  @option{-mabi=ti} selects the
unmodified TI ABI while @option{-mabi=gnu} selects a GNU variant that copes
more naturally with certain GCC assumptions.  These are the differences:

@table @samp
@item Function Pointer Size
TI ABI specifies that function (code) pointers are 16-bit, whereas GNU
supports only 32-bit data and code pointers.

@item Optional Return Value Pointer
Function return values larger than 64 bits are passed by using a hidden
pointer as the first argument of the function.  TI ABI, though, mandates that
the pointer can be NULL in case the caller is not using the returned value.
GNU always passes and expects a valid return value pointer.

@end table

The current @option{-mabi=ti} implementation simply raises a compile error
when any of the above code constructs is detected.  As a consequence
the standard C library cannot be built and it is omitted when linking with
@option{-mabi=ti}.

Relaxation is a GNU feature and for safety reasons is disabled when using
@option{-mabi=ti}.  The TI toolchain does not emit relocations for QBBx
instructions, so the GNU linker cannot adjust them when shortening adjacent
LDI32 pseudo instructions.

@end table

@node RISC-V Options
@subsection RISC-V Options
@cindex RISC-V Options

These command-line options are defined for RISC-V targets:

@table @gcctabopt
@item -mbranch-cost=@var{n}
@opindex mbranch-cost
Set the cost of branches to roughly @var{n} instructions.

@item -mplt
@itemx -mno-plt
@opindex plt
When generating PIC code, do or don't allow the use of PLTs. Ignored for
non-PIC.  The default is @option{-mplt}.

@item -mabi=@var{ABI-string}
@opindex mabi
Specify integer and floating-point calling convention.  @var{ABI-string}
contains two parts: the size of integer types and the registers used for
floating-point types.  For example @samp{-march=rv64ifd -mabi=lp64d} means that
@samp{long} and pointers are 64-bit (implicitly defining @samp{int} to be
32-bit), and that floating-point values up to 64 bits wide are passed in F
registers.  Contrast this with @samp{-march=rv64ifd -mabi=lp64f}, which still
allows the compiler to generate code that uses the F and D extensions but only
allows floating-point values up to 32 bits long to be passed in registers; or
@samp{-march=rv64ifd -mabi=lp64}, in which no floating-point arguments will be
passed in registers.

The default for this argument is system dependent, users who want a specific
calling convention should specify one explicitly.  The valid calling
conventions are: @samp{ilp32}, @samp{ilp32f}, @samp{ilp32d}, @samp{lp64},
@samp{lp64f}, and @samp{lp64d}.  Some calling conventions are impossible to
implement on some ISAs: for example, @samp{-march=rv32if -mabi=ilp32d} is
invalid because the ABI requires 64-bit values be passed in F registers, but F
registers are only 32 bits wide.  There is also the @samp{ilp32e} ABI that can
only be used with the @samp{rv32e} architecture.  This ABI is not well
specified at present, and is subject to change.

@item -mfdiv
@itemx -mno-fdiv
@opindex mfdiv
Do or don't use hardware floating-point divide and square root instructions.
This requires the F or D extensions for floating-point registers.  The default
is to use them if the specified architecture has these instructions.

@item -mdiv
@itemx -mno-div
@opindex mdiv
Do or don't use hardware instructions for integer division.  This requires the
M extension.  The default is to use them if the specified architecture has
these instructions.

@item -march=@var{ISA-string}
@opindex march
Generate code for given RISC-V ISA (e.g.@: @samp{rv64im}).  ISA strings must be
lower-case.  Examples include @samp{rv64i}, @samp{rv32g}, @samp{rv32e}, and
@samp{rv32imaf}.

When @option{-march=} is not specified, use the setting from @option{-mcpu}.

If both @option{-march} and @option{-mcpu=} are not specified, the default for
this argument is system dependent, users who want a specific architecture
extensions should specify one explicitly.

@item -mcpu=@var{processor-string}
@opindex mcpu
Use architecture of and optimize the output for the given processor, specified
by particular CPU name.
Permissible values for this option are: @samp{sifive-e20}, @samp{sifive-e21},
@samp{sifive-e24}, @samp{sifive-e31}, @samp{sifive-e34}, @samp{sifive-e76},
@samp{sifive-s21}, @samp{sifive-s51}, @samp{sifive-s54}, @samp{sifive-s76},
@samp{sifive-u54}, and @samp{sifive-u74}.

@item -mtune=@var{processor-string}
@opindex mtune
Optimize the output for the given processor, specified by microarchitecture or
particular CPU name.  Permissible values for this option are: @samp{rocket},
@samp{sifive-3-series}, @samp{sifive-5-series}, @samp{sifive-7-series},
@samp{size}, and all valid options for @option{-mcpu=}.

When @option{-mtune=} is not specified, use the setting from @option{-mcpu},
the default is @samp{rocket} if both are not specified.

The @samp{size} choice is not intended for use by end-users.  This is used
when @option{-Os} is specified.  It overrides the instruction cost info
provided by @option{-mtune=}, but does not override the pipeline info.  This
helps reduce code size while still giving good performance.

@item -mpreferred-stack-boundary=@var{num}
@opindex mpreferred-stack-boundary
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128-bits).

@strong{Warning:} If you use this switch, then you must build all modules with
the same value, including any libraries.  This includes the system libraries
and startup modules.

@item -msmall-data-limit=@var{n}
@opindex msmall-data-limit
Put global and static data smaller than @var{n} bytes into a special section
(on some targets).

@item -msave-restore
@itemx -mno-save-restore
@opindex msave-restore
Do or don't use smaller but slower prologue and epilogue code that uses
library function calls.  The default is to use fast inline prologues and
epilogues.

@item -mshorten-memrefs
@itemx -mno-shorten-memrefs
@opindex mshorten-memrefs
Do or do not attempt to make more use of compressed load/store instructions by
replacing a load/store of 'base register + large offset' with a new load/store
of 'new base + small offset'.  If the new base gets stored in a compressed
register, then the new load/store can be compressed.  Currently targets 32-bit
integer load/stores only.

@item -mstrict-align
@itemx -mno-strict-align
@opindex mstrict-align
Do not or do generate unaligned memory accesses.  The default is set depending
on whether the processor we are optimizing for supports fast unaligned access
or not.

@item -mcmodel=medlow
@opindex mcmodel=medlow
Generate code for the medium-low code model. The program and its statically
defined symbols must lie within a single 2 GiB address range and must lie
between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be
statically or dynamically linked. This is the default code model.

@item -mcmodel=medany
@opindex mcmodel=medany
Generate code for the medium-any code model. The program and its statically
defined symbols must be within any single 2 GiB address range. Programs can be
statically or dynamically linked.

@item -mexplicit-relocs
@itemx -mno-exlicit-relocs
Use or do not use assembler relocation operators when dealing with symbolic
addresses.  The alternative is to use assembler macros instead, which may
limit optimization.

@item -mrelax
@itemx -mno-relax
Take advantage of linker relaxations to reduce the number of instructions
required to materialize symbol addresses. The default is to take advantage of
linker relaxations.

@item -memit-attribute
@itemx -mno-emit-attribute
Emit (do not emit) RISC-V attribute to record extra information into ELF
objects.  This feature requires at least binutils 2.32.

@item -malign-data=@var{type}
@opindex malign-data
Control how GCC aligns variables and constants of array, structure, or union
types.  Supported values for @var{type} are @samp{xlen} which uses x register
width as the alignment value, and @samp{natural} which uses natural alignment.
@samp{xlen} is the default.

@item -mbig-endian
@opindex mbig-endian
Generate big-endian code.  This is the default when GCC is configured for a
@samp{riscv64be-*-*} or @samp{riscv32be-*-*} target.

@item -mlittle-endian
@opindex mlittle-endian
Generate little-endian code.  This is the default when GCC is configured for a
@samp{riscv64-*-*} or @samp{riscv32-*-*} but not a @samp{riscv64be-*-*} or
@samp{riscv32be-*-*} target.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for a global canary or @samp{tls} for per-thread
canary in the TLS block.

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which register to use as base register for reading the canary,
and from what offset from that base register. There is no default
register or offset as this is entirely for use within the Linux
kernel.
@end table

@node RL78 Options
@subsection RL78 Options
@cindex RL78 Options

@table @gcctabopt

@item -msim
@opindex msim
Links in additional target libraries to support operation within a
simulator.

@item -mmul=none
@itemx -mmul=g10
@itemx -mmul=g13
@itemx -mmul=g14
@itemx -mmul=rl78
@opindex mmul
Specifies the type of hardware multiplication and division support to
be used.  The simplest is @code{none}, which uses software for both
multiplication and division.  This is the default.  The @code{g13}
value is for the hardware multiply/divide peripheral found on the
RL78/G13 (S2 core) targets.  The @code{g14} value selects the use of
the multiplication and division instructions supported by the RL78/G14
(S3 core) parts.  The value @code{rl78} is an alias for @code{g14} and
the value @code{mg10} is an alias for @code{none}.

In addition a C preprocessor macro is defined, based upon the setting
of this option.  Possible values are: @code{__RL78_MUL_NONE__},
@code{__RL78_MUL_G13__} or @code{__RL78_MUL_G14__}.

@item -mcpu=g10
@itemx -mcpu=g13
@itemx -mcpu=g14
@itemx -mcpu=rl78
@opindex mcpu
Specifies the RL78 core to target.  The default is the G14 core, also
known as an S3 core or just RL78.  The G13 or S2 core does not have
multiply or divide instructions, instead it uses a hardware peripheral
for these operations.  The G10 or S1 core does not have register
banks, so it uses a different calling convention.

If this option is set it also selects the type of hardware multiply
support to use, unless this is overridden by an explicit
@option{-mmul=none} option on the command line.  Thus specifying
@option{-mcpu=g13} enables the use of the G13 hardware multiply
peripheral and specifying @option{-mcpu=g10} disables the use of
hardware multiplications altogether.

Note, although the RL78/G14 core is the default target, specifying
@option{-mcpu=g14} or @option{-mcpu=rl78} on the command line does
change the behavior of the toolchain since it also enables G14
hardware multiply support.  If these options are not specified on the
command line then software multiplication routines will be used even
though the code targets the RL78 core.  This is for backwards
compatibility with older toolchains which did not have hardware
multiply and divide support.

In addition a C preprocessor macro is defined, based upon the setting
of this option.  Possible values are: @code{__RL78_G10__},
@code{__RL78_G13__} or @code{__RL78_G14__}.

@item -mg10
@itemx -mg13
@itemx -mg14
@itemx -mrl78
@opindex mg10
@opindex mg13
@opindex mg14
@opindex mrl78
These are aliases for the corresponding @option{-mcpu=} option.  They
are provided for backwards compatibility.

@item -mallregs
@opindex mallregs
Allow the compiler to use all of the available registers.  By default
registers @code{r24..r31} are reserved for use in interrupt handlers.
With this option enabled these registers can be used in ordinary
functions as well.

@item -m64bit-doubles
@itemx -m32bit-doubles
@opindex m64bit-doubles
@opindex m32bit-doubles
Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
or 32 bits (@option{-m32bit-doubles}) in size.  The default is
@option{-m32bit-doubles}.

@item -msave-mduc-in-interrupts
@itemx -mno-save-mduc-in-interrupts
@opindex msave-mduc-in-interrupts
@opindex mno-save-mduc-in-interrupts
Specifies that interrupt handler functions should preserve the
MDUC registers.  This is only necessary if normal code might use
the MDUC registers, for example because it performs multiplication
and division operations.  The default is to ignore the MDUC registers
as this makes the interrupt handlers faster.  The target option -mg13
needs to be passed for this to work as this feature is only available
on the G13 target (S2 core).  The MDUC registers will only be saved
if the interrupt handler performs a multiplication or division
operation or it calls another function.

@end table

@node RS/6000 and PowerPC Options
@subsection IBM RS/6000 and PowerPC Options
@cindex RS/6000 and PowerPC Options
@cindex IBM RS/6000 and PowerPC Options

These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
@table @gcctabopt
@item -mpowerpc-gpopt
@itemx -mno-powerpc-gpopt
@itemx -mpowerpc-gfxopt
@itemx -mno-powerpc-gfxopt
@need 800
@itemx -mpowerpc64
@itemx -mno-powerpc64
@itemx -mmfcrf
@itemx -mno-mfcrf
@itemx -mpopcntb
@itemx -mno-popcntb
@itemx -mpopcntd
@itemx -mno-popcntd
@itemx -mfprnd
@itemx -mno-fprnd
@need 800
@itemx -mcmpb
@itemx -mno-cmpb
@itemx -mhard-dfp
@itemx -mno-hard-dfp
@opindex mpowerpc-gpopt
@opindex mno-powerpc-gpopt
@opindex mpowerpc-gfxopt
@opindex mno-powerpc-gfxopt
@opindex mpowerpc64
@opindex mno-powerpc64
@opindex mmfcrf
@opindex mno-mfcrf
@opindex mpopcntb
@opindex mno-popcntb
@opindex mpopcntd
@opindex mno-popcntd
@opindex mfprnd
@opindex mno-fprnd
@opindex mcmpb
@opindex mno-cmpb
@opindex mhard-dfp
@opindex mno-hard-dfp
You use these options to specify which instructions are available on the
processor you are using.  The default value of these options is
determined when configuring GCC@.  Specifying the
@option{-mcpu=@var{cpu_type}} overrides the specification of these
options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
rather than the options listed above.

Specifying @option{-mpowerpc-gpopt} allows
GCC to use the optional PowerPC architecture instructions in the
General Purpose group, including floating-point square root.  Specifying
@option{-mpowerpc-gfxopt} allows GCC to
use the optional PowerPC architecture instructions in the Graphics
group, including floating-point select.

The @option{-mmfcrf} option allows GCC to generate the move from
condition register field instruction implemented on the POWER4
processor and other processors that support the PowerPC V2.01
architecture.
The @option{-mpopcntb} option allows GCC to generate the popcount and
double-precision FP reciprocal estimate instruction implemented on the
POWER5 processor and other processors that support the PowerPC V2.02
architecture.
The @option{-mpopcntd} option allows GCC to generate the popcount
instruction implemented on the POWER7 processor and other processors
that support the PowerPC V2.06 architecture.
The @option{-mfprnd} option allows GCC to generate the FP round to
integer instructions implemented on the POWER5+ processor and other
processors that support the PowerPC V2.03 architecture.
The @option{-mcmpb} option allows GCC to generate the compare bytes
instruction implemented on the POWER6 processor and other processors
that support the PowerPC V2.05 architecture.
The @option{-mhard-dfp} option allows GCC to generate the decimal
floating-point instructions implemented on some POWER processors.

The @option{-mpowerpc64} option allows GCC to generate the additional
64-bit instructions that are found in the full PowerPC64 architecture
and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
@option{-mno-powerpc64}.

@item -mcpu=@var{cpu_type}
@opindex mcpu
Set architecture type, register usage, and
instruction scheduling parameters for machine type @var{cpu_type}.
Supported values for @var{cpu_type} are @samp{401}, @samp{403},
@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
@samp{476}, @samp{476fp}, @samp{505}, @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{a2}, @samp{e300c2},
@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
@samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
@samp{titan}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{power5+},
@samp{power6}, @samp{power6x}, @samp{power7}, @samp{power8},
@samp{power9}, @samp{future}, @samp{powerpc}, @samp{powerpc64},
@samp{powerpc64le}, @samp{rs64}, and @samp{native}.

@option{-mcpu=powerpc}, @option{-mcpu=powerpc64}, and
@option{-mcpu=powerpc64le} specify pure 32-bit PowerPC (either
endian), 64-bit big endian PowerPC and 64-bit little endian PowerPC
architecture machine types, with an appropriate, generic processor
model assumed for scheduling purposes.

Specifying @samp{native} as cpu type detects and selects the
architecture option that corresponds to the host processor of the
system performing the compilation.
@option{-mcpu=native} has no effect if GCC does not recognize the
processor.

The other options specify a specific processor.  Code generated under
those options runs best on that processor, and may not run at all on
others.

The @option{-mcpu} options automatically enable or disable the
following options:

@gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
-mpopcntb  -mpopcntd  -mpowerpc64 @gol
-mpowerpc-gpopt  -mpowerpc-gfxopt @gol
-mmulhw  -mdlmzb  -mmfpgpr  -mvsx @gol
-mcrypto  -mhtm  -mpower8-fusion  -mpower8-vector @gol
-mquad-memory  -mquad-memory-atomic  -mfloat128 @gol
-mfloat128-hardware -mprefixed -mpcrel -mmma @gol
-mrop-protect}

The particular options set for any particular CPU varies between
compiler versions, depending on what setting seems to produce optimal
code for that CPU; it doesn't necessarily reflect the actual hardware's
capabilities.  If you wish to set an individual option to a particular
value, you may specify it after the @option{-mcpu} option, like
@option{-mcpu=970 -mno-altivec}.

On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
not enabled or disabled by the @option{-mcpu} option at present because
AIX does not have full support for these options.  You may still
enable or disable them individually if you're sure it'll work in your
environment.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the architecture type or register usage,
as @option{-mcpu=@var{cpu_type}} does.  The same
values for @var{cpu_type} are used for @option{-mtune} as for
@option{-mcpu}.  If both are specified, the code generated uses the
architecture and registers set by @option{-mcpu}, but the
scheduling parameters set by @option{-mtune}.

@item -mcmodel=small
@opindex mcmodel=small
Generate PowerPC64 code for the small model: The TOC is limited to
64k.

@item -mcmodel=medium
@opindex mcmodel=medium
Generate PowerPC64 code for the medium model: The TOC and other static
data may be up to a total of 4G in size.  This is the default for 64-bit
Linux.

@item -mcmodel=large
@opindex mcmodel=large
Generate PowerPC64 code for the large model: The TOC may be up to 4G
in size.  Other data and code is only limited by the 64-bit address
space.

@item -maltivec
@itemx -mno-altivec
@opindex maltivec
@opindex mno-altivec
Generate code that uses (does not use) AltiVec instructions, and also
enable the use of built-in functions that allow more direct access to
the AltiVec instruction set.  You may also need to set
@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
enhancements.

When @option{-maltivec} is used, the element order for AltiVec intrinsics
such as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} 
match array element order corresponding to the endianness of the
target.  That is, element zero identifies the leftmost element in a
vector register when targeting a big-endian platform, and identifies
the rightmost element in a vector register when targeting a
little-endian platform.

@item -mvrsave
@itemx -mno-vrsave
@opindex mvrsave
@opindex mno-vrsave
Generate VRSAVE instructions when generating AltiVec code.

@item -msecure-plt
@opindex msecure-plt
Generate code that allows @command{ld} and @command{ld.so}
to build executables and shared
libraries with non-executable @code{.plt} and @code{.got} sections.
This is a PowerPC
32-bit SYSV ABI option.

@item -mbss-plt
@opindex mbss-plt
Generate code that uses a BSS @code{.plt} section that @command{ld.so}
fills in, and
requires @code{.plt} and @code{.got}
sections that are both writable and executable.
This is a PowerPC 32-bit SYSV ABI option.

@item -misel
@itemx -mno-isel
@opindex misel
@opindex mno-isel
This switch enables or disables the generation of ISEL instructions.

@item -mvsx
@itemx -mno-vsx
@opindex mvsx
@opindex mno-vsx
Generate code that uses (does not use) vector/scalar (VSX)
instructions, and also enable the use of built-in functions that allow
more direct access to the VSX instruction set.

@item -mcrypto
@itemx -mno-crypto
@opindex mcrypto
@opindex mno-crypto
Enable the use (disable) of the built-in functions that allow direct
access to the cryptographic instructions that were added in version
2.07 of the PowerPC ISA.

@item -mhtm
@itemx -mno-htm
@opindex mhtm
@opindex mno-htm
Enable (disable) the use of the built-in functions that allow direct
access to the Hardware Transactional Memory (HTM) instructions that
were added in version 2.07 of the PowerPC ISA.

@item -mpower8-fusion
@itemx -mno-power8-fusion
@opindex mpower8-fusion
@opindex mno-power8-fusion
Generate code that keeps (does not keeps) some integer operations
adjacent so that the instructions can be fused together on power8 and
later processors.

@item -mpower8-vector
@itemx -mno-power8-vector
@opindex mpower8-vector
@opindex mno-power8-vector
Generate code that uses (does not use) the vector and scalar
instructions that were added in version 2.07 of the PowerPC ISA.  Also
enable the use of built-in functions that allow more direct access to
the vector instructions.

@item -mquad-memory
@itemx -mno-quad-memory
@opindex mquad-memory
@opindex mno-quad-memory
Generate code that uses (does not use) the non-atomic quad word memory
instructions.  The @option{-mquad-memory} option requires use of
64-bit mode.

@item -mquad-memory-atomic
@itemx -mno-quad-memory-atomic
@opindex mquad-memory-atomic
@opindex mno-quad-memory-atomic
Generate code that uses (does not use) the atomic quad word memory
instructions.  The @option{-mquad-memory-atomic} option requires use of
64-bit mode.

@item -mfloat128
@itemx -mno-float128
@opindex mfloat128
@opindex mno-float128
Enable/disable the @var{__float128} keyword for IEEE 128-bit floating point
and use either software emulation for IEEE 128-bit floating point or
hardware instructions.

The VSX instruction set (@option{-mvsx}, @option{-mcpu=power7},
@option{-mcpu=power8}), or @option{-mcpu=power9} must be enabled to
use the IEEE 128-bit floating point support.  The IEEE 128-bit
floating point support only works on PowerPC Linux systems.

The default for @option{-mfloat128} is enabled on PowerPC Linux
systems using the VSX instruction set, and disabled on other systems.

If you use the ISA 3.0 instruction set (@option{-mpower9-vector} or
@option{-mcpu=power9}) on a 64-bit system, the IEEE 128-bit floating
point support will also enable the generation of ISA 3.0 IEEE 128-bit
floating point instructions.  Otherwise, if you do not specify to
generate ISA 3.0 instructions or you are targeting a 32-bit big endian
system, IEEE 128-bit floating point will be done with software
emulation.

@item -mfloat128-hardware
@itemx -mno-float128-hardware
@opindex mfloat128-hardware
@opindex mno-float128-hardware
Enable/disable using ISA 3.0 hardware instructions to support the
@var{__float128} data type.

The default for @option{-mfloat128-hardware} is enabled on PowerPC
Linux systems using the ISA 3.0 instruction set, and disabled on other
systems.

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for 32-bit or 64-bit environments of Darwin and SVR4
targets (including GNU/Linux).  The 32-bit environment sets int, long
and pointer to 32 bits and generates code that runs on any PowerPC
variant.  The 64-bit environment sets int to 32 bits and long and
pointer to 64 bits, and generates code for PowerPC64, as for
@option{-mpowerpc64}.

@item -mfull-toc
@itemx -mno-fp-in-toc
@itemx -mno-sum-in-toc
@itemx -mminimal-toc
@opindex mfull-toc
@opindex mno-fp-in-toc
@opindex mno-sum-in-toc
@opindex mminimal-toc
Modify generation of the TOC (Table Of Contents), which is created for
every executable file.  The @option{-mfull-toc} option is selected by
default.  In that case, GCC allocates at least one TOC entry for
each unique non-automatic variable reference in your program.  GCC
also places floating-point constants in the TOC@.  However, only
16,384 entries are available in the TOC@.

If you receive a linker error message that saying you have overflowed
the available TOC space, you can reduce the amount of TOC space used
with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
@option{-mno-fp-in-toc} prevents GCC from putting floating-point
constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
generate code to calculate the sum of an address and a constant at
run time instead of putting that sum into the TOC@.  You may specify one
or both of these options.  Each causes GCC to produce very slightly
slower and larger code at the expense of conserving TOC space.

If you still run out of space in the TOC even when you specify both of
these options, specify @option{-mminimal-toc} instead.  This option causes
GCC to make only one TOC entry for every file.  When you specify this
option, GCC produces code that is slower and larger but which
uses extremely little TOC space.  You may wish to use this option
only on files that contain less frequently-executed code.

@item -maix64
@itemx -maix32
@opindex maix64
@opindex 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 @option{-maix64} implies @option{-mpowerpc64},
while @option{-maix32} disables the 64-bit ABI and
implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.

@item -mxl-compat
@itemx -mno-xl-compat
@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
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
values and converting to double.  Use XL symbol names for long double
support routines.

The AIX calling convention was extended but not initially documented to
handle an obscure K&R C case of calling a function that takes the
address of its arguments with fewer arguments than declared.  IBM XL
compilers access floating-point arguments that do not fit in the
RSA from the stack when a subroutine is compiled without
optimization.  Because always storing floating-point arguments on the
stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by IBM
XL compilers without optimization.

@item -mpe
@opindex mpe
Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
application written to use message passing with special startup code to
enable the application to run.  The system must have PE installed in the
standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
must be overridden with the @option{-specs=} option to specify the
appropriate directory location.  The Parallel Environment does not
support threads, so the @option{-mpe} option and the @option{-pthread}
option are incompatible.

@item -malign-natural
@itemx -malign-power
@opindex malign-natural
@opindex malign-power
On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
@option{-malign-natural} overrides the ABI-defined alignment of larger
types, such as floating-point doubles, on their natural size-based boundary.
The option @option{-malign-power} instructs GCC to follow the ABI-specified
alignment rules.  GCC defaults to the standard alignment defined in the ABI@.

On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
is not supported.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Generate code that does not use (uses) the floating-point register set.
Software floating-point emulation is provided if you use the
@option{-msoft-float} option, and pass the option to GCC when linking.

@item -mmultiple
@itemx -mno-multiple
@opindex mmultiple
@opindex mno-multiple
Generate code that uses (does not use) the load multiple word
instructions and the store multiple word instructions.  These
instructions are generated by default on POWER systems, and not
generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
PowerPC systems, since those instructions do not work when the
processor is in little-endian mode.  The exceptions are PPC740 and
PPC750 which permit these instructions in little-endian mode.

@item -mupdate
@itemx -mno-update
@opindex mupdate
@opindex mno-update
Generate code that uses (does not use) the load or store instructions
that update the base register to the address of the calculated memory
location.  These instructions are generated by default.  If you use
@option{-mno-update}, there is a small window between the time that the
stack pointer is updated and the address of the previous frame is
stored, which means code that walks the stack frame across interrupts or
signals may get corrupted data.

@item -mavoid-indexed-addresses
@itemx -mno-avoid-indexed-addresses
@opindex mavoid-indexed-addresses
@opindex mno-avoid-indexed-addresses
Generate code that tries to avoid (not avoid) the use of indexed load
or store instructions. These instructions can incur a performance
penalty on Power6 processors in certain situations, such as when
stepping through large arrays that cross a 16M boundary.  This option
is enabled by default when targeting Power6 and disabled otherwise.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default
if hardware floating point is used.  The machine-dependent
@option{-mfused-madd} option is now mapped to the machine-independent
@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
mapped to @option{-ffp-contract=off}.

@item -mmulhw
@itemx -mno-mulhw
@opindex mmulhw
@opindex mno-mulhw
Generate code that uses (does not use) the half-word multiply and
multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
These instructions are generated by default when targeting those
processors.

@item -mdlmzb
@itemx -mno-dlmzb
@opindex mdlmzb
@opindex mno-dlmzb
Generate code that uses (does not use) the string-search @samp{dlmzb}
instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
generated by default when targeting those processors.

@item -mno-bit-align
@itemx -mbit-align
@opindex mno-bit-align
@opindex mbit-align
On System V.4 and embedded PowerPC systems do not (do) force structures
and unions that contain bit-fields to be aligned to the base type of the
bit-field.

For example, by default a structure containing nothing but 8
@code{unsigned} bit-fields of length 1 is aligned to a 4-byte
boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
the structure is aligned to a 1-byte boundary and is 1 byte in
size.

@item -mno-strict-align
@itemx -mstrict-align
@opindex mno-strict-align
@opindex mstrict-align
On System V.4 and embedded PowerPC systems do not (do) assume that
unaligned memory references are handled by the system.

@item -mrelocatable
@itemx -mno-relocatable
@opindex mrelocatable
@opindex mno-relocatable
Generate code that allows (does not allow) a static executable to be
relocated to a different address at run time.  A simple embedded
PowerPC system loader should relocate the entire contents of
@code{.got2} and 4-byte locations listed in the @code{.fixup} section,
a table of 32-bit addresses generated by this option.  For this to
work, all objects linked together must be compiled with
@option{-mrelocatable} or @option{-mrelocatable-lib}.
@option{-mrelocatable} code aligns the stack to an 8-byte boundary.

@item -mrelocatable-lib
@itemx -mno-relocatable-lib
@opindex mrelocatable-lib
@opindex mno-relocatable-lib
Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
@code{.fixup} section to allow static executables to be relocated at
run time, but @option{-mrelocatable-lib} does not use the smaller stack
alignment of @option{-mrelocatable}.  Objects compiled with
@option{-mrelocatable-lib} may be linked with objects compiled with
any combination of the @option{-mrelocatable} options.

@item -mno-toc
@itemx -mtoc
@opindex mno-toc
@opindex mtoc
On System V.4 and embedded PowerPC systems do not (do) assume that
register 2 contains a pointer to a global area pointing to the addresses
used in the program.

@item -mlittle
@itemx -mlittle-endian
@opindex mlittle
@opindex mlittle-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in little-endian mode.  The @option{-mlittle-endian} option is
the same as @option{-mlittle}.

@item -mbig
@itemx -mbig-endian
@opindex mbig
@opindex mbig-endian
On System V.4 and embedded PowerPC systems compile code for the
processor in big-endian mode.  The @option{-mbig-endian} option is
the same as @option{-mbig}.

@item -mdynamic-no-pic
@opindex mdynamic-no-pic
On Darwin and Mac OS X systems, compile code so that it is not
relocatable, but that its external references are relocatable.  The
resulting code is suitable for applications, but not shared
libraries.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The runtime system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mprioritize-restricted-insns=@var{priority}
@opindex mprioritize-restricted-insns
This option controls the priority that is assigned to
dispatch-slot restricted instructions during the second scheduling
pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
or @samp{2} to assign no, highest, or second-highest (respectively) 
priority to dispatch-slot restricted
instructions.

@item -msched-costly-dep=@var{dependence_type}
@opindex msched-costly-dep
This option controls which dependences are considered costly
by the target during instruction scheduling.  The argument
@var{dependence_type} takes one of the following values:

@table @asis
@item @samp{no}
No dependence is costly.

@item @samp{all}
All dependences are costly.

@item @samp{true_store_to_load}
A true dependence from store to load is costly.

@item @samp{store_to_load}
Any dependence from store to load is costly.

@item @var{number}
Any dependence for which the latency is greater than or equal to 
@var{number} is costly.
@end table

@item -minsert-sched-nops=@var{scheme}
@opindex minsert-sched-nops
This option controls which NOP insertion scheme is used during
the second scheduling pass.  The argument @var{scheme} takes one of the
following values:

@table @asis
@item @samp{no}
Don't insert NOPs.

@item @samp{pad}
Pad with NOPs any dispatch group that has vacant issue slots,
according to the scheduler's grouping.

@item @samp{regroup_exact}
Insert NOPs to force costly dependent insns into
separate groups.  Insert exactly as many NOPs as needed to force an insn
to a new group, according to the estimated processor grouping.

@item @var{number}
Insert NOPs to force costly dependent insns into
separate groups.  Insert @var{number} NOPs to force an insn to a new group.
@end table

@item -mcall-sysv
@opindex mcall-sysv
On System V.4 and embedded PowerPC systems compile code using calling
conventions that adhere to the March 1995 draft of the System V
Application Binary Interface, PowerPC processor supplement.  This is the
default unless you configured GCC using @samp{powerpc-*-eabiaix}.

@item -mcall-sysv-eabi
@itemx -mcall-eabi
@opindex mcall-sysv-eabi
@opindex mcall-eabi
Specify both @option{-mcall-sysv} and @option{-meabi} options.

@item -mcall-sysv-noeabi
@opindex mcall-sysv-noeabi
Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.

@item -mcall-aixdesc
@opindex m
On System V.4 and embedded PowerPC systems compile code for the AIX
operating system.

@item -mcall-linux
@opindex mcall-linux
On System V.4 and embedded PowerPC systems compile code for the
Linux-based GNU system.

@item -mcall-freebsd
@opindex mcall-freebsd
On System V.4 and embedded PowerPC systems compile code for the
FreeBSD operating system.

@item -mcall-netbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
NetBSD operating system.

@item -mcall-openbsd
@opindex mcall-netbsd
On System V.4 and embedded PowerPC systems compile code for the
OpenBSD operating system.

@item -mtraceback=@var{traceback_type}
@opindex mtraceback
Select the type of traceback table. Valid values for @var{traceback_type}
are @samp{full}, @samp{part}, and @samp{no}.

@item -maix-struct-return
@opindex maix-struct-return
Return all structures in memory (as specified by the AIX ABI)@.

@item -msvr4-struct-return
@opindex msvr4-struct-return
Return structures smaller than 8 bytes in registers (as specified by the
SVR4 ABI)@.

@item -mabi=@var{abi-type}
@opindex mabi
Extend the current ABI with a particular extension, or remove such extension.
Valid values are: @samp{altivec}, @samp{no-altivec},
@samp{ibmlongdouble}, @samp{ieeelongdouble},
@samp{elfv1}, @samp{elfv2},
and for AIX: @samp{vec-extabi}, @samp{vec-default}@.

@item -mabi=ibmlongdouble
@opindex mabi=ibmlongdouble
Change the current ABI to use IBM extended-precision long double.
This is not likely to work if your system defaults to using IEEE
extended-precision long double.  If you change the long double type
from IEEE extended-precision, the compiler will issue a warning unless
you use the @option{-Wno-psabi} option.  Requires @option{-mlong-double-128}
to be enabled.

@item -mabi=ieeelongdouble
@opindex mabi=ieeelongdouble
Change the current ABI to use IEEE extended-precision long double.
This is not likely to work if your system defaults to using IBM
extended-precision long double.  If you change the long double type
from IBM extended-precision, the compiler will issue a warning unless
you use the @option{-Wno-psabi} option.  Requires @option{-mlong-double-128}
to be enabled.

@item -mabi=elfv1
@opindex mabi=elfv1
Change the current ABI to use the ELFv1 ABI.
This is the default ABI for big-endian PowerPC 64-bit Linux.
Overriding the default ABI requires special system support and is
likely to fail in spectacular ways.

@item -mabi=elfv2
@opindex mabi=elfv2
Change the current ABI to use the ELFv2 ABI.
This is the default ABI for little-endian PowerPC 64-bit Linux.
Overriding the default ABI requires special system support and is
likely to fail in spectacular ways.

@item -mgnu-attribute
@itemx -mno-gnu-attribute
@opindex mgnu-attribute
@opindex mno-gnu-attribute
Emit .gnu_attribute assembly directives to set tag/value pairs in a
.gnu.attributes section that specify ABI variations in function
parameters or return values.

@item -mprototype
@itemx -mno-prototype
@opindex mprototype
@opindex mno-prototype
On System V.4 and embedded PowerPC systems assume that all calls to
variable argument functions are properly prototyped.  Otherwise, the
compiler must insert an instruction before every non-prototyped call to
set or clear bit 6 of the condition code register (@code{CR}) to
indicate whether floating-point values are passed in the floating-point
registers in case the function takes variable arguments.  With
@option{-mprototype}, only calls to prototyped variable argument functions
set or clear the bit.

@item -msim
@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}
configurations.

@item -mmvme
@opindex mmvme
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
@file{libc.a}.

@item -mads
@opindex mads
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libads.a} and
@file{libc.a}.

@item -myellowknife
@opindex myellowknife
On embedded PowerPC systems, assume that the startup module is called
@file{crt0.o} and the standard C libraries are @file{libyk.a} and
@file{libc.a}.

@item -mvxworks
@opindex mvxworks
On System V.4 and embedded PowerPC systems, specify that you are
compiling for a VxWorks system.

@item -memb
@opindex memb
On embedded PowerPC systems, set the @code{PPC_EMB} bit in the ELF flags
header to indicate that @samp{eabi} extended relocations are used.

@item -meabi
@itemx -mno-eabi
@opindex meabi
@opindex 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 @option{-meabi}
means that the stack is aligned to an 8-byte boundary, a function
@code{__eabi} is called from @code{main} to set up the EABI
environment, and the @option{-msdata} option can use both @code{r2} and
@code{r13} to point to two separate small data areas.  Selecting
@option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
no EABI initialization function is called from @code{main}, and the
@option{-msdata} option only uses @code{r13} to point to a single
small data area.  The @option{-meabi} option is on by default if you
configured GCC using one of the @samp{powerpc*-*-eabi*} options.

@item -msdata=eabi
@opindex msdata=eabi
On System V.4 and embedded PowerPC systems, put small initialized
@code{const} global and static data in the @code{.sdata2} section, which
is pointed to by register @code{r2}.  Put small initialized
non-@code{const} global and static data in the @code{.sdata} section,
which is pointed to by register @code{r13}.  Put small uninitialized
global and static data in the @code{.sbss} section, which is adjacent to
the @code{.sdata} section.  The @option{-msdata=eabi} option is
incompatible with the @option{-mrelocatable} option.  The
@option{-msdata=eabi} option also sets the @option{-memb} option.

@item -msdata=sysv
@opindex msdata=sysv
On System V.4 and embedded PowerPC systems, put small global and static
data in the @code{.sdata} section, which is pointed to by register
@code{r13}.  Put small uninitialized global and static data in the
@code{.sbss} section, which is adjacent to the @code{.sdata} section.
The @option{-msdata=sysv} option is incompatible with the
@option{-mrelocatable} option.

@item -msdata=default
@itemx -msdata
@opindex msdata=default
@opindex msdata
On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
compile code the same as @option{-msdata=eabi}, otherwise compile code the
same as @option{-msdata=sysv}.

@item -msdata=data
@opindex msdata=data
On System V.4 and embedded PowerPC systems, put small global
data in the @code{.sdata} section.  Put small uninitialized global
data in the @code{.sbss} section.  Do not use register @code{r13}
to address small data however.  This is the default behavior unless
other @option{-msdata} options are used.

@item -msdata=none
@itemx -mno-sdata
@opindex msdata=none
@opindex mno-sdata
On embedded PowerPC systems, put all initialized global and static data
in the @code{.data} section, and all uninitialized data in the
@code{.bss} section.

@item -mreadonly-in-sdata
@opindex mreadonly-in-sdata
@opindex mno-readonly-in-sdata
Put read-only objects in the @code{.sdata} section as well.  This is the
default.

@item -mblock-move-inline-limit=@var{num}
@opindex mblock-move-inline-limit
Inline all block moves (such as calls to @code{memcpy} or structure
copies) less than or equal to @var{num} bytes.  The minimum value for
@var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
targets.  The default value is target-specific.

@item -mblock-compare-inline-limit=@var{num}
@opindex mblock-compare-inline-limit
Generate non-looping inline code for all block compares (such as calls
to @code{memcmp} or structure compares) less than or equal to @var{num}
bytes. If @var{num} is 0, all inline expansion (non-loop and loop) of
block compare is disabled. The default value is target-specific.

@item -mblock-compare-inline-loop-limit=@var{num}
@opindex mblock-compare-inline-loop-limit
Generate an inline expansion using loop code for all block compares that
are less than or equal to @var{num} bytes, but greater than the limit
for non-loop inline block compare expansion. If the block length is not
constant, at most @var{num} bytes will be compared before @code{memcmp}
is called to compare the remainder of the block. The default value is
target-specific.

@item -mstring-compare-inline-limit=@var{num}
@opindex mstring-compare-inline-limit
Compare at most @var{num} string bytes with inline code.
If the difference or end of string is not found at the
end of the inline compare a call to @code{strcmp} or @code{strncmp} will
take care of the rest of the comparison. The default is 64 bytes.

@item -G @var{num}
@opindex G
@cindex smaller data references (PowerPC)
@cindex .sdata/.sdata2 references (PowerPC)
On embedded PowerPC systems, put global and static items less than or
equal to @var{num} bytes into the small data or BSS sections instead of
the normal data or BSS section.  By default, @var{num} is 8.  The
@option{-G @var{num}} switch is also passed to the linker.
All modules should be compiled with the same @option{-G @var{num}} value.

@item -mregnames
@itemx -mno-regnames
@opindex mregnames
@opindex mno-regnames
On System V.4 and embedded PowerPC systems do (do not) emit register
names in the assembly language output using symbolic forms.

@item -mlongcall
@itemx -mno-longcall
@opindex mlongcall
@opindex mno-longcall
By default assume that all calls are far away so that a longer and more
expensive calling sequence is required.  This is required for calls
farther than 32 megabytes (33,554,432 bytes) from the current location.
A short call is generated if the compiler knows
the call cannot be that far away.  This setting can be overridden by
the @code{shortcall} function attribute, or by @code{#pragma
longcall(0)}.

Some linkers are capable of detecting out-of-range calls and generating
glue code on the fly.  On these systems, long calls are unnecessary and
generate slower code.  As of this writing, the AIX linker can do this,
as can the GNU linker for PowerPC/64.  It is planned to add this feature
to the GNU linker for 32-bit PowerPC systems as well.

On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU linkers,
GCC can generate long calls using an inline PLT call sequence (see
@option{-mpltseq}).  PowerPC with @option{-mbss-plt} and PowerPC64
ELFv1 (big-endian) do not support inline PLT calls.

On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
callee, L42}, plus a @dfn{branch island} (glue code).  The two target
addresses represent the callee and the branch island.  The
Darwin/PPC linker prefers the first address and generates a @code{bl
callee} if the PPC @code{bl} instruction reaches the callee directly;
otherwise, the linker generates @code{bl L42} to call the branch
island.  The branch island is appended to the body of the
calling function; it computes the full 32-bit address of the callee
and jumps to it.

On Mach-O (Darwin) systems, this option directs the compiler emit to
the glue for every direct call, and the Darwin linker decides whether
to use or discard it.

In the future, GCC may ignore all longcall specifications
when the linker is known to generate glue.

@item -mpltseq
@itemx -mno-pltseq
@opindex mpltseq
@opindex mno-pltseq
Implement (do not implement) -fno-plt and long calls using an inline
PLT call sequence that supports lazy linking and long calls to
functions in dlopen'd shared libraries.  Inline PLT calls are only
supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
linkers, and are enabled by default if the support is detected when
configuring GCC, and, in the case of 32-bit PowerPC, if GCC is
configured with @option{--enable-secureplt}.  @option{-mpltseq} code
and @option{-mbss-plt} 32-bit PowerPC relocatable objects may not be
linked together.

@item -mtls-markers
@itemx -mno-tls-markers
@opindex mtls-markers
@opindex mno-tls-markers
Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
specifying the function argument.  The relocation allows the linker to
reliably associate function call with argument setup instructions for
TLS optimization, which in turn allows GCC to better schedule the
sequence.

@item -mrecip
@itemx -mno-recip
@opindex mrecip
This option enables use of the reciprocal estimate and
reciprocal square root estimate instructions with additional
Newton-Raphson steps to increase precision instead of doing a divide or
square root and divide for floating-point arguments.  You should use
the @option{-ffast-math} option when using @option{-mrecip} (or at
least @option{-funsafe-math-optimizations},
@option{-ffinite-math-only}, @option{-freciprocal-math} and
@option{-fno-trapping-math}).  Note that while the throughput of the
sequence is generally higher than the throughput of the non-reciprocal
instruction, the precision of the sequence can be decreased by up to 2
ulp (i.e.@: the inverse of 1.0 equals 0.99999994) for reciprocal square
roots.

@item -mrecip=@var{opt}
@opindex mrecip=opt
This option controls which reciprocal estimate instructions
may be used.  @var{opt} is a comma-separated list of options, which may
be preceded by a @code{!} to invert the option:

@table @samp

@item all
Enable all estimate instructions.

@item default 
Enable the default instructions, equivalent to @option{-mrecip}.

@item none 
Disable all estimate instructions, equivalent to @option{-mno-recip}.

@item div 
Enable the reciprocal approximation instructions for both 
single and double precision.

@item divf 
Enable the single-precision reciprocal approximation instructions.

@item divd 
Enable the double-precision reciprocal approximation instructions.

@item rsqrt 
Enable the reciprocal square root approximation instructions for both
single and double precision.

@item rsqrtf 
Enable the single-precision reciprocal square root approximation instructions.

@item rsqrtd 
Enable the double-precision reciprocal square root approximation instructions.

@end table

So, for example, @option{-mrecip=all,!rsqrtd} enables
all of the reciprocal estimate instructions, except for the
@code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
which handle the double-precision reciprocal square root calculations.

@item -mrecip-precision
@itemx -mno-recip-precision
@opindex mrecip-precision
Assume (do not assume) that the reciprocal estimate instructions
provide higher-precision estimates than is mandated by the PowerPC
ABI.  Selecting @option{-mcpu=power6}, @option{-mcpu=power7} or
@option{-mcpu=power8} automatically selects @option{-mrecip-precision}.
The double-precision square root estimate instructions are not generated by
default on low-precision machines, since they do not provide an
estimate that converges after three steps.

@item -mveclibabi=@var{type}
@opindex mveclibabi
Specifies the ABI type to use for vectorizing intrinsics using an
external library.  The only type supported at present is @samp{mass},
which specifies to use IBM's Mathematical Acceleration Subsystem
(MASS) libraries for vectorizing intrinsics using external libraries.
GCC currently emits calls to @code{acosd2}, @code{acosf4},
@code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
@code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
@code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
@code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
@code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
@code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
@code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
@code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
@code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
@code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
@code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
@code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
@code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
for power7.  Both @option{-ftree-vectorize} and
@option{-funsafe-math-optimizations} must also be enabled.  The MASS
libraries must be specified at link time.

@item -mfriz
@itemx -mno-friz
@opindex mfriz
Generate (do not generate) the @code{friz} instruction when the
@option{-funsafe-math-optimizations} option is used to optimize
rounding of floating-point values to 64-bit integer and back to floating
point.  The @code{friz} instruction does not return the same value if
the floating-point number is too large to fit in an integer.

@item -mpointers-to-nested-functions
@itemx -mno-pointers-to-nested-functions
@opindex mpointers-to-nested-functions
Generate (do not generate) code to load up the static chain register
(@code{r11}) when calling through a pointer on AIX and 64-bit Linux
systems where a function pointer points to a 3-word descriptor giving
the function address, TOC value to be loaded in register @code{r2}, and
static chain value to be loaded in register @code{r11}.  The
@option{-mpointers-to-nested-functions} is on by default.  You cannot
call through pointers to nested functions or pointers
to functions compiled in other languages that use the static chain if
you use @option{-mno-pointers-to-nested-functions}.

@item -msave-toc-indirect
@itemx -mno-save-toc-indirect
@opindex msave-toc-indirect
Generate (do not generate) code to save the TOC value in the reserved
stack location in the function prologue if the function calls through
a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
saved in the prologue, it is saved just before the call through the
pointer.  The @option{-mno-save-toc-indirect} option is the default.

@item -mcompat-align-parm
@itemx -mno-compat-align-parm
@opindex mcompat-align-parm
Generate (do not generate) code to pass structure parameters with a
maximum alignment of 64 bits, for compatibility with older versions
of GCC.

Older versions of GCC (prior to 4.9.0) incorrectly did not align a
structure parameter on a 128-bit boundary when that structure contained
a member requiring 128-bit alignment.  This is corrected in more
recent versions of GCC.  This option may be used to generate code
that is compatible with functions compiled with older versions of
GCC.

The @option{-mno-compat-align-parm} option is the default.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@itemx -mstack-protector-guard-symbol=@var{symbol}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
@opindex mstack-protector-guard-symbol
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default with GNU libc version 2.4 or later).

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which register to use as base register for reading the canary, and from what
offset from that base register. The default for those is as specified in the
relevant ABI.  @option{-mstack-protector-guard-symbol=@var{symbol}} overrides
the offset with a symbol reference to a canary in the TLS block.

@item -mpcrel
@itemx -mno-pcrel
@opindex mpcrel
@opindex mno-pcrel
Generate (do not generate) pc-relative addressing when the option
@option{-mcpu=future} is used.  The @option{-mpcrel} option requires
that the medium code model (@option{-mcmodel=medium}) and prefixed
addressing (@option{-mprefixed}) options are enabled.

@item -mprefixed
@itemx -mno-prefixed
@opindex mprefixed
@opindex mno-prefixed
Generate (do not generate) addressing modes using prefixed load and
store instructions when the option @option{-mcpu=future} is used.

@item -mmma
@itemx -mno-mma
@opindex mmma
@opindex mno-mma
Generate (do not generate) the MMA instructions when the option
@option{-mcpu=future} is used.

@item -mrop-protect
@itemx -mno-rop-protect
@opindex mrop-protect
@opindex mno-rop-protect
Generate (do not generate) ROP protection instructions when the target
processor supports them.  Currently this option disables the shrink-wrap
optimization (@option{-fshrink-wrap}).

@item -mprivileged
@itemx -mno-privileged
@opindex mprivileged
@opindex mno-privileged
Generate (do not generate) code that will run in privileged state.

@item -mblock-ops-unaligned-vsx
@itemx -mno-block-ops-unaligned-vsx
@opindex block-ops-unaligned-vsx
@opindex no-block-ops-unaligned-vsx
Generate (do not generate) unaligned vsx loads and stores for
inline expansion of @code{memcpy} and @code{memmove}.
@end table

@node RX Options
@subsection RX Options
@cindex RX Options

These command-line options are defined for RX targets:

@table @gcctabopt
@item -m64bit-doubles
@itemx -m32bit-doubles
@opindex m64bit-doubles
@opindex m32bit-doubles
Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
or 32 bits (@option{-m32bit-doubles}) in size.  The default is
@option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
works on 32-bit values, which is why the default is
@option{-m32bit-doubles}.

@item -fpu
@itemx -nofpu
@opindex fpu
@opindex nofpu
Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
floating-point hardware.  The default is enabled for the RX600
series and disabled for the RX200 series.

Floating-point instructions are only generated for 32-bit floating-point 
values, however, so the FPU hardware is not used for doubles if the
@option{-m64bit-doubles} option is used.

@emph{Note} If the @option{-fpu} option is enabled then
@option{-funsafe-math-optimizations} is also enabled automatically.
This is because the RX FPU instructions are themselves unsafe.

@item -mcpu=@var{name}
@opindex mcpu
Selects the type of RX CPU to be targeted.  Currently three types are
supported, the generic @samp{RX600} and @samp{RX200} series hardware and
the specific @samp{RX610} CPU.  The default is @samp{RX600}.

The only difference between @samp{RX600} and @samp{RX610} is that the
@samp{RX610} does not support the @code{MVTIPL} instruction.

The @samp{RX200} series does not have a hardware floating-point unit
and so @option{-nofpu} is enabled by default when this type is
selected.

@item -mbig-endian-data
@itemx -mlittle-endian-data
@opindex mbig-endian-data
@opindex mlittle-endian-data
Store data (but not code) in the big-endian format.  The default is
@option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
format.

@item -msmall-data-limit=@var{N}
@opindex msmall-data-limit
Specifies the maximum size in bytes of global and static variables
which can be placed into the small data area.  Using the small data
area can lead to smaller and faster code, but the size of area is
limited and it is up to the programmer to ensure that the area does
not overflow.  Also when the small data area is used one of the RX's
registers (usually @code{r13}) is reserved for use pointing to this
area, so it is no longer available for use by the compiler.  This
could result in slower and/or larger code if variables are pushed onto
the stack instead of being held in this register.

Note, common variables (variables that have not been initialized) and
constants are not placed into the small data area as they are assigned
to other sections in the output executable.

The default value is zero, which disables this feature.  Note, this
feature is not enabled by default with higher optimization levels
(@option{-O2} etc) because of the potentially detrimental effects of
reserving a register.  It is up to the programmer to experiment and
discover whether this feature is of benefit to their program.  See the
description of the @option{-mpid} option for a description of how the
actual register to hold the small data area pointer is chosen.

@item -msim
@itemx -mno-sim
@opindex msim
@opindex mno-sim
Use the simulator runtime.  The default is to use the libgloss
board-specific runtime.

@item -mas100-syntax
@itemx -mno-as100-syntax
@opindex mas100-syntax
@opindex mno-as100-syntax
When generating assembler output use a syntax that is compatible with
Renesas's AS100 assembler.  This syntax can also be handled by the GAS
assembler, but it has some restrictions so it is not generated by default.

@item -mmax-constant-size=@var{N}
@opindex mmax-constant-size
Specifies the maximum size, in bytes, of a constant that can be used as
an operand in a RX instruction.  Although the RX instruction set does
allow constants of up to 4 bytes in length to be used in instructions,
a longer value equates to a longer instruction.  Thus in some
circumstances it can be beneficial to restrict the size of constants
that are used in instructions.  Constants that are too big are instead
placed into a constant pool and referenced via register indirection.

The value @var{N} can be between 0 and 4.  A value of 0 (the default)
or 4 means that constants of any size are allowed.

@item -mrelax
@opindex mrelax
Enable linker relaxation.  Linker relaxation is a process whereby the
linker attempts to reduce the size of a program by finding shorter
versions of various instructions.  Disabled by default.

@item -mint-register=@var{N}
@opindex mint-register
Specify the number of registers to reserve for fast interrupt handler
functions.  The value @var{N} can be between 0 and 4.  A value of 1
means that register @code{r13} is reserved for the exclusive use
of fast interrupt handlers.  A value of 2 reserves @code{r13} and
@code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
@code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
A value of 0, the default, does not reserve any registers.

@item -msave-acc-in-interrupts
@opindex msave-acc-in-interrupts
Specifies that interrupt handler functions should preserve the
accumulator register.  This is only necessary if normal code might use
the accumulator register, for example because it performs 64-bit
multiplications.  The default is to ignore the accumulator as this
makes the interrupt handlers faster.

@item -mpid
@itemx -mno-pid
@opindex mpid
@opindex mno-pid
Enables the generation of position independent data.  When enabled any
access to constant data is done via an offset from a base address
held in a register.  This allows the location of constant data to be
determined at run time without requiring the executable to be
relocated, which is a benefit to embedded applications with tight
memory constraints.  Data that can be modified is not affected by this
option.

Note, using this feature reserves a register, usually @code{r13}, for
the constant data base address.  This can result in slower and/or
larger code, especially in complicated functions.

The actual register chosen to hold the constant data base address
depends upon whether the @option{-msmall-data-limit} and/or the
@option{-mint-register} command-line options are enabled.  Starting
with register @code{r13} and proceeding downwards, registers are
allocated first to satisfy the requirements of @option{-mint-register},
then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
is possible for the small data area register to be @code{r8} if both
@option{-mint-register=4} and @option{-mpid} are specified on the
command line.

By default this feature is not enabled.  The default can be restored
via the @option{-mno-pid} command-line option.

@item -mno-warn-multiple-fast-interrupts
@itemx -mwarn-multiple-fast-interrupts
@opindex mno-warn-multiple-fast-interrupts
@opindex mwarn-multiple-fast-interrupts
Prevents GCC from issuing a warning message if it finds more than one
fast interrupt handler when it is compiling a file.  The default is to
issue a warning for each extra fast interrupt handler found, as the RX
only supports one such interrupt.

@item -mallow-string-insns
@itemx -mno-allow-string-insns
@opindex mallow-string-insns
@opindex mno-allow-string-insns
Enables or disables the use of the string manipulation instructions
@code{SMOVF}, @code{SCMPU}, @code{SMOVB}, @code{SMOVU}, @code{SUNTIL}
@code{SWHILE} and also the @code{RMPA} instruction.  These
instructions may prefetch data, which is not safe to do if accessing
an I/O register.  (See section 12.2.7 of the RX62N Group User's Manual
for more information).

The default is to allow these instructions, but it is not possible for
GCC to reliably detect all circumstances where a string instruction
might be used to access an I/O register, so their use cannot be
disabled automatically.  Instead it is reliant upon the programmer to
use the @option{-mno-allow-string-insns} option if their program
accesses I/O space.

When the instructions are enabled GCC defines the C preprocessor
symbol @code{__RX_ALLOW_STRING_INSNS__}, otherwise it defines the
symbol @code{__RX_DISALLOW_STRING_INSNS__}.

@item -mjsr
@itemx -mno-jsr
@opindex mjsr
@opindex mno-jsr
Use only (or not only) @code{JSR} instructions to access functions.
This option can be used when code size exceeds the range of @code{BSR}
instructions.  Note that @option{-mno-jsr} does not mean to not use
@code{JSR} but instead means that any type of branch may be used.
@end table

@emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
has special significance to the RX port when used with the
@code{interrupt} function attribute.  This attribute indicates a
function intended to process fast interrupts.  GCC ensures
that it only uses the registers @code{r10}, @code{r11}, @code{r12}
and/or @code{r13} and only provided that the normal use of the
corresponding registers have been restricted via the
@option{-ffixed-@var{reg}} or @option{-mint-register} command-line
options.

@node S/390 and zSeries Options
@subsection S/390 and zSeries Options
@cindex S/390 and zSeries Options

These are the @samp{-m} options defined for the S/390 and zSeries architecture.

@table @gcctabopt
@item -mhard-float
@itemx -msoft-float
@opindex mhard-float
@opindex msoft-float
Use (do not use) the hardware floating-point instructions and registers
for floating-point operations.  When @option{-msoft-float} is specified,
functions in @file{libgcc.a} are used to perform floating-point
operations.  When @option{-mhard-float} is specified, the compiler
generates IEEE floating-point instructions.  This is the default.

@item -mhard-dfp
@itemx -mno-hard-dfp
@opindex mhard-dfp
@opindex mno-hard-dfp
Use (do not use) the hardware decimal-floating-point instructions for
decimal-floating-point operations.  When @option{-mno-hard-dfp} is
specified, functions in @file{libgcc.a} are used to perform
decimal-floating-point operations.  When @option{-mhard-dfp} is
specified, the compiler generates decimal-floating-point hardware
instructions.  This is the default for @option{-march=z9-ec} or higher.

@item -mlong-double-64
@itemx -mlong-double-128
@opindex mlong-double-64
@opindex mlong-double-128
These switches control the size of @code{long double} type. A size
of 64 bits makes the @code{long double} type equivalent to the @code{double}
type. This is the default.

@item -mbackchain
@itemx -mno-backchain
@opindex mbackchain
@opindex mno-backchain
Store (do not store) the address of the caller's frame as backchain pointer
into the callee's stack frame.
A backchain may be needed to allow debugging using tools that do not understand
DWARF call frame information.
When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
the backchain is placed into the topmost word of the 96/160 byte register
save area.

In general, code compiled with @option{-mbackchain} is call-compatible with
code compiled with @option{-mno-backchain}; however, use of the backchain
for debugging purposes usually requires that the whole binary is built with
@option{-mbackchain}.  Note that the combination of @option{-mbackchain},
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
to build a linux kernel use @option{-msoft-float}.

The default is to not maintain the backchain.

@item -mpacked-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
specified, the compiler uses the all fields of the 96/160 byte register save
area only for their default purpose; unused fields still take up stack space.
When @option{-mpacked-stack} is specified, register save slots are densely
packed at the top of the register save area; unused space is reused for other
purposes, allowing for more efficient use of the available stack space.
However, when @option{-mbackchain} is also in effect, the topmost word of
the save area is always used to store the backchain, and the return address
register is always saved two words below the backchain.

As long as the stack frame backchain is not used, code generated with
@option{-mpacked-stack} is call-compatible with code generated with
@option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
S/390 or zSeries generated code that uses the stack frame backchain at run
time, not just for debugging purposes.  Such code is not call-compatible
with code compiled with @option{-mpacked-stack}.  Also, note that the
combination of @option{-mbackchain},
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
to build a linux kernel use @option{-msoft-float}.

The default is to not use the packed stack layout.

@item -msmall-exec
@itemx -mno-small-exec
@opindex msmall-exec
@opindex mno-small-exec
Generate (or do not generate) code using the @code{bras} instruction
to do subroutine calls.
This only works reliably if the total executable size does not
exceed 64k.  The default is to use the @code{basr} instruction instead,
which does not have this limitation.

@item -m64
@itemx -m31
@opindex m64
@opindex m31
When @option{-m31} is specified, generate code compliant to the
GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
particular to generate 64-bit instructions.  For the @samp{s390}
targets, the default is @option{-m31}, while the @samp{s390x}
targets default to @option{-m64}.

@item -mzarch
@itemx -mesa
@opindex mzarch
@opindex mesa
When @option{-mzarch} is specified, generate code using the
instructions available on z/Architecture.
When @option{-mesa} is specified, generate code using the
instructions available on ESA/390.  Note that @option{-mesa} is
not possible with @option{-m64}.
When generating code compliant to the GNU/Linux for S/390 ABI,
the default is @option{-mesa}.  When generating code compliant
to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.

@item -mhtm
@itemx -mno-htm
@opindex mhtm
@opindex mno-htm
The @option{-mhtm} option enables a set of builtins making use of
instructions available with the transactional execution facility
introduced with the IBM zEnterprise EC12 machine generation
@ref{S/390 System z Built-in Functions}.
@option{-mhtm} is enabled by default when using @option{-march=zEC12}.

@item -mvx
@itemx -mno-vx
@opindex mvx
@opindex mno-vx
When @option{-mvx} is specified, generate code using the instructions
available with the vector extension facility introduced with the IBM
z13 machine generation.
This option changes the ABI for some vector type values with regard to
alignment and calling conventions.  In case vector type values are
being used in an ABI-relevant context a GAS @samp{.gnu_attribute}
command will be added to mark the resulting binary with the ABI used.
@option{-mvx} is enabled by default when using @option{-march=z13}.

@item -mzvector
@itemx -mno-zvector
@opindex mzvector
@opindex mno-zvector
The @option{-mzvector} option enables vector language extensions and
builtins using instructions available with the vector extension
facility introduced with the IBM z13 machine generation.
This option adds support for @samp{vector} to be used as a keyword to
define vector type variables and arguments.  @samp{vector} is only
available when GNU extensions are enabled.  It will not be expanded
when requesting strict standard compliance e.g.@: with @option{-std=c99}.
In addition to the GCC low-level builtins @option{-mzvector} enables
a set of builtins added for compatibility with AltiVec-style
implementations like Power and Cell.  In order to make use of these
builtins the header file @file{vecintrin.h} needs to be included.
@option{-mzvector} is disabled by default.

@item -mmvcle
@itemx -mno-mvcle
@opindex mmvcle
@opindex mno-mvcle
Generate (or do not generate) code using the @code{mvcle} instruction
to perform block moves.  When @option{-mno-mvcle} is specified,
use a @code{mvc} loop instead.  This is the default unless optimizing for
size.

@item -mdebug
@itemx -mno-debug
@opindex mdebug
@opindex mno-debug
Print (or do not print) additional debug information when compiling.
The default is to not print debug information.

@item -march=@var{cpu-type}
@opindex march
Generate code that runs on @var{cpu-type}, which is the name of a
system representing a certain processor type.  Possible values for
@var{cpu-type} are @samp{z900}/@samp{arch5}, @samp{z990}/@samp{arch6},
@samp{z9-109}, @samp{z9-ec}/@samp{arch7}, @samp{z10}/@samp{arch8},
@samp{z196}/@samp{arch9}, @samp{zEC12}, @samp{z13}/@samp{arch11},
@samp{z14}/@samp{arch12}, @samp{z15}/@samp{arch13}, and @samp{native}.

The default is @option{-march=z900}.

Specifying @samp{native} as cpu type can be used to select the best
architecture option for the host processor.
@option{-march=native} has no effect if GCC does not recognize the
processor.

@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code,
except for the ABI and the set of available instructions.
The list of @var{cpu-type} values is the same as for @option{-march}.
The default is the value used for @option{-march}.

@item -mtpf-trace
@itemx -mno-tpf-trace
@opindex mtpf-trace
@opindex mno-tpf-trace
Generate code that adds (does not add) in TPF OS specific branches to trace
routines in the operating system.  This option is off by default, even
when compiling for the TPF OS@.

@item -mtpf-trace-skip
@itemx -mno-tpf-trace-skip
@opindex mtpf-trace-skip
@opindex mno-tpf-trace-skip
Generate code that changes (does not change) the default branch
targets enabled by @option{-mtpf-trace} to point to specialized trace
routines providing the ability of selectively skipping function trace
entries for the TPF OS.  This option is off by default, even when
compiling for the TPF OS and specifying @option{-mtpf-trace}.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default if
hardware floating point is used.

@item -mwarn-framesize=@var{framesize}
@opindex mwarn-framesize
Emit a warning if the current function exceeds the given frame size.  Because
this is a compile-time check it doesn't need to be a real problem when the program
runs.  It is intended to identify functions that most probably cause
a stack overflow.  It is useful to be used in an environment with limited stack
size e.g.@: the linux kernel.

@item -mwarn-dynamicstack
@opindex mwarn-dynamicstack
Emit a warning if the function calls @code{alloca} or uses dynamically-sized
arrays.  This is generally a bad idea with a limited stack size.

@item -mstack-guard=@var{stack-guard}
@itemx -mstack-size=@var{stack-size}
@opindex mstack-guard
@opindex mstack-size
If these options are provided the S/390 back end emits additional instructions in
the function prologue that trigger a trap if the stack size is @var{stack-guard}
bytes above the @var{stack-size} (remember that the stack on S/390 grows downward).
If the @var{stack-guard} option is omitted the smallest power of 2 larger than
the frame size of the compiled function is chosen.
These options are intended to be used to help debugging stack overflow problems.
The additionally emitted code causes only little overhead and hence can also be
used in production-like systems without greater performance degradation.  The given
values have to be exact powers of 2 and @var{stack-size} has to be greater than
@var{stack-guard} without exceeding 64k.
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by @var{stack-size}.
The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.

@item -mhotpatch=@var{pre-halfwords},@var{post-halfwords}
@opindex mhotpatch
If the hotpatch option is enabled, a ``hot-patching'' function
prologue is generated for all functions in the compilation unit.
The funtion label is prepended with the given number of two-byte
NOP instructions (@var{pre-halfwords}, maximum 1000000).  After
the label, 2 * @var{post-halfwords} bytes are appended, using the
largest NOP like instructions the architecture allows (maximum
1000000).

If both arguments are zero, hotpatching is disabled.

This option can be overridden for individual functions with the
@code{hotpatch} attribute.
@end table

@node Score Options
@subsection Score Options
@cindex Score Options

These options are defined for Score implementations:

@table @gcctabopt
@item -meb
@opindex meb
Compile code for big-endian mode.  This is the default.

@item -mel
@opindex mel
Compile code for little-endian mode.

@item -mnhwloop
@opindex mnhwloop
Disable generation of @code{bcnz} instructions.

@item -muls
@opindex muls
Enable generation of unaligned load and store instructions.

@item -mmac
@opindex mmac
Enable the use of multiply-accumulate instructions. Disabled by default.

@item -mscore5
@opindex mscore5
Specify the SCORE5 as the target architecture.

@item -mscore5u
@opindex mscore5u
Specify the SCORE5U of the target architecture.

@item -mscore7
@opindex mscore7
Specify the SCORE7 as the target architecture. This is the default.

@item -mscore7d
@opindex mscore7d
Specify the SCORE7D as the target architecture.
@end table

@node SH Options
@subsection SH Options

These @samp{-m} options are defined for the SH implementations:

@table @gcctabopt
@item -m1
@opindex m1
Generate code for the SH1.

@item -m2
@opindex m2
Generate code for the SH2.

@item -m2e
Generate code for the SH2e.

@item -m2a-nofpu
@opindex m2a-nofpu
Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
that the floating-point unit is not used.

@item -m2a-single-only
@opindex m2a-single-only
Generate code for the SH2a-FPU, in such a way that no double-precision
floating-point operations are used.

@item -m2a-single
@opindex m2a-single
Generate code for the SH2a-FPU assuming the floating-point unit is in
single-precision mode by default.

@item -m2a
@opindex m2a
Generate code for the SH2a-FPU assuming the floating-point unit is in
double-precision mode by default.

@item -m3
@opindex m3
Generate code for the SH3.

@item -m3e
@opindex m3e
Generate code for the SH3e.

@item -m4-nofpu
@opindex m4-nofpu
Generate code for the SH4 without a floating-point unit.

@item -m4-single-only
@opindex m4-single-only
Generate code for the SH4 with a floating-point unit that only
supports single-precision arithmetic.

@item -m4-single
@opindex m4-single
Generate code for the SH4 assuming the floating-point unit is in
single-precision mode by default.

@item -m4
@opindex m4
Generate code for the SH4.

@item -m4-100
@opindex m4-100
Generate code for SH4-100.

@item -m4-100-nofpu
@opindex m4-100-nofpu
Generate code for SH4-100 in such a way that the
floating-point unit is not used.

@item -m4-100-single
@opindex m4-100-single
Generate code for SH4-100 assuming the floating-point unit is in
single-precision mode by default.

@item -m4-100-single-only
@opindex m4-100-single-only
Generate code for SH4-100 in such a way that no double-precision
floating-point operations are used.

@item -m4-200
@opindex m4-200
Generate code for SH4-200.

@item -m4-200-nofpu
@opindex m4-200-nofpu
Generate code for SH4-200 without in such a way that the
floating-point unit is not used.

@item -m4-200-single
@opindex m4-200-single
Generate code for SH4-200 assuming the floating-point unit is in
single-precision mode by default.

@item -m4-200-single-only
@opindex m4-200-single-only
Generate code for SH4-200 in such a way that no double-precision
floating-point operations are used.

@item -m4-300
@opindex m4-300
Generate code for SH4-300.

@item -m4-300-nofpu
@opindex m4-300-nofpu
Generate code for SH4-300 without in such a way that the
floating-point unit is not used.

@item -m4-300-single
@opindex m4-300-single
Generate code for SH4-300 in such a way that no double-precision
floating-point operations are used.

@item -m4-300-single-only
@opindex m4-300-single-only
Generate code for SH4-300 in such a way that no double-precision
floating-point operations are used.

@item -m4-340
@opindex m4-340
Generate code for SH4-340 (no MMU, no FPU).

@item -m4-500
@opindex m4-500
Generate code for SH4-500 (no FPU).  Passes @option{-isa=sh4-nofpu} to the
assembler.

@item -m4a-nofpu
@opindex m4a-nofpu
Generate code for the SH4al-dsp, or for a SH4a in such a way that the
floating-point unit is not used.

@item -m4a-single-only
@opindex m4a-single-only
Generate code for the SH4a, in such a way that no double-precision
floating-point operations are used.

@item -m4a-single
@opindex m4a-single
Generate code for the SH4a assuming the floating-point unit is in
single-precision mode by default.

@item -m4a
@opindex m4a
Generate code for the SH4a.

@item -m4al
@opindex m4al
Same as @option{-m4a-nofpu}, except that it implicitly passes
@option{-dsp} to the assembler.  GCC doesn't generate any DSP
instructions at the moment.

@item -mb
@opindex mb
Compile code for the processor in big-endian mode.

@item -ml
@opindex ml
Compile code for the processor in little-endian mode.

@item -mdalign
@opindex mdalign
Align doubles at 64-bit boundaries.  Note that this changes the calling
conventions, and thus some functions from the standard C library do
not work unless you recompile it first with @option{-mdalign}.

@item -mrelax
@opindex mrelax
Shorten some address references at link time, when possible; uses the
linker option @option{-relax}.

@item -mbigtable
@opindex mbigtable
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}.  Check @option{-mdalign} for
alignment constraints.

@item -mrenesas
@opindex mrenesas
Comply with the calling conventions defined by Renesas.

@item -mno-renesas
@opindex mno-renesas
Comply with the calling conventions defined for GCC before the Renesas
conventions were available.  This option is the default for all
targets of the SH toolchain.

@item -mnomacsave
@opindex mnomacsave
Mark the @code{MAC} register as call-clobbered, even if
@option{-mrenesas} is given.

@item -mieee
@itemx -mno-ieee
@opindex mieee
@opindex mno-ieee
Control the IEEE compliance of floating-point comparisons, which affects the
handling of cases where the result of a comparison is unordered.  By default
@option{-mieee} is implicitly enabled.  If @option{-ffinite-math-only} is
enabled @option{-mno-ieee} is implicitly set, which results in faster
floating-point greater-equal and less-equal comparisons.  The implicit settings
can be overridden by specifying either @option{-mieee} or @option{-mno-ieee}.

@item -minline-ic_invalidate
@opindex minline-ic_invalidate
Inline code to invalidate instruction cache entries after setting up
nested function trampolines.
This option has no effect if @option{-musermode} is in effect and the selected
code generation option (e.g.@: @option{-m4}) does not allow the use of the @code{icbi}
instruction.
If the selected code generation option does not allow the use of the @code{icbi}
instruction, and @option{-musermode} is not in effect, the inlined code
manipulates the instruction cache address array directly with an associative
write.  This not only requires privileged mode at run time, but it also
fails if the cache line had been mapped via the TLB and has become unmapped.

@item -misize
@opindex misize
Dump instruction size and location in the assembly code.

@item -mpadstruct
@opindex mpadstruct
This option is deprecated.  It pads structures to multiple of 4 bytes,
which is incompatible with the SH ABI@.

@item -matomic-model=@var{model}
@opindex matomic-model=@var{model}
Sets the model of atomic operations and additional parameters as a comma
separated list.  For details on the atomic built-in functions see
@ref{__atomic Builtins}.  The following models and parameters are supported:

@table @samp

@item none
Disable compiler generated atomic sequences and emit library calls for atomic
operations.  This is the default if the target is not @code{sh*-*-linux*}.

@item soft-gusa
Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
built-in functions.  The generated atomic sequences require additional support
from the interrupt/exception handling code of the system and are only suitable
for SH3* and SH4* single-core systems.  This option is enabled by default when
the target is @code{sh*-*-linux*} and SH3* or SH4*.  When the target is SH4A,
this option also partially utilizes the hardware atomic instructions
@code{movli.l} and @code{movco.l} to create more efficient code, unless
@samp{strict} is specified.  

@item soft-tcb
Generate software atomic sequences that use a variable in the thread control
block.  This is a variation of the gUSA sequences which can also be used on
SH1* and SH2* targets.  The generated atomic sequences require additional
support from the interrupt/exception handling code of the system and are only
suitable for single-core systems.  When using this model, the @samp{gbr-offset=}
parameter has to be specified as well.

@item soft-imask
Generate software atomic sequences that temporarily disable interrupts by
setting @code{SR.IMASK = 1111}.  This model works only when the program runs
in privileged mode and is only suitable for single-core systems.  Additional
support from the interrupt/exception handling code of the system is not
required.  This model is enabled by default when the target is
@code{sh*-*-linux*} and SH1* or SH2*.

@item hard-llcs
Generate hardware atomic sequences using the @code{movli.l} and @code{movco.l}
instructions only.  This is only available on SH4A and is suitable for
multi-core systems.  Since the hardware instructions support only 32 bit atomic
variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
Code compiled with this option is also compatible with other software
atomic model interrupt/exception handling systems if executed on an SH4A
system.  Additional support from the interrupt/exception handling code of the
system is not required for this model.

@item gbr-offset=
This parameter specifies the offset in bytes of the variable in the thread
control block structure that should be used by the generated atomic sequences
when the @samp{soft-tcb} model has been selected.  For other models this
parameter is ignored.  The specified value must be an integer multiple of four
and in the range 0-1020.

@item strict
This parameter prevents mixed usage of multiple atomic models, even if they
are compatible, and makes the compiler generate atomic sequences of the
specified model only.

@end table

@item -mtas
@opindex mtas
Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
Notice that depending on the particular hardware and software configuration
this can degrade overall performance due to the operand cache line flushes
that are implied by the @code{tas.b} instruction.  On multi-core SH4A
processors the @code{tas.b} instruction must be used with caution since it
can result in data corruption for certain cache configurations.

@item -mprefergot
@opindex mprefergot
When generating position-independent code, emit function calls using
the Global Offset Table instead of the Procedure Linkage Table.

@item -musermode
@itemx -mno-usermode
@opindex musermode
@opindex mno-usermode
Don't allow (allow) the compiler generating privileged mode code.  Specifying
@option{-musermode} also implies @option{-mno-inline-ic_invalidate} if the
inlined code would not work in user mode.  @option{-musermode} is the default
when the target is @code{sh*-*-linux*}.  If the target is SH1* or SH2*
@option{-musermode} has no effect, since there is no user mode.

@item -multcost=@var{number}
@opindex multcost=@var{number}
Set the cost to assume for a multiply insn.

@item -mdiv=@var{strategy}
@opindex mdiv=@var{strategy}
Set the division strategy to be used for integer division operations.
@var{strategy} can be one of: 

@table @samp

@item call-div1
Calls a library function that uses the single-step division instruction
@code{div1} to perform the operation.  Division by zero calculates an
unspecified result and does not trap.  This is the default except for SH4,
SH2A and SHcompact.

@item call-fp
Calls a library function that performs the operation in double precision
floating point.  Division by zero causes a floating-point exception.  This is
the default for SHcompact with FPU.  Specifying this for targets that do not
have a double precision FPU defaults to @code{call-div1}.

@item call-table
Calls a library function that uses a lookup table for small divisors and
the @code{div1} instruction with case distinction for larger divisors.  Division
by zero calculates an unspecified result and does not trap.  This is the default
for SH4.  Specifying this for targets that do not have dynamic shift
instructions defaults to @code{call-div1}.

@end table

When a division strategy has not been specified the default strategy is
selected based on the current target.  For SH2A the default strategy is to
use the @code{divs} and @code{divu} instructions instead of library function
calls.

@item -maccumulate-outgoing-args
@opindex maccumulate-outgoing-args
Reserve space once for outgoing arguments in the function prologue rather
than around each call.  Generally beneficial for performance and size.  Also
needed for unwinding to avoid changing the stack frame around conditional code.

@item -mdivsi3_libfunc=@var{name}
@opindex mdivsi3_libfunc=@var{name}
Set the name of the library function used for 32-bit signed division to
@var{name}.
This only affects the name used in the @samp{call} division strategies, and
the compiler still expects the same sets of input/output/clobbered registers as
if this option were not present.

@item -mfixed-range=@var{register-range}
@opindex mfixed-range
Generate code treating the given register range as fixed registers.
A fixed register is one that the register allocator cannot 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.

@item -mbranch-cost=@var{num}
@opindex mbranch-cost=@var{num}
Assume @var{num} to be the cost for a branch instruction.  Higher numbers
make the compiler try to generate more branch-free code if possible.  
If not specified the value is selected depending on the processor type that
is being compiled for.

@item -mzdcbranch
@itemx -mno-zdcbranch
@opindex mzdcbranch
@opindex mno-zdcbranch
Assume (do not assume) that zero displacement conditional branch instructions
@code{bt} and @code{bf} are fast.  If @option{-mzdcbranch} is specified, the
compiler prefers zero displacement branch code sequences.  This is
enabled by default when generating code for SH4 and SH4A.  It can be explicitly
disabled by specifying @option{-mno-zdcbranch}.

@item -mcbranch-force-delay-slot
@opindex mcbranch-force-delay-slot
Force the usage of delay slots for conditional branches, which stuffs the delay
slot with a @code{nop} if a suitable instruction cannot be found.  By default
this option is disabled.  It can be enabled to work around hardware bugs as
found in the original SH7055.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Generate code that uses (does not use) the floating-point multiply and
accumulate instructions.  These instructions are generated by default
if hardware floating point is used.  The machine-dependent
@option{-mfused-madd} option is now mapped to the machine-independent
@option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
mapped to @option{-ffp-contract=off}.

@item -mfsca
@itemx -mno-fsca
@opindex mfsca
@opindex mno-fsca
Allow or disallow the compiler to emit the @code{fsca} instruction for sine
and cosine approximations.  The option @option{-mfsca} must be used in
combination with @option{-funsafe-math-optimizations}.  It is enabled by default
when generating code for SH4A.  Using @option{-mno-fsca} disables sine and cosine
approximations even if @option{-funsafe-math-optimizations} is in effect.

@item -mfsrra
@itemx -mno-fsrra
@opindex mfsrra
@opindex mno-fsrra
Allow or disallow the compiler to emit the @code{fsrra} instruction for
reciprocal square root approximations.  The option @option{-mfsrra} must be used
in combination with @option{-funsafe-math-optimizations} and
@option{-ffinite-math-only}.  It is enabled by default when generating code for
SH4A.  Using @option{-mno-fsrra} disables reciprocal square root approximations
even if @option{-funsafe-math-optimizations} and @option{-ffinite-math-only} are
in effect.

@item -mpretend-cmove
@opindex mpretend-cmove
Prefer zero-displacement conditional branches for conditional move instruction
patterns.  This can result in faster code on the SH4 processor.

@item -mfdpic
@opindex fdpic
Generate code using the FDPIC ABI.

@end table

@node Solaris 2 Options
@subsection Solaris 2 Options
@cindex Solaris 2 options

These @samp{-m} options are supported on Solaris 2:

@table @gcctabopt
@item -mclear-hwcap
@opindex mclear-hwcap
@option{-mclear-hwcap} tells the compiler to remove the hardware
capabilities generated by the Solaris assembler.  This is only necessary
when object files use ISA extensions not supported by the current
machine, but check at runtime whether or not to use them.

@item -mimpure-text
@opindex mimpure-text
@option{-mimpure-text}, used in addition to @option{-shared}, tells
the compiler to not pass @option{-z text} to the linker when linking a
shared object.  Using this option, you can link position-dependent
code into a shared object.

@option{-mimpure-text} suppresses the ``relocations remain against
allocatable but non-writable sections'' linker error message.
However, the necessary relocations trigger copy-on-write, and the
shared object is not actually shared across processes.  Instead of
using @option{-mimpure-text}, you should compile all source code with
@option{-fpic} or @option{-fPIC}.

@end table

These switches are supported in addition to the above on Solaris 2:

@table @gcctabopt
@item -pthreads
@opindex pthreads
This is a synonym for @option{-pthread}.
@end table

@node SPARC Options
@subsection SPARC Options
@cindex SPARC options

These @samp{-m} options are supported on the SPARC:

@table @gcctabopt
@item -mno-app-regs
@itemx -mapp-regs
@opindex mno-app-regs
@opindex mapp-regs
Specify @option{-mapp-regs} to generate output using the global registers
2 through 4, which the SPARC SVR4 ABI reserves for applications.  Like the
global register 1, each global register 2 through 4 is then treated as an
allocable register that is clobbered by function calls.  This is the default.

To be fully SVR4 ABI-compliant at the cost of some performance loss,
specify @option{-mno-app-regs}.  You should compile libraries and system
software with this option.

@item -mflat
@itemx -mno-flat
@opindex mflat
@opindex mno-flat
With @option{-mflat}, the compiler does not generate save/restore instructions
and uses a ``flat'' or single register window model.  This model is compatible
with the regular register window model.  The local registers and the input
registers (0--5) are still treated as ``call-saved'' registers and are
saved on the stack as needed.

With @option{-mno-flat} (the default), the compiler generates save/restore
instructions (except for leaf functions).  This is the normal operating mode.

@item -mfpu
@itemx -mhard-float
@opindex mfpu
@opindex mhard-float
Generate output containing floating-point instructions.  This is the
default.

@item -mno-fpu
@itemx -msoft-float
@opindex mno-fpu
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries are not available for all SPARC
targets.  Normally the facilities of the machine's usual C compiler are
used, but this cannot be done directly in cross-compilation.  You must make
your own arrangements to provide suitable library functions for
cross-compilation.  The embedded targets @samp{sparc-*-aout} and
@samp{sparclite-*-*} do provide software floating-point support.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@item -mhard-quad-float
@opindex mhard-quad-float
Generate output containing quad-word (long double) floating-point
instructions.

@item -msoft-quad-float
@opindex msoft-quad-float
Generate output containing library calls for quad-word (long double)
floating-point instructions.  The functions called are those specified
in the SPARC ABI@.  This is the default.

As of this writing, there are no SPARC implementations that have hardware
support for the quad-word floating-point instructions.  They all invoke
a trap handler for one of these instructions, and then the trap handler
emulates the effect of the instruction.  Because of the trap handler overhead,
this is much slower than calling the ABI library routines.  Thus the
@option{-msoft-quad-float} option is the default.

@item -mno-unaligned-doubles
@itemx -munaligned-doubles
@opindex mno-unaligned-doubles
@opindex munaligned-doubles
Assume that doubles have 8-byte alignment.  This is the default.

With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
alignment only if they are contained in another type, or if they have an
absolute address.  Otherwise, it assumes they have 4-byte alignment.
Specifying this option avoids some rare compatibility problems with code
generated by other compilers.  It is not the default because it results
in a performance loss, especially for floating-point code.

@item -muser-mode
@itemx -mno-user-mode
@opindex muser-mode
@opindex mno-user-mode
Do not generate code that can only run in supervisor mode.  This is relevant
only for the @code{casa} instruction emitted for the LEON3 processor.  This
is the default.

@item -mfaster-structs
@itemx -mno-faster-structs
@opindex mfaster-structs
@opindex mno-faster-structs
With @option{-mfaster-structs}, the compiler assumes that structures
should have 8-byte alignment.  This enables the use of pairs of
@code{ldd} and @code{std} instructions for copies in structure
assignment, in place of twice as many @code{ld} and @code{st} pairs.
However, the use of this changed alignment directly violates the SPARC
ABI@.  Thus, it's intended only for use on targets where the developer
acknowledges that their resulting code is not directly in line with
the rules of the ABI@.

@item -mstd-struct-return
@itemx -mno-std-struct-return
@opindex mstd-struct-return
@opindex mno-std-struct-return
With @option{-mstd-struct-return}, the compiler generates checking code
in functions returning structures or unions to detect size mismatches
between the two sides of function calls, as per the 32-bit ABI@.

The default is @option{-mno-std-struct-return}.  This option has no effect
in 64-bit mode.

@item -mlra
@itemx -mno-lra
@opindex mlra
@opindex mno-lra
Enable Local Register Allocation.  This is the default for SPARC since GCC 7
so @option{-mno-lra} needs to be passed to get old Reload.

@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{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
@samp{leon}, @samp{leon3}, @samp{leon3v7}, @samp{leon5}, @samp{sparclite},
@samp{f930}, @samp{f934}, @samp{sparclite86x}, @samp{sparclet}, @samp{tsc701},
@samp{v9}, @samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara},
@samp{niagara2}, @samp{niagara3}, @samp{niagara4}, @samp{niagara7} and
@samp{m8}.

Native Solaris and GNU/Linux toolchains also support the value @samp{native},
which selects the best architecture option for the host processor.
@option{-mcpu=native} has no effect if GCC does not recognize
the processor.

Default instruction scheduling parameters are used for values that select
an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
@samp{sparclite}, @samp{sparclet}, @samp{v9}.

Here is a list of each supported architecture and their supported
implementations.

@table @asis
@item v7
cypress, leon3v7

@item v8
supersparc, hypersparc, leon, leon3, leon5

@item sparclite
f930, f934, sparclite86x

@item sparclet
tsc701

@item v9
ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
niagara7, m8
@end table

By default (unless configured otherwise), GCC generates code for the V7
variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
additionally optimizes it for the Cypress CY7C602 chip, as used in the
SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
SPARCStation 1, 2, IPX etc.

With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
architecture.  The only difference from V7 code is that the compiler emits
the integer multiply and integer divide instructions which exist in SPARC-V8
but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
2000 series.

With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
the SPARC architecture.  This adds the integer multiply, integer divide step
and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
With @option{-mcpu=f930}, the compiler additionally optimizes it for the
Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
MB86934 chip, which is the more recent SPARClite with FPU@.

With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
optimizes it for the TEMIC SPARClet chip.

With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
architecture.  This adds 64-bit integer and floating-point move instructions,
3 additional floating-point condition code registers and conditional move
instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
@option{-mcpu=niagara}, the compiler additionally optimizes it for
Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
additionally optimizes it for Sun UltraSPARC T2 chips. With
@option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
additionally optimizes it for Sun UltraSPARC T4 chips.  With
@option{-mcpu=niagara7}, the compiler additionally optimizes it for
Oracle SPARC M7 chips.  With @option{-mcpu=m8}, the compiler
additionally optimizes it for Oracle M8 chips.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type
@var{cpu_type}, but do not set the instruction set or register set that the
option @option{-mcpu=@var{cpu_type}} does.

The same values for @option{-mcpu=@var{cpu_type}} can be used for
@option{-mtune=@var{cpu_type}}, but the only useful values are those
that select a particular CPU implementation.  Those are
@samp{cypress}, @samp{supersparc}, @samp{hypersparc}, @samp{leon},
@samp{leon3}, @samp{leon3v7}, @samp{leon5}, @samp{f930}, @samp{f934},
@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3},
@samp{niagara4}, @samp{niagara7} and @samp{m8}.  With native Solaris
and GNU/Linux toolchains, @samp{native} can also be used.

@item -mv8plus
@itemx -mno-v8plus
@opindex mv8plus
@opindex mno-v8plus
With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
difference from the V8 ABI is that the global and out registers are
considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
mode for all SPARC-V9 processors.

@item -mvis
@itemx -mno-vis
@opindex mvis
@opindex mno-vis
With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
Visual Instruction Set extensions.  The default is @option{-mno-vis}.

@item -mvis2
@itemx -mno-vis2
@opindex mvis2
@opindex mno-vis2
With @option{-mvis2}, GCC generates code that takes advantage of
version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
default is @option{-mvis2} when targeting a cpu that supports such
instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
also sets @option{-mvis}.

@item -mvis3
@itemx -mno-vis3
@opindex mvis3
@opindex mno-vis3
With @option{-mvis3}, GCC generates code that takes advantage of
version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
default is @option{-mvis3} when targeting a cpu that supports such
instructions, such as niagara-3 and later.  Setting @option{-mvis3}
also sets @option{-mvis2} and @option{-mvis}.

@item -mvis4
@itemx -mno-vis4
@opindex mvis4
@opindex mno-vis4
With @option{-mvis4}, GCC generates code that takes advantage of
version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
default is @option{-mvis4} when targeting a cpu that supports such
instructions, such as niagara-7 and later.  Setting @option{-mvis4}
also sets @option{-mvis3}, @option{-mvis2} and @option{-mvis}.

@item -mvis4b
@itemx -mno-vis4b
@opindex mvis4b
@opindex mno-vis4b
With @option{-mvis4b}, GCC generates code that takes advantage of
version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
the additional VIS instructions introduced in the Oracle SPARC
Architecture 2017.  The default is @option{-mvis4b} when targeting a
cpu that supports such instructions, such as m8 and later.  Setting
@option{-mvis4b} also sets @option{-mvis4}, @option{-mvis3},
@option{-mvis2} and @option{-mvis}.

@item -mcbcond
@itemx -mno-cbcond
@opindex mcbcond
@opindex mno-cbcond
With @option{-mcbcond}, GCC generates code that takes advantage of the UltraSPARC
Compare-and-Branch-on-Condition instructions.  The default is @option{-mcbcond}
when targeting a CPU that supports such instructions, such as Niagara-4 and
later.

@item -mfmaf
@itemx -mno-fmaf
@opindex mfmaf
@opindex mno-fmaf
With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
Fused Multiply-Add Floating-point instructions.  The default is @option{-mfmaf}
when targeting a CPU that supports such instructions, such as Niagara-3 and
later.

@item -mfsmuld
@itemx -mno-fsmuld
@opindex mfsmuld
@opindex mno-fsmuld
With @option{-mfsmuld}, GCC generates code that takes advantage of the
Floating-point Multiply Single to Double (FsMULd) instruction.  The default is
@option{-mfsmuld} when targeting a CPU supporting the architecture versions V8
or V9 with FPU except @option{-mcpu=leon}.

@item -mpopc
@itemx -mno-popc
@opindex mpopc
@opindex mno-popc
With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
Population Count instruction.  The default is @option{-mpopc}
when targeting a CPU that supports such an instruction, such as Niagara-2 and
later.

@item -msubxc
@itemx -mno-subxc
@opindex msubxc
@opindex mno-subxc
With @option{-msubxc}, GCC generates code that takes advantage of the UltraSPARC
Subtract-Extended-with-Carry instruction.  The default is @option{-msubxc}
when targeting a CPU that supports such an instruction, such as Niagara-7 and
later.

@item -mfix-at697f
@opindex mfix-at697f
Enable the documented workaround for the single erratum of the Atmel AT697F
processor (which corresponds to erratum #13 of the AT697E processor).

@item -mfix-ut699
@opindex mfix-ut699
Enable the documented workarounds for the floating-point errata and the data
cache nullify errata of the UT699 processor.

@item -mfix-ut700
@opindex mfix-ut700
Enable the documented workaround for the back-to-back store errata of
the UT699E/UT700 processor.

@item -mfix-gr712rc
@opindex mfix-gr712rc
Enable the documented workaround for the back-to-back store errata of
the GR712RC processor.
@end table

These @samp{-m} options are supported in addition to the above
on SPARC-V9 processors in 64-bit environments:

@table @gcctabopt
@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for a 32-bit or 64-bit environment.
The 32-bit environment sets int, long and pointer to 32 bits.
The 64-bit environment sets int to 32 bits and long and pointer
to 64 bits.

@item -mcmodel=@var{which}
@opindex mcmodel
Set the code model to one of

@table @samp
@item medlow
The Medium/Low code model: 64-bit addresses, programs
must be linked in the low 32 bits of memory.  Programs can be statically
or dynamically linked.

@item medmid
The Medium/Middle code model: 64-bit addresses, programs
must be linked in the low 44 bits of memory, the text and data segments must
be less than 2GB in size and the data segment must be located within 2GB of
the text segment.

@item medany
The Medium/Anywhere code model: 64-bit addresses, programs
may be linked anywhere in memory, the text and data segments must be less
than 2GB in size and the data segment must be located within 2GB of the
text segment.

@item embmedany
The Medium/Anywhere code model for embedded systems:
64-bit addresses, the text and data segments must be less than 2GB in
size, both starting anywhere in memory (determined at link time).  The
global register %g4 points to the base of the data segment.  Programs
are statically linked and PIC is not supported.
@end table

@item -mmemory-model=@var{mem-model}
@opindex mmemory-model
Set the memory model in force on the processor to one of

@table @samp
@item default
The default memory model for the processor and operating system.

@item rmo
Relaxed Memory Order

@item pso
Partial Store Order

@item tso
Total Store Order

@item sc
Sequential Consistency
@end table

These memory models are formally defined in Appendix D of the SPARC-V9
architecture manual, as set in the processor's @code{PSTATE.MM} field.

@item -mstack-bias
@itemx -mno-stack-bias
@opindex mstack-bias
@opindex mno-stack-bias
With @option{-mstack-bias}, GCC assumes that the stack pointer, and
frame pointer if present, are offset by @minus{}2047 which must be added back
when making stack frame references.  This is the default in 64-bit mode.
Otherwise, assume no such offset is present.
@end table

@node System V Options
@subsection Options for System V

These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:

@table @gcctabopt
@item -G
@opindex G
Create a shared object.
It is recommended that @option{-symbolic} or @option{-shared} be used instead.

@item -Qy
@opindex Qy
Identify the versions of each tool used by the compiler, in a
@code{.ident} assembler directive in the output.

@item -Qn
@opindex Qn
Refrain from adding @code{.ident} directives to the output file (this is
the default).

@item -YP,@var{dirs}
@opindex YP
Search the directories @var{dirs}, and no others, for libraries
specified with @option{-l}.

@item -Ym,@var{dir}
@opindex Ym
Look in the directory @var{dir} to find the M4 preprocessor.
The assembler uses this option.
@c This is supposed to go with a -Yd for predefined M4 macro files, but
@c the generic assembler that comes with Solaris takes just -Ym.
@end table

@node TILE-Gx Options
@subsection TILE-Gx Options
@cindex TILE-Gx options

These @samp{-m} options are supported on the TILE-Gx:

@table @gcctabopt
@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small model.  The distance for direct calls is
limited to 500M in either direction.  PC-relative addresses are 32
bits.  Absolute addresses support the full address range.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large model.  There is no limitation on call
distance, pc-relative addresses, or absolute addresses.

@item -mcpu=@var{name}
@opindex mcpu
Selects the type of CPU to be targeted.  Currently the only supported
type is @samp{tilegx}.

@item -m32
@itemx -m64
@opindex m32
@opindex m64
Generate code for a 32-bit or 64-bit environment.  The 32-bit
environment sets int, long, and pointer to 32 bits.  The 64-bit
environment sets int to 32 bits and long and pointer to 64 bits.

@item -mbig-endian
@itemx -mlittle-endian
@opindex mbig-endian
@opindex mlittle-endian
Generate code in big/little endian mode, respectively.
@end table

@node TILEPro Options
@subsection TILEPro Options
@cindex TILEPro options

These @samp{-m} options are supported on the TILEPro:

@table @gcctabopt
@item -mcpu=@var{name}
@opindex mcpu
Selects the type of CPU to be targeted.  Currently the only supported
type is @samp{tilepro}.

@item -m32
@opindex m32
Generate code for a 32-bit environment, which sets int, long, and
pointer to 32 bits.  This is the only supported behavior so the flag
is essentially ignored.
@end table

@node V850 Options
@subsection V850 Options
@cindex V850 Options

These @samp{-m} options are defined for V850 implementations:

@table @gcctabopt
@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Treat all calls as being far away (near).  If calls are assumed to be
far away, the compiler always loads the function's address into a
register, and calls indirect through the pointer.

@item -mno-ep
@itemx -mep
@opindex mno-ep
@opindex mep
Do not optimize (do optimize) basic blocks that use the same index
pointer 4 or more times to copy pointer into the @code{ep} register, and
use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
option is on by default if you optimize.

@item -mno-prolog-function
@itemx -mprolog-function
@opindex mno-prolog-function
@opindex mprolog-function
Do not use (do use) external functions to save and restore registers
at the prologue and epilogue of a function.  The external functions
are slower, but use less code space if more than one function saves
the same number of registers.  The @option{-mprolog-function} option
is on by default if you optimize.

@item -mspace
@opindex mspace
Try to make the code as small as possible.  At present, this just turns
on the @option{-mep} and @option{-mprolog-function} options.

@item -mtda=@var{n}
@opindex mtda
Put static or global variables whose size is @var{n} bytes or less into
the tiny data area that register @code{ep} points to.  The tiny data
area can hold up to 256 bytes in total (128 bytes for byte references).

@item -msda=@var{n}
@opindex msda
Put static or global variables whose size is @var{n} bytes or less into
the small data area that register @code{gp} points to.  The small data
area can hold up to 64 kilobytes.

@item -mzda=@var{n}
@opindex mzda
Put static or global variables whose size is @var{n} bytes or less into
the first 32 kilobytes of memory.

@item -mv850
@opindex mv850
Specify that the target processor is the V850.

@item -mv850e3v5
@opindex mv850e3v5
Specify that the target processor is the V850E3V5.  The preprocessor
constant @code{__v850e3v5__} is defined if this option is used.

@item -mv850e2v4
@opindex mv850e2v4
Specify that the target processor is the V850E3V5.  This is an alias for
the @option{-mv850e3v5} option.

@item -mv850e2v3
@opindex mv850e2v3
Specify that the target processor is the V850E2V3.  The preprocessor
constant @code{__v850e2v3__} is defined if this option is used.

@item -mv850e2
@opindex mv850e2
Specify that the target processor is the V850E2.  The preprocessor
constant @code{__v850e2__} is defined if this option is used.

@item -mv850e1
@opindex mv850e1
Specify that the target processor is the V850E1.  The preprocessor
constants @code{__v850e1__} and @code{__v850e__} are defined if
this option is used.

@item -mv850es
@opindex mv850es
Specify that the target processor is the V850ES.  This is an alias for
the @option{-mv850e1} option.

@item -mv850e
@opindex mv850e
Specify that the target processor is the V850E@.  The preprocessor
constant @code{__v850e__} is defined if this option is used.

If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
nor @option{-mv850e2} nor @option{-mv850e2v3} nor @option{-mv850e3v5}
are defined then a default target processor is chosen and the
relevant @samp{__v850*__} preprocessor constant is defined.

The preprocessor constants @code{__v850} and @code{__v851__} are always
defined, regardless of which processor variant is the target.

@item -mdisable-callt
@itemx -mno-disable-callt
@opindex mdisable-callt
@opindex mno-disable-callt
This option suppresses generation of the @code{CALLT} instruction for the
v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
architecture.

This option is enabled by default when the RH850 ABI is
in use (see @option{-mrh850-abi}), and disabled by default when the
GCC ABI is in use.  If @code{CALLT} instructions are being generated
then the C preprocessor symbol @code{__V850_CALLT__} is defined.

@item -mrelax
@itemx -mno-relax
@opindex mrelax
@opindex mno-relax
Pass on (or do not pass on) the @option{-mrelax} command-line option
to the assembler.

@item -mlong-jumps
@itemx -mno-long-jumps
@opindex mlong-jumps
@opindex mno-long-jumps
Disable (or re-enable) the generation of PC-relative jump instructions.

@item -msoft-float
@itemx -mhard-float
@opindex msoft-float
@opindex mhard-float
Disable (or re-enable) the generation of hardware floating point
instructions.  This option is only significant when the target
architecture is @samp{V850E2V3} or higher.  If hardware floating point
instructions are being generated then the C preprocessor symbol
@code{__FPU_OK__} is defined, otherwise the symbol
@code{__NO_FPU__} is defined.

@item -mloop
@opindex mloop
Enables the use of the e3v5 LOOP instruction.  The use of this
instruction is not enabled by default when the e3v5 architecture is
selected because its use is still experimental.

@item -mrh850-abi
@itemx -mghs
@opindex mrh850-abi
@opindex mghs
Enables support for the RH850 version of the V850 ABI.  This is the
default.  With this version of the ABI the following rules apply:

@itemize
@item
Integer sized structures and unions are returned via a memory pointer
rather than a register.

@item
Large structures and unions (more than 8 bytes in size) are passed by
value.

@item
Functions are aligned to 16-bit boundaries.

@item
The @option{-m8byte-align} command-line option is supported.

@item
The @option{-mdisable-callt} command-line option is enabled by
default.  The @option{-mno-disable-callt} command-line option is not
supported.
@end itemize

When this version of the ABI is enabled the C preprocessor symbol
@code{__V850_RH850_ABI__} is defined.

@item -mgcc-abi
@opindex mgcc-abi
Enables support for the old GCC version of the V850 ABI.  With this
version of the ABI the following rules apply:

@itemize
@item
Integer sized structures and unions are returned in register @code{r10}.

@item
Large structures and unions (more than 8 bytes in size) are passed by
reference.

@item
Functions are aligned to 32-bit boundaries, unless optimizing for
size.

@item
The @option{-m8byte-align} command-line option is not supported.

@item
The @option{-mdisable-callt} command-line option is supported but not
enabled by default.
@end itemize

When this version of the ABI is enabled the C preprocessor symbol
@code{__V850_GCC_ABI__} is defined.

@item -m8byte-align
@itemx -mno-8byte-align
@opindex m8byte-align
@opindex mno-8byte-align
Enables support for @code{double} and @code{long long} types to be
aligned on 8-byte boundaries.  The default is to restrict the
alignment of all objects to at most 4-bytes.  When
@option{-m8byte-align} is in effect the C preprocessor symbol
@code{__V850_8BYTE_ALIGN__} is defined.

@item -mbig-switch
@opindex mbig-switch
Generate code suitable for big switch tables.  Use this option only if
the assembler/linker complain about out of range branches within a switch
table.

@item -mapp-regs
@opindex mapp-regs
This option causes r2 and r5 to be used in the code generated by
the compiler.  This setting is the default.

@item -mno-app-regs
@opindex mno-app-regs
This option causes r2 and r5 to be treated as fixed registers.

@end table

@node VAX Options
@subsection VAX Options
@cindex VAX options

These @samp{-m} options are defined for the VAX:

@table @gcctabopt
@item -munix
@opindex munix
Do not output certain jump instructions (@code{aobleq} and so on)
that the Unix assembler for the VAX cannot handle across long
ranges.

@item -mgnu
@opindex mgnu
Do output those jump instructions, on the assumption that the
GNU assembler is being used.

@item -mg
@opindex mg
Output code for G-format floating-point numbers instead of D-format.
@end table

@node Visium Options
@subsection Visium Options
@cindex Visium options

@table @gcctabopt

@item -mdebug
@opindex mdebug
A program which performs file I/O and is destined to run on an MCM target
should be linked with this option.  It causes the libraries libc.a and
libdebug.a to be linked.  The program should be run on the target under
the control of the GDB remote debugging stub.

@item -msim
@opindex msim
A program which performs file I/O and is destined to run on the simulator
should be linked with option.  This causes libraries libc.a and libsim.a to
be linked.

@item -mfpu
@itemx -mhard-float
@opindex mfpu
@opindex mhard-float
Generate code containing floating-point instructions.  This is the
default.

@item -mno-fpu
@itemx -msoft-float
@opindex mno-fpu
@opindex msoft-float
Generate code containing library calls for floating-point.

@option{-msoft-float} changes the calling convention in the output file;
therefore, it is only useful if you compile @emph{all} of a program with
this option.  In particular, you need to compile @file{libgcc.a}, the
library that comes with GCC, with @option{-msoft-float} in order for
this to work.

@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{mcm}, @samp{gr5} and @samp{gr6}.

@samp{mcm} is a synonym of @samp{gr5} present for backward compatibility.

By default (unless configured otherwise), GCC generates code for the GR5
variant of the Visium architecture.  

With @option{-mcpu=gr6}, GCC generates code for the GR6 variant of the Visium
architecture.  The only difference from GR5 code is that the compiler will
generate block move instructions.

@item -mtune=@var{cpu_type}
@opindex mtune
Set the instruction scheduling parameters for machine type @var{cpu_type},
but do not set the instruction set or register set that the option
@option{-mcpu=@var{cpu_type}} would.

@item -msv-mode
@opindex msv-mode
Generate code for the supervisor mode, where there are no restrictions on
the access to general registers.  This is the default.

@item -muser-mode
@opindex muser-mode
Generate code for the user mode, where the access to some general registers
is forbidden: on the GR5, registers r24 to r31 cannot be accessed in this
mode; on the GR6, only registers r29 to r31 are affected.
@end table

@node VMS Options
@subsection VMS Options

These @samp{-m} options are defined for the VMS implementations:

@table @gcctabopt
@item -mvms-return-codes
@opindex mvms-return-codes
Return VMS condition codes from @code{main}. The default is to return POSIX-style
condition (e.g.@: error) codes.

@item -mdebug-main=@var{prefix}
@opindex mdebug-main=@var{prefix}
Flag the first routine whose name starts with @var{prefix} as the main
routine for the debugger.

@item -mmalloc64
@opindex mmalloc64
Default to 64-bit memory allocation routines.

@item -mpointer-size=@var{size}
@opindex mpointer-size=@var{size}
Set the default size of pointers. Possible options for @var{size} are
@samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
The later option disables @code{pragma pointer_size}.
@end table

@node VxWorks Options
@subsection VxWorks Options
@cindex VxWorks Options

The options in this section are defined for all VxWorks targets.
Options specific to the target hardware are listed with the other
options for that target.

@table @gcctabopt
@item -mrtp
@opindex mrtp
GCC can generate code for both VxWorks kernels and real time processes
(RTPs).  This option switches from the former to the latter.  It also
defines the preprocessor macro @code{__RTP__}.

@item -non-static
@opindex non-static
Link an RTP executable against shared libraries rather than static
libraries.  The options @option{-static} and @option{-shared} can
also be used for RTPs (@pxref{Link Options}); @option{-static}
is the default.

@item -Bstatic
@itemx -Bdynamic
@opindex Bstatic
@opindex Bdynamic
These options are passed down to the linker.  They are defined for
compatibility with Diab.

@item -Xbind-lazy
@opindex Xbind-lazy
Enable lazy binding of function calls.  This option is equivalent to
@option{-Wl,-z,now} and is defined for compatibility with Diab.

@item -Xbind-now
@opindex Xbind-now
Disable lazy binding of function calls.  This option is the default and
is defined for compatibility with Diab.
@end table

@node x86 Options
@subsection x86 Options
@cindex x86 Options

These @samp{-m} options are defined for the x86 family of computers.

@table @gcctabopt

@item -march=@var{cpu-type}
@opindex march
Generate instructions for the machine type @var{cpu-type}.  In contrast to
@option{-mtune=@var{cpu-type}}, which merely tunes the generated code 
for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
to generate code that may not run at all on processors other than the one
indicated.  Specifying @option{-march=@var{cpu-type}} implies 
@option{-mtune=@var{cpu-type}}, except where noted otherwise.

The choices for @var{cpu-type} are:

@table @samp
@item native
This selects the CPU to generate code for at compilation time by determining
the processor type of the compiling machine.  Using @option{-march=native}
enables all instruction subsets supported by the local machine (hence
the result might not run on different machines).  Using @option{-mtune=native}
produces code optimized for the local machine under the constraints
of the selected instruction set.  

@item x86-64
A generic CPU with 64-bit extensions.

@item x86-64-v2
@itemx x86-64-v3
@itemx x86-64-v4
These choices for @var{cpu-type} select the corresponding
micro-architecture level from the x86-64 psABI.  On ABIs other than
the x86-64 psABI they select the same CPU features as the x86-64 psABI
documents for the particular micro-architecture level.

Since these @var{cpu-type} values do not have a corresponding
@option{-mtune} setting, using @option{-march} with these values enables
generic tuning.  Specific tuning can be enabled using the
@option{-mtune=@var{other-cpu-type}} option with an appropriate
@var{other-cpu-type} value.

@item i386
Original Intel i386 CPU@.

@item i486
Intel i486 CPU@.  (No scheduling is implemented for this chip.)

@item i586
@itemx pentium
Intel Pentium CPU with no MMX support.

@item lakemont
Intel Lakemont MCU, based on Intel Pentium CPU.

@item pentium-mmx
Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.

@item pentiumpro
Intel Pentium Pro CPU@.

@item i686
When used with @option{-march}, the Pentium Pro
instruction set is used, so the code runs on all i686 family chips.
When used with @option{-mtune}, it has the same meaning as @samp{generic}.

@item pentium2
Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
support.

@item pentium3
@itemx pentium3m
Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
set support.

@item pentium-m
Intel Pentium M; low-power version of Intel Pentium III CPU
with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.

@item pentium4
@itemx pentium4m
Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.

@item prescott
Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
set support.

@item nocona
Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
SSE2 and SSE3 instruction set support.

@item core2
Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.

@item nehalem
Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2 and POPCNT instruction set support.

@item westmere
Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction set support.

@item sandybridge
Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL instruction set support.

@item ivybridge
Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C
instruction set support.

@item haswell
Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2 and F16C instruction set support.

@item broadwell
Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED ADCX and PREFETCHW instruction set support.

@item skylake
Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES
instruction set support.

@item bonnell
Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.

@item silvermont
Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL and RDRND instruction set support.

@item goldmont
Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT and FSGSBASE instruction set support.

@item goldmont-plus
Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX and UMIP instruction set support.

@item tremont
Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, UMIP, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE and WAITPKG instruction set support.

@item knl
Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, PREFETCHWT1, AVX512F, AVX512PF,
AVX512ER and AVX512CD instruction set support.

@item knm
Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, PREFETCHWT1, AVX512F, AVX512PF,
AVX512ER, AVX512CD, AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction
set support.

@item skylake-avx512
Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set support.

@item cannonlake
Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA and UMIP instruction set support.

@item icelake-client
Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set support.

@item icelake-server
Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and WBNOINVD instruction
set support.

@item cascadelake
Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI instruction set support.

@item cooperlake
Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16 instruction
set support.

@item tigerlake
Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP,
RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES, PCONFIG, WBNOINVD, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT and KEYLOCKER
instruction set support.

@item sapphirerapids
Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI, AVX512BF16,
MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8 and AVX-VNNI
instruction set support.

@item alderlake
Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, UMIP, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and AVX-VNNI
instruction set support.

@item rocketlake
Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set support.

@item k6
AMD K6 CPU with MMX instruction set support.

@item k6-2
@itemx k6-3
Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.

@item athlon
@itemx athlon-tbird
AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
support.

@item athlon-4
@itemx athlon-xp
@itemx athlon-mp
Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
instruction set support.

@item k8
@itemx opteron
@itemx athlon64
@itemx athlon-fx
Processors based on the AMD K8 core with x86-64 instruction set support,
including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
(This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
instruction set extensions.)

@item k8-sse3
@itemx opteron-sse3
@itemx athlon64-sse3
Improved versions of AMD K8 cores with SSE3 instruction set support.

@item amdfam10
@itemx barcelona
CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
instruction set extensions.)

@item bdver1
CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
supersets FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)

@item bdver2
AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCLMUL, CX16, MMX,
SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
extensions.)

@item bdver3
AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, 
PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and
64-bit instruction set extensions.)

@item bdver4
AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, 
AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM and 64-bit instruction set extensions.)

@item znver1
AMD Family 17h core based CPUs with x86-64 instruction set support.  (This
supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
instruction set extensions.)

@item znver2
AMD Family 17h core based CPUs with x86-64 instruction set support. (This
supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
WBNOINVD, and 64-bit instruction set extensions.)

@item znver3
AMD Family 19h core based CPUs with x86-64 instruction set support. (This
supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64-bit instruction set extensions.)

@item btver1
CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
instruction set extensions.)

@item btver2
CPUs based on AMD Family 16h cores with x86-64 instruction set support. This
includes MOVBE, F16C, BMI, AVX, PCLMUL, AES, SSE4.2, SSE4.1, CX16, ABM,
SSE4A, SSSE3, SSE3, SSE2, SSE, MMX and 64-bit instruction set extensions.

@item winchip-c6
IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
set support.

@item winchip2
IDT WinChip 2 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 implemented for this chip.)

@item c3-2
VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
(No scheduling is implemented for this chip.)

@item c7
VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
(No scheduling is implemented for this chip.)

@item samuel-2
VIA Eden Samuel 2 CPU with MMX and 3DNow!@: instruction set support.
(No scheduling is implemented for this chip.)

@item nehemiah
VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
(No scheduling is implemented for this chip.)

@item esther
VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
(No scheduling is implemented for this chip.)

@item eden-x2
VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3 instruction set support.
(No scheduling is implemented for this chip.)

@item eden-x4
VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
AVX and AVX2 instruction set support.
(No scheduling is implemented for this chip.)

@item nano
Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-1000
VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-2000
VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-3000
VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-x2
VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
instruction set support.
(No scheduling is implemented for this chip.)

@item nano-x4
VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
instruction set support.
(No scheduling is implemented for this chip.)

@item geode
AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
@end table

@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code, except
for the ABI and the set of available instructions.  
While picking a specific @var{cpu-type} schedules things appropriately
for that particular chip, the compiler does not generate any code that
cannot run on the default machine type unless you use a
@option{-march=@var{cpu-type}} option.
For example, if GCC is configured for i686-pc-linux-gnu
then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
but still runs on i686 machines.

The choices for @var{cpu-type} are the same as for @option{-march}.
In addition, @option{-mtune} supports 2 extra choices for @var{cpu-type}:

@table @samp
@item generic
Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
If you know the CPU on which your code will run, then you should use
the corresponding @option{-mtune} or @option{-march} option instead of
@option{-mtune=generic}.  But, if you do not know exactly what CPU users
of your application will have, then you should use this option.

As new processors are deployed in the marketplace, the behavior of this
option will change.  Therefore, if you upgrade to a newer version of
GCC, code generation controlled by this option will change to reflect
the processors
that are most common at the time that version of GCC is released.

There is no @option{-march=generic} option because @option{-march}
indicates the instruction set the compiler can use, and there is no
generic instruction set applicable to all processors.  In contrast,
@option{-mtune} indicates the processor (or, in this case, collection of
processors) for which the code is optimized.

@item intel
Produce code optimized for the most current Intel processors, which are
Haswell and Silvermont for this version of GCC.  If you know the CPU
on which your code will run, then you should use the corresponding
@option{-mtune} or @option{-march} option instead of @option{-mtune=intel}.
But, if you want your application performs better on both Haswell and
Silvermont, then you should use this option.

As new Intel processors are deployed in the marketplace, the behavior of
this option will change.  Therefore, if you upgrade to a newer version of
GCC, code generation controlled by this option will change to reflect
the most current Intel processors at the time that version of GCC is
released.

There is no @option{-march=intel} option because @option{-march} indicates
the instruction set the compiler can use, and there is no common
instruction set applicable to all processors.  In contrast,
@option{-mtune} indicates the processor (or, in this case, collection of
processors) for which the code is optimized.
@end table

@item -mcpu=@var{cpu-type}
@opindex mcpu
A deprecated synonym for @option{-mtune}.

@item -mfpmath=@var{unit}
@opindex mfpmath
Generate floating-point arithmetic for selected unit @var{unit}.  The choices
for @var{unit} are:

@table @samp
@item 387
Use the standard 387 floating-point coprocessor present on the majority of chips and
emulated otherwise.  Code compiled with this option runs almost everywhere.
The temporary results are computed in 80-bit precision instead of the precision
specified by the type, resulting in slightly different results compared to most
of other chips.  See @option{-ffloat-store} for more detailed description.

This is the default choice for non-Darwin x86-32 targets.

@item sse
Use scalar floating-point instructions present in the SSE instruction set.
This instruction set is supported by Pentium III and newer chips,
and in the AMD line
by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
instruction set supports only single-precision arithmetic, thus the double and
extended-precision arithmetic are still done using 387.  A later version, present
only in Pentium 4 and AMD x86-64 chips, supports double-precision
arithmetic too.

For the x86-32 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
or @option{-msse2} switches to enable SSE extensions and make this option
effective.  For the x86-64 compiler, these extensions are enabled by default.

The resulting code should be considerably faster in the majority of cases and avoid
the numerical instability problems of 387 code, but may break some existing
code that expects temporaries to be 80 bits.

This is the default choice for the x86-64 compiler, Darwin x86-32 targets,
and the default choice for x86-32 targets with the SSE2 instruction set
when @option{-ffast-math} is enabled.

@item sse,387
@itemx sse+387
@itemx both
Attempt to utilize both instruction sets at once.  This effectively doubles the
amount of available registers, and on chips with separate execution units for
387 and SSE the execution resources too.  Use this option with care, as it is
still experimental, because the GCC register allocator does not model separate
functional units well, resulting in unstable performance.
@end table

@item -masm=@var{dialect}
@opindex masm=@var{dialect}
Output assembly instructions using selected @var{dialect}.  Also affects
which dialect is used for basic @code{asm} (@pxref{Basic Asm}) and
extended @code{asm} (@pxref{Extended Asm}). Supported choices (in dialect
order) are @samp{att} or @samp{intel}. The default is @samp{att}. Darwin does
not support @samp{intel}.

@item -mieee-fp
@itemx -mno-ieee-fp
@opindex mieee-fp
@opindex mno-ieee-fp
Control whether or not the compiler uses IEEE floating-point
comparisons.  These correctly handle the case where the result of a
comparison is unordered.

@item -m80387
@itemx -mhard-float
@opindex 80387
@opindex mhard-float
Generate output containing 80387 instructions for floating point.

@item -mno-80387
@itemx -msoft-float
@opindex no-80387
@opindex msoft-float
Generate output containing library calls for floating point.

@strong{Warning:} the requisite libraries are not part of GCC@.
Normally the facilities of the machine's usual C compiler are used, but
this cannot be done directly in cross-compilation.  You must make your
own arrangements to provide suitable library functions for
cross-compilation.

On machines where a function returns floating-point results in the 80387
register stack, some floating-point opcodes may be emitted even if
@option{-msoft-float} is used.

@item -mno-fp-ret-in-387
@opindex mno-fp-ret-in-387
@opindex mfp-ret-in-387
Do not use the FPU registers for return values of functions.

The usual calling convention has functions return values of types
@code{float} and @code{double} in an FPU register, even if there
is no FPU@.  The idea is that the operating system should emulate
an FPU@.

The option @option{-mno-fp-ret-in-387} causes such values to be returned
in ordinary CPU registers instead.

@item -mno-fancy-math-387
@opindex mno-fancy-math-387
@opindex mfancy-math-387
Some 387 emulators do not support the @code{sin}, @code{cos} and
@code{sqrt} instructions for the 387.  Specify this option to avoid
generating those instructions.
This option is overridden when @option{-march}
indicates that the target CPU always has an FPU and so the
instruction does not need emulation.  These
instructions are not generated unless you also use the
@option{-funsafe-math-optimizations} switch.

@item -malign-double
@itemx -mno-align-double
@opindex malign-double
@opindex mno-align-double
Control whether GCC aligns @code{double}, @code{long double}, and
@code{long long} variables on a two-word boundary or a one-word
boundary.  Aligning @code{double} variables on a two-word boundary
produces code that runs somewhat faster on a Pentium at the
expense of more memory.

On x86-64, @option{-malign-double} is enabled by default.

@strong{Warning:} if you use the @option{-malign-double} switch,
structures containing the above types are aligned differently than
the published application binary interface specifications for the x86-32
and are not binary compatible with structures in code compiled
without that switch.

@item -m96bit-long-double
@itemx -m128bit-long-double
@opindex m96bit-long-double
@opindex m128bit-long-double
These switches control the size of @code{long double} type.  The x86-32
application binary interface specifies the size to be 96 bits,
so @option{-m96bit-long-double} is the default in 32-bit mode.

Modern architectures (Pentium and newer) prefer @code{long double}
to be aligned to an 8- or 16-byte boundary.  In arrays or structures
conforming to the ABI, this is not possible.  So specifying
@option{-m128bit-long-double} aligns @code{long double}
to a 16-byte boundary by padding the @code{long double} with an additional
32-bit zero.

In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
its ABI specifies that @code{long double} is aligned on 16-byte boundary.

Notice that neither of these options enable any extra precision over the x87
standard of 80 bits for a @code{long double}.

@strong{Warning:} if you override the default value for your target ABI, this
changes the size of 
structures and arrays containing @code{long double} variables,
as well as modifying the function calling convention for functions taking
@code{long double}.  Hence they are not binary-compatible
with code compiled without that switch.

@item -mlong-double-64
@itemx -mlong-double-80
@itemx -mlong-double-128
@opindex mlong-double-64
@opindex mlong-double-80
@opindex mlong-double-128
These switches control the size of @code{long double} type. A size
of 64 bits makes the @code{long double} type equivalent to the @code{double}
type. This is the default for 32-bit Bionic C library.  A size
of 128 bits makes the @code{long double} type equivalent to the
@code{__float128} type. This is the default for 64-bit Bionic C library.

@strong{Warning:} if you override the default value for your target ABI, this
changes the size of
structures and arrays containing @code{long double} variables,
as well as modifying the function calling convention for functions taking
@code{long double}.  Hence they are not binary-compatible
with code compiled without that switch.

@item -malign-data=@var{type}
@opindex malign-data
Control how GCC aligns variables.  Supported values for @var{type} are
@samp{compat} uses increased alignment value compatible uses GCC 4.8
and earlier, @samp{abi} uses alignment value as specified by the
psABI, and @samp{cacheline} uses increased alignment value to match
the cache line size.  @samp{compat} is the default.

@item -mlarge-data-threshold=@var{threshold}
@opindex mlarge-data-threshold
When @option{-mcmodel=medium} is specified, data objects larger than
@var{threshold} are placed in the large data section.  This value must be the
same across all objects linked into the binary, and defaults to 65535.

@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions that
take a fixed number of arguments return with the @code{ret @var{num}}
instruction, which pops their arguments while returning.  This saves one
instruction in the caller since there is no need to pop the arguments
there.

You can specify that an individual function is called with this calling
sequence with the function attribute @code{stdcall}.  You can also
override the @option{-mrtd} option by using the function attribute
@code{cdecl}.  @xref{Function Attributes}.

@strong{Warning:} this calling convention is incompatible with the one
normally used on Unix, so you cannot use it if you need to call
libraries compiled with the Unix compiler.

Also, you must provide function prototypes for all functions that
take variable numbers of arguments (including @code{printf});
otherwise incorrect code is generated for calls to those
functions.

In addition, seriously incorrect code results if you call a
function with too many arguments.  (Normally, extra arguments are
harmlessly ignored.)

@item -mregparm=@var{num}
@opindex mregparm
Control how many registers are used to pass integer arguments.  By
default, no registers are used to pass arguments, and at most 3
registers can be used.  You can control this behavior for a specific
function by using the function attribute @code{regparm}.
@xref{Function Attributes}.

@strong{Warning:} if you use this switch, and
@var{num} is nonzero, then you must build all modules with the same
value, including any libraries.  This includes the system libraries and
startup modules.

@item -msseregparm
@opindex msseregparm
Use SSE register passing conventions for float and double arguments
and return values.  You can control this behavior for a specific
function by using the function attribute @code{sseregparm}.
@xref{Function Attributes}.

@strong{Warning:} if you use this switch then you must build all
modules with the same value, including any libraries.  This includes
the system libraries and startup modules.

@item -mvect8-ret-in-mem
@opindex mvect8-ret-in-mem
Return 8-byte vectors in memory instead of MMX registers.  This is the
default on VxWorks to match the ABI of the Sun Studio compilers until
version 12.  @emph{Only} use this option if you need to remain
compatible with existing code produced by those previous compiler
versions or older versions of GCC@.

@item -mpc32
@itemx -mpc64
@itemx -mpc80
@opindex mpc32
@opindex mpc64
@opindex mpc80

Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
is specified, the significands of results of floating-point operations are
rounded to 24 bits (single precision); @option{-mpc64} rounds the
significands of results of floating-point operations to 53 bits (double
precision) and @option{-mpc80} rounds the significands of results of
floating-point operations to 64 bits (extended double precision), which is
the default.  When this option is used, floating-point operations in higher
precisions are not available to the programmer without setting the FPU
control word explicitly.

Setting the rounding of floating-point operations to less than the default
80 bits can speed some programs by 2% or more.  Note that some mathematical
libraries assume that extended-precision (80-bit) floating-point operations
are enabled by default; routines in such libraries could suffer significant
loss of accuracy, typically through so-called ``catastrophic cancellation'',
when this option is used to set the precision to less than extended precision.

@item -mstackrealign
@opindex mstackrealign
Realign the stack at entry.  On the x86, the @option{-mstackrealign}
option generates an alternate prologue and epilogue that realigns the
run-time stack if necessary.  This supports mixing legacy codes that keep
4-byte stack alignment with modern codes that keep 16-byte stack alignment for
SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
applicable to individual functions.

@item -mpreferred-stack-boundary=@var{num}
@opindex mpreferred-stack-boundary
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128 bits).

@strong{Warning:} When generating code for the x86-64 architecture with
SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
used to keep the stack boundary aligned to 8 byte boundary.  Since
x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
intended to be used in controlled environment where stack space is
important limitation.  This option leads to wrong code when functions
compiled with 16 byte stack alignment (such as functions from a standard
library) are called with misaligned stack.  In this case, SSE
instructions may lead to misaligned memory access traps.  In addition,
variable arguments are handled incorrectly for 16 byte aligned
objects (including x87 long double and __int128), leading to wrong
results.  You must build all modules with
@option{-mpreferred-stack-boundary=3}, including any libraries.  This
includes the system libraries and startup modules.

@item -mincoming-stack-boundary=@var{num}
@opindex mincoming-stack-boundary
Assume the incoming stack is aligned to a 2 raised to @var{num} byte
boundary.  If @option{-mincoming-stack-boundary} is not specified,
the one specified by @option{-mpreferred-stack-boundary} is used.

On Pentium and Pentium Pro, @code{double} and @code{long double} values
should be aligned to an 8-byte boundary (see @option{-malign-double}) or
suffer significant run time performance penalties.  On Pentium III, the
Streaming SIMD Extension (SSE) data type @code{__m128} may not work
properly if it is not 16-byte aligned.

To ensure proper alignment of this values on the stack, the stack boundary
must be as aligned as that required by any value stored on the stack.
Further, every function must be generated such that it keeps the stack
aligned.  Thus calling a function compiled with a higher preferred
stack boundary from a function compiled with a lower preferred stack
boundary most likely misaligns the stack.  It is recommended that
libraries that use callbacks always use the default setting.

This extra alignment does consume extra stack space, and generally
increases code size.  Code that is sensitive to stack space usage, such
as embedded systems and operating system kernels, may want to reduce the
preferred alignment to @option{-mpreferred-stack-boundary=2}.

@need 200
@item -mmmx
@opindex mmmx
@need 200
@itemx -msse
@opindex msse
@need 200
@itemx -msse2
@opindex msse2
@need 200
@itemx -msse3
@opindex msse3
@need 200
@itemx -mssse3
@opindex mssse3
@need 200
@itemx -msse4
@opindex msse4
@need 200
@itemx -msse4a
@opindex msse4a
@need 200
@itemx -msse4.1
@opindex msse4.1
@need 200
@itemx -msse4.2
@opindex msse4.2
@need 200
@itemx -mavx
@opindex mavx
@need 200
@itemx -mavx2
@opindex mavx2
@need 200
@itemx -mavx512f
@opindex mavx512f
@need 200
@itemx -mavx512pf
@opindex mavx512pf
@need 200
@itemx -mavx512er
@opindex mavx512er
@need 200
@itemx -mavx512cd
@opindex mavx512cd
@need 200
@itemx -mavx512vl
@opindex mavx512vl
@need 200
@itemx -mavx512bw
@opindex mavx512bw
@need 200
@itemx -mavx512dq
@opindex mavx512dq
@need 200
@itemx -mavx512ifma
@opindex mavx512ifma
@need 200
@itemx -mavx512vbmi
@opindex mavx512vbmi
@need 200
@itemx -msha
@opindex msha
@need 200
@itemx -maes
@opindex maes
@need 200
@itemx -mpclmul
@opindex mpclmul
@need 200
@itemx -mclflushopt
@opindex mclflushopt
@need 200
@itemx -mclwb
@opindex mclwb
@need 200
@itemx -mfsgsbase
@opindex mfsgsbase
@need 200
@itemx -mptwrite
@opindex mptwrite
@need 200
@itemx -mrdrnd
@opindex mrdrnd
@need 200
@itemx -mf16c
@opindex mf16c
@need 200
@itemx -mfma
@opindex mfma
@need 200
@itemx -mpconfig
@opindex mpconfig
@need 200
@itemx -mwbnoinvd
@opindex mwbnoinvd
@need 200
@itemx -mfma4
@opindex mfma4
@need 200
@itemx -mprfchw
@opindex mprfchw
@need 200
@itemx -mrdpid
@opindex mrdpid
@need 200
@itemx -mprefetchwt1
@opindex mprefetchwt1
@need 200
@itemx -mrdseed
@opindex mrdseed
@need 200
@itemx -msgx
@opindex msgx
@need 200
@itemx -mxop
@opindex mxop
@need 200
@itemx -mlwp
@opindex mlwp
@need 200
@itemx -m3dnow
@opindex m3dnow
@need 200
@itemx -m3dnowa
@opindex m3dnowa
@need 200
@itemx -mpopcnt
@opindex mpopcnt
@need 200
@itemx -mabm
@opindex mabm
@need 200
@itemx -madx
@opindex madx
@need 200
@itemx -mbmi
@opindex mbmi
@need 200
@itemx -mbmi2
@opindex mbmi2
@need 200
@itemx -mlzcnt
@opindex mlzcnt
@need 200
@itemx -mfxsr
@opindex mfxsr
@need 200
@itemx -mxsave
@opindex mxsave
@need 200
@itemx -mxsaveopt
@opindex mxsaveopt
@need 200
@itemx -mxsavec
@opindex mxsavec
@need 200
@itemx -mxsaves
@opindex mxsaves
@need 200
@itemx -mrtm
@opindex mrtm
@need 200
@itemx -mhle
@opindex mhle
@need 200
@itemx -mtbm
@opindex mtbm
@need 200
@itemx -mmwaitx
@opindex mmwaitx
@need 200
@itemx -mclzero
@opindex mclzero
@need 200
@itemx -mpku
@opindex mpku
@need 200
@itemx -mavx512vbmi2
@opindex mavx512vbmi2
@need 200
@itemx -mavx512bf16
@opindex mavx512bf16
@need 200
@itemx -mavx512fp16
@opindex mavx512fp16
@need 200
@itemx -mgfni
@opindex mgfni
@need 200
@itemx -mvaes
@opindex mvaes
@need 200
@itemx -mwaitpkg
@opindex mwaitpkg
@need 200
@itemx -mvpclmulqdq
@opindex mvpclmulqdq
@need 200
@itemx -mavx512bitalg
@opindex mavx512bitalg
@need 200
@itemx -mmovdiri
@opindex mmovdiri
@need 200
@itemx -mmovdir64b
@opindex mmovdir64b
@need 200
@itemx -menqcmd
@opindex menqcmd
@itemx -muintr
@opindex muintr
@need 200
@itemx -mtsxldtrk
@opindex mtsxldtrk
@need 200
@itemx -mavx512vpopcntdq
@opindex mavx512vpopcntdq
@need 200
@itemx -mavx512vp2intersect
@opindex mavx512vp2intersect
@need 200
@itemx -mavx5124fmaps
@opindex mavx5124fmaps
@need 200
@itemx -mavx512vnni
@opindex mavx512vnni
@need 200
@itemx -mavxvnni
@opindex mavxvnni
@need 200
@itemx -mavx5124vnniw
@opindex mavx5124vnniw
@need 200
@itemx -mcldemote
@opindex mcldemote
@need 200
@itemx -mserialize
@opindex mserialize
@need 200
@itemx -mamx-tile
@opindex mamx-tile
@need 200
@itemx -mamx-int8
@opindex mamx-int8
@need 200
@itemx -mamx-bf16
@opindex mamx-bf16
@need 200
@itemx -mhreset
@opindex mhreset
@itemx -mkl
@opindex mkl
@need 200
@itemx -mwidekl
@opindex mwidekl
These switches enable the use of instructions in the MMX, SSE,
SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F, AVX512PF,
AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG,
WBNOINVD, FMA4, PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP,
3DNow!@:, enhanced 3DNow!@:, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B, AVX512BF16,
ENQCMD, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE,
UINTR, HRESET, AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512FP16
or CLDEMOTE extended instruction sets. Each has a corresponding
@option{-mno-} option to disable use of these instructions.

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.

To generate SSE/SSE2 instructions automatically from floating-point
code (as opposed to 387 instructions), see @option{-mfpmath=sse}.

GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
generates new AVX instructions or AVX equivalence for all SSEx instructions
when needed.

These options enable GCC to use these extended instructions in
generated code, even without @option{-mfpmath=sse}.  Applications that
perform run-time CPU detection must compile separate files for each
supported architecture, using the appropriate flags.  In particular,
the file containing the CPU detection code should be compiled without
these options.

@item -mdump-tune-features
@opindex mdump-tune-features
This option instructs GCC to dump the names of the x86 performance 
tuning features and default settings. The names can be used in 
@option{-mtune-ctrl=@var{feature-list}}.

@item -mtune-ctrl=@var{feature-list}
@opindex mtune-ctrl=@var{feature-list}
This option is used to do fine grain control of x86 code generation features.
@var{feature-list} is a comma separated list of @var{feature} names. See also
@option{-mdump-tune-features}. When specified, the @var{feature} is turned
on if it is not preceded with @samp{^}, otherwise, it is turned off. 
@option{-mtune-ctrl=@var{feature-list}} is intended to be used by GCC
developers. Using it may lead to code paths not covered by testing and can
potentially result in compiler ICEs or runtime errors.

@item -mno-default
@opindex mno-default
This option instructs GCC to turn off all tunable features. See also 
@option{-mtune-ctrl=@var{feature-list}} and @option{-mdump-tune-features}.

@item -mcld
@opindex mcld
This option instructs GCC to emit a @code{cld} instruction in the prologue
of functions that use string instructions.  String instructions depend on
the DF flag to select between autoincrement or autodecrement mode.  While the
ABI specifies the DF flag to be cleared on function entry, some operating
systems violate this specification by not clearing the DF flag in their
exception dispatchers.  The exception handler can be invoked with the DF flag
set, which leads to wrong direction mode when string instructions are used.
This option can be enabled by default on 32-bit x86 targets by configuring
GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
instructions can be suppressed with the @option{-mno-cld} compiler option
in this case.

@item -mvzeroupper
@opindex mvzeroupper
This option instructs GCC to emit a @code{vzeroupper} instruction
before a transfer of control flow out of the function to minimize
the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
intrinsics.

@item -mprefer-avx128
@opindex mprefer-avx128
This option instructs GCC to use 128-bit AVX instructions instead of
256-bit AVX instructions in the auto-vectorizer.

@item -mprefer-vector-width=@var{opt}
@opindex mprefer-vector-width
This option instructs GCC to use @var{opt}-bit vector width in instructions
instead of default on the selected platform.

@table @samp
@item none
No extra limitations applied to GCC other than defined by the selected platform.

@item 128
Prefer 128-bit vector width for instructions.

@item 256
Prefer 256-bit vector width for instructions.

@item 512
Prefer 512-bit vector width for instructions.
@end table

@item -mcx16
@opindex mcx16
This option enables GCC to generate @code{CMPXCHG16B} instructions in 64-bit
code to implement compare-and-exchange operations on 16-byte aligned 128-bit
objects.  This is useful for atomic updates of data structures exceeding one
machine word in size.  The compiler uses this instruction to implement
@ref{__sync Builtins}.  However, for @ref{__atomic Builtins} operating on
128-bit integers, a library call is always used.

@item -msahf
@opindex msahf
This option enables generation of @code{SAHF} instructions in 64-bit code.
Early Intel Pentium 4 CPUs with Intel 64 support,
prior to the introduction of Pentium 4 G1 step in December 2005,
lacked the @code{LAHF} and @code{SAHF} instructions
which are supported by AMD64.
These are load and store instructions, respectively, for certain status flags.
In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
@code{drem}, and @code{remainder} built-in functions;
see @ref{Other Builtins} for details.

@item -mmovbe
@opindex mmovbe
This option enables use of the @code{movbe} instruction to implement
@code{__builtin_bswap32} and @code{__builtin_bswap64}.

@item -mshstk
@opindex mshstk
The @option{-mshstk} option enables shadow stack built-in functions
from x86 Control-flow Enforcement Technology (CET).

@item -mcrc32
@opindex mcrc32
This option enables built-in functions @code{__builtin_ia32_crc32qi},
@code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
@code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.

@item -mmwait
@opindex mmwait
This option enables built-in functions @code{__builtin_ia32_monitor},
and @code{__builtin_ia32_mwait} to generate the @code{monitor} and
@code{mwait} machine instructions.

@item -mrecip
@opindex mrecip
This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
(and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
with an additional Newton-Raphson step
to increase precision instead of @code{DIVSS} and @code{SQRTSS}
(and their vectorized
variants) for single-precision floating-point arguments.  These instructions
are generated only when @option{-funsafe-math-optimizations} is enabled
together with @option{-ffinite-math-only} and @option{-fno-trapping-math}.
Note that while the throughput of the sequence is higher than the throughput
of the non-reciprocal instruction, the precision of the sequence can be
decreased by up to 2 ulp (i.e.@: the inverse of 1.0 equals 0.99999994).

Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
(or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
combination), and doesn't need @option{-mrecip}.

Also note that GCC emits the above sequence with additional Newton-Raphson step
for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
already with @option{-ffast-math} (or the above option combination), and
doesn't need @option{-mrecip}.

@item -mrecip=@var{opt}
@opindex mrecip=opt
This option controls which reciprocal estimate instructions
may be used.  @var{opt} is a comma-separated list of options, which may
be preceded by a @samp{!} to invert the option:

@table @samp
@item all
Enable all estimate instructions.

@item default
Enable the default instructions, equivalent to @option{-mrecip}.

@item none
Disable all estimate instructions, equivalent to @option{-mno-recip}.

@item div
Enable the approximation for scalar division.

@item vec-div
Enable the approximation for vectorized division.

@item sqrt
Enable the approximation for scalar square root.

@item vec-sqrt
Enable the approximation for vectorized square root.
@end table

So, for example, @option{-mrecip=all,!sqrt} enables
all of the reciprocal approximations, except for square root.

@item -mveclibabi=@var{type}
@opindex mveclibabi
Specifies the ABI type to use for vectorizing intrinsics using an
external library.  Supported values for @var{type} are @samp{svml} 
for the Intel short
vector math library and @samp{acml} for the AMD math core library.
To use this option, both @option{-ftree-vectorize} and
@option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML 
ABI-compatible library must be specified at link time.

GCC currently emits calls to @code{vmldExp2},
@code{vmldLn2}, @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{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 the corresponding function type
when @option{-mveclibabi=acml} is used.  

@item -mabi=@var{name}
@opindex mabi
Generate code for the specified calling convention.  Permissible values
are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
@samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
You can control this behavior for specific functions by
using the function attributes @code{ms_abi} and @code{sysv_abi}.
@xref{Function Attributes}.

@item -mforce-indirect-call
@opindex mforce-indirect-call
Force all calls to functions to be indirect. This is useful
when using Intel Processor Trace where it generates more precise timing
information for function calls.

@item -mmanual-endbr
@opindex mmanual-endbr
Insert ENDBR instruction at function entry only via the @code{cf_check}
function attribute. This is useful when used with the option
@option{-fcf-protection=branch} to control ENDBR insertion at the
function entry.

@item -mcall-ms2sysv-xlogues
@opindex mcall-ms2sysv-xlogues
@opindex mno-call-ms2sysv-xlogues
Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
System V ABI function must consider RSI, RDI and XMM6-15 as clobbered.  By
default, the code for saving and restoring these registers is emitted inline,
resulting in fairly lengthy prologues and epilogues.  Using
@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
use stubs in the static portion of libgcc to perform these saves and restores,
thus reducing function size at the cost of a few extra instructions.

@item -mtls-dialect=@var{type}
@opindex mtls-dialect
Generate code to access thread-local storage using the @samp{gnu} or
@samp{gnu2} conventions.  @samp{gnu} is the conservative default;
@samp{gnu2} is more efficient, but it may add compile- and run-time
requirements that cannot be satisfied on all systems.

@item -mpush-args
@itemx -mno-push-args
@opindex mpush-args
@opindex mno-push-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
@opindex maccumulate-outgoing-args
If enabled, the maximum amount of space required for outgoing arguments is
computed in the function prologue.  This is faster on most modern CPUs
because of reduced dependencies, improved scheduling and reduced stack usage
when the preferred stack boundary is not equal to 2.  The drawback is a notable
increase in code size.  This switch implies @option{-mno-push-args}.

@item -mthreads
@opindex mthreads
Support thread-safe exception handling on MinGW.  Programs that rely
on thread-safe exception handling must compile and link all code with the
@option{-mthreads} option.  When compiling, @option{-mthreads} defines
@option{-D_MT}; when linking, it links in a special thread helper library
@option{-lmingwthrd} which cleans up per-thread exception-handling data.

@item -mms-bitfields
@itemx -mno-ms-bitfields
@opindex mms-bitfields
@opindex mno-ms-bitfields

Enable/disable bit-field layout compatible with the native Microsoft
Windows compiler.  

If @code{packed} is used on a structure, or if bit-fields are used,
it may be that the Microsoft ABI lays out the structure differently
than the way GCC normally does.  Particularly when moving packed
data between functions compiled with GCC and the native Microsoft compiler
(either via function call or as data in a file), it may be necessary to access
either format.

This option is enabled by default for Microsoft Windows
targets.  This behavior can also be controlled locally by use of variable
or type attributes.  For more information, see @ref{x86 Variable Attributes}
and @ref{x86 Type Attributes}.

The Microsoft structure layout algorithm is fairly simple with the exception
of the bit-field packing.  
The padding and alignment of members of structures and whether a bit-field 
can straddle a storage-unit boundary are determine by these rules:

@enumerate
@item Structure members are stored sequentially in the order in which they are
declared: the first member has the lowest memory address and the last member
the highest.

@item Every data object has an alignment requirement.  The alignment requirement
for all data except structures, unions, and arrays is either the size of the
object or the current packing size (specified with either the
@code{aligned} attribute or the @code{pack} pragma),
whichever is less.  For structures, unions, and arrays,
the alignment requirement is the largest alignment requirement of its members.
Every object is allocated an offset so that:

@smallexample
offset % alignment_requirement == 0
@end smallexample

@item Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation
unit if the integral types are the same size and if the next bit-field fits
into the current allocation unit without crossing the boundary imposed by the
common alignment requirements of the bit-fields.
@end enumerate

MSVC interprets zero-length bit-fields in the following ways:

@enumerate
@item If a zero-length bit-field is inserted between two bit-fields that
are normally coalesced, the bit-fields are not coalesced.

For example:

@smallexample
struct
 @{
   unsigned long bf_1 : 12;
   unsigned long : 0;
   unsigned long bf_2 : 12;
 @} t1;
@end smallexample

@noindent
The size of @code{t1} is 8 bytes with the zero-length bit-field.  If the
zero-length bit-field were removed, @code{t1}'s size would be 4 bytes.

@item If a zero-length bit-field is inserted after a bit-field, @code{foo}, and the
alignment of the zero-length bit-field is greater than the member that follows it,
@code{bar}, @code{bar} is aligned as the type of the zero-length bit-field.

For example:

@smallexample
struct
 @{
   char foo : 4;
   short : 0;
   char bar;
 @} t2;

struct
 @{
   char foo : 4;
   short : 0;
   double bar;
 @} t3;
@end smallexample

@noindent
For @code{t2}, @code{bar} is placed at offset 2, rather than offset 1.
Accordingly, the size of @code{t2} is 4.  For @code{t3}, the zero-length
bit-field does not affect the alignment of @code{bar} or, as a result, the size
of the structure.

Taking this into account, it is important to note the following:

@enumerate
@item If a zero-length bit-field follows a normal bit-field, the type of the
zero-length bit-field may affect the alignment of the structure as whole. For
example, @code{t2} has a size of 4 bytes, since the zero-length bit-field follows a
normal bit-field, and is of type short.

@item Even if a zero-length bit-field is not followed by a normal bit-field, it may
still affect the alignment of the structure:

@smallexample
struct
 @{
   char foo : 6;
   long : 0;
 @} t4;
@end smallexample

@noindent
Here, @code{t4} takes up 4 bytes.
@end enumerate

@item Zero-length bit-fields following non-bit-field members are ignored:

@smallexample
struct
 @{
   char foo;
   long : 0;
   char bar;
 @} t5;
@end smallexample

@noindent
Here, @code{t5} takes up 2 bytes.
@end enumerate


@item -mno-align-stringops
@opindex mno-align-stringops
@opindex malign-stringops
Do not align the destination of inlined string operations.  This switch reduces
code size and improves performance in case the destination is already aligned,
but GCC doesn't know about it.

@item -minline-all-stringops
@opindex minline-all-stringops
By default GCC inlines string operations only when the destination is 
known to be aligned to least a 4-byte boundary.  
This enables more inlining and increases code
size, but may improve performance of code that depends on fast
@code{memcpy} and @code{memset} for short lengths.
The option enables inline expansion of @code{strlen} for all
pointer alignments.

@item -minline-stringops-dynamically
@opindex minline-stringops-dynamically
For string operations of unknown size, use run-time checks with
inline code for small blocks and a library call for large blocks.

@item -mstringop-strategy=@var{alg}
@opindex mstringop-strategy=@var{alg}
Override the internal decision heuristic for the particular algorithm to use
for inlining string operations.  The allowed values for @var{alg} are:

@table @samp
@item rep_byte
@itemx rep_4byte
@itemx rep_8byte
Expand using i386 @code{rep} prefix of the specified size.

@item byte_loop
@itemx loop
@itemx unrolled_loop
Expand into an inline loop.

@item libcall
Always use a library call.
@end table

@item -mmemcpy-strategy=@var{strategy}
@opindex mmemcpy-strategy=@var{strategy}
Override the internal decision heuristic to decide if @code{__builtin_memcpy}
should be inlined and what inline algorithm to use when the expected size
of the copy operation is known. @var{strategy} 
is a comma-separated list of @var{alg}:@var{max_size}:@var{dest_align} triplets. 
@var{alg} is specified in @option{-mstringop-strategy}, @var{max_size} specifies
the max byte size with which inline algorithm @var{alg} is allowed.  For the last
triplet, the @var{max_size} must be @code{-1}. The @var{max_size} of the triplets
in the list must be specified in increasing order.  The minimal byte size for 
@var{alg} is @code{0} for the first triplet and @code{@var{max_size} + 1} of the 
preceding range.

@item -mmemset-strategy=@var{strategy}
@opindex mmemset-strategy=@var{strategy}
The option is similar to @option{-mmemcpy-strategy=} except that it is to control
@code{__builtin_memset} expansion.

@item -momit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
Don't keep the frame pointer in a register for leaf functions.  This
avoids the instructions to save, set up, and restore frame pointers and
makes an extra register available in leaf functions.  The option
@option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
which might make debugging harder.

@item -mtls-direct-seg-refs
@itemx -mno-tls-direct-seg-refs
@opindex mtls-direct-seg-refs
Controls whether TLS variables may be accessed with offsets from the
TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
or whether the thread base pointer must be added.  Whether or not this
is valid depends on the operating system, and whether it maps the
segment to cover the entire TLS area.

For systems that use the GNU C Library, the default is on.

@item -msse2avx
@itemx -mno-sse2avx
@opindex msse2avx
Specify that the assembler should encode SSE instructions with VEX
prefix.  The option @option{-mavx} turns this on by default.

@item -mfentry
@itemx -mno-fentry
@opindex mfentry
If profiling is active (@option{-pg}), put the profiling
counter call before the prologue.
Note: On x86 architectures the attribute @code{ms_hook_prologue}
isn't possible at the moment for @option{-mfentry} and @option{-pg}.

@item -mrecord-mcount
@itemx -mno-record-mcount
@opindex mrecord-mcount
If profiling is active (@option{-pg}), generate a __mcount_loc section
that contains pointers to each profiling call. This is useful for
automatically patching and out calls.

@item -mnop-mcount
@itemx -mno-nop-mcount
@opindex mnop-mcount
If profiling is active (@option{-pg}), generate the calls to
the profiling functions as NOPs. This is useful when they
should be patched in later dynamically. This is likely only
useful together with @option{-mrecord-mcount}.

@item -minstrument-return=@var{type}
@opindex minstrument-return
Instrument function exit in -pg -mfentry instrumented functions with
call to specified function. This only instruments true returns ending
with ret, but not sibling calls ending with jump. Valid types
are @var{none} to not instrument, @var{call} to generate a call to __return__,
or @var{nop5} to generate a 5 byte nop.

@item -mrecord-return
@itemx -mno-record-return
@opindex mrecord-return
Generate a __return_loc section pointing to all return instrumentation code.

@item -mfentry-name=@var{name}
@opindex mfentry-name
Set name of __fentry__ symbol called at function entry for -pg -mfentry functions.

@item -mfentry-section=@var{name}
@opindex mfentry-section
Set name of section to record -mrecord-mcount calls (default __mcount_loc).

@item -mskip-rax-setup
@itemx -mno-skip-rax-setup
@opindex mskip-rax-setup
When generating code for the x86-64 architecture with SSE extensions
disabled, @option{-mskip-rax-setup} can be used to skip setting up RAX
register when there are no variable arguments passed in vector registers.

@strong{Warning:} Since RAX register is used to avoid unnecessarily
saving vector registers on stack when passing variable arguments, the
impacts of this option are callees may waste some stack space,
misbehave or jump to a random location.  GCC 4.4 or newer don't have
those issues, regardless the RAX register value.

@item -m8bit-idiv
@itemx -mno-8bit-idiv
@opindex m8bit-idiv
On some processors, like Intel Atom, 8-bit unsigned integer divide is
much faster than 32-bit/64-bit integer divide.  This option generates a
run-time check.  If both dividend and divisor are within range of 0
to 255, 8-bit unsigned integer divide is used instead of
32-bit/64-bit integer divide.

@item -mavx256-split-unaligned-load
@itemx -mavx256-split-unaligned-store
@opindex mavx256-split-unaligned-load
@opindex mavx256-split-unaligned-store
Split 32-byte AVX unaligned load and store.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for global canary or @samp{tls} for per-thread
canary in the TLS block (the default).  This option has effect only when
@option{-fstack-protector} or @option{-fstack-protector-all} is specified.

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which segment register (@code{%fs} or @code{%gs}) to use as base register
for reading the canary, and from what offset from that base register.
The default for those is as specified in the relevant ABI.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code that uses only the general-purpose registers.  This
prevents the compiler from using floating-point, vector, mask and bound
registers.

@item -mindirect-branch=@var{choice}
@opindex mindirect-branch
Convert indirect call and jump with @var{choice}.  The default is
@samp{keep}, which keeps indirect call and jump unmodified.
@samp{thunk} converts indirect call and jump to call and return thunk.
@samp{thunk-inline} converts indirect call and jump to inlined call
and return thunk.  @samp{thunk-extern} converts indirect call and jump
to external call and return thunk provided in a separate object file.
You can control this behavior for a specific function by using the
function attribute @code{indirect_branch}.  @xref{Function Attributes}.

Note that @option{-mcmodel=large} is incompatible with
@option{-mindirect-branch=thunk} and
@option{-mindirect-branch=thunk-extern} since the thunk function may
not be reachable in the large code model.

Note that @option{-mindirect-branch=thunk-extern} is compatible with
@option{-fcf-protection=branch} since the external thunk can be made
to enable control-flow check.

@item -mfunction-return=@var{choice}
@opindex mfunction-return
Convert function return with @var{choice}.  The default is @samp{keep},
which keeps function return unmodified.  @samp{thunk} converts function
return to call and return thunk.  @samp{thunk-inline} converts function
return to inlined call and return thunk.  @samp{thunk-extern} converts
function return to external call and return thunk provided in a separate
object file.  You can control this behavior for a specific function by
using the function attribute @code{function_return}.
@xref{Function Attributes}.

Note that @option{-mindirect-return=thunk-extern} is compatible with
@option{-fcf-protection=branch} since the external thunk can be made
to enable control-flow check.

Note that @option{-mcmodel=large} is incompatible with
@option{-mfunction-return=thunk} and
@option{-mfunction-return=thunk-extern} since the thunk function may
not be reachable in the large code model.


@item -mindirect-branch-register
@opindex mindirect-branch-register
Force indirect call and jump via register.

@end table

These @samp{-m} switches are supported in addition to the above
on x86-64 processors in 64-bit environments.

@table @gcctabopt
@item -m32
@itemx -m64
@itemx -mx32
@itemx -m16
@itemx -miamcu
@opindex m32
@opindex m64
@opindex mx32
@opindex m16
@opindex miamcu
Generate code for a 16-bit, 32-bit or 64-bit environment.
The @option{-m32} option sets @code{int}, @code{long}, and pointer types
to 32 bits, and
generates code that runs on any i386 system.

The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
types to 64 bits, and generates code for the x86-64 architecture.
For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
and @option{-mdynamic-no-pic} options.

The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
to 32 bits, and
generates code for the x86-64 architecture.

The @option{-m16} option is the same as @option{-m32}, except for that
it outputs the @code{.code16gcc} assembly directive at the beginning of
the assembly output so that the binary can run in 16-bit mode.

The @option{-miamcu} option generates code which conforms to Intel MCU
psABI.  It requires the @option{-m32} option to be turned on.

@item -mno-red-zone
@opindex mno-red-zone
@opindex mred-zone
Do not use a so-called ``red zone'' for x86-64 code.  The red zone is mandated
by the x86-64 ABI; it is a 128-byte area beyond the location of the
stack pointer that is not modified by signal or interrupt handlers
and therefore can be used for temporary data without adjusting the stack
pointer.  The flag @option{-mno-red-zone} disables this red zone.

@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small code model: the program and its symbols must
be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
Programs can be statically or dynamically linked.  This is the default
code model.

@item -mcmodel=kernel
@opindex mcmodel=kernel
Generate code for the kernel code model.  The kernel runs in the
negative 2 GB of the address space.
This model has to be used for Linux kernel code.

@item -mcmodel=medium
@opindex mcmodel=medium
Generate code for the medium model: the program is linked in the lower 2
GB of the address space.  Small symbols are also placed there.  Symbols
with sizes larger than @option{-mlarge-data-threshold} are put into
large data or BSS sections and can be located above 2GB.  Programs can
be statically or dynamically linked.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large model.  This model makes no assumptions
about addresses and sizes of sections.

@item -maddress-mode=long
@opindex maddress-mode=long
Generate code for long address mode.  This is only supported for 64-bit
and x32 environments.  It is the default address mode for 64-bit
environments.

@item -maddress-mode=short
@opindex maddress-mode=short
Generate code for short address mode.  This is only supported for 32-bit
and x32 environments.  It is the default address mode for 32-bit and
x32 environments.

@item -mneeded
@itemx -mno-needed
@opindex mneeded
Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
indicate the micro-architecture ISA level required to execute the binary.
@end table

@node x86 Windows Options
@subsection x86 Windows Options
@cindex x86 Windows Options
@cindex Windows Options for x86

These additional options are available for Microsoft Windows targets:

@table @gcctabopt
@item -mconsole
@opindex mconsole
This option
specifies that a console application is to be generated, by
instructing the linker to set the PE header subsystem type
required for console applications.
This option is available for Cygwin and MinGW targets and is
enabled by default on those targets.

@item -mdll
@opindex mdll
This option is available for Cygwin and MinGW targets.  It
specifies that a DLL---a dynamic link library---is to be
generated, enabling the selection of the required runtime
startup object and entry point.

@item -mnop-fun-dllimport
@opindex mnop-fun-dllimport
This option is available for Cygwin and MinGW targets.  It
specifies that the @code{dllimport} attribute should be ignored.

@item -mthreads
@opindex mthreads
This option is available for MinGW targets. It specifies
that MinGW-specific thread support is to be used.

@item -municode
@opindex municode
This option is available for MinGW-w64 targets.  It causes
the @code{UNICODE} preprocessor macro to be predefined, and
chooses Unicode-capable runtime startup code.

@item -mwin32
@opindex mwin32
This option is available for Cygwin and MinGW targets.  It
specifies that the typical Microsoft Windows predefined macros are to
be set in the pre-processor, but does not influence the choice
of runtime library/startup code.

@item -mwindows
@opindex mwindows
This option is available for Cygwin and MinGW targets.  It
specifies that a GUI application is to be generated by
instructing the linker to set the PE header subsystem type
appropriately.

@item -fno-set-stack-executable
@opindex fno-set-stack-executable
@opindex fset-stack-executable
This option is available for MinGW targets. It specifies that
the executable flag for the stack used by nested functions isn't
set. This is necessary for binaries running in kernel mode of
Microsoft Windows, as there the User32 API, which is used to set executable
privileges, isn't available.

@item -fwritable-relocated-rdata
@opindex fno-writable-relocated-rdata
@opindex fwritable-relocated-rdata
This option is available for MinGW and Cygwin targets.  It specifies
that relocated-data in read-only section is put into the @code{.data}
section.  This is a necessary for older runtimes not supporting
modification of @code{.rdata} sections for pseudo-relocation.

@item -mpe-aligned-commons
@opindex mpe-aligned-commons
This option is available for Cygwin and MinGW targets.  It
specifies that the GNU extension to the PE file format that
permits the correct alignment of COMMON variables should be
used when generating code.  It is enabled by default if
GCC detects that the target assembler found during configuration
supports the feature.
@end table

See also under @ref{x86 Options} for standard options.

@node Xstormy16 Options
@subsection Xstormy16 Options
@cindex Xstormy16 Options

These options are defined for Xstormy16:

@table @gcctabopt
@item -msim
@opindex msim
Choose startup files and linker script suitable for the simulator.
@end table

@node Xtensa Options
@subsection Xtensa Options
@cindex Xtensa Options

These options are supported for Xtensa targets:

@table @gcctabopt
@item -mconst16
@itemx -mno-const16
@opindex mconst16
@opindex mno-const16
Enable or disable use of @code{CONST16} instructions for loading
constant values.  The @code{CONST16} instruction is currently not a
standard option from Tensilica.  When enabled, @code{CONST16}
instructions are always used in place of the standard @code{L32R}
instructions.  The use of @code{CONST16} is enabled by default only if
the @code{L32R} instruction is not available.

@item -mfused-madd
@itemx -mno-fused-madd
@opindex mfused-madd
@opindex mno-fused-madd
Enable or disable use of fused multiply/add and multiply/subtract
instructions in the floating-point option.  This has no effect if the
floating-point option is not also enabled.  Disabling fused multiply/add
and multiply/subtract instructions forces the compiler to use separate
instructions for the multiply and add/subtract operations.  This may be
desirable in some cases where strict IEEE 754-compliant results are
required: the fused multiply add/subtract instructions do not round the
intermediate result, thereby producing results with @emph{more} bits of
precision than specified by the IEEE standard.  Disabling fused multiply
add/subtract instructions also ensures that the program output is not
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 -mforce-no-pic
@opindex mforce-no-pic
For targets, like GNU/Linux, where all user-mode Xtensa code must be
position-independent code (PIC), this option disables PIC for compiling
kernel code.

@item -mtext-section-literals
@itemx -mno-text-section-literals
@opindex mtext-section-literals
@opindex mno-text-section-literals
These options control the treatment of literal pools.  The default is
@option{-mno-text-section-literals}, which places literals in a separate
section in the output file.  This allows the literal pool to be placed
in a data RAM/ROM, and it also allows the linker to combine literal
pools from separate object files to remove redundant literals and
improve code size.  With @option{-mtext-section-literals}, the literals
are interspersed in the text section in order to keep them as close as
possible to their references.  This may be necessary for large assembly
files.  Literals for each function are placed right before that function.

@item -mauto-litpools
@itemx -mno-auto-litpools
@opindex mauto-litpools
@opindex mno-auto-litpools
These options control the treatment of literal pools.  The default is
@option{-mno-auto-litpools}, which places literals in a separate
section in the output file unless @option{-mtext-section-literals} is
used.  With @option{-mauto-litpools} the literals are interspersed in
the text section by the assembler.  Compiler does not produce explicit
@code{.literal} directives and loads literals into registers with
@code{MOVI} instructions instead of @code{L32R} to let the assembler
do relaxation and place literals as necessary.  This option allows
assembler to create several literal pools per function and assemble
very big functions, which may not be possible with
@option{-mtext-section-literals}.

@item -mtarget-align
@itemx -mno-target-align
@opindex mtarget-align
@opindex mno-target-align
When this option is enabled, GCC instructs the assembler to
automatically align instructions to reduce branch penalties at the
expense of some code density.  The assembler attempts to widen density
instructions to align branch targets and the instructions following call
instructions.  If there are not enough preceding safe density
instructions to align a target, no widening is performed.  The
default is @option{-mtarget-align}.  These options do not affect the
treatment of auto-aligned instructions like @code{LOOP}, which the
assembler always aligns, either by widening density instructions or
by inserting NOP instructions.

@item -mlongcalls
@itemx -mno-longcalls
@opindex mlongcalls
@opindex mno-longcalls
When this option is enabled, GCC instructs the assembler to translate
direct calls to indirect calls unless it can determine that the target
of a direct call is in the range allowed by the call instruction.  This
translation typically occurs for calls to functions in other source
files.  Specifically, the assembler translates a direct @code{CALL}
instruction into an @code{L32R} followed by a @code{CALLX} instruction.
The default is @option{-mno-longcalls}.  This option should be used in
programs where the call target can potentially be out of range.  This
option is implemented in the assembler, not the compiler, so the
assembly code generated by GCC still shows direct call
instructions---look at the disassembled object code to see the actual
instructions.  Note that the assembler uses an indirect call for
every cross-file call, not just those that really are out of range.

@item -mabi=@var{name}
@opindex mabi
Generate code for the specified ABI@.  Permissible values are: @samp{call0},
@samp{windowed}.  Default ABI is chosen by the Xtensa core configuration.

@item -mabi=call0
@opindex mabi=call0
When this option is enabled function parameters are passed in registers
@code{a2} through @code{a7}, registers @code{a12} through @code{a15} are
caller-saved, and register @code{a15} may be used as a frame pointer.
When this version of the ABI is enabled the C preprocessor symbol
@code{__XTENSA_CALL0_ABI__} is defined.

@item -mabi=windowed
@opindex mabi=windowed
When this option is enabled function parameters are passed in registers
@code{a10} through @code{a15}, and called function rotates register window
by 8 registers on entry so that its arguments are found in registers
@code{a2} through @code{a7}.  Register @code{a7} may be used as a frame
pointer.  Register window is rotated 8 registers back upon return.
When this version of the ABI is enabled the C preprocessor symbol
@code{__XTENSA_WINDOWED_ABI__} is defined.
@end table

@node zSeries Options
@subsection zSeries Options
@cindex zSeries options

These are listed under @xref{S/390 and zSeries Options}.


@c man end

@node Spec Files
@section Specifying Subprocesses and the Switches to Pass to Them
@cindex Spec Files

@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
it ought to place on their command lines.  This behavior is controlled
by @dfn{spec strings}.  In most cases there is one spec string for each
program that GCC can invoke, but a few programs have multiple spec
strings to control their behavior.  The spec strings built into GCC can
be overridden by using the @option{-specs=} command-line switch to specify
a spec file.

@dfn{Spec files} are plain-text files that are used to construct spec
strings.  They consist of a sequence of directives separated by blank
lines.  The type of directive is determined by the first non-whitespace
character on the line, which can be one of the following:

@table @code
@item %@var{command}
Issues a @var{command} to the spec file processor.  The commands that can
appear here are:

@table @code
@item %include <@var{file}>
@cindex @code{%include}
Search for @var{file} and insert its text at the current point in the
specs file.

@item %include_noerr <@var{file}>
@cindex @code{%include_noerr}
Just like @samp{%include}, but do not generate an error message if the include
file cannot be found.

@item %rename @var{old_name} @var{new_name}
@cindex @code{%rename}
Rename the spec string @var{old_name} to @var{new_name}.

@end table

@item *[@var{spec_name}]:
This tells the compiler to create, override or delete the named spec
string.  All lines after this directive up to the next directive or
blank line are considered to be the text for the spec string.  If this
results in an empty string then the spec is deleted.  (Or, if the
spec did not exist, then nothing happens.)  Otherwise, if the spec
does not currently exist a new spec is created.  If the spec does
exist then its contents are overridden by the text of this
directive, unless the first character of that text is the @samp{+}
character, in which case the text is appended to the spec.

@item [@var{suffix}]:
Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
and up to the next directive or blank line are considered to make up the
spec string for the indicated suffix.  When the compiler encounters an
input file with the named suffix, it processes the spec string in
order to work out how to compile that file.  For example:

@smallexample
.ZZ:
z-compile -input %i
@end smallexample

This says that any input file whose name ends in @samp{.ZZ} should be
passed to the program @samp{z-compile}, which should be invoked with the
command-line switch @option{-input} and with the result of performing the
@samp{%i} substitution.  (See below.)

As an alternative to providing a spec string, the text following a
suffix directive can be one of the following:

@table @code
@item @@@var{language}
This says that the suffix is an alias for a known @var{language}.  This is
similar to using the @option{-x} command-line switch to GCC to specify a
language explicitly.  For example:

@smallexample
.ZZ:
@@c++
@end smallexample

Says that .ZZ files are, in fact, C++ source files.

@item #@var{name}
This causes an error messages saying:

@smallexample
@var{name} compiler not installed on this system.
@end smallexample
@end table

GCC already has an extensive list of suffixes built into it.
This directive adds an entry to the end of the list of suffixes, but
since the list is searched from the end backwards, it is effectively
possible to override earlier entries using this technique.

@end table

GCC has the following spec strings built into it.  Spec files can
override these strings or create their own.  Note that individual
targets can also add their own spec strings to this list.

@smallexample
asm          Options to pass to the assembler
asm_final    Options to pass to the assembler post-processor
cpp          Options to pass to the C preprocessor
cc1          Options to pass to the C compiler
cc1plus      Options to pass to the C++ compiler
endfile      Object files to include at the end of the link
link         Options to pass to the linker
lib          Libraries to include on the command line to the linker
libgcc       Decides which GCC support library to pass to the linker
linker       Sets the name of the linker
predefines   Defines to be passed to the C preprocessor
signed_char  Defines to pass to CPP to say whether @code{char} is signed
             by default
startfile    Object files to include at the start of the link
@end smallexample

Here is a small example of a spec file:

@smallexample
%rename lib                 old_lib

*lib:
--start-group -lgcc -lc -leval1 --end-group %(old_lib)
@end smallexample

This example renames the spec called @samp{lib} to @samp{old_lib} and
then overrides the previous definition of @samp{lib} with a new one.
The new definition adds in some extra command-line options before
including the text of the old definition.

@dfn{Spec strings} are a list of command-line options to be passed to their
corresponding program.  In addition, the spec strings can contain
@samp{%}-prefixed sequences to substitute variable text or to
conditionally insert text into the command line.  Using these constructs
it is possible to generate quite complex command lines.

Here is a table of all defined @samp{%}-sequences for spec
strings.  Note that spaces are not generated automatically around the
results of expanding these sequences.  Therefore you can concatenate them
together or combine them with constant text in a single argument.

@table @code
@item %%
Substitute one @samp{%} into the program name or argument.

@item %"
Substitute an empty argument.

@item %i
Substitute the name of the input file being processed.

@item %b
Substitute the basename for outputs related with the input file being
processed.  This is often the substring up to (and not including) the
last period and not including the directory but, unless %w is active, it
expands to the basename for auxiliary outputs, which may be influenced
by an explicit output name, and by various other options that control
how auxiliary outputs are named.

@item %B
This is the same as @samp{%b}, but include the file suffix (text after
the last period).  Without %w, it expands to the basename for dump
outputs.

@item %d
Marks the argument containing or following the @samp{%d} as a
temporary file name, so that that file is deleted if GCC exits
successfully.  Unlike @samp{%g}, this contributes no text to the
argument.

@item %g@var{suffix}
Substitute a file name that has suffix @var{suffix} and is chosen
once per compilation, and mark the argument in the same way as
@samp{%d}.  To reduce exposure to denial-of-service attacks, the file
name is now chosen in a way that is hard to predict even when previously
chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
was simply substituted with a file name chosen once per compilation,
without regard to any appended suffix (which was therefore treated
just like ordinary text), making such attacks more likely to succeed.

@item %u@var{suffix}
Like @samp{%g}, but generates a new temporary file name
each time it appears instead of once per compilation.

@item %U@var{suffix}
Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
new one if there is no such last file name.  In the absence of any
@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
involves the generation of two distinct file names, one
for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
simply substituted with a file name chosen for the previous @samp{%u},
without regard to any appended suffix.

@item %j@var{suffix}
Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
writable, and if @option{-save-temps} is not used; 
otherwise, substitute the name
of a temporary file, just like @samp{%u}.  This temporary file is not
meant for communication between processes, but rather as a junk
disposal mechanism.

@item %|@var{suffix}
@itemx %m@var{suffix}
Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
all.  These are the two most common ways to instruct a program that it
should read from standard input or write to standard output.  If you
need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
construct: see for example @file{gcc/fortran/lang-specs.h}.

@item %.@var{SUFFIX}
Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
terminated by the next space or %.

@item %w
Marks the argument containing or following the @samp{%w} as the
designated output file of this compilation.  This puts the argument
into the sequence of arguments that @samp{%o} substitutes.

@item %V
Indicates that this compilation produces no output file.

@item %o
Substitutes the names of all the output files, with spaces
automatically placed around them.  You should write spaces
around the @samp{%o} as well or the results are undefined.
@samp{%o} is for use in the specs for running the linker.
Input files whose names have no recognized suffix are not compiled
at all, but they are included among the output files, so they are
linked.

@item %O
Substitutes the suffix for object files.  Note that this is
handled specially when it immediately follows @samp{%g, %u, or %U},
because of the need for those to form complete file names.  The
handling is such that @samp{%O} is treated exactly as if it had already
been substituted, except that @samp{%g, %u, and %U} do not currently
support additional @var{suffix} characters following @samp{%O} as they do
following, for example, @samp{.o}.

@item %I
Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
and @option{-imultilib} as necessary.

@item %s
Current argument is the name of a library or startup file of some sort.
Search for that file in a standard list of directories and substitute
the full name found.  The current working directory is included in the
list of directories scanned.

@item %T
Current argument is the name of a linker script.  Search for that file
in the current list of directories to scan for libraries. If the file
is located insert a @option{--script} option into the command line
followed by the full path name found.  If the file is not found then
generate an error message.  Note: the current working directory is not
searched.

@item %e@var{str}
Print @var{str} as an error message.  @var{str} is terminated by a newline.
Use this when inconsistent options are detected.

@item %n@var{str}
Print @var{str} as a notice.  @var{str} is terminated by a newline.

@item %(@var{name})
Substitute the contents of spec string @var{name} at this point.

@item %x@{@var{option}@}
Accumulate an option for @samp{%X}.

@item %X
Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
spec string.

@item %Y
Output the accumulated assembler options specified by @option{-Wa}.

@item %Z
Output the accumulated preprocessor options specified by @option{-Wp}.

@item %M
Output @code{multilib_os_dir}.

@item %R
Output the concatenation of @code{target_system_root} and @code{target_sysroot_suffix}.

@item %a
Process the @code{asm} spec.  This is used to compute the
switches to be passed to the assembler.

@item %A
Process the @code{asm_final} spec.  This is a spec string for
passing switches to an assembler post-processor, if such a program is
needed.

@item %l
Process the @code{link} spec.  This is the spec for computing the
command line passed to the linker.  Typically it makes use of the
@samp{%L %G %S %D and %E} sequences.

@item %D
Dump out a @option{-L} option for each directory that GCC believes might
contain startup files.  If the target supports multilibs then the
current multilib directory is prepended to each of these paths.

@item %L
Process the @code{lib} spec.  This is a spec string for deciding which
libraries are included on the command line to the linker.

@item %G
Process the @code{libgcc} spec.  This is a spec string for deciding
which GCC support library is included on the command line to the linker.

@item %S
Process the @code{startfile} spec.  This is a spec for deciding which
object files are the first ones passed to the linker.  Typically
this might be a file named @file{crt0.o}.

@item %E
Process the @code{endfile} spec.  This is a spec string that specifies
the last object files that are passed to the linker.

@item %C
Process the @code{cpp} spec.  This is used to construct the arguments
to be passed to the C preprocessor.

@item %1
Process the @code{cc1} spec.  This is used to construct the options to be
passed to the actual C compiler (@command{cc1}).

@item %2
Process the @code{cc1plus} spec.  This is used to construct the options to be
passed to the actual C++ compiler (@command{cc1plus}).

@item %*
Substitute the variable part of a matched option.  See below.
Note that each comma in the substituted string is replaced by
a single space.

@item %<S
Remove all occurrences of @code{-S} from the command line.  Note---this
command is position dependent.  @samp{%} commands in the spec string
before this one see @code{-S}, @samp{%} commands in the spec string
after this one do not.

@item %<S*
Similar to @samp{%<S}, but match all switches beginning with @code{-S}.

@item %>S
Similar to @samp{%<S}, but keep @code{-S} in the GCC command line.

@item %:@var{function}(@var{args})
Call the named function @var{function}, passing it @var{args}.
@var{args} is first processed as a nested spec string, then split
into an argument vector in the usual fashion.  The function returns
a string which is processed as if it had appeared literally as part
of the current spec.

The following built-in spec functions are provided:

@table @code
@item @code{getenv}
The @code{getenv} spec function takes two arguments: an environment
variable name and a string.  If the environment variable is not
defined, a fatal error is issued.  Otherwise, the return value is the
value of the environment variable concatenated with the string.  For
example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:

@smallexample
%:getenv(TOPDIR /include)
@end smallexample

expands to @file{/path/to/top/include}.

@item @code{if-exists}
The @code{if-exists} spec function takes one argument, an absolute
pathname to a file.  If the file exists, @code{if-exists} returns the
pathname.  Here is a small example of its usage:

@smallexample
*startfile:
crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
@end smallexample

@item @code{if-exists-else}
The @code{if-exists-else} spec function is similar to the @code{if-exists}
spec function, except that it takes two arguments.  The first argument is
an absolute pathname to a file.  If the file exists, @code{if-exists-else}
returns the pathname.  If it does not exist, it returns the second argument.
This way, @code{if-exists-else} can be used to select one file or another,
based on the existence of the first.  Here is a small example of its usage:

@smallexample
*startfile:
crt0%O%s %:if-exists(crti%O%s) \
%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
@end smallexample

@item @code{if-exists-then-else}
The @code{if-exists-then-else} spec function takes at least two arguments
and an optional third one. The first argument is an absolute pathname to a
file.  If the file exists, the function returns the second argument.
If the file does not exist, the function returns the third argument if there
is one, or NULL otherwise. This can be used to expand one text, or optionally
another, based on the existence of a file.  Here is a small example of its
usage:

@smallexample
-l%:if-exists-then-else(%:getenv(VSB_DIR rtnet.h) rtnet net)
@end smallexample

@item @code{sanitize}
The @code{sanitize} spec function takes no arguments.  It returns non-NULL if
any address, thread or undefined behavior sanitizers are active.

@smallexample
%@{%:sanitize(address):-funwind-tables@}
@end smallexample

@item @code{replace-outfile}
The @code{replace-outfile} spec function takes two arguments.  It looks for the
first argument in the outfiles array and replaces it with the second argument.  Here
is a small example of its usage:

@smallexample
%@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
@end smallexample

@item @code{remove-outfile}
The @code{remove-outfile} spec function takes one argument.  It looks for the
first argument in the outfiles array and removes it.  Here is a small example
its usage:

@smallexample
%:remove-outfile(-lm)
@end smallexample

@item @code{version-compare}
The @code{version-compare} spec function takes four or five arguments of the following
form:

@smallexample
<comparison-op> <arg1> [<arg2>] <switch> <result>
@end smallexample

It returns @code{result} if the comparison evaluates to true, and NULL if it doesn't.
The supported @code{comparison-op} values are:

@table @code
@item >=
True if @code{switch} is a later (or same) version than @code{arg1}

@item !>
Opposite of @code{>=}

@item <
True if @code{switch} is an earlier version than @code{arg1}

@item !<
Opposite of @code{<}

@item ><
True if @code{switch} is @code{arg1} or later, and earlier than @code{arg2}

@item <>
True if @code{switch} is earlier than @code{arg1}, or is @code{arg2} or later
@end table

If the @code{switch} is not present at all, the condition is false unless the first character
of the @code{comparison-op} is @code{!}.

@smallexample
%:version-compare(>= 10.3 mmacosx-version-min= -lmx)
@end smallexample

The above example would add @option{-lmx} if @option{-mmacosx-version-min=10.3.9} was
passed.

@item @code{include}
The @code{include} spec function behaves much like @code{%include}, with the advantage
that it can be nested inside a spec and thus be conditionalized.  It takes one argument,
the filename, and looks for it in the startfile path.  It always returns NULL.

@smallexample
%@{static-libasan|static:%:include(libsanitizer.spec)%(link_libasan)@}
@end smallexample

@item @code{pass-through-libs}
The @code{pass-through-libs} spec function takes any number of arguments.  It
finds any @option{-l} options and any non-options ending in @file{.a} (which it
assumes are the names of linker input library archive files) and returns a
result containing all the found arguments each prepended by
@option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
intended to be passed to the LTO linker plugin.

@smallexample
%:pass-through-libs(%G %L %G)
@end smallexample

@item @code{print-asm-header}
The @code{print-asm-header} function takes no arguments and simply
prints a banner like:

@smallexample
Assembler options
=================

Use "-Wa,OPTION" to pass "OPTION" to the assembler.
@end smallexample

It is used to separate compiler options from assembler options
in the @option{--target-help} output.

@item @code{gt}
The @code{gt} spec function takes two or more arguments.  It returns @code{""} (the
empty string) if the second-to-last argument is greater than the last argument, and NULL
otherwise.  The following example inserts the @code{link_gomp} spec if the last
@option{-ftree-parallelize-loops=} option given on the command line is greater than 1:

@smallexample
%@{%:gt(%@{ftree-parallelize-loops=*:%*@} 1):%:include(libgomp.spec)%(link_gomp)@}
@end smallexample

@item @code{debug-level-gt}
The @code{debug-level-gt} spec function takes one argument and returns @code{""} (the
empty string) if @code{debug_info_level} is greater than the specified number, and NULL
otherwise.

@smallexample
%@{%:debug-level-gt(0):%@{gdwarf*:--gdwarf2@}@}
@end smallexample
@end table

@item %@{S@}
Substitutes the @code{-S} switch, if that switch is given to GCC@.
If that switch is not specified, this substitutes nothing.  Note that
the leading dash is omitted when specifying this option, and it is
automatically inserted if the substitution is performed.  Thus the spec
string @samp{%@{foo@}} matches the command-line option @option{-foo}
and outputs the command-line option @option{-foo}.

@item %W@{S@}
Like %@{@code{S}@} but mark last argument supplied within as a file to be
deleted on failure.

@item %@@@{S@}
Like %@{@code{S}@} but puts the result into a @code{FILE} and substitutes
@code{@@FILE} if an @code{@@file} argument has been supplied.

@item %@{S*@}
Substitutes all the switches specified to GCC whose names start
with @code{-S}, but which also take an argument.  This is used for
switches like @option{-o}, @option{-D}, @option{-I}, etc.
GCC considers @option{-o foo} as being
one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
text, including the space.  Thus two arguments are generated.

@item %@{S*&T*@}
Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
(the order of @code{S} and @code{T} in the spec is not significant).
There can be any number of ampersand-separated variables; for each the
wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.

@item %@{S:X@}
Substitutes @code{X}, if the @option{-S} switch is given to GCC@.

@item %@{!S:X@}
Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.

@item %@{S*:X@}
Substitutes @code{X} if one or more switches whose names start with
@code{-S} are specified to GCC@.  Normally @code{X} is substituted only
once, no matter how many such switches appeared.  However, if @code{%*}
appears somewhere in @code{X}, then @code{X} is substituted once
for each matching switch, with the @code{%*} replaced by the part of
that switch matching the @code{*}.

If @code{%*} appears as the last part of a spec sequence then a space
is added after the end of the last substitution.  If there is more
text in the sequence, however, then a space is not generated.  This
allows the @code{%*} substitution to be used as part of a larger
string.  For example, a spec string like this:

@smallexample
%@{mcu=*:--script=%*/memory.ld@}
@end smallexample

@noindent
when matching an option like @option{-mcu=newchip} produces:

@smallexample
--script=newchip/memory.ld
@end smallexample

@item %@{.S:X@}
Substitutes @code{X}, if processing a file with suffix @code{S}.

@item %@{!.S:X@}
Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.

@item %@{,S:X@}
Substitutes @code{X}, if processing a file for language @code{S}.

@item %@{!,S:X@}
Substitutes @code{X}, if not processing a file for language @code{S}.

@item %@{S|P:X@}
Substitutes @code{X} if either @code{-S} or @code{-P} is given to
GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
@code{*} sequences as well, although they have a stronger binding than
the @samp{|}.  If @code{%*} appears in @code{X}, all of the
alternatives must be starred, and only the first matching alternative
is substituted.

For example, a spec string like this:

@smallexample
%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
@end smallexample

@noindent
outputs the following command-line options from the following input
command-line options:

@smallexample
fred.c        -foo -baz
jim.d         -bar -boggle
-d fred.c     -foo -baz -boggle
-d jim.d      -bar -baz -boggle
@end smallexample

@item %@{%:@var{function}(@var{args}):X@}

Call function named @var{function} with args @var{args}.  If the
function returns non-NULL, then @code{X} is substituted, if it returns
NULL, it isn't substituted.

@item %@{S:X; T:Y; :D@}

If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
be as many clauses as you need.  This may be combined with @code{.},
@code{,}, @code{!}, @code{|}, and @code{*} as needed.


@end table

The switch matching text @code{S} in a @samp{%@{S@}}, @samp{%@{S:X@}}
or similar construct can use a backslash to ignore the special meaning
of the character following it, thus allowing literal matching of a
character that is otherwise specially treated.  For example,
@samp{%@{std=iso9899\:1999:X@}} substitutes @code{X} if the
@option{-std=iso9899:1999} option is given.

The conditional text @code{X} in a @samp{%@{S:X@}} or similar
construct may contain other nested @samp{%} constructs or spaces, or
even newlines.  They are processed as usual, as described above.
Trailing white space in @code{X} is ignored.  White space may also
appear anywhere on the left side of the colon in these constructs,
except between @code{.} or @code{*} and the corresponding word.

The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
handled specifically in these constructs.  If another value of
@option{-O} or the negated form of a @option{-f}, @option{-m}, or
@option{-W} switch is found later in the command line, the earlier
switch value is ignored, except with @{@code{S}*@} where @code{S} is
just one letter, which passes all matching options.

The character @samp{|} at the beginning of the predicate text is used to
indicate that a command should be piped to the following command, but
only if @option{-pipe} is specified.

It is built into GCC which switches take arguments and which do not.
(You might think it would be useful to generalize this to allow each
compiler's spec to say which switches take arguments.  But this cannot
be done in a consistent fashion.  GCC cannot even decide which input
files have been specified without knowing which switches take arguments,
and it must know which input files to compile in order to tell which
compilers to run).

GCC also knows implicitly that arguments starting in @option{-l} are to be
treated as compiler output files, and passed to the linker in their
proper position among the other output files.

@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
aspects of the compilation environment.

Note that you can also specify places to search using options such as
@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
take precedence over places specified using environment variables, which
in turn take precedence over those specified by the configuration of GCC@.
@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
GNU Compiler Collection (GCC) Internals}.

@table @env
@item LANG
@itemx LC_CTYPE
@c @itemx LC_COLLATE
@itemx LC_MESSAGES
@c @itemx LC_MONETARY
@c @itemx LC_NUMERIC
@c @itemx LC_TIME
@itemx LC_ALL
@findex LANG
@findex LC_CTYPE
@c @findex LC_COLLATE
@findex LC_MESSAGES
@c @findex LC_MONETARY
@c @findex LC_NUMERIC
@c @findex LC_TIME
@findex LC_ALL
@cindex locale
These environment variables control the way that GCC uses
localization information which allows GCC to work with different
national conventions.  GCC inspects the locale categories
@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_GB.UTF-8} for English in the United
Kingdom encoded in UTF-8.

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 are otherwise interpreted as a string
end or escape.

The @env{LC_MESSAGES} environment variable specifies the language to
use in diagnostic messages.

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

@item GCC_COMPARE_DEBUG
@findex GCC_COMPARE_DEBUG
Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
@option{-fcompare-debug} to the compiler driver.  See the documentation
of this option for more details.

@item GCC_EXEC_PREFIX
@findex GCC_EXEC_PREFIX
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 @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
an appropriate prefix to use based on the pathname it is 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 @env{GCC_EXEC_PREFIX} is
@file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
the installed compiler. In many cases @var{prefix} is the value
of @code{prefix} when you ran the @file{configure} script.

Other prefixes specified with @option{-B} take precedence over this prefix.

This prefix is also used for finding files such as @file{crt0.o} that are
used for linking.

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}
(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 @option{-Bfoo/}, GCC searches
@file{foo/bar} just before it searches the standard directory 
@file{/usr/local/lib/bar}.
If a standard directory begins with the configured
@var{prefix} then the value of @var{prefix} is replaced by
@env{GCC_EXEC_PREFIX} when looking for header files.

@item COMPILER_PATH
@findex COMPILER_PATH
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 cannot find the
subprograms using @env{GCC_EXEC_PREFIX}.

@item LIBRARY_PATH
@findex LIBRARY_PATH
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 cannot find them using @env{GCC_EXEC_PREFIX}.  Linking
using GCC also uses these directories when searching for ordinary
libraries for the @option{-l} option (but directories specified with
@option{-L} come first).

@item LANG
@findex LANG
@cindex locale definition
This variable is used to pass locale information to the compiler.  One way in
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 @env{LANG} are recognized:

@table @samp
@item C-JIS
Recognize JIS characters.
@item C-SJIS
Recognize SJIS characters.
@item C-EUCJP
Recognize EUCJP characters.
@end table

If @env{LANG} is not defined, or if it has some other value, then the
compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
recognize and translate multibyte characters.

@item GCC_EXTRA_DIAGNOSTIC_OUTPUT
@findex GCC_EXTRA_DIAGNOSTIC_OUTPUT
If @env{GCC_EXTRA_DIAGNOSTIC_OUTPUT} is set to one of the following values,
then additional text will be emitted to stderr when fix-it hints are
emitted.  @option{-fdiagnostics-parseable-fixits} and
@option{-fno-diagnostics-parseable-fixits} take precedence over this
environment variable.

@table @samp
@item fixits-v1
Emit parseable fix-it hints, equivalent to
@option{-fdiagnostics-parseable-fixits}.  In particular, columns are
expressed as a count of bytes, starting at byte 1 for the initial column.

@item fixits-v2
As @code{fixits-v1}, but columns are expressed as display columns,
as per @option{-fdiagnostics-column-unit=display}.
@end table

@end table

@noindent
Some additional environment variables affect the behavior of the
preprocessor.

@include cppenv.texi

@c man end

@node Precompiled Headers
@section Using Precompiled Headers
@cindex precompiled headers
@cindex speed of compilation

Often large projects have many header files that are included in every
source file.  The time the compiler takes to process these header files
over and over again can account for nearly all of the time required to
build the project.  To make builds faster, GCC allows you to
@dfn{precompile} a header file.

To create a precompiled header file, simply compile it as you would any
other file, if necessary using the @option{-x} option to make the driver
treat it as a C or C++ header file.  You may want to use a
tool like @command{make} to keep the precompiled header up-to-date when
the headers it contains change.

A precompiled header file is searched for when @code{#include} is
seen in the compilation.  As it searches for the included file
(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
compiler looks for a precompiled header in each directory just before it
looks for the include file in that directory.  The name searched for is
the name specified in the @code{#include} with @samp{.gch} appended.  If
the precompiled header file cannot be used, it is ignored.

For instance, if you have @code{#include "all.h"}, and you have
@file{all.h.gch} in the same directory as @file{all.h}, then the
precompiled header file is used if possible, and the original
header is used otherwise.

Alternatively, you might decide to put the precompiled header file in a
directory and use @option{-I} to ensure that directory is searched
before (or instead of) the directory containing the original header.
Then, if you want to check that the precompiled header file is always
used, you can put a file of the same name as the original header in this
directory containing an @code{#error} command.

This also works with @option{-include}.  So yet another way to use
precompiled headers, good for projects not designed with precompiled
header files in mind, is to simply take most of the header files used by
a project, include them from another header file, precompile that header
file, and @option{-include} the precompiled header.  If the header files
have guards against multiple inclusion, they are skipped because
they've already been included (in the precompiled header).

If you need to precompile the same header file for different
languages, targets, or compiler options, you can instead make a
@emph{directory} named like @file{all.h.gch}, and put each precompiled
header in the directory, perhaps using @option{-o}.  It doesn't matter
what you call the files in the directory; every precompiled header in
the directory is considered.  The first precompiled header
encountered in the directory that is valid for this compilation is
used; they're searched in no particular order.

There are many other possibilities, limited only by your imagination,
good sense, and the constraints of your build system.

A precompiled header file can be used only when these conditions apply:

@itemize
@item
Only one precompiled header can be used in a particular compilation.

@item
A precompiled header cannot be used once the first C token is seen.  You
can have preprocessor directives before a precompiled header; you cannot
include a precompiled header from inside another header.

@item
The precompiled header file must be produced for the same language as
the current compilation.  You cannot use a C precompiled header for a C++
compilation.

@item
The precompiled header file must have been produced by the same compiler
binary as the current compilation is using.

@item
Any macros defined before the precompiled header is included must
either be defined in the same way as when the precompiled header was
generated, or must not affect the precompiled header, which usually
means that they don't appear in the precompiled header at all.

The @option{-D} option is one way to define a macro before a
precompiled header is included; using a @code{#define} can also do it.
There are also some options that define macros implicitly, like
@option{-O} and @option{-Wdeprecated}; the same rule applies to macros
defined this way.

@item If debugging information is output when using the precompiled
header, using @option{-g} or similar, the same kind of debugging information
must have been output when building the precompiled header.  However,
a precompiled header built using @option{-g} can be used in a compilation
when no debugging information is being output.

@item The same @option{-m} options must generally be used when building
and using the precompiled header.  @xref{Submodel Options},
for any cases where this rule is relaxed.

@item Each of the following options must be the same when building and using
the precompiled header:

@gccoptlist{-fexceptions}

@item
Some other command-line options starting with @option{-f},
@option{-p}, or @option{-O} must be defined in the same way as when
the precompiled header was generated.  At present, it's not clear
which options are safe to change and which are not; the safest choice
is to use exactly the same options when generating and using the
precompiled header.  The following are known to be safe:

@gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
-fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
-fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
-pedantic-errors}

@item Address space layout randomization (ASLR) can lead to not binary identical
PCH files.  If you rely on stable PCH file contents disable ASLR when generating
PCH files.

@end itemize

For all of these except the last, the compiler automatically
ignores the precompiled header if the conditions aren't met.  If you
find an option combination that doesn't work and doesn't cause the
precompiled header to be ignored, please consider filing a bug report,
see @ref{Bugs}.

If you do use differing options when generating and using the
precompiled header, the actual behavior is a mixture of the
behavior for the options.  For instance, if you use @option{-g} to
generate the precompiled header but not when using it, you may or may
not get debugging information for routines in the precompiled header.

@node C++ Modules
@section C++ Modules
@cindex speed of compilation

Modules are a C++20 language feature.  As the name suggests, they
provides a modular compilation system, intending to provide both
faster builds and better library isolation.  The ``Merging Modules''
paper @uref{https://wg21.link/p1103}, provides the easiest to read set
of changes to the standard, although it does not capture later
changes.  That specification is now part of C++20,
@uref{git@@github.com:cplusplus/draft.git}, it is considered complete
(there may be defect reports to come).

@emph{G++'s modules support is not complete.}  Other than bugs, the
known missing pieces are:

@table @emph

@item Private Module Fragment
The Private Module Fragment is recognized, but an error is emitted.

@item Partition definition visibility rules
Entities may be defined in implementation partitions, and those
definitions are not available outside of the module.  This is not
implemented, and the definitions are available to extra-module use.

@item Textual merging of reachable GM entities
Entities may be multiply defined across different header-units.
These must be de-duplicated, and this is implemented across imports,
or when an import redefines a textually-defined entity.  However the
reverse is not implemented---textually redefining an entity that has
been defined in an imported header-unit.  A redefinition error is
emitted.

@item Translation-Unit local referencing rules
Papers p1815 (@uref{https://wg21.link/p1815}) and p2003
(@uref{https://wg21.link/p2003}) add limitations on which entities an
exported region may reference (for instance, the entities an exported
template definition may reference).  These are not fully implemented.

@item Language-linkage module attachment
Declarations with explicit language linkage (@code{extern "C"} or
@code{extern "C++"}) are attached to the global module, even when in
the purview of a named module.  This is not implemented.  Such
declarations will be attached to the module, if any, in which they are
declared.

@item Standard Library Header Units
The Standard Library is not provided as importable header units.  If
you want to import such units, you must explicitly build them first.
If you do not do this with care, you may have multiple declarations,
which the module machinery must merge---compiler resource usage can be
affected by how you partition header files into header units.

@end table

Modular compilation is @emph{not} enabled with just the
@option{-std=c++20} option.  You must explicitly enable it with the
@option{-fmodules-ts} option.  It is independent of the language
version selected, although in pre-C++20 versions, it is of course an
extension.

No new source file suffixes are required or supported.  If you wish to
use a non-standard suffix (@pxref{Overall Options}), you also need
to provide a @option{-x c++} option too.@footnote{Some users like to
distinguish module interface files with a new suffix, such as naming
the source @code{module.cppm}, which involves
teaching all tools about the new suffix.  A different scheme, such as
naming @code{module-m.cpp} would be less invasive.}

Compiling a module interface unit produces an additional output (to
the assembly or object file), called a Compiled Module Interface
(CMI).  This encodes the exported declarations of the module.
Importing a module reads in the CMI.  The import graph is a Directed
Acyclic Graph (DAG).  You must build imports before the importer.

Header files may themselves be compiled to header units, which are a
transitional ability aiming at faster compilation.  The
@option{-fmodule-header} option is used to enable this, and implies
the @option{-fmodules-ts} option.  These CMIs are named by the fully
resolved underlying header file, and thus may be a complete pathname
containing subdirectories.  If the header file is found at an absolute
pathname, the CMI location is still relative to a CMI root directory.

As header files often have no suffix, you commonly have to specify a
@option{-x} option to tell the compiler the source is a header file.
You may use @option{-x c++-header}, @option{-x c++-user-header} or
@option{-x c++-system-header}.  When used in conjunction with
@option{-fmodules-ts}, these all imply an appropriate
@option{-fmodule-header} option.  The latter two variants use the
user or system include path to search for the file specified.  This
allows you to, for instance, compile standard library header files as
header units, without needing to know exactly where they are
installed.  Specifying the language as one of these variants also
inhibits output of the object file, as header files have no associated
object file.

The @option{-fmodule-only} option disables generation of the
associated object file for compiling a module interface.  Only the CMI
is generated.  This option is implied when using the
@option{-fmodule-header} option.

The @option{-flang-info-include-translate} and
@option{-flang-info-include-translate-not} options notes whether
include translation occurs or not.  With no argument, the first will
note all include translation.  The second will note all
non-translations of include files not known to intentionally be
textual.  With an argument, queries about include translation of a
header files with that particular trailing pathname are noted.  You
may repeat this form to cover several different header files.  This
option may be helpful in determining whether include translation is
happening---if it is working correctly, it behaves as if it isn't
there at all.

The @option{-flang-info-module-cmi} option can be used to determine
where the compiler is reading a CMI from.  Without the option, the
compiler is silent when such a read is successful.  This option has an
optional argument, which will restrict the notification to just the
set of named modules or header units specified.

The @option{-Winvalid-imported-macros} option causes all imported macros
to be resolved at the end of compilation.  Without this, imported
macros are only resolved when expanded or (re)defined.  This option
detects conflicting import definitions for all macros.

For details of the @option{-fmodule-mapper} family of options,
@pxref{C++ Module Mapper}.

@menu
* C++ Module Mapper::       Module Mapper
* C++ Module Preprocessing::  Module Preprocessing
* C++ Compiled Module Interface:: Compiled Module Interface
@end menu

@node C++ Module Mapper
@subsection Module Mapper
@cindex C++ Module Mapper

A module mapper provides a server or file that the compiler queries to
determine the mapping between module names and CMI files.  It is also
used to build CMIs on demand.  @emph{Mapper functionality is in its
infancy and is intended for experimentation with build system
interactions.}

You can specify a mapper with the @option{-fmodule-mapper=@var{val}}
option or @env{CXX_MODULE_MAPPER} environment variable.  The value may
have one of the following forms:

@table @gcctabopt

@item @r{[}@var{hostname}@r{]}:@var{port}@r{[}?@var{ident}@r{]}
An optional hostname and a numeric port number to connect to.  If the
hostname is omitted, the loopback address is used.  If the hostname
corresponds to multiple IPV6 addresses, these are tried in turn, until
one is successful.  If your host lacks IPv6, this form is
non-functional.  If you must use IPv4 use
@option{-fmodule-mapper='|ncat @var{ipv4host} @var{port}'}.

@item =@var{socket}@r{[}?@var{ident}@r{]}
A local domain socket.  If your host lacks local domain sockets, this
form is non-functional.

@item |@var{program}@r{[}?@var{ident}@r{]} @r{[}@var{args...}@r{]}
A program to spawn, and communicate with on its stdin/stdout streams.
Your @var{PATH} environment variable is searched for the program.
Arguments are separated by space characters, (it is not possible for
one of the arguments delivered to the program to contain a space).  An
exception is if @var{program} begins with @@.  In that case
@var{program} (sans @@) is looked for in the compiler's internal
binary directory.  Thus the sample mapper-server can be specified
with @code{@@g++-mapper-server}.

@item <>@r{[}?@var{ident}@r{]}
@item <>@var{inout}@r{[}?@var{ident}@r{]}
@item <@var{in}>@var{out}@r{[}?@var{ident}@r{]}
Named pipes or file descriptors to communicate over.  The first form,
@option{<>}, communicates over stdin and stdout.  The other forms
allow you to specify a file descriptor or name a pipe.  A numeric value
is interpreted as a file descriptor, otherwise named pipe is opened.
The second form specifies a bidirectional pipe and the last form
allows specifying two independent pipes.  Using file descriptors
directly in this manner is fragile in general, as it can require the
cooperation of intermediate processes.  In particular using stdin &
stdout is fraught with danger as other compiler options might also
cause the compiler to read stdin or write stdout, and it can have
unfortunate interactions with signal delivery from the terminal.

@item @var{file}@r{[}?@var{ident}@r{]}
A mapping file consisting of space-separated module-name, filename
pairs, one per line.  Only the mappings for the direct imports and any
module export name need be provided.  If other mappings are provided,
they override those stored in any imported CMI files.  A repository
root may be specified in the mapping file by using @samp{$root} as the
module name in the first active line.  Use of this option will disable
any default module->CMI name mapping.

@end table

As shown, an optional @var{ident} may suffix the first word of the
option, indicated by a @samp{?} prefix.  The value is used in the
initial handshake with the module server, or to specify a prefix on
mapping file lines.  In the server case, the main source file name is
used if no @var{ident} is specified.  In the file case, all non-blank
lines are significant, unless a value is specified, in which case only
lines beginning with @var{ident} are significant.  The @var{ident}
must be separated by whitespace from the module name.  Be aware that
@samp{<}, @samp{>}, @samp{?}, and @samp{|} characters are often
significant to the shell, and therefore may need quoting.

The mapper is connected to or loaded lazily, when the first module
mapping is required.  The networking protocols are only supported on
hosts that provide networking.  If no mapper is specified a default is
provided.

A project-specific mapper is expected to be provided by the build
system that invokes the compiler.  It is not expected that a
general-purpose server is provided for all compilations.  As such, the
server will know the build configuration, the compiler it invoked, and
the environment (such as working directory) in which that is
operating.  As it may parallelize builds, several compilations may
connect to the same socket.

The default mapper generates CMI files in a @samp{gcm.cache}
directory.  CMI files have a @samp{.gcm} suffix.  The module unit name
is used directly to provide the basename.  Header units construct a
relative path using the underlying header file name.  If the path is
already relative, a @samp{,} directory is prepended.  Internal
@samp{..} components are translated to @samp{,,}.  No attempt is made
to canonicalize these filenames beyond that done by the preprocessor's
include search algorithm, as in general it is ambiguous when symbolic
links are present.

The mapper protocol was published as ``A Module Mapper''
@uref{https://wg21.link/p1184}.  The implementation is provided by
@command{libcody}, @uref{https://github.com/urnathan/libcody},
which specifies the canonical protocol definition.  A proof of concept
server implementation embedded in @command{make} was described in
''Make Me A Module'', @uref{https://wg21.link/p1602}.

@node C++ Module Preprocessing
@subsection Module Preprocessing
@cindex C++ Module Preprocessing

Modules affect preprocessing because of header units and include
translation.  Some uses of the preprocessor as a separate step either
do not produce a correct output, or require CMIs to be available.

Header units import macros.  These macros can affect later conditional
inclusion, which therefore can cascade to differing import sets.  When
preprocessing, it is necessary to load the CMI.  If a header unit is
unavailable, the preprocessor issues a warning and continue (when
not just preprocessing, an error is emitted).  Detecting such imports
requires preprocessor tokenization of the input stream to phase 4
(macro expansion).

Include translation converts @code{#include}, @code{#include_next} and
@code{#import} directives to internal @code{import} declarations.
Whether a particular directive is translated is controlled by the
module mapper.  Header unit names are canonicalized during
preprocessing.

Dependency information can be emitted for macro import, extending the
functionality of @option{-MD} and @option{-MMD} options.  Detection of
import declarations also requires phase 4 preprocessing, and thus
requires full preprocessing (or compilation).

The @option{-M}, @option{-MM} and @option{-E -fdirectives-only} options halt
preprocessing before phase 4.

The @option{-save-temps} option uses @option{-fdirectives-only} for
preprocessing, and preserve the macro definitions in the preprocessed
output.  Usually you also want to use this option when explicitly
preprocessing a header-unit, or consuming such preprocessed output:

@smallexample
g++ -fmodules-ts -E -fdirectives-only my-header.hh -o my-header.ii
g++ -x c++-header -fmodules-ts -fpreprocessed -fdirectives-only my-header.ii
@end smallexample

@node C++ Compiled Module Interface
@subsection Compiled Module Interface
@cindex C++ Compiled Module Interface

CMIs are an additional artifact when compiling named module
interfaces, partitions or header units.  These are read when
importing.  CMI contents are implementation-specific, and in GCC's
case tied to the compiler version.  Consider them a rebuildable cache
artifact, not a distributable object.

When creating an output CMI, any missing directory components are
created in a manner that is safe for concurrent builds creating
multiple, different, CMIs within a common subdirectory tree.

CMI contents are written to a temporary file, which is then atomically
renamed.  Observers either see old contents (if there is an
existing file), or complete new contents.  They do not observe the
CMI during its creation.  This is unlike object file writing, which
may be observed by an external process.

CMIs are read in lazily, if the host OS provides @code{mmap}
functionality.  Generally blocks are read when name lookup or template
instantiation occurs.  To inhibit this, the @option{-fno-module-lazy}
option may be used.

The @option{--param lazy-modules=@var{n}} parameter controls the limit
on the number of concurrently open module files during lazy loading.
Should more modules be imported, an LRU algorithm is used to determine
which files to close---until that file is needed again.  This limit
may be exceeded with deep module dependency hierarchies.  With large
code bases there may be more imports than the process limit of file
descriptors.  By default, the limit is a few less than the per-process
file descriptor hard limit, if that is determinable.@footnote{Where
applicable the soft limit is incremented as needed towards the hard limit.}

GCC CMIs use ELF32 as an architecture-neutral encapsulation mechanism.
You may use @command{readelf} to inspect them, although section
contents are largely undecipherable.  There is a section named
@code{.gnu.c++.README}, which contains human-readable text.  Other
than the first line, each line consists of @code{@var{tag}: @code{value}}
tuples.

@smallexample
> @command{readelf -p.gnu.c++.README gcm.cache/foo.gcm}

String dump of section '.gnu.c++.README':
  [     0]  GNU C++ primary module interface
  [    21]  compiler: 11.0.0 20201116 (experimental) [c++-modules revision 20201116-0454]
  [    6f]  version: 2020/11/16-04:54
  [    89]  module: foo
  [    95]  source: c_b.ii
  [    a4]  dialect: C++20/coroutines
  [    be]  cwd: /data/users/nathans/modules/obj/x86_64/gcc
  [    ee]  repository: gcm.cache
  [   104]  buildtime: 2020/11/16 15:03:21 UTC
  [   127]  localtime: 2020/11/16 07:03:21 PST
  [   14a]  export: foo:part1 foo-part1.gcm
@end smallexample

Amongst other things, this lists the source that was built, C++
dialect used and imports of the module.@footnote{The precise contents
of this output may change.} The timestamp is the same value as that
provided by the @code{__DATE__} & @code{__TIME__} macros, and may be
explicitly specified with the environment variable
@code{SOURCE_DATE_EPOCH}.  For further details
@pxref{Environment Variables}.

A set of related CMIs may be copied, provided the relative pathnames
are preserved.

The @code{.gnu.c++.README} contents do not affect CMI integrity, and
it may be removed or altered.  The section numbering of the sections
whose names do not begin with @code{.gnu.c++.}, or are not the string
section is significant and must not be altered.
