@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  -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} @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 (@xref{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-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-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 memory addresses. These include using
the address of a function in a conditional expression, such as
@code{void func(void); if (func)}, and comparisons against the memory
address of a string literal, such as @code{if (x == "abc")}.  Such
uses typically indicate a programmer error: the address of a function
always evaluates to true, so their use in a conditional usually
indicate that the programmer forgot the parentheses in a function
call; and comparisons against string literals result in unspecified
behavior and are not portable in C, so they usually indicate that the
programmer intended to use @code{strcmp}.  This 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-pre @gol
-ftree-switch-conversion  -ftree-tail-merge @gol
-ftree-vrp}

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-loop-vectorize @gol
-ftree-partial-pre @gol
-ftree-slp-vectorize @gol
-funswitch-loops @gol
-fvect-cost-model @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{-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-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 max-fsm-thread-length
Maximum number of basic blocks on a finite state automaton jump thread
path.

@item max-fsm-thread-paths
Maximum number of new jump thread paths to create for a finite state
automaton.

@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 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 fsm-maximum-phi-arguments
Maximum number of arguments a PHI may have before the FSM threader
will not try to thread through its block.

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

@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.  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 as well as @code{INT_MIN / -1} division.

@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.  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-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{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 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{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-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} 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 (@xref{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.

@xref{C++ Module Mapper} for details of the @option{-fmodule-mapper}
family of options.

@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}.  @xref{Environment Variables} for further
details.

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.
