@c Copyright (C) 1988-2022 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-2022 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)
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{https://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
-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 -fstrict-flex-arrays[=@var{n}] @gol
-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  -Wdangling-reference @gol
-Wno-delete-incomplete @gol
-Wdelete-non-virtual-dtor  -Wno-deprecated-array-compare @gol
-Wdeprecated-copy -Wdeprecated-copy-dtor @gol
-Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion @gol
-Weffc++  -Wno-exceptions -Wextra-semi  -Wno-inaccessible-base @gol
-Wno-inherited-variadic-ctor  -Wno-init-list-lifetime @gol
-Winvalid-imported-macros @gol
-Wno-invalid-offsetof  -Wno-literal-suffix @gol
-Wmismatched-new-delete -Wmismatched-tags @gol
-Wmultiple-inheritance  -Wnamespaces  -Wnarrowing @gol
-Wnoexcept  -Wnoexcept-type  -Wnon-virtual-dtor @gol
-Wpessimizing-move  -Wno-placement-new  -Wplacement-new=@var{n} @gol
-Wrange-loop-construct -Wredundant-move -Wredundant-tags @gol
-Wreorder  -Wregister @gol
-Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates @gol
-Wno-non-template-friend  -Wold-style-cast @gol
-Woverloaded-virtual  -Wno-pmf-conversions -Wself-move -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{|}sarif-stderr@r{|}sarif-file@r{|}json@r{|}json-stderr@r{|}json-file@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
-fno-diagnostics-show-rule  @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} @gol
-fdiagnostics-escape-format=@r{[}unicode@r{|}bytes@r{]}}

@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
-pedantic-errors @gol
-w  -Wextra  -Wall  -Wabi=@var{n} @gol
-Waddress  -Wno-address-of-packed-member  -Waggregate-return @gol
-Walloc-size-larger-than=@var{byte-size}  -Walloc-zero @gol
-Walloca  -Walloca-larger-than=@var{byte-size} @gol
-Wno-aggressive-loop-optimizations @gol
-Warith-conversion @gol
-Warray-bounds  -Warray-bounds=@var{n}  -Warray-compare @gol
-Wno-attributes  -Wattribute-alias=@var{n} -Wno-attribute-alias @gol
-Wno-attribute-warning  @gol
-Wbidi-chars=@r{[}none@r{|}unpaired@r{|}any@r{|}ucn@r{]} @gol
-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  -Wdangling-pointer  -Wdangling-pointer=@var{n}  @gol
-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
-Wenum-int-mismatch @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
-Winfinite-recursion @gol
-Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context @gol
-Wno-int-to-pointer-cast  -Wno-invalid-memory-model @gol
-Winvalid-pch  -Winvalid-utf8  -Wno-unicode  -Wjump-misses-init  @gol
-Wlarger-than=@var{byte-size}  -Wlogical-not-parentheses  -Wlogical-op  @gol
-Wlong-long  -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
-Wtrivial-auto-var-init -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
-Wxor-used-as-pow @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
-fno-analyzer-state-merge @gol
-fno-analyzer-state-purge @gol
-fanalyzer-transitivity @gol
-fno-analyzer-undo-inlining @gol
-fanalyzer-verbose-edges @gol
-fanalyzer-verbose-state-changes @gol
-fanalyzer-verbosity=@var{level} @gol
-fdump-analyzer @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-stderr @gol
-fdump-analyzer-supergraph @gol
-fdump-analyzer-untracked @gol
-Wno-analyzer-double-fclose @gol
-Wno-analyzer-double-free @gol
-Wno-analyzer-exposure-through-output-file @gol
-Wno-analyzer-exposure-through-uninit-copy @gol
-Wno-analyzer-fd-access-mode-mismatch @gol
-Wno-analyzer-fd-double-close @gol
-Wno-analyzer-fd-leak @gol
-Wno-analyzer-fd-use-after-close @gol
-Wno-analyzer-fd-use-without-check @gol
-Wno-analyzer-file-leak @gol
-Wno-analyzer-free-of-non-heap @gol
-Wno-analyzer-imprecise-fp-arithmetic @gol
-Wno-analyzer-infinite-recursion @gol
-Wno-analyzer-jump-through-null @gol
-Wno-analyzer-malloc-leak @gol
-Wno-analyzer-mismatching-deallocation @gol
-Wno-analyzer-null-argument @gol
-Wno-analyzer-null-dereference @gol
-Wno-analyzer-out-of-bounds @gol
-Wno-analyzer-possible-null-argument @gol
-Wno-analyzer-possible-null-dereference @gol
-Wno-analyzer-putenv-of-auto-var @gol
-Wno-analyzer-shift-count-negative @gol
-Wno-analyzer-shift-count-overflow @gol
-Wno-analyzer-stale-setjmp-buffer @gol
-Wno-analyzer-tainted-allocation-size @gol
-Wno-analyzer-tainted-assertion @gol
-Wno-analyzer-tainted-array-index @gol
-Wno-analyzer-tainted-divisor @gol
-Wno-analyzer-tainted-offset @gol
-Wno-analyzer-tainted-size @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-va-arg-type-mismatch @gol
-Wno-analyzer-va-list-exhausted @gol
-Wno-analyzer-va-list-leak @gol
-Wno-analyzer-va-list-use-after-va-end @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
-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 -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 -fipa-strict-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  -Oz}

@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
-fsanitize-trap   -fsanitize-trap=@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
-fharden-compares -fharden-conditional-branches @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  -finstrument-functions-once @gol
-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}} @gol
-fprofile-prefix-map=@var{old}=@var{new}

@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  -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
-fmultiflags  -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
-mfix-cortex-a57-aes-1742098 @gol
-mfix-cortex-a72-aes-1655431 @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
-mstack-protector-guard=@var{guard} -mstack-protector-guard-offset=@var{offset} @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} -mmax-stack-frame=@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 @gol
-melf  -maout  -sim  -sim2 @gol
-mmul-bug-workaround  -mno-mul-bug-workaround}

@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{LoongArch Options}
@gccoptlist{-march=@var{cpu-type}  -mtune=@var{cpu-type} -mabi=@var{base-abi-type} @gol
-mfpu=@var{fpu-type} -msoft-float -msingle-float -mdouble-float @gol
-mbranch-cost=@var{n}  -mcheck-zero-division -mno-check-zero-division @gol
-mcond-move-int  -mno-cond-move-int @gol
-mcond-move-float  -mno-cond-move-float @gol
-memcpy  -mno-memcpy -mstrict-align -mno-strict-align @gol
-mmax-inline-memcpy-size=@var{n} @gol
-mexplicit-relocs -mno-explicit-relocs @gol
-mdirect-extern-access -mno-direct-extern-access @gol
-mcmodel=@var{code-model}}

@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
-munaligned-access  -mno-unaligned-access @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
-misa-spec=@var{ISA-spec-string} @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  -mno-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}}
-mcsr-check -mno-csr-check @gol

@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{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  -mlra}

@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
-mmove-max=@var{bits} -mstore-max=@var{bits} @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 -mcet-switch -mforce-indirect-call @gol
-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 -mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 @gol
-mprefetchi -mraoint @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 -mrelax-cmpxchg-loop @gol
-mindirect-branch=@var{choice}  -mfunction-return=@var{choice} @gol
-mindirect-branch-register -mharden-sls=@var{choice} @gol
-mindirect-branch-cs-prefix -mneeded -mno-direct-extern-access @gol
-munroll-only-small-loops}

@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} @gol
-mextra-l32r-costs=@var{cycles}}

@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, unless the output
file is a special file like @code{/dev/null}. 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}, @option{-fdebug-prefix-map} and
@option{-fprofile-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{https://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 -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.  In C, @option{-ansi} implies @option{-fno-asm}.

In C++, @code{inline} is a standard keyword and is not affected by
this switch.  You may want to use the @option{-fno-gnu-keywords} flag
instead, which disables @code{typeof} but not @code{asm} and
@code{inline}.  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.  In C2X mode
(@option{-std=c2x} or @option{-std=gnu2x}), this switch only affects
the @code{asm} keyword, since @code{typeof} is a standard keyword in
ISO C2X.

@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++,
@code{[[omp::directive(...)]]} and @code{[[omp::sequence(...)]]} in 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 @code{simd}, @code{declare simd},
@code{declare reduction}, @code{assume}, @code{ordered}, @code{scan},
@code{loop} directives and combined or composite directives with
@code{simd} as constituent with @code{#pragma omp} in C/C++,
@code{[[omp::directive(...)]]} and @code{[[omp::sequence(...)]]} in 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 -fstrict-flex-arrays
@opindex fstrict-flex-arrays
@opindex fno-strict-flex-arrays
Control when to treat the trailing array of a structure as a flexible array
member for the purpose of accessing the elements of such an array.
The positive form is equivalent to @option{-fstrict-flex-arrays=3}, which is the
strictest.  A trailing array is treated as a flexible array member only when it
is declared as a flexible array member per C99 standard onwards.
The negative form is equivalent to @option{-fstrict-flex-arrays=0}, which is the
least strict.  All trailing arrays of structures are treated as flexible array
members.

@item -fstrict-flex-arrays=@var{level}
@opindex fstrict-flex-arrays=@var{level}
Control when to treat the trailing array of a structure as a flexible array
member for the purpose of accessing the elements of such an array.  The value
of @var{level} controls the level of strictness.

The possible values of @var{level} are the same as for the
@code{strict_flex_array} attribute (@pxref{Variable Attributes}).

You can control this behavior for a specific trailing array field of a
structure by using the variable attribute @code{strict_flex_array} attribute
(@pxref{Variable Attributes}).

@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++ 10.3, corrects G++ 10 ABI
tag regression.

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

Version 17, which first appeared in G++ 12, fixes layout of classes
that inherit from aggregate classes with default member initializers
in C++14 and up.

Version 18, which first appeard in G++ 13, fixes manglings of lambdas
that have additional context.

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 13 (GCC 8.2
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
Enable support for the C++ Concepts feature for constraining template
arguments.  With @option{-std=c++20} and above, Concepts are part of
the language standard, so @option{-fconcepts} defaults to on.

Some constructs that were allowed by the earlier C++ Extensions for
Concepts Technical Specification, ISO 19217 (2015), but didn't make it
into the standard, can additionally 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-fp-except
@opindex fconstexpr-fp-except
Annex F of the C standard specifies that IEC559 floating point
exceptions encountered at compile time should not stop compilation.
C++ compilers have historically not followed this guidance, instead
treating floating point division by zero as non-constant even though
it has a well defined value.  This flag tells the compiler to give
Annex F priority over other rules saying that a particular operation
is undefined.

@smallexample
constexpr float inf = 1./0.; // OK with -fconstexpr-fp-except
@end smallexample

@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 -ffold-simple-inlines
@itemx -fno-fold-simple-inlines
@opindex ffold-simple-inlines
@opindex fno-fold-simple-inlines
Permit the C++ frontend to fold calls to @code{std::move}, @code{std::forward},
@code{std::addressof} and @code{std::as_const}.  In contrast to inlining, this
means no debug information will be generated for such calls.  Since these
functions are rarely interesting to debug, this flag is enabled by default
unless @option{-fno-inline} is active.

@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 -fimplicit-constexpr
@opindex fimplicit-constexpr
Make inline functions implicitly constexpr, if they satisfy the
requirements for a constexpr function.  This option can be used in
C++14 mode or later.  This can result in initialization changing from
dynamic to static and other optimizations.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@item -fno-operator-names
@opindex fno-operator-names
@opindex foperator-names
Do not treat the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
synonyms as keywords.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@item -Wcomma-subscript @r{(C++ and Objective-C++ only)}
@opindex Wcomma-subscript
@opindex Wno-comma-subscript
Warn about uses of a comma expression within a subscripting expression.
This usage was deprecated in C++20 and is going to be removed in C++23.
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 in C++20, invalid in C++23
    a[(b,c)];   // OK
@}
@end group
@end smallexample

In C++23 it is valid to have comma separated expressions in a subscript
when an overloaded subscript operator is found and supports the right
number and types of arguments.  G++ will accept the formerly valid syntax
for code that is not valid in C++23 but used to be valid but deprecated
in C++20 with a pedantic warning that can be disabled with
@option{-Wno-comma-subscript}.

Enabled by default with @option{-std=c++20} unless @option{-Wno-deprecated},
and with @option{-std=c++23} regardless of @option{-Wno-deprecated}.

@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 -Wdangling-reference @r{(C++ and Objective-C++ only)}
@opindex Wdangling-reference
@opindex Wno-dangling-reference
Warn when a reference is bound to a temporary whose lifetime has ended.
For example:

@smallexample
int n = 1;
const int& r = std::max(n - 1, n + 1); // r is dangling
@end smallexample

In the example above, two temporaries are created, one for each
argument, and a reference to one of the temporaries is returned.
However, both temporaries are destroyed at the end of the full
expression, so the reference @code{r} is dangling.  This warning
also detects dangling references in member initializer lists:

@smallexample
const int& f(const int& i) @{ return i; @}
struct S @{
  const int &r; // r is dangling
  S() : r(f(10)) @{ @}
@};
@end smallexample

Member functions are checked as well, but only their object argument:

@smallexample
struct S @{
   const S& self () @{ return *this; @}
@};
const S& s = S().self(); // s is dangling
@end smallexample

Certain functions are safe in this respect, for example @code{std::use_facet}:
they take and return a reference, but they don't return one of its arguments,
which can fool the warning.  Such functions can be excluded from the warning
by wrapping them in a @code{#pragma}:

@smallexample
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdangling-reference"
const T& foo (const T&) @{ @dots{} @}
#pragma GCC diagnostic pop
@end smallexample

@option{-Wdangling-reference} also warns about code like

@smallexample
auto p = std::minmax(1, 2);
@end smallexample

where @code{std::minmax} returns @code{std::pair<const int&, const int&>}, and
both references dangle after the end of the full expression that contains
the call to @code{std::minmax}.

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

@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)}
@itemx -Woverloaded-virtual=@var{n}
@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); // does not override
@};
@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.

The optional level suffix controls the behavior when all the
declarations in the derived class override virtual functions in the
base class, even if not all of the base functions are overridden:

@smallexample
struct C @{
  virtual void f();
  virtual void f(int);
@};

struct D: public C @{
  void f(int); // does override
@}
@end smallexample

This pattern is less likely to be a mistake; if D is only used
virtually, the user might have decided that the base class semantics
for some of the overloads are fine.

At level 1, this case does not warn; at level 2, it does.
@option{-Woverloaded-virtual} by itself selects level 2.  Level 1 is
included in @option{-Wall}.

@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 -Wuse-after-free
@itemx -Wuse-after-free=@var{n}
@opindex Wuse-after-free
@opindex Wno-use-after-free
Warn about uses of pointers to dynamically allocated objects that have
been rendered indeterminate by a call to a deallocation function.
The warning is enabled at all optimization levels but may yield different
results with optimization than without.

@table @gcctabopt
@item -Wuse-after-free=1
At level 1 the warning attempts to diagnose only unconditional uses
of pointers made indeterminate by a deallocation call or a successful
call to @code{realloc}, regardless of whether or not the call resulted
in an actual reallocatio of memory.  This includes double-@code{free}
calls as well as uses in arithmetic and relational expressions.  Although
undefined, uses of indeterminate pointers in equality (or inequality)
expressions are not diagnosed at this level.
@item -Wuse-after-free=2
At level 2, in addition to unconditional uses, the warning also diagnoses
conditional uses of pointers made indeterminate by a deallocation call.
As at level 2, uses in equality (or inequality) expressions are not
diagnosed.  For example, the second call to @code{free} in the following
function is diagnosed at this level:
@smallexample
struct A @{ int refcount; void *data; @};

void release (struct A *p)
@{
  int refcount = --p->refcount;
  free (p);
  if (refcount == 0)
    free (p->data);   // warning: p may be used after free
@}
@end smallexample
@item -Wuse-after-free=3
At level 3, the warning also diagnoses uses of indeterminate pointers in
equality expressions.  All uses of indeterminate pointers are undefined
but equality tests sometimes appear after calls to @code{realloc} as
an attempt to determine whether the call resulted in relocating the object
to a different address.  They are diagnosed at a separate level to aid
legacy code gradually transition to safe alternatives.  For example,
the equality test in the function below is diagnosed at this level:
@smallexample
void adjust_pointers (int**, int);

void grow (int **p, int n)
@{
  int **q = (int**)realloc (p, n *= 2);
  if (q == p)
    return;
  adjust_pointers ((int**)q, n);
@}
@end smallexample
To avoid the warning at this level, store offsets into allocated memory
instead of pointers.  This approach obviates needing to adjust the stored
pointers after reallocation.
@end table

@option{-Wuse-after-free=2} is included in @option{-Wall}.

@item -Wuseless-cast @r{(C++ and Objective-C++ only)}
@opindex Wuseless-cast
@opindex Wno-useless-cast
Warn when an expression is cast to its own type.  This warning does not
occur when a class object is converted to a non-reference type as that
is a way to create a temporary:

@smallexample
struct S @{ @};
void g (S&&);
void f (S&& arg)
@{
  g (S(arg)); // make arg prvalue so that it can bind to S&&
@}
@end smallexample

@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:fnname=01;32:targs=35
@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 fnname=
@vindex fnname GCC_COLORS @r{capability}
SGR substring for names of C++ functions.

@item targs=
@vindex targs GCC_COLORS @r{capability}
SGR substring for C++ function template parameter bindings.

@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
@uref{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-rules
@opindex fno-diagnostics-show-rules
@opindex fdiagnostics-show-rules
Diagnostic messages can optionally have rules associated with them, such
as from a coding standard, or a specification.
GCC itself does not do this for any of its diagnostics, but plugins may do so.
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=inline-events}.
If provided with @option{-fdiagnostics-path-format=separate-events}, then
the stack depth and function declaration will be appended when printing
each event.

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-escape-format=@var{FORMAT}
@opindex fdiagnostics-escape-format
When GCC prints pertinent source lines for a diagnostic it normally attempts
to print the source bytes directly.  However, some diagnostics relate to encoding
issues in the source file, such as malformed UTF-8, or issues with Unicode
normalization.  These diagnostics are flagged so that GCC will escape bytes
that are not printable ASCII when printing their pertinent source lines.

This option controls how such bytes should be escaped.

The default @var{FORMAT}, @samp{unicode} displays Unicode characters that
are not printable ASCII in the form @samp{<U+XXXX>}, and bytes that do not
correspond to a Unicode character validly-encoded in UTF-8-encoded will be
displayed as hexadecimal in the form @samp{<XX>}.

For example, a source line containing the string @samp{before} followed by the
Unicode character U+03C0 (``GREEK SMALL LETTER PI'', with UTF-8 encoding
0xCF 0x80) followed by the byte 0xBF (a stray UTF-8 trailing byte), followed by
the string @samp{after} will be printed for such a diagnostic as:

@smallexample
 before<U+03C0><BF>after
@end smallexample

Setting @var{FORMAT} to @samp{bytes} will display all non-printable-ASCII bytes
in the form @samp{<XX>}, thus showing the underlying encoding of non-ASCII
Unicode characters.  For the example above, the following will be printed:

@smallexample
 before<CF><80><BF>after
@end smallexample

@item -fdiagnostics-format=@var{FORMAT}
@opindex fdiagnostics-format
Select a different format for printing diagnostics.
@var{FORMAT} is @samp{text}, @samp{sarif-stderr}, @samp{sarif-file},
@samp{json}, @samp{json-stderr}, or @samp{json-file}.

The default is @samp{text}.

The @samp{sarif-stderr} and @samp{sarif-file} formats both emit
diagnostics in SARIF Version 2.1.0 format, either to stderr, or to a file
named @file{@var{source}.sarif}, respectively.

The @samp{json} format is a synonym for @samp{json-stderr}.
The @samp{json-stderr} and @samp{json-file} formats are identical, apart from
where the JSON is emitted to - with the former, the JSON is emitted to stderr,
whereas with @samp{json-file} it is written to @file{@var{source}.gcc.json}.

The emitted JSON 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
                        @}
                    @}
                ],
                "escape-source": false,
                "message": "...this statement, but the latter is @dots{}"
            @}
        ]
	"escape-source": false,
	"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@}"
            @}
        ],
        "escape-source": false,
        "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
                @}
            @}
        ],
        "escape-source": false,
        "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

Diagnostics have a boolean attribute @code{escape-source}, hinting whether
non-ASCII bytes should be escaped when printing the pertinent lines of
source code (@code{true} for diagnostics involving source encoding issues).

@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 some instances of other warnings may
not be issued at all unless optimization is enabled.  While optimization
in general improves the efficacy of control and data flow sensitive
warnings, in some cases it may also cause false positives.

@table @gcctabopt
@item -Wpedantic
@itemx -pedantic
@opindex pedantic
@opindex Wpedantic
@opindex Wno-pedantic
Issue all the warnings demanded by strict ISO C and ISO C++;
reject all programs that use forbidden extensions, and some other
programs that do not follow ISO C and ISO C++.  For ISO C, follows the
version of the ISO C standard specified by any @option{-std} option used.

Valid ISO C and ISO C++ programs should compile properly with or without
this option (though a rare few require @option{-ansi} or a
@option{-std} option specifying the required version of ISO C)@.  However,
without this option, certain GNU extensions and traditional C and C++
features are supported as well.  With this option, they are rejected.

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

Some users try to use @option{-Wpedantic} to check programs for strict ISO
C conformance.  They soon find that it does not do quite what they want:
it finds some non-ISO practices, but not all---only those for which
ISO C @emph{requires} a diagnostic, and some others for which
diagnostics have been added.

A feature to report any failure to conform to ISO C might be useful in
some instances, but would require considerable additional work and would
be quite different from @option{-Wpedantic}.  We don't have plans to
support such a feature in the near future.

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

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

@item -Wall
@opindex Wall
@opindex Wno-all
This enables all the warnings about constructions that some users
consider questionable, and that are easy to avoid (or modify to
prevent the warning), even in conjunction with macros.  This also
enables some language-specific warnings described in @ref{C++ Dialect
Options} and @ref{Objective-C and Objective-C++ Dialect Options}.

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

@gccoptlist{-Waddress   @gol
-Warray-bounds=1 @r{(only with} @option{-O2}@r{)}  @gol
-Warray-compare @gol
-Warray-parameter=2 @r{(C and Objective-C only)} @gol
-Wbool-compare  @gol
-Wbool-operation  @gol
-Wc++11-compat  -Wc++14-compat  @gol
-Wcatch-value @r{(C++ and Objective-C++ only)}  @gol
-Wchar-subscripts  @gol
-Wcomment  @gol
-Wdangling-pointer=2  @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
-Wenum-int-mismatch @r{(C and Objective-C only)} @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
-Wself-move @r{(only for C++)}  @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
-Wuse-after-free=3  @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++11 to C++17 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 -Winfinite-recursion
@opindex Winfinite-recursion
@opindex Wno-infinite-recursion
Warn about infinitely recursive calls.  The warning is effective at all
optimization levels but requires optimization in order to detect infinite
recursion in calls between two or more functions.
@option{-Winfinite-recursion} is included in @option{-Wall}.

Compare with @option{-Wanalyzer-infinite-recursion} which provides a
similar diagnostic, but is implemented in a different way (as part of
@option{-fanalyzer}).

@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 -Wno-self-move @r{(C++ and Objective-C++ only)}
@opindex Wself-move
@opindex Wno-self-move
This warning warns when a value is moved to itself with @code{std::move}.
Such a @code{std::move} typically has no effect.

@smallexample
struct T @{
@dots{}
@};
void fn()
@{
  T t;
  @dots{}
  t = std::move (t);
@}
@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{https://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 newer) and C++11 to C++17 modes.

@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 -Wtrivial-auto-var-init
@opindex Wtrivial-auto-var-init
@opindex Wno-trivial-auto-var-init
Warn when @code{-ftrivial-auto-var-init} cannot initialize the automatic
variable.  A common situation is an automatic variable that is declared
between the controlling expression and the first case label of a @code{switch}
statement.

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

In C++, this warning also warns about using uninitialized objects in
member-initializer-lists.  For example, GCC warns about @code{b} being
uninitialized in the following snippet:

@smallexample
struct A @{
  int a;
  int b;
  A() : a(b) @{ @}
@};
@end smallexample

@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
Warn about out of bounds subscripts or offsets into arrays.  This warning
is enabled by @option{-Wall}.  It is more effective when @option{-ftree-vrp}
is active (the default for @option{-O2} and above) but a subset of instances
are issued even without optimization.

@table @gcctabopt
@item -Warray-bounds=1
This is the default 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 accesses to trailing
struct members of one-element array types (@pxref{Zero Length}) and about
the intermediate results of pointer arithmetic that may yield out of bounds
values.  This warning level may give a larger number of false positives and
is deactivated by default.
@end table

@item -Warray-compare
@opindex Warray-compare
@opindex Wno-array-compare
Warn about equality and relational comparisons between two operands of array
type.  This comparison was deprecated in C++20.  For example:

@smallexample
int arr1[5];
int arr2[5];
bool same = arr1 == arr2;
@end smallexample

@option{-Warray-compare} is enabled by @option{-Wall}.

@item -Warray-parameter
@itemx -Warray-parameter=@var{n}
@opindex Wno-array-parameter
Warn about redeclarations of functions involving arguments of array or
pointer types of inconsistent kinds or forms, and enable the detection
of out-of-bounds accesses to such parameters by warnings such as
@option{-Warray-bounds}.

If the first function declaration uses the array form the bound specified
in the array is assumed to be the minimum number of elements expected to
be provided in calls to the function and the maximum number of elements
accessed by it.  Failing to provide arguments of sufficient size or accessing
more than the maximum number of elements may be diagnosed by warnings such
as @option{-Warray-bounds}.  At level 1 the warning diagnoses inconsistencies
involving array parameters declared using the @code{T[static N]} form.

For example, the warning triggers for the following redeclarations because
the first one allows an array of any size to be passed to @code{f} while
the second one with the keyword @code{static} specifies that the array
argument must have at least four elements.

@smallexample
void f (int[static 4]);
void f (int[]);           // warning (inconsistent array form)

void g (void)
@{
  int *p = (int *)malloc (4);
  f (p);                  // warning (array too small)
  @dots{}
@}
@end smallexample

At level 2 the warning also triggers for redeclarations involving any other
inconsistency in array or pointer argument forms denoting array sizes.
Pointers and arrays of unspecified bound are considered equivalent and do
not trigger a warning.

@smallexample
void g (int*);
void g (int[]);     // no warning
void g (int[8]);    // warning (inconsistent array bound)
@end smallexample

@option{-Warray-parameter=2} is included in @option{-Wall}.  The
@option{-Wvla-parameter} option triggers warnings for similar inconsistencies
involving Variable Length Array arguments.

@item -Wattribute-alias=@var{n}
@itemx -Wno-attribute-alias
@opindex Wattribute-alias
@opindex Wno-attribute-alias
Warn about declarations using the @code{alias} and similar attributes whose
target is incompatible with the type of the alias.
@xref{Function Attributes,,Declaring Attributes of Functions}.

@table @gcctabopt
@item -Wattribute-alias=1
The default warning level of the @option{-Wattribute-alias} option diagnoses
incompatibilities between the type of the alias declaration and that of its
target.  Such incompatibilities are typically indicative of bugs.

@item -Wattribute-alias=2

At this level @option{-Wattribute-alias} also diagnoses cases where
the attributes of the alias declaration are more restrictive than the
attributes applied to its target.  These mismatches can potentially
result in incorrect code generation.  In other cases they may be
benign and could be resolved simply by adding the missing attribute to
the target.  For comparison, see the @option{-Wmissing-attributes}
option, which controls diagnostics when the alias declaration is less
restrictive than the target, rather than more restrictive.

Attributes considered include @code{alloc_align}, @code{alloc_size},
@code{cold}, @code{const}, @code{hot}, @code{leaf}, @code{malloc},
@code{nonnull}, @code{noreturn}, @code{nothrow}, @code{pure},
@code{returns_nonnull}, and @code{returns_twice}.
@end table

@option{-Wattribute-alias} is equivalent to @option{-Wattribute-alias=1}.
This is the default.  You can disable these warnings with either
@option{-Wno-attribute-alias} or @option{-Wattribute-alias=0}.

@item -Wbidi-chars=@r{[}none@r{|}unpaired@r{|}any@r{|}ucn@r{]}
@opindex Wbidi-chars=
@opindex Wbidi-chars
@opindex Wno-bidi-chars
Warn about possibly misleading UTF-8 bidirectional control characters in
comments, string literals, character constants, and identifiers.  Such
characters can change left-to-right writing direction into right-to-left
(and vice versa), which can cause confusion between the logical order and
visual order.  This may be dangerous; for instance, it may seem that a piece
of code is not commented out, whereas it in fact is.

There are three levels of warning supported by GCC@.  The default is
@option{-Wbidi-chars=unpaired}, which warns about improperly terminated
bidi contexts.  @option{-Wbidi-chars=none} turns the warning off.
@option{-Wbidi-chars=any} warns about any use of bidirectional control
characters.

By default, this warning does not warn about UCNs.  It is, however, possible
to turn on such checking by using @option{-Wbidi-chars=unpaired,ucn} or
@option{-Wbidi-chars=any,ucn}.  Using @option{-Wbidi-chars=ucn} is valid,
and is equivalent to @option{-Wbidi-chars=unpaired,ucn}, if no previous
@option{-Wbidi-chars=any} was specified.

@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 beginning 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 -Wdangling-pointer
@itemx -Wdangling-pointer=@var{n}
@opindex Wdangling-pointer
@opindex Wno-dangling-pointer
Warn about uses of pointers (or C++ references) to objects with automatic
storage duration after their lifetime has ended.  This includes local
variables declared in nested blocks, compound literals and other unnamed
temporary objects.  In addition, warn about storing the address of such
objects in escaped pointers.  The warning is enabled at all optimization
levels but may yield different results with optimization than without.

@table @gcctabopt
@item -Wdangling-pointer=1
At level 1 the warning diagnoses only unconditional uses of dangling pointers.
For example
@smallexample
int f (int c1, int c2, x)
@{
  char *p = strchr ((char[])@{ c1, c2 @}, c3);
  return p ? *p : 'x';   // warning: dangling pointer to a compound literal
@}
@end smallexample
In the following function the store of the address of the local variable
@code{x} in the escaped pointer @code{*p} also triggers the warning.
@smallexample
void g (int **p)
@{
  int x = 7;
  *p = &x;   // warning: storing the address of a local variable in *p
@}
@end smallexample

@item -Wdangling-pointer=2
At level 2, in addition to unconditional uses the warning also diagnoses
conditional uses of dangling pointers.

For example, because the array @var{a} in the following function is out of
scope when the pointer @var{s} that was set to point is used, the warning
triggers at this level.

@smallexample
void f (char *s)
@{
  if (!s)
    @{
      char a[12] = "tmpname";
      s = a;
    @}
  strcat (s, ".tmp");   // warning: dangling pointer to a may be used
  ...
@}
@end smallexample
@end table

@option{-Wdangling-pointer=2} is included in @option{-Wall}.

@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 -Wenum-int-mismatch @r{(C and Objective-C only)}
@opindex Wenum-int-mismatch
@opindex Wno-enum-int-mismatch
Warn about mismatches between an enumerated type and an integer type in
declarations.  For example:

@smallexample
enum E @{ l = -1, z = 0, g = 1 @};
int foo(void);
enum E foo(void);
@end smallexample

In C, an enumerated type is compatible with @code{char}, a signed
integer type, or an unsigned integer type.  However, since the choice
of the underlying type of an enumerated type is implementation-defined,
such mismatches may cause portability issues.  In C++, such mismatches
are an error.  In C, this warning is enabled by @option{-Wall} and
@option{-Wc++-compat}.

@item -Wjump-misses-init @r{(C, Objective-C only)}
@opindex Wjump-misses-init
@opindex Wno-jump-misses-init
Warn if a @code{goto} statement or a @code{switch} statement jumps
forward across the initialization of a variable, or jumps backward to a
label after the variable has been initialized.  This only warns about
variables that are initialized when they are declared.  This warning is
only supported for C and Objective-C; in C++ this sort of branch is an
error in any case.

@option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
can be disabled with the @option{-Wno-jump-misses-init} option.

@item -Wsign-compare
@opindex Wsign-compare
@opindex Wno-sign-compare
@cindex warning for comparison of signed and unsigned values
@cindex comparison of signed and unsigned values, warning
@cindex signed and unsigned values, comparison warning
Warn when a comparison between signed and unsigned values could produce
an incorrect result when the signed value is converted to unsigned.
In C++, this warning is also enabled by @option{-Wall}.  In C, it is
also enabled by @option{-Wextra}.

@item -Wsign-conversion
@opindex Wsign-conversion
@opindex Wno-sign-conversion
Warn for implicit conversions that may change the sign of an integer
value, like assigning a signed integer expression to an unsigned
integer variable. An explicit cast silences the warning. In C, this
option is enabled also by @option{-Wconversion}.

@item -Wfloat-conversion
@opindex Wfloat-conversion
@opindex Wno-float-conversion
Warn for implicit conversions that reduce the precision of a real value.
This includes conversions from real to integer, and from higher precision
real to lower precision real values.  This option is also enabled by
@option{-Wconversion}.

@item -Wno-scalar-storage-order
@opindex Wno-scalar-storage-order
@opindex Wscalar-storage-order
Do not warn on suspicious constructs involving reverse scalar storage order.

@item -Wsizeof-array-div
@opindex Wsizeof-array-div
@opindex Wno-sizeof-array-div
Warn about divisions of two sizeof operators when the first one is applied
to an array and the divisor does not equal the size of the array element.
In such a case, the computation will not yield the number of elements in the
array, which is likely what the user intended.  This warning warns e.g. about
@smallexample
int fn ()
@{
  int arr[10];
  return sizeof (arr) / sizeof (short);
@}
@end smallexample

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

@item -Wsizeof-pointer-div
@opindex Wsizeof-pointer-div
@opindex Wno-sizeof-pointer-div
Warn for suspicious divisions of two sizeof expressions that divide
the pointer size by the element size, which is the usual way to compute
the array size but won't work out correctly with pointers.  This warning
warns e.g.@: about @code{sizeof (ptr) / sizeof (ptr[0])} if @code{ptr} is
not an array, but a pointer.  This warning is enabled by @option{-Wall}.

@item -Wsizeof-pointer-memaccess
@opindex Wsizeof-pointer-memaccess
@opindex Wno-sizeof-pointer-memaccess
Warn for suspicious length parameters to certain string and memory built-in
functions if the argument uses @code{sizeof}.  This warning triggers for
example for @code{memset (ptr, 0, sizeof (ptr));} if @code{ptr} is not
an array, but a pointer, and suggests a possible fix, or about
@code{memcpy (&foo, ptr, sizeof (&foo));}.  @option{-Wsizeof-pointer-memaccess}
also warns about calls to bounded string copy functions like @code{strncat}
or @code{strncpy} that specify as the bound a @code{sizeof} expression of
the source array.  For example, in the following function the call to
@code{strncat} specifies the size of the source string as the bound.  That
is almost certainly a mistake and so the call is diagnosed.
@smallexample
void make_file (const char *name)
@{
  char path[PATH_MAX];
  strncpy (path, name, sizeof path - 1);
  strncat (path, ".text", sizeof ".text");
  @dots{}
@}
@end smallexample

The @option{-Wsizeof-pointer-memaccess} option is enabled by @option{-Wall}.

@item -Wno-sizeof-array-argument
@opindex Wsizeof-array-argument
@opindex Wno-sizeof-array-argument
Do not warn when the @code{sizeof} operator is applied to a parameter that is
declared as an array in a function definition.  This warning is enabled by
default for C and C++ programs.

@item -Wmemset-elt-size
@opindex Wmemset-elt-size
@opindex Wno-memset-elt-size
Warn for suspicious calls to the @code{memset} built-in function, if the
first argument references an array, and the third argument is a number
equal to the number of elements, but not equal to the size of the array
in memory.  This indicates that the user has omitted a multiplication by
the element size.  This warning is enabled by @option{-Wall}.

@item -Wmemset-transposed-args
@opindex Wmemset-transposed-args
@opindex Wno-memset-transposed-args
Warn for suspicious calls to the @code{memset} built-in function where
the second argument is not zero and the third argument is zero.  For
example, the call @code{memset (buf, sizeof buf, 0)} is diagnosed because
@code{memset (buf, 0, sizeof buf)} was meant instead.  The diagnostic
is only emitted if the third argument is a literal zero.  Otherwise, if
it is an expression that is folded to zero, or a cast of zero to some
type, it is far less likely that the arguments have been mistakenly
transposed and no warning is emitted.  This warning is enabled
by @option{-Wall}.

@item -Waddress
@opindex Waddress
@opindex Wno-address
Warn about suspicious uses of address expressions. These include comparing
the address of a function or a declared object to the null pointer constant
such as in
@smallexample
void f (void);
void g (void)
@{
  if (!f)   // warning: expression evaluates to false
    abort ();
@}
@end smallexample
comparisons of a pointer to a string literal, such as in
@smallexample
void f (const char *x)
@{
  if (x == "abc")   // warning: expression evaluates to false
    puts ("equal");
@}
@end smallexample
and tests of the results of pointer addition or subtraction for equality
to null, such as in
@smallexample
void f (const int *p, int i)
@{
  return p + i == NULL;
@}
@end smallexample
Such uses typically indicate a programmer error: the address of most
functions and objects necessarily evaluates to true (the exception are
weak symbols), so their use in a conditional might indicate missing
parentheses in a function call or a missing dereference in an array
expression.  The subset of the warning for object pointers can be
suppressed by casting the pointer operand to an integer type such
as @code{intptr_t} or @code{uintptr_t}.
Comparisons against string literals result in unspecified behavior
and are not portable, and suggest the intent was to call @code{strcmp}.
The warning is suppressed if the suspicious expression is the result
of macro expansion.
@option{-Waddress} warning is enabled by @option{-Wall}.

@item -Wno-address-of-packed-member
@opindex Waddress-of-packed-member
@opindex Wno-address-of-packed-member
Do not warn when the address of packed member of struct or union is taken,
which usually results in an unaligned pointer value.  This is
enabled by default.

@item -Wlogical-op
@opindex Wlogical-op
@opindex Wno-logical-op
Warn about suspicious uses of logical operators in expressions.
This includes using logical operators in contexts where a
bit-wise operator is likely to be expected.  Also warns when
the operands of a logical operator are the same:
@smallexample
extern int a;
if (a < 0 && a < 0) @{ @dots{} @}
@end smallexample

@item -Wlogical-not-parentheses
@opindex Wlogical-not-parentheses
@opindex Wno-logical-not-parentheses
Warn about logical not used on the left hand side operand of a comparison.
This option does not warn if the right operand is considered to be a boolean
expression.  Its purpose is to detect suspicious code like the following:
@smallexample
int a;
@dots{}
if (!a > 1) @{ @dots{} @}
@end smallexample

It is possible to suppress the warning by wrapping the LHS into
parentheses:
@smallexample
if ((!a) > 1) @{ @dots{} @}
@end smallexample

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

@item -Waggregate-return
@opindex Waggregate-return
@opindex Wno-aggregate-return
Warn if any functions that return structures or unions are defined or
called.  (In languages where you can return an array, this also elicits
a warning.)

@item -Wno-aggressive-loop-optimizations
@opindex Wno-aggressive-loop-optimizations
@opindex Waggressive-loop-optimizations
Warn if in a loop with constant number of iterations the compiler detects
undefined behavior in some statement during one or more of the iterations.

@item -Wno-attributes
@opindex Wno-attributes
@opindex Wattributes
Do not warn if an unexpected @code{__attribute__} is used, such as
unrecognized attributes, function attributes applied to variables,
etc.  This does not stop errors for incorrect use of supported
attributes.

Additionally, using @option{-Wno-attributes=}, it is possible to suppress
warnings about unknown scoped attributes (in C++11 and C2X).  For example,
@option{-Wno-attributes=vendor::attr} disables warning about the following
declaration:

@smallexample
[[vendor::attr]] void f();
@end smallexample

It is also possible to disable warning about all attributes in a namespace
using @option{-Wno-attributes=vendor::} which prevents warning about both
of these declarations:

@smallexample
[[vendor::safe]] void f();
[[vendor::unsafe]] void f2();
@end smallexample

Note that @option{-Wno-attributes=} does not imply @option{-Wno-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-missing-template-keyword
@opindex Wmissing-template-keyword
@opindex Wno-missing-template-keyword

The member access tokens ., -> and :: must be followed by the @code{template}
keyword if the parent object is dependent and the member being named is a
template.

@smallexample
template <class X>
void DoStuff (X x)
@{
  x.template DoSomeOtherStuff<X>(); // Good.
  x.DoMoreStuff<X>(); // Warning, x is dependent.
@}
@end smallexample

In rare cases it is possible to get false positives. To silence this, wrap
the expression in parentheses. For example, the following is treated as a
template, even where m and N are integers:

@smallexample
void NotATemplate (my_class t)
@{
  int N = 5;

  bool test = t.m < N > (0); // Treated as a template.
  test = (t.m < N) > (0); // Same meaning, but not treated as a template.
@}
@end smallexample

This warning can be disabled with @option{-Wno-missing-template-keyword}.

@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 -Winvalid-utf8
@opindex Winvalid-utf8
@opindex Wno-invalid-utf8
Warn if an invalid UTF-8 character is found.
This warning is on by default for C++23 if @option{-finput-charset=UTF-8}
is used and turned into error with @option{-pedantic-errors}.

@item -Wno-unicode
@opindex Wunicode
@opindex Wno-unicode
Don't diagnose invalid forms of delimited or named escape sequences which are
treated as separate tokens.  @option{Wunicode} is enabled by default.

@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 associated 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 -Wxor-used-as-pow @r{(C, C++, Objective-C and Objective-C++ only)}
@opindex Wxor-used-as-pow
@opindex Wno-xor-used-as-pow
Warn about uses of @code{^}, the exclusive or operator, where it appears
the user meant exponentiation.  Specifically, the warning occurs when the
left-hand side is the decimal constant 2 or 10 and the right-hand side
is also a decimal constant.

In C and C++, @code{^} means exclusive or, whereas in some other languages
(e.g. TeX and some versions of BASIC) it means exponentiation.

This warning is enabled by default.  It can be silenced by converting one
of the operands to hexadecimal.

@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-allocation-size @gol
-Wanalyzer-deref-before-check @gol
-Wanalyzer-double-fclose @gol
-Wanalyzer-double-free @gol
-Wanalyzer-exposure-through-output-file @gol
-Wanalyzer-exposure-through-uninit-copy @gol
-Wanalyzer-fd-access-mode-mismatch @gol
-Wanalyzer-fd-double-close @gol
-Wanalyzer-fd-leak @gol
-Wanalyzer-fd-use-after-close @gol
-Wanalyzer-fd-use-without-check @gol
-Wanalyzer-file-leak @gol
-Wanalyzer-free-of-non-heap @gol
-Wanalyzer-imprecise-fp-arithmetic @gol
-Wanalyzer-infinite-recursion @gol
-Wanalyzer-jump-through-null @gol
-Wanalyzer-malloc-leak @gol
-Wanalyzer-mismatching-deallocation @gol
-Wanalyzer-null-argument @gol
-Wanalyzer-null-dereference @gol
-Wanalyzer-out-of-bounds @gol
-Wanalyzer-possible-null-argument @gol
-Wanalyzer-possible-null-dereference @gol
-Wanalyzer-putenv-of-auto-var @gol
-Wanalyzer-shift-count-negative @gol
-Wanalyzer-shift-count-overflow @gol
-Wanalyzer-stale-setjmp-buffer @gol
-Wanalyzer-unsafe-call-within-signal-handler @gol
-Wanalyzer-use-after-free @gol
-Wanalyzer-use-of-pointer-in-stale-stack-frame @gol
-Wanalyzer-use-of-uninitialized-value @gol
-Wanalyzer-va-arg-type-mismatch @gol
-Wanalyzer-va-list-exhausted @gol
-Wanalyzer-va-list-leak @gol
-Wanalyzer-va-list-use-after-va-end @gol
-Wanalyzer-write-to-const @gol
-Wanalyzer-write-to-string-literal @gol
}
@ignore
-Wanalyzer-tainted-allocation-size @gol
-Wanalyzer-tainted-array-index @gol
-Wanalyzer-tainted-divisor @gol
-Wanalyzer-tainted-offset @gol
-Wanalyzer-tainted-size @gol
@end ignore

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-allocation-size
@opindex Wanalyzer-allocation-size
@opindex Wno-analyzer-allocation-size
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-allocation-size}
to disable it.

This diagnostic warns for paths through the code in which a pointer to
a buffer is assigned to point at a buffer with a size that is not a
multiple of @code{sizeof (*pointer)}.

See @uref{https://cwe.mitre.org/data/definitions/131.html, CWE-131: Incorrect Calculation of Buffer Size}.

@item -Wno-analyzer-deref-before-check
@opindex Wanalyzer-deref-before-check
@opindex Wno-analyzer-deref-before-check
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-deref-before-check}
to disable it.

This diagnostic warns for paths through the code in which a pointer
is checked for @code{NULL} *after* it has already been
dereferenced, suggesting that the pointer could have been NULL.
Such cases suggest that the check for NULL is either redundant,
or that it needs to be moved to before the pointer is dereferenced.

This diagnostic also considers values passed to a function argument
marked with @code{__attribute__((nonnull))} as requiring a non-NULL
value, and thus will complain if such values are checked for @code{NULL}
after returning from such a function call.

This diagnostic is unlikely to be reported when any level of optimization
is enabled, as GCC's optimization logic will typically consider such
checks for NULL as being redundant, and optimize them away before the
analyzer "sees" them.  Hence optimization should be disabled when
attempting to trigger this diagnostic.

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

See @uref{https://cwe.mitre.org/data/definitions/1341.html, CWE-1341: Multiple Releases of Same Resource or Handle}.

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

See @uref{https://cwe.mitre.org/data/definitions/415.html, CWE-415: Double Free}.

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

See @uref{https://cwe.mitre.org/data/definitions/532.html, CWE-532: Information Exposure Through Log Files}.

@item -Wanalyzer-exposure-through-uninit-copy
@opindex Wanalyzer-exposure-through-uninit-copy
@opindex Wno-analyzer-exposure-through-uninit-copy
This warning requires both @option{-fanalyzer} and the use of a plugin
to specify a function that copies across a ``trust boundary''.  Use
@option{-Wno-analyzer-exposure-through-uninit-copy} to disable it.

This diagnostic warns for ``infoleaks'' - paths through the code in which
uninitialized values are copied across a security boundary
(such as code within an OS kernel that copies a partially-initialized
struct on the stack to user space).

See @uref{https://cwe.mitre.org/data/definitions/200.html, CWE-200: Exposure of Sensitive Information to an Unauthorized Actor}.

@item -Wno-analyzer-fd-access-mode-mismatch
@opindex Wanalyzer-fd-access-mode-mismatch
@opindex Wno-analyzer-fd-access-mode-mismatch
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-fd-access-mode-mismatch}
to disable it.

This diagnostic warns for paths through code in which a
@code{read} on a write-only file descriptor is attempted, or vice versa.

This diagnostic also warns for code paths in a which a function with attribute
@code{fd_arg_read (N)} is called with a file descriptor opened with
@code{O_WRONLY} at referenced argument @code{N} or a function with attribute
@code{fd_arg_write (N)} is called with a file descriptor opened with
@code{O_RDONLY} at referenced argument @var{N}.

@item -Wno-analyzer-fd-double-close
@opindex Wanalyzer-fd-double-close
@opindex Wno-analyzer-fd-double-close
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-fd-double-close}
to disable it.

This diagnostic warns for paths through code in which a
file descriptor can be closed more than once.

See @uref{https://cwe.mitre.org/data/definitions/1341.html, CWE-1341: Multiple Releases of Same Resource or Handle}.

@item -Wno-analyzer-fd-leak
@opindex Wanalyzer-fd-leak
@opindex Wno-analyzer-fd-leak
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-fd-leak}
to disable it.

This diagnostic warns for paths through code in which an
open file descriptor is leaked.

See @uref{https://cwe.mitre.org/data/definitions/775.html, CWE-775: Missing Release of File Descriptor or Handle after Effective Lifetime}.

@item -Wno-analyzer-fd-use-after-close
@opindex Wanalyzer-fd-use-after-close
@opindex Wno-analyzer-fd-use-after-close
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-fd-use-after-close}
to disable it.

This diagnostic warns for paths through code in which a
read or write is called on a closed file descriptor.

This diagnostic also warns for paths through code in which
a function with attribute @code{fd_arg (N)} or @code{fd_arg_read (N)}
or @code{fd_arg_write (N)} is called with a closed file descriptor at
referenced argument @code{N}.

@item -Wno-analyzer-fd-use-without-check
@opindex Wanalyzer-fd-use-without-check
@opindex Wno-analyzer-fd-use-without-check
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-fd-use-without-check}
to disable it.

This diagnostic warns for paths through code in which a
file descriptor is used without being checked for validity.

This diagnostic also warns for paths through code in which
a function with attribute @code{fd_arg (N)} or @code{fd_arg_read (N)}
or @code{fd_arg_write (N)} is called with a file descriptor, at referenced
argument @code{N}, without being checked for validity.

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

See @uref{https://cwe.mitre.org/data/definitions/775.html, CWE-775: Missing Release of File Descriptor or Handle after Effective Lifetime}.

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

See @uref{https://cwe.mitre.org/data/definitions/590.html, CWE-590: Free of Memory not on the Heap}.

@item -Wno-analyzer-imprecise-fp-arithmetic
@opindex Wanalyzer-imprecise-fp-arithmetic
@opindex Wno-analyzer-imprecise-fp-arithmetic
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-imprecise-fp-arithmetic}
to disable it.

This diagnostic warns for paths through the code in which floating-point
arithmetic is used in locations where precise computation is needed.  This
diagnostic only warns on use of floating-point operands inside the
calculation of an allocation size at the moment.

@item -Wno-analyzer-infinite-recursion
@opindex Wanalyzer-infinite-recursion
@opindex Wno-analyzer-infinite-recursion
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-infinite-recursion} to disable it.

This diagnostics warns for paths through the code which appear to
lead to infinite recursion.

Specifically, when the analyzer "sees" a recursive call, it will compare
the state of memory at the entry to the new frame with that at the entry
to the previous frame of that function on the stack.  The warning is
issued if nothing in memory appears to be changing; any changes observed
to parameters or globals are assumed to lead to termination of the
recursion and thus suppress the warning.

This diagnostic is likely to miss cases of infinite recursion that
are convered to iteration by the optimizer before the analyzer "sees"
them.  Hence optimization should be disabled when attempting to trigger
this diagnostic.

Compare with @option{-Winfinite-recursion}, which provides a similar
diagnostic, but is implemented in a different way.

@item -Wno-analyzer-jump-through-null
@opindex Wanalyzer-jump-through-null
@opindex Wno-analyzer-jump-through-null
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-jump-through-null}
to disable it.

This diagnostic warns for paths through the code in which a @code{NULL}
function pointer is called.

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

See @uref{https://cwe.mitre.org/data/definitions/401.html, CWE-401: Missing Release of Memory after Effective Lifetime}.

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

See @uref{https://cwe.mitre.org/data/definitions/762.html, CWE-762: Mismatched Memory Management Routines}.

@item -Wno-analyzer-out-of-bounds
@opindex Wanalyzer-out-of-bounds
@opindex Wno-analyzer-out-of-bounds
This warning requires @option{-fanalyzer} to enable it; use
@option{-Wno-analyzer-out-of-bounds} to disable it.

This diagnostic warns for path through the code in which a buffer is
definitely read or written out-of-bounds.  The diagnostic applies for
cases where the analyzer is able to determine a constant offset and for
accesses past the end of a buffer, also a constant capacity.  Further,
the diagnostic does limited checking for accesses past the end when the
offset as well as the capacity is symbolic.

See @uref{https://cwe.mitre.org/data/definitions/119.html, CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer}.

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

See @uref{https://cwe.mitre.org/data/definitions/690.html, CWE-690: Unchecked Return Value to NULL Pointer Dereference}.

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

See @uref{https://cwe.mitre.org/data/definitions/690.html, CWE-690: Unchecked Return Value to NULL Pointer Dereference}.

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

See @uref{https://cwe.mitre.org/data/definitions/476.html, CWE-476: NULL Pointer Dereference}.

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

See @uref{https://cwe.mitre.org/data/definitions/476.html, CWE-476: NULL Pointer Dereference}.

@item -Wno-analyzer-putenv-of-auto-var
@opindex Wanalyzer-putenv-of-auto-var
@opindex Wno-analyzer-putenv-of-auto-var
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-putenv-of-auto-var} to disable it.

This diagnostic warns for paths through the code in which a
call to @code{putenv} is passed a pointer to an automatic variable
or an on-stack buffer.

See @uref{https://wiki.sei.cmu.edu/confluence/x/6NYxBQ, POS34-C. Do not call putenv() with a pointer to an automatic variable as the argument}.

@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-allocation-size
@opindex Wanalyzer-tainted-allocation-size
@opindex Wno-analyzer-tainted-allocation-size
This warning requires both @option{-fanalyzer} and
@option{-fanalyzer-checker=taint} to enable it;
use @option{-Wno-analyzer-tainted-allocation-size} 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 size
of an allocation without being sanitized, so that an attacker could
inject an excessively large allocation and potentially cause a denial
of service attack.

See @uref{https://cwe.mitre.org/data/definitions/789.html, CWE-789: Memory Allocation with Excessive Size Value}.

@item -Wno-analyzer-tainted-assertion
@opindex Wanalyzer-tainted-assertion
@opindex Wno-analyzer-tainted-assertion

This warning requires both @option{-fanalyzer} and
@option{-fanalyzer-checker=taint} to enable it;
use @option{-Wno-analyzer-tainted-assertion} 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 part of a
condition without being first sanitized, and that condition guards a
call to a function marked with attribute @code{noreturn}
(such as the function @code{__builtin_unreachable}).  Such functions
typically indicate abnormal termination of the program, such as for
assertion failure handlers.  For example:

@smallexample
assert (some_tainted_value < SOME_LIMIT);
@end smallexample

In such cases:

@itemize
@item
when assertion-checking is enabled: an attacker could trigger
a denial of service by injecting an assertion failure

@item
when assertion-checking is disabled, such as by defining @code{NDEBUG},
an attacker could inject data that subverts the process, since it
presumably violates a precondition that is being assumed by the code.

@end itemize

Note that when assertion-checking is disabled, the assertions are
typically removed by the preprocessor before the analyzer has a chance
to "see" them, so this diagnostic can only generate warnings on builds
in which assertion-checking is enabled.

For the purpose of this warning, any function marked with attribute
@code{noreturn} is considered as a possible assertion failure
handler, including @code{__builtin_unreachable}.  Note that these functions
are sometimes removed by the optimizer before the analyzer "sees" them.
Hence optimization should be disabled when attempting to trigger this
diagnostic.

See @uref{https://cwe.mitre.org/data/definitions/617.html, CWE-617: Reachable Assertion}.

The warning can also report problematic constructions such as

@smallexample
switch (some_tainted_value) @{
case 0:
  /* [...etc; various valid cases omitted...] */
  break;

default:
  __builtin_unreachable (); /* BUG: attacker can trigger this  */
@}
@end smallexample

despite the above not being an assertion failure, strictly speaking.

@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, so that an attacker
could inject an out-of-bounds access.

See @uref{https://cwe.mitre.org/data/definitions/129.html, CWE-129: Improper Validation of Array Index}.

@item -Wno-analyzer-tainted-divisor
@opindex Wanalyzer-tainted-divisor
@opindex Wno-analyzer-tainted-divisor
This warning requires both @option{-fanalyzer} and
@option{-fanalyzer-checker=taint} to enable it;
use @option{-Wno-analyzer-tainted-divisor} 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 divisor
in a division or modulus operation without being sanitized, so that
an attacker could inject a division-by-zero.

See @uref{https://cwe.mitre.org/data/definitions/369.html, CWE-369: Divide By Zero}.

@item -Wno-analyzer-tainted-offset
@opindex Wanalyzer-tainted-offset
@opindex Wno-analyzer-tainted-offset
This warning requires both @option{-fanalyzer} and
@option{-fanalyzer-checker=taint} to enable it;
use @option{-Wno-analyzer-tainted-offset} 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 a pointer offset
without being sanitized, so that an attacker could inject an out-of-bounds
access.

See @uref{https://cwe.mitre.org/data/definitions/823.html, CWE-823: Use of Out-of-range Pointer Offset}.

@item -Wno-analyzer-tainted-size
@opindex Wanalyzer-tainted-size
@opindex Wno-analyzer-tainted-size
This warning requires both @option{-fanalyzer} and
@option{-fanalyzer-checker=taint} to enable it;
use @option{-Wno-analyzer-tainted-size} 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 size of
an operation such as @code{memset} without being sanitized, so that an
attacker could inject an out-of-bounds access.

See @uref{https://cwe.mitre.org/data/definitions/129.html, CWE-129: Improper Validation of Array Index}.

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

See @uref{https://cwe.mitre.org/data/definitions/479.html, CWE-479: Signal Handler Use of a Non-reentrant Function}.

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

See @uref{https://cwe.mitre.org/data/definitions/416.html, CWE-416: Use After Free}.

@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-va-arg-type-mismatch
@opindex Wanalyzer-va-arg-type-mismatch
@opindex Wno-analyzer-va-arg-type-mismatch
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-va-arg-type-mismatch}
to disable it.

This diagnostic warns for interprocedural paths through the code for which
the analyzer detects an attempt to use @code{va_arg} to extract a value
passed to a variadic call, but uses a type that does not match that of
the expression passed to the call.

See @uref{https://cwe.mitre.org/data/definitions/686.html, CWE-686: Function Call With Incorrect Argument Type}.

@item -Wno-analyzer-va-list-exhausted
@opindex Wanalyzer-va-list-exhausted
@opindex Wno-analyzer-va-list-exhausted
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-va-list-exhausted}
to disable it.

This diagnostic warns for interprocedural paths through the code for which
the analyzer detects an attempt to use @code{va_arg} to access the next
value passed to a variadic call, but all of the values in the
@code{va_list} have already been consumed.

See @uref{https://cwe.mitre.org/data/definitions/685.html, CWE-685: Function Call With Incorrect Number of Arguments}.

@item -Wno-analyzer-va-list-leak
@opindex Wanalyzer-va-list-leak
@opindex Wno-analyzer-va-list-leak
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-va-list-leak}
to disable it.

This diagnostic warns for interprocedural paths through the code for which
the analyzer detects that @code{va_start} or @code{va_copy} has been called
on a @code{va_list} without a corresponding call to @code{va_end}.

@item -Wno-analyzer-va-list-use-after-va-end
@opindex Wanalyzer-va-list-use-after-va-end
@opindex Wno-analyzer-va-list-use-after-va-end
This warning requires @option{-fanalyzer}, which enables it; use
@option{-Wno-analyzer-va-list-use-after-va-end}
to disable it.

This diagnostic warns for interprocedural paths through the code for which
the analyzer detects an attempt to use a @code{va_list}  after
@code{va_end} has been called on it.
@code{va_list}.

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

See @uref{https://cwe.mitre.org/data/definitions/457.html, CWE-457: Use of Uninitialized Variable}.

@end table

The analyzer has hardcoded knowledge about the behavior of the following
memory-management functions:

@itemize @bullet
@item @code{alloca}
@item The built-in functions @code{__builtin_alloc},
@code{__builtin_alloc_with_align}, @item @code{__builtin_calloc},
@code{__builtin_free}, @code{__builtin_malloc}, @code{__builtin_memcpy},
@code{__builtin_memcpy_chk}, @code{__builtin_memset},
@code{__builtin_memset_chk}, @code{__builtin_realloc},
@code{__builtin_stack_restore}, and @code{__builtin_stack_save}
@item @code{calloc}
@item @code{free}
@item @code{malloc}
@item @code{memset}
@item @code{operator delete}
@item @code{operator delete []}
@item @code{operator new}
@item @code{operator new []}
@item @code{realloc}
@item @code{strdup}
@item @code{strndup}
@end itemize

of the following functions for working with file descriptors:

@itemize @bullet
@item @code{open}
@item @code{close}
@item @code{creat}
@item @code{dup}, @code{dup2} and @code{dup3}
@item @code{pipe}, and @code{pipe2}
@item @code{read}
@item @code{write}
@end itemize

of the following functions for working with @code{<stdio.h>} streams:
@itemize @bullet
@item The built-in functions @code{__builtin_fprintf},
@code{__builtin_fprintf_unlocked}, @code{__builtin_fputc},
@code{__builtin_fputc_unlocked}, @code{__builtin_fputs},
@code{__builtin_fputs_unlocked}, @code{__builtin_fwrite},
@code{__builtin_fwrite_unlocked}, @code{__builtin_printf},
@code{__builtin_printf_unlocked}, @code{__builtin_putc},
@code{__builtin_putchar}, @code{__builtin_putchar_unlocked},
@code{__builtin_putc_unlocked}, @code{__builtin_puts},
@code{__builtin_puts_unlocked}, @code{__builtin_vfprintf}, and
@code{__builtin_vprintf}
@item @code{fopen}
@item @code{fclose}
@item @code{fgets}
@item @code{fgets_unlocked}
@item @code{fread}
@item @code{getchar}
@item @code{fprintf}
@item @code{printf}
@item @code{fwrite}
@end itemize

and of the following functions:

@itemize @bullet
@item The built-in functions @code{__builtin_expect},
@code{__builtin_expect_with_probability}, @code{__builtin_strchr},
@code{__builtin_strcpy}, @code{__builtin_strcpy_chk},
@code{__builtin_strlen}, @code{__builtin_va_copy}, and
@code{__builtin_va_start}
@item The GNU extensions @code{error} and @code{error_at_line}
@item @code{getpass}
@item @code{longjmp}
@item @code{putenv}
@item @code{setjmp}
@item @code{siglongjmp}
@item @code{signal}
@item @code{sigsetjmp}
@item @code{strchr}
@item @code{strlen}
@end itemize

In addition, various functions with an @code{__analyzer_} prefix have
special meaning to the analyzer, described in the GCC Internals manual.

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.

@emph{Note:} currently, @option{-fanalyzer-checker=taint} disables the
following warnings from @option{-fanalyzer}:

@gccoptlist{ @gol
-Wanalyzer-deref-before-check @gol
-Wanalyzer-double-fclose @gol
-Wanalyzer-double-free @gol
-Wanalyzer-exposure-through-output-file @gol
-Wanalyzer-fd-access-mode-mismatch @gol
-Wanalyzer-fd-double-close @gol
-Wanalyzer-fd-leak @gol
-Wanalyzer-fd-use-after-close @gol
-Wanalyzer-fd-use-without-check @gol
-Wanalyzer-file-leak @gol
-Wanalyzer-free-of-non-heap @gol
-Wanalyzer-malloc-leak @gol
-Wanalyzer-mismatching-deallocation @gol
-Wanalyzer-null-argument @gol
-Wanalyzer-null-dereference @gol
-Wanalyzer-possible-null-argument @gol
-Wanalyzer-possible-null-dereference @gol
-Wanalyzer-unsafe-call-within-signal-handler @gol
-Wanalyzer-use-after-free @gol
-Wanalyzer-va-list-leak @gol
-Wanalyzer-va-list-use-after-va-end @gol
}

@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 -fno-analyzer-undo-inlining
@opindex fanalyzer-undo-inlining
@opindex fno-analyzer-undo-inlining
This option is intended for analyzer developers.

@option{-fanalyzer} runs relatively late compared to other code analysis
tools, and some optimizations have already been applied to the code.  In
particular function inlining may have occurred, leading to the
interprocedural execution paths emitted by the analyzer containing
function frames that don't correspond to those in the original source
code.

By default the analyzer attempts to reconstruct the original function
frames, and to emit events showing the inlined calls.

With @option{-fno-analyzer-undo-inlining} this attempt to reconstruct
the original frame information can be be disabled, which may be of help
when debugging issues in 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},
@file{@var{file}.*.tg.dot}, and @file{@var{file}.*.fpath.txt}.

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

@item -fdump-analyzer-untracked
@opindex fdump-analyzer-untracked
Emit custom warnings with internal details intended for analyzer developers.

@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{-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 -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 -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), or @samp{zlib} (use zlib
compression in ELF gABI 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.cc,
@c several optimization flags default to true but control optimization
@c passes that are explicitly disabled at -O0.

@option{-O} turns on the following optimization flags:

@c Please keep the following list alphabetized.
@gccoptlist{-fauto-inc-dec @gol
-fbranch-count-reg @gol
-fcombine-stack-adjustments @gol
-fcompare-elim @gol
-fcprop-registers @gol
-fdce @gol
-fdefer-pop @gol
-fdelayed-branch @gol
-fdse @gol
-fforward-propagate @gol
-fguess-branch-probability @gol
-fif-conversion @gol
-fif-conversion2 @gol
-finline-functions-called-once @gol
-fipa-modref @gol
-fipa-profile @gol
-fipa-pure-const @gol
-fipa-reference @gol
-fipa-reference-addressable @gol
-fmerge-constants @gol
-fmove-loop-invariants @gol
-fmove-loop-stores@gol
-fomit-frame-pointer @gol
-freorder-blocks @gol
-fshrink-wrap @gol
-fshrink-wrap-separate @gol
-fsplit-wide-types @gol
-fssa-backprop @gol
-fssa-phiopt @gol
-ftree-bit-ccp @gol
-ftree-ccp @gol
-ftree-ch @gol
-ftree-coalesce-vars @gol
-ftree-copy-prop @gol
-ftree-dce @gol
-ftree-dominator-opts @gol
-ftree-dse @gol
-ftree-forwprop @gol
-ftree-fre @gol
-ftree-phiprop @gol
-ftree-pta @gol
-ftree-scev-cprop @gol
-ftree-sink @gol
-ftree-slsr @gol
-ftree-sra @gol
-ftree-ter @gol
-funit-at-a-time}

@item -O2
@opindex O2
Optimize even more.  GCC performs nearly all supported optimizations
that do not involve a space-speed tradeoff.
As compared to @option{-O}, this option increases both compilation time
and the performance of the generated code.

@option{-O2} turns on all optimization flags specified by @option{-O1}.  It
also turns on the following optimization flags:

@c Please keep the following list alphabetized!
@gccoptlist{-falign-functions  -falign-jumps @gol
-falign-labels  -falign-loops @gol
-fcaller-saves @gol
-fcode-hoisting @gol
-fcrossjumping @gol
-fcse-follow-jumps  -fcse-skip-blocks @gol
-fdelete-null-pointer-checks @gol
-fdevirtualize  -fdevirtualize-speculatively @gol
-fexpensive-optimizations @gol
-ffinite-loops @gol
-fgcse  -fgcse-lm  @gol
-fhoist-adjacent-loads @gol
-finline-functions @gol
-finline-small-functions @gol
-findirect-inlining @gol
-fipa-bit-cp  -fipa-cp  -fipa-icf @gol
-fipa-ra  -fipa-sra  -fipa-vrp @gol
-fisolate-erroneous-paths-dereference @gol
-flra-remat @gol
-foptimize-sibling-calls @gol
-foptimize-strlen @gol
-fpartial-inlining @gol
-fpeephole2 @gol
-freorder-blocks-algorithm=stc @gol
-freorder-blocks-and-partition  -freorder-functions @gol
-frerun-cse-after-loop  @gol
-fschedule-insns  -fschedule-insns2 @gol
-fsched-interblock  -fsched-spec @gol
-fstore-merging @gol
-fstrict-aliasing @gol
-fthread-jumps @gol
-ftree-builtin-call-dce @gol
-ftree-loop-vectorize @gol
-ftree-pre @gol
-ftree-slp-vectorize @gol
-ftree-switch-conversion  -ftree-tail-merge @gol
-ftree-vrp @gol
-fvect-cost-model=very-cheap}

Please note the warning under @option{-fgcse} about
invoking @option{-O2} on programs that use computed gotos.

@item -O3
@opindex O3
Optimize yet more.  @option{-O3} turns on all optimizations specified
by @option{-O2} and also turns on the following optimization flags:

@c Please keep the following list alphabetized!
@gccoptlist{-fgcse-after-reload @gol
-fipa-cp-clone
-floop-interchange @gol
-floop-unroll-and-jam @gol
-fpeel-loops @gol
-fpredictive-commoning @gol
-fsplit-loops @gol
-fsplit-paths @gol
-ftree-loop-distribution @gol
-ftree-partial-pre @gol
-funswitch-loops @gol
-fvect-cost-model=dynamic @gol
-fversion-loops-for-strides}

@item -O0
@opindex O0
Reduce compilation time and make debugging produce the expected
results.  This is the default.

@item -Os
@opindex Os
Optimize for size.  @option{-Os} enables all @option{-O2} optimizations 
except those that often increase code size:

@gccoptlist{-falign-functions  -falign-jumps @gol
-falign-labels  -falign-loops @gol
-fprefetch-loop-arrays  -freorder-blocks-algorithm=stc}

It also enables @option{-finline-functions}, causes the compiler to tune for
code size rather than execution speed, and performs further optimizations
designed to reduce code size.

@item -Ofast
@opindex Ofast
Disregard strict standards compliance.  @option{-Ofast} enables all
@option{-O3} optimizations.  It also enables optimizations that are not
valid for all standard-compliant programs.
It turns on @option{-ffast-math}, @option{-fallow-store-data-races}
and the Fortran-specific @option{-fstack-arrays}, unless
@option{-fmax-stack-var-size} is specified, and @option{-fno-protect-parens}.
It turns off @option{-fsemantic-interposition}.

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

@item -Oz
@opindex Oz
Optimize aggressively for size rather than speed.  This may increase
the number of instructions executed if those instructions require
fewer bytes to encode.  @option{-Oz} behaves similarly to @option{-Os}
including enabling most @option{-O2} optimizations.

@end table

If you use multiple @option{-O} options, with or without level numbers,
the last such option is the one that is effective.

Options of the form @option{-f@var{flag}} specify machine-independent
flags.  Most flags have both positive and negative forms; the negative
form of @option{-ffoo} is @option{-fno-foo}.  In the table
below, only one of the forms is listed---the one you typically 
use.  You can figure out the other form by either removing @samp{no-}
or adding it.

The following options control specific optimizations.  They are either
activated by @option{-O} options or are related to ones that are.  You
can use the following flags in the rare cases when ``fine-tuning'' of
optimizations to be performed is desired.

@table @gcctabopt
@item -fno-defer-pop
@opindex fno-defer-pop
@opindex fdefer-pop
For machines that must pop arguments after a function call, always pop 
the arguments as soon as each function returns.  
At levels @option{-O1} and higher, @option{-fdefer-pop} is the default;
this allows the compiler to let arguments accumulate on the stack for several
function calls and pop them all at once.

@item -fforward-propagate
@opindex fforward-propagate
Perform a forward propagation pass on RTL@.  The pass tries to combine two
instructions and checks if the result can be simplified.  If loop unrolling
is active, two passes are performed and the second is scheduled after
loop unrolling.

This option is enabled by default at optimization levels @option{-O1},
@option{-O2}, @option{-O3}, @option{-Os}.

@item -ffp-contract=@var{style}
@opindex ffp-contract
@option{-ffp-contract=off} disables floating-point expression contraction.
@option{-ffp-contract=fast} enables floating-point expression contraction
such as forming of fused multiply-add operations if the target has
native support for them.
@option{-ffp-contract=on} enables floating-point expression contraction
if allowed by the language standard.  This is currently not implemented
and treated equal to @option{-ffp-contract=off}.

The default is @option{-ffp-contract=fast}.

@item -fomit-frame-pointer
@opindex fomit-frame-pointer
Omit the frame pointer in functions that don't need one.  This avoids the
instructions to save, set up and restore the frame pointer; on many targets
it also makes an extra register available.

On some targets this flag has no effect because the standard calling sequence
always uses a frame pointer, so it cannot be omitted.

Note that @option{-fno-omit-frame-pointer} doesn't guarantee the frame pointer
is used in all functions.  Several targets always omit the frame pointer in
leaf functions.

Enabled by default at @option{-O1} and higher.

@item -foptimize-sibling-calls
@opindex foptimize-sibling-calls
Optimize sibling and tail recursive calls.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -foptimize-strlen
@opindex foptimize-strlen
Optimize various standard C string functions (e.g.@: @code{strlen},
@code{strchr} or @code{strcpy}) and
their @code{_FORTIFY_SOURCE} counterparts into faster alternatives.

Enabled at levels @option{-O2}, @option{-O3}.

@item -fno-inline
@opindex fno-inline
@opindex finline
Do not expand any functions inline apart from those marked with
the @code{always_inline} attribute.  This is the default when not
optimizing.

Single functions can be exempted from inlining by marking them
with the @code{noinline} attribute.

@item -finline-small-functions
@opindex finline-small-functions
Integrate functions into their callers when their body is smaller than expected
function call code (so overall size of program gets smaller).  The compiler
heuristically decides which functions are simple enough to be worth integrating
in this way.  This inlining applies to all functions, even those not declared
inline.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -findirect-inlining
@opindex findirect-inlining
Inline also indirect calls that are discovered to be known at compile
time thanks to previous inlining.  This option has any effect only
when inlining itself is turned on by the @option{-finline-functions}
or @option{-finline-small-functions} options.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -finline-functions
@opindex finline-functions
Consider all functions for inlining, even if they are not declared inline.
The compiler heuristically decides which functions are worth integrating
in this way.

If all calls to a given function are integrated, and the function is
declared @code{static}, then the function is normally not output as
assembler code in its own right.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.  Also enabled
by @option{-fprofile-use} and @option{-fauto-profile}.

@item -finline-functions-called-once
@opindex finline-functions-called-once
Consider all @code{static} functions called once for inlining into their
caller even if they are not marked @code{inline}.  If a call to a given
function is integrated, then the function is not output as assembler code
in its own right.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os},
but not @option{-Og}.

@item -fearly-inlining
@opindex fearly-inlining
Inline functions marked by @code{always_inline} and functions whose body seems
smaller than the function call overhead early before doing
@option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
makes profiling significantly cheaper and usually inlining faster on programs
having large chains of nested wrapper functions.

Enabled by default.

@item -fipa-sra
@opindex fipa-sra
Perform interprocedural scalar replacement of aggregates, removal of
unused parameters and replacement of parameters passed by reference
by parameters passed by value.

Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.

@item -finline-limit=@var{n}
@opindex finline-limit
By default, GCC limits the size of functions that can be inlined.  This flag
allows coarse control of this limit.  @var{n} is the size of functions that
can be inlined in number of pseudo instructions.

Inlining is actually controlled by a number of parameters, which may be
specified individually by using @option{--param @var{name}=@var{value}}.
The @option{-finline-limit=@var{n}} option sets some of these parameters
as follows:

@table @gcctabopt
@item max-inline-insns-single
is set to @var{n}/2.
@item max-inline-insns-auto
is set to @var{n}/2.
@end table

See below for a documentation of the individual
parameters controlling inlining and for the defaults of these parameters.

@emph{Note:} there may be no value to @option{-finline-limit} that results
in default behavior.

@emph{Note:} pseudo instruction represents, in this particular context, an
abstract measurement of function's size.  In no way does it represent a count
of assembly instructions and as such its exact meaning might change from one
release to an another.

@item -fno-keep-inline-dllexport
@opindex fno-keep-inline-dllexport
@opindex fkeep-inline-dllexport
This is a more fine-grained version of @option{-fkeep-inline-functions},
which applies only to functions that are declared using the @code{dllexport}
attribute or declspec.  @xref{Function Attributes,,Declaring Attributes of
Functions}.

@item -fkeep-inline-functions
@opindex fkeep-inline-functions
In C, emit @code{static} functions that are declared @code{inline}
into the object file, even if the function has been inlined into all
of its callers.  This switch does not affect functions using the
@code{extern inline} extension in GNU C90@.  In C++, emit any and all
inline functions into the object file.

@item -fkeep-static-functions
@opindex fkeep-static-functions
Emit @code{static} functions into the object file, even if the function
is never used.

@item -fkeep-static-consts
@opindex fkeep-static-consts
Emit variables declared @code{static const} when optimization isn't turned
on, even if the variables aren't referenced.

GCC enables this option by default.  If you want to force the compiler to
check if a variable is referenced, regardless of whether or not
optimization is turned on, use the @option{-fno-keep-static-consts} option.

@item -fmerge-constants
@opindex fmerge-constants
Attempt to merge identical constants (string constants and floating-point
constants) across compilation units.

This option is the default for optimized compilation if the assembler and
linker support it.  Use @option{-fno-merge-constants} to inhibit this
behavior.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fmerge-all-constants
@opindex fmerge-all-constants
Attempt to merge identical constants and identical variables.

This option implies @option{-fmerge-constants}.  In addition to
@option{-fmerge-constants} this considers e.g.@: even constant initialized
arrays or initialized constant variables with integral or floating-point
types.  Languages like C or C++ require each variable, including multiple
instances of the same variable in recursive calls, to have distinct locations,
so using this option results in non-conforming
behavior.

@item -fmodulo-sched
@opindex fmodulo-sched
Perform swing modulo scheduling immediately before the first scheduling
pass.  This pass looks at innermost loops and reorders their
instructions by overlapping different iterations.

@item -fmodulo-sched-allow-regmoves
@opindex fmodulo-sched-allow-regmoves
Perform more aggressive SMS-based modulo scheduling with register moves
allowed.  By setting this flag certain anti-dependences edges are
deleted, which triggers the generation of reg-moves based on the
life-range analysis.  This option is effective only with
@option{-fmodulo-sched} enabled.

@item -fno-branch-count-reg
@opindex fno-branch-count-reg
@opindex fbranch-count-reg
Disable the optimization pass that scans for opportunities to use 
``decrement and branch'' instructions on a count register instead of
instruction sequences that decrement a register, compare it against zero, and
then branch based upon the result.  This option is only meaningful on
architectures that support such instructions, which include x86, PowerPC,
IA-64 and S/390.  Note that the @option{-fno-branch-count-reg} option
doesn't remove the decrement and branch instructions from the generated
instruction stream introduced by other optimization passes.

The default is @option{-fbranch-count-reg} at @option{-O1} and higher,
except for @option{-Og}.

@item -fno-function-cse
@opindex fno-function-cse
@opindex ffunction-cse
Do not put function addresses in registers; make each instruction that
calls a constant function contain the function's address explicitly.

This option results in less efficient code, but some strange hacks
that alter the assembler output may be confused by the optimizations
performed when this option is not used.

The default is @option{-ffunction-cse}

@item -fno-zero-initialized-in-bss
@opindex fno-zero-initialized-in-bss
@opindex fzero-initialized-in-bss
If the target supports a BSS section, GCC by default puts variables that
are initialized to zero into BSS@.  This can save space in the resulting
code.

This option turns off this behavior because some programs explicitly
rely on variables going to the data section---e.g., so that the
resulting executable can find the beginning of that section and/or make
assumptions based on that.

The default is @option{-fzero-initialized-in-bss}.

@item -fthread-jumps
@opindex fthread-jumps
Perform optimizations that check to see if a jump branches to a
location where another comparison subsumed by the first is found.  If
so, the first branch is redirected to either the destination of the
second branch or a point immediately following it, depending on whether
the condition is known to be true or false.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}.

@item -fsplit-wide-types
@opindex fsplit-wide-types
When using a type that occupies multiple registers, such as @code{long
long} on a 32-bit system, split the registers apart and allocate them
independently.  This normally generates better code for those types,
but may make debugging more difficult.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3},
@option{-Os}.

@item -fsplit-wide-types-early
@opindex fsplit-wide-types-early
Fully split wide types early, instead of very late.
This option has no effect unless @option{-fsplit-wide-types} is turned on.

This is the default on some targets.

@item -fcse-follow-jumps
@opindex fcse-follow-jumps
In common subexpression elimination (CSE), scan through jump instructions
when the target of the jump is not reached by any other path.  For
example, when CSE encounters an @code{if} statement with an
@code{else} clause, CSE follows the jump when the condition
tested is false.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fcse-skip-blocks
@opindex fcse-skip-blocks
This is similar to @option{-fcse-follow-jumps}, but causes CSE to
follow jumps that conditionally skip over blocks.  When CSE
encounters a simple @code{if} statement with no else clause,
@option{-fcse-skip-blocks} causes CSE to follow the jump around the
body of the @code{if}.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -frerun-cse-after-loop
@opindex frerun-cse-after-loop
Re-run common subexpression elimination after loop optimizations are
performed.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fgcse
@opindex fgcse
Perform a global common subexpression elimination pass.
This pass also performs global constant and copy propagation.

@emph{Note:} When compiling a program using computed gotos, a GCC
extension, you may get better run-time performance if you disable
the global common subexpression elimination pass by adding
@option{-fno-gcse} to the command line.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fgcse-lm
@opindex fgcse-lm
When @option{-fgcse-lm} is enabled, global common subexpression elimination
attempts to move loads that are only killed by stores into themselves.  This
allows a loop containing a load/store sequence to be changed to a load outside
the loop, and a copy/store within the loop.

Enabled by default when @option{-fgcse} is enabled.

@item -fgcse-sm
@opindex fgcse-sm
When @option{-fgcse-sm} is enabled, a store motion pass is run after
global common subexpression elimination.  This pass attempts to move
stores out of loops.  When used in conjunction with @option{-fgcse-lm},
loops containing a load/store sequence can be changed to a load before
the loop and a store after the loop.

Not enabled at any optimization level.

@item -fgcse-las
@opindex fgcse-las
When @option{-fgcse-las} is enabled, the global common subexpression
elimination pass eliminates redundant loads that come after stores to the
same memory location (both partial and full redundancies).

Not enabled at any optimization level.

@item -fgcse-after-reload
@opindex fgcse-after-reload
When @option{-fgcse-after-reload} is enabled, a redundant load elimination
pass is performed after reload.  The purpose of this pass is to clean up
redundant spilling.

Enabled by @option{-O3}, @option{-fprofile-use} and @option{-fauto-profile}.

@item -faggressive-loop-optimizations
@opindex faggressive-loop-optimizations
This option tells the loop optimizer to use language constraints to
derive bounds for the number of iterations of a loop.  This assumes that
loop code does not invoke undefined behavior by for example causing signed
integer overflows or out-of-bound array accesses.  The bounds for the
number of iterations of a loop are used to guide loop unrolling and peeling
and loop exit test optimizations.
This option is enabled by default.

@item -funconstrained-commons
@opindex funconstrained-commons
This option tells the compiler that variables declared in common blocks
(e.g.@: Fortran) may later be overridden with longer trailing arrays. This
prevents certain optimizations that depend on knowing the array bounds.

@item -fcrossjumping
@opindex fcrossjumping
Perform cross-jumping transformation.
This transformation unifies equivalent code and saves code size.  The
resulting code may or may not perform better than without cross-jumping.

Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.

@item -fauto-inc-dec
@opindex fauto-inc-dec
Combine increments or decrements of addresses with memory accesses.
This pass is always skipped on architectures that do not have
instructions to support this.  Enabled by default at @option{-O1} and
higher on architectures that support this.

@item -fdce
@opindex fdce
Perform dead code elimination (DCE) on RTL@.
Enabled by default at @option{-O1} and higher.

@item -fdse
@opindex fdse
Perform dead store elimination (DSE) on RTL@.
Enabled by default at @option{-O1} and higher.

@item -fif-conversion
@opindex fif-conversion
Attempt to transform conditional jumps into branch-less equivalents.  This
includes use of conditional moves, min, max, set flags and abs instructions, and
some tricks doable by standard arithmetics.  The use of conditional execution
on chips where it is available is controlled by @option{-fif-conversion2}.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}, but
not with @option{-Og}.

@item -fif-conversion2
@opindex fif-conversion2
Use conditional execution (where available) to transform conditional jumps into
branch-less equivalents.

Enabled at levels @option{-O1}, @option{-O2}, @option{-O3}, @option{-Os}, but
not with @option{-Og}.

@item -fdeclone-ctor-dtor
@opindex fdeclone-ctor-dtor
The C++ ABI requires multiple entry points for constructors and
destructors: one for a base subobject, one for a complete object, and
one for a virtual destructor that calls operator delete afterwards.
For a hierarchy with virtual bases, the base and complete variants are
clones, which means two copies of the function.  With this option, the
base and complete variants are changed to be thunks that call a common
implementation.

Enabled by @option{-Os}.

@item -fdelete-null-pointer-checks
@opindex fdelete-null-pointer-checks
Assume that programs cannot safely dereference null pointers, and that
no code or data element resides at address zero.
This option enables simple constant
folding optimizations at all optimization levels.  In addition, other
optimization passes in GCC use this flag to control global dataflow
analyses that eliminate useless checks for null pointers; these assume
that a memory access to address zero always results in a trap, so
that if a pointer is checked after it has already been dereferenced,
it cannot be null.

Note however that in some environments this assumption is not true.
Use @option{-fno-delete-null-pointer-checks} to disable this optimization
for programs that depend on that behavior.

This option is enabled by default on most targets.  On Nios II ELF, it
defaults to off.  On AVR 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{-O2} 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{-O2} 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, @option{-Wuninitialized} and
@option{-Wanalyzer-use-of-uninitialized-value} 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.
However, the current implementation cannot initialize automatic variables that
are declared between the controlling expression and the first case of a
@code{switch} statement.  Using @option{-Wtrivial-auto-var-init} to report all
such cases.

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 -fipa-strict-aliasing
@opindex fipa-strict-aliasing
Controls whether rules of @option{-fstrict-aliasing} are applied across
function boundaries.  Note that if multiple functions gets inlined into a
single function the memory accesses are no longer considered to be crossing a
function boundary.

The @option{-fipa-strict-aliasing} option is enabled by default and is
effective only in combination with @option{-fstrict-aliasing}.

@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 -funreachable-traps
@opindex funreachable-traps
With this option, the compiler turns calls to
@code{__builtin_unreachable} into traps, instead of using them for
optimization.  This also affects any such calls implicitly generated
by the compiler.

This option has the same effect as @option{-fsanitize=unreachable
-fsanitize-trap=unreachable}, but does not affect the values of those
options.  If @option{-fsanitize=unreachable} is enabled, that option
takes priority over this one.

This option is enabled by default at @option{-O0} and @option{-Og}.

@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 or C++, if @option{-fexcess-precision=standard} is specified
then excess precision follows the rules specified in ISO C99 or C++; 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 or C++ if a strict
conformance option such as @option{-std=c99} or @option{-std=c++17} 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 or 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}.

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 along with @option{-frounding-math} to specify the
default state for @code{FENV_ACCESS}.

@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 along with @option{-ftrapping-math} 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.
See details about the file naming in @option{-fprofile-arcs}.

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.cc}, 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-functions-called-once-loop-depth
Maximal loop depth of a call considered by inline heuristics that tries to
inline all functions called once.

@item max-inline-functions-called-once-insns
Maximal estimated size of functions produced while inlining functions called
once.

@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 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-layout-candidates
The maximum number of possible vector layouts (such as permutations)
to consider when optimizing to-be-vectorized code.

@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-protector} 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-jump-thread-paths
The maximum number of paths to consider when searching for jump threading
opportunities.  When arriving at a block, incoming edges are only considered
if the number of paths to be searched so far multiplied by the number of
incoming edges does not exhaust the specified maximum number of paths to
consider.

@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-profile-count-base
When using @option{-fprofile-use} option, IPA-CP will consider the measured
execution count of a call graph edge at this percentage position in their
histogram as the basis for its heuristics calculation.

@item ipa-cp-recursive-freq-factor
The number of times interprocedural copy propagation expects recursive
functions to call themselves.

@item ipa-cp-recursion-penalty
Percentage penalty the recursive functions will receive when they
are evaluated for cloning.

@item ipa-cp-single-call-penalty
Percentage penalty functions containing a single call to another
function will receive when they are evaluated for cloning.

@item ipa-max-agg-items
IPA-CP is also capable to propagate a number of scalar values passed
in an aggregate. @option{ipa-max-agg-items} controls the maximum
number of such values per one parameter.

@item ipa-cp-loop-hint-bonus
When IPA-CP determines that a cloning candidate would make the number
of iterations of a loop known, it adds a bonus of
@option{ipa-cp-loop-hint-bonus} to the profitability score of
the candidate.

@item ipa-max-loop-predicates
The maximum number of different predicates IPA will use to describe when
loops in a function have known properties.

@item ipa-max-aa-steps
During its analysis of function bodies, IPA-CP employs alias analysis
in order to track values pointed to by function parameters.  In order
not spend too much time analyzing huge functions, it gives up and
consider all memory clobbered after examining
@option{ipa-max-aa-steps} statements modifying memory.

@item ipa-max-switch-predicate-bounds
Maximal number of boundary endpoints of case ranges of switch statement.
For switch exceeding this limit, IPA-CP will not construct cloning cost
predicate, which is used to estimate cloning benefit, for default case
of the switch statement.

@item ipa-max-param-expr-ops
IPA-CP will analyze conditional statement that references some function
parameter to estimate benefit for cloning upon certain constant value.
But if number of operations in a parameter expression exceeds
@option{ipa-max-param-expr-ops}, the expression is treated as complicated
one, and is not handled by IPA analysis.

@item lto-partitions
Specify desired number of partitions produced during WHOPR compilation.
The number of partitions should exceed the number of CPUs used for compilation.

@item lto-min-partition
Size of minimal partition for WHOPR (in estimated instructions).
This prevents expenses of splitting very small programs into too many
partitions.

@item lto-max-partition
Size of max partition for WHOPR (in estimated instructions).
to provide an upper bound for individual size of partition.
Meant to be used only with balanced partitioning.

@item lto-max-streaming-parallelism
Maximal number of parallel processes used for LTO streaming.

@item cxx-max-namespaces-for-diagnostic-help
The maximum number of namespaces to consult for suggestions when C++
name lookup fails for an identifier.

@item sink-frequency-threshold
The maximum relative execution frequency (in percents) of the target block
relative to a statement's original block to allow statement sinking of a
statement.  Larger numbers result in more aggressive statement sinking.
A small positive adjustment is applied for
statements with memory operands as those are even more profitable so sink.

@item max-stores-to-sink
The maximum number of conditional store pairs that can be sunk.  Set to 0
if either vectorization (@option{-ftree-vectorize}) or if-conversion
(@option{-ftree-loop-if-convert}) is disabled.

@item case-values-threshold
The smallest number of different values for which it is best to use a
jump-table instead of a tree of conditional branches.  If the value is
0, use the default for the machine.

@item jump-table-max-growth-ratio-for-size
The maximum code size growth ratio when expanding
into a jump table (in percent).  The parameter is used when
optimizing for size.

@item jump-table-max-growth-ratio-for-speed
The maximum code size growth ratio when expanding
into a jump table (in percent).  The parameter is used when
optimizing for speed.

@item tree-reassoc-width
Set the maximum number of instructions executed in parallel in
reassociated tree. This parameter overrides target dependent
heuristics used by default if has non zero value.

@item sched-pressure-algorithm
Choose between the two available implementations of
@option{-fsched-pressure}.  Algorithm 1 is the original implementation
and is the more likely to prevent instructions from being reordered.
Algorithm 2 was designed to be a compromise between the relatively
conservative approach taken by algorithm 1 and the rather aggressive
approach taken by the default scheduler.  It relies more heavily on
having a regular register file and accurate register pressure classes.
See @file{haifa-sched.cc} 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 threader-debug
threader-debug=[none|all] Enables verbose dumping of the threader solver.

@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 vrp1-mode
Specifies the mode VRP pass 1 should operate in.

@item vrp2-mode
Specifies the mode VRP pass 2 should operate in.

@item ranger-debug
Specifies the type of debug output to be issued for ranges.

@item evrp-switch-limit
Specifies the maximum number of switch cases before EVRP ignores a switch.

@item unroll-jam-min-percent
The minimum percentage of memory references that must be optimized
away for the unroll-and-jam transformation to be considered profitable.

@item unroll-jam-max-unroll
The maximum number of times the outer loop should be unrolled by
the unroll-and-jam transformation.

@item max-rtl-if-conversion-unpredictable-cost
Maximum permissible cost for the sequence that would be generated
by the RTL if-conversion pass for a branch that is considered unpredictable.

@item max-variable-expansions-in-unroller
If @option{-fvariable-expansion-in-unroller} is used, the maximum number
of times that an individual variable will be expanded during loop unrolling.

@item 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 vect-induction-float
Enable loop vectorization of floating point inductions.

@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 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 fsm-scale-path-stmts
Scale factor to apply to the number of statements in a threading path
when comparing to the number of (scaled) blocks.

@item uninit-control-dep-attempts
Maximum number of nested calls to search for control dependencies
during uninitialized variable analysis.

@item 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 relation-block-limit
Maximum number of relations the oracle will register in a basic block.

@item min-pagesize
Minimum page size for warning purposes.

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

@item aarch64-vect-unroll-limit
The vectorizer will use available tuning information to determine whether it
would be beneficial to unroll the main vectorized loop and by how much.  This
parameter set's the upper bound of how much the vectorizer will unroll the main
loop.  The default value is four.

@end table

The following choices of @var{name} are available on i386 and x86_64 targets:

@table @gcctabopt
@item x86-stlf-window-ninsns
Instructions number above which STFL stall penalty can be compensated.

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

Note that if a command line directly links source files, the corresponding
@var{.gcda} files will be prefixed with the unsuffixed name of the output file.
E.g. @code{gcc a.c b.c -o binary} would generate @file{binary-a.gcda} and
@file{binary-b.gcda} files.

@xref{Cross-profiling}.

@cindex @command{gcov}
@item --coverage
@opindex coverage

This option is used to compile and link code instrumented for coverage
analysis.  The option is a synonym for @option{-fprofile-arcs}
@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
linking).  See the documentation for those options for more details.

@itemize

@item
Compile the source files with @option{-fprofile-arcs} plus optimization
and code generation options.  For test coverage analysis, use the
additional @option{-ftest-coverage} option.  You do not need to profile
every source file in a program.

@item
Compile the source files additionally with @option{-fprofile-abs-path}
to create absolute path names in the @file{.gcno} files.  This allows
@command{gcov} to find the correct sources in projects where compilations
occur with different working directories.

@item
Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
(the latter implies the former).

@item
Run the program on a representative workload to generate the arc profile
information.  This may be repeated any number of times.  You can run
concurrent instances of your program, and provided that the file system
supports locking, the data files will be correctly updated.  Unless
a strict ISO C dialect option is in effect, @code{fork} calls are
detected and correctly handled without double counting.

Moreover, an object file can be recompiled multiple times
and the corresponding @file{.gcda} file merges as long as
the source file and the compiler options are unchanged.

@item
For profile-directed optimizations, compile the source files again with
the same optimization and code generation options plus
@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
Control Optimization}).

@item
For test coverage analysis, use @command{gcov} to produce human readable
information from the @file{.gcno} and @file{.gcda} files.  Refer to the
@command{gcov} documentation for further information.

@end itemize

With @option{-fprofile-arcs}, for each function of your program GCC
creates a program flow graph, then finds a spanning tree for the graph.
Only arcs that are not on the spanning tree have to be instrumented: the
compiler adds code to count the number of times that these arcs are
executed.  When an arc is the only exit or only entrance to a block, the
instrumentation code can be added to the block; otherwise, a new basic
block must be created to hold the instrumentation code.

@need 2000
@item -ftest-coverage
@opindex ftest-coverage
Produce a notes file that the @command{gcov} code-coverage utility
(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
show program coverage.  Each source file's note file is called
@file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
above for a description of @var{auxname} and instructions on how to
generate test coverage data.  Coverage data matches the source files
more closely if you do not optimize.

@item -fprofile-abs-path
@opindex fprofile-abs-path
Automatically convert relative source file names to absolute path names
in the @file{.gcno} files.  This allows @command{gcov} to find the correct
sources in projects where compilations occur with different working
directories.

@item -fprofile-dir=@var{path}
@opindex fprofile-dir

Set the directory to search for the profile data files in to @var{path}.
This option affects only the profile data generated by
@option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
and its related options.  Both absolute and relative paths can be used.
By default, GCC uses the current directory as @var{path}, thus the
profile data file appears in the same directory as the object file.
In order to prevent the file name clashing, if the object file name is
not an absolute path, we mangle the absolute path of the
@file{@var{sourcename}.gcda} file and use it as the file name of a
@file{.gcda} file.  See details about the file naming in @option{-fprofile-arcs}.
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 freestanding
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 *const __gcov_info_start[];
extern const struct gcov_info *const __gcov_info_end[];

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
filename (const char *f, void *arg)
@{
  __gcov_filename_to_gcfn (f, dump, arg );
@}

static void *
allocate (unsigned length, void *arg)
@{
  return malloc (length);
@}

static void
dump_gcov_info (void)
@{
  const struct gcov_info *const *info = __gcov_info_start;
  const struct gcov_info *const *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 (void)
@{
  dump_gcov_info ();
  return 0;
@}
@end smallexample

The @command{merge-stream} subcommand of @command{gcov-tool} may be used to
deserialize the data stream generated by the @code{__gcov_filename_to_gcfn} and
@code{__gcov_info_to_gcda} functions and merge the profile information into
@file{.gcda} files on the host filesystem.

@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-prefix-map=@var{old}=@var{new}
@opindex fprofile-prefix-map
When compiling files residing in directory @file{@var{old}}, record
profiling information (with @option{--coverage})
describing them as if the files resided in
directory @file{@var{new}} instead.
See also @option{-ffile-prefix-map}.

@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=shadow-call-stack
@opindex fsanitize=shadow-call-stack
Enable ShadowCallStack, a security enhancement mechanism used to protect
programs against return address overwrites (e.g. stack buffer overflows.)
It works by saving a function's return address to a separately allocated
shadow call stack in the function prologue and restoring the return address
from the shadow call stack in the function epilogue.  Instrumentation only
occurs in functions that need to save the return address to the stack.

Currently it only supports the aarch64 platform.  It is specifically
designed for linux kernels that enable the CONFIG_SHADOW_CALL_STACK option.
For the user space programs, runtime support is not currently provided
in libc and libgcc.  Users who want to use this feature in user space need
to provide their own support for the runtime.  It should be noted that
this may cause the ABI rules to be broken.

On aarch64, the instrumentation makes use of the platform register @code{x18}.
This generally means that any code that may run on the same thread as code
compiled with ShadowCallStack must be compiled with the flag
@option{-ffixed-x18}, otherwise functions compiled without
@option{-ffixed-x18} might clobber @code{x18} and so corrupt the shadow
stack pointer.

Also, because there is no userspace runtime support, code compiled with
ShadowCallStack cannot use exception handling.  Use @option{-fno-exceptions}
to turn off exceptions.

See @uref{https://clang.llvm.org/docs/ShadowCallStack.html} for more
details.

@item -fsanitize=thread
@opindex fsanitize=thread
Enable ThreadSanitizer, a fast data race detector.
Memory access instructions are instrumented to detect
data race bugs.  See @uref{https://github.com/google/sanitizers/wiki#threadsanitizer} for more
details. The run-time behavior can be influenced using the @env{TSAN_OPTIONS}
environment variable; see
@url{https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags} for a list of
supported options.
The option cannot be combined with @option{-fsanitize=address},
@option{-fsanitize=leak}.

Note that sanitized atomic builtins cannot throw exceptions when
operating on invalid memory addresses with non-call exceptions
(@option{-fnon-call-exceptions}).

@item -fsanitize=leak
@opindex fsanitize=leak
Enable LeakSanitizer, a memory leak detector.
This option only matters for linking of executables and
the executable is linked against a library that overrides @code{malloc}
and other allocator functions.  See
@uref{https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer} for more
details.  The run-time behavior can be influenced using the
@env{LSAN_OPTIONS} environment variable.
The option cannot be combined with @option{-fsanitize=thread}.

@item -fsanitize=undefined
@opindex fsanitize=undefined
Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
Various computations are instrumented to detect undefined behavior
at runtime.  See @uref{https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html} for more details.   The run-time behavior can be influenced using the
@env{UBSAN_OPTIONS} environment variable.  Current suboptions are:

@table @gcctabopt

@item -fsanitize=shift
@opindex fsanitize=shift
This option enables checking that the result of a shift operation is
not undefined.  Note that what exactly is considered undefined differs
slightly between C and C++, as well as between ISO C90 and C99, etc.
This option has two suboptions, @option{-fsanitize=shift-base} and
@option{-fsanitize=shift-exponent}.

@item -fsanitize=shift-exponent
@opindex fsanitize=shift-exponent
This option enables checking that the second argument of a shift operation
is not negative and is smaller than the precision of the promoted first
argument.

@item -fsanitize=shift-base
@opindex fsanitize=shift-base
If the second argument of a shift operation is within range, check that the
result of a shift operation is not undefined.  Note that what exactly is
considered undefined differs slightly between C and C++, as well as between
ISO C90 and C99, etc.

@item -fsanitize=integer-divide-by-zero
@opindex fsanitize=integer-divide-by-zero
Detect integer division by zero.

@item -fsanitize=unreachable
@opindex fsanitize=unreachable
With this option, the compiler turns the @code{__builtin_unreachable}
call into a diagnostics message call instead.  When reaching the
@code{__builtin_unreachable} call, the behavior is undefined.

@item -fsanitize=vla-bound
@opindex fsanitize=vla-bound
This option instructs the compiler to check that the size of a variable
length array is positive.

@item -fsanitize=null
@opindex fsanitize=null
This option enables pointer checking.  Particularly, the application
built with this option turned on will issue an error message when it
tries to dereference a NULL pointer, or if a reference (possibly an
rvalue reference) is bound to a NULL pointer, or if a method is invoked
on an object pointed by a NULL pointer.

@item -fsanitize=return
@opindex fsanitize=return
This option enables return statement checking.  Programs
built with this option turned on will issue an error message
when the end of a non-void function is reached without actually
returning a value.  This option works in C++ only.

@item -fsanitize=signed-integer-overflow
@opindex fsanitize=signed-integer-overflow
This option enables signed integer overflow checking.  We check that
the result of @code{+}, @code{*}, and both unary and binary @code{-}
does not overflow in the signed arithmetics.  This also detects
@code{INT_MIN / -1} signed division.  Note, integer promotion
rules must be taken into account.  That is, the following is not an
overflow:
@smallexample
signed char a = SCHAR_MAX;
a++;
@end smallexample

@item -fsanitize=bounds
@opindex fsanitize=bounds
This option enables instrumentation of array bounds.  Various out of bounds
accesses are detected.  Flexible array members, flexible array member-like
arrays, and initializers of variables with static storage are not instrumented.

@item -fsanitize=bounds-strict
@opindex fsanitize=bounds-strict
This option enables strict instrumentation of array bounds.  Most out of bounds
accesses are detected, including flexible array members and flexible array
member-like arrays.  Initializers of variables with static storage are not
instrumented.

@item -fsanitize=alignment
@opindex fsanitize=alignment

This option enables checking of alignment of pointers when they are
dereferenced, or when a reference is bound to insufficiently aligned target,
or when a method or constructor is invoked on insufficiently aligned object.

@item -fsanitize=object-size
@opindex fsanitize=object-size
This option enables instrumentation of memory references using the
@code{__builtin_object_size} function.  Various out of bounds pointer
accesses are detected.

@item -fsanitize=float-divide-by-zero
@opindex fsanitize=float-divide-by-zero
Detect floating-point division by zero.  Unlike other similar options,
@option{-fsanitize=float-divide-by-zero} is not enabled by
@option{-fsanitize=undefined}, since floating-point division by zero can
be a legitimate way of obtaining infinities and NaNs.

@item -fsanitize=float-cast-overflow
@opindex fsanitize=float-cast-overflow
This option enables floating-point type to integer conversion checking.
We check that the result of the conversion does not overflow.
Unlike other similar options, @option{-fsanitize=float-cast-overflow} is
not enabled by @option{-fsanitize=undefined}.
This option does not work well with @code{FE_INVALID} exceptions enabled.

@item -fsanitize=nonnull-attribute
@opindex fsanitize=nonnull-attribute

This option enables instrumentation of calls, checking whether null values
are not passed to arguments marked as requiring a non-null value by the
@code{nonnull} function attribute.

@item -fsanitize=returns-nonnull-attribute
@opindex fsanitize=returns-nonnull-attribute

This option enables instrumentation of return statements in functions
marked with @code{returns_nonnull} function attribute, to detect returning
of null values from such functions.

@item -fsanitize=bool
@opindex fsanitize=bool

This option enables instrumentation of loads from bool.  If a value other
than 0/1 is loaded, a run-time error is issued.

@item -fsanitize=enum
@opindex fsanitize=enum

This option enables instrumentation of loads from an enum type.  If
a value outside the range of values for the enum type is loaded,
a run-time error is issued.

@item -fsanitize=vptr
@opindex fsanitize=vptr

This option enables instrumentation of C++ member function calls, member
accesses and some conversions between pointers to base and derived classes,
to verify the referenced object has the correct dynamic type.

@item -fsanitize=pointer-overflow
@opindex fsanitize=pointer-overflow

This option enables instrumentation of pointer arithmetics.  If the pointer
arithmetics overflows, a run-time error is issued.

@item -fsanitize=builtin
@opindex fsanitize=builtin

This option enables instrumentation of arguments to selected builtin
functions.  If an invalid value is passed to such arguments, a run-time
error is issued.  E.g.@ passing 0 as the argument to @code{__builtin_ctz}
or @code{__builtin_clz} invokes undefined behavior and is diagnosed
by this option.

@end table

Note that sanitizers tend to increase the rate of false positive
warnings, most notably those around @option{-Wmaybe-uninitialized}.
We recommend against combining @option{-Werror} and [the use of]
sanitizers.

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-trap@r{[}=@var{opts}@r{]}
@opindex fsanitize-trap
@opindex fno-sanitize-trap
The @option{-fsanitize-trap=} option instructs the compiler to
report for sanitizers mentioned in comma-separated list of @var{opts}
undefined behavior using @code{__builtin_trap} rather than a @code{libubsan}
library routine.  If this option is enabled for certain sanitizer,
it takes precedence over the @option{-fsanitizer-recover=} for that
sanitizer, @code{__builtin_trap} will be emitted and be fatal regardless
of whether recovery is enabled or disabled using @option{-fsanitize-recover=}.

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.

Currently this feature works with @option{-fsanitize=undefined} (and its suboptions
except for @option{-fsanitize=vptr}), @option{-fsanitize=float-cast-overflow},
@option{-fsanitize=float-divide-by-zero} and
@option{-fsanitize=bounds-strict}.  @code{-fsanitize-trap=all} can be also
specified, which enables it for @code{undefined} suboptions,
@option{-fsanitize=float-cast-overflow},
@option{-fsanitize=float-divide-by-zero} and
@option{-fsanitize=bounds-strict}.
If @code{-fsanitize-trap=undefined} or @code{-fsanitize-trap=all} is used
and @code{-fsanitize=vptr} is enabled on the command line, the
instrumentation is silently ignored as the instrumentation always needs
@code{libubsan} support, @option{-fsanitize-trap=vptr} is not allowed.

@item -fsanitize-undefined-trap-on-error
@opindex fsanitize-undefined-trap-on-error
The @option{-fsanitize-undefined-trap-on-error} option is deprecated
equivalent of @option{-fsanitize-trap=all}.

@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) which works for
i686 processor or newer.

@item -fharden-compares
@opindex fharden-compares
For every logical test that survives gimple optimizations and is
@emph{not} the condition in a conditional branch (for example,
conditions tested for conditional moves, or to store in boolean
variables), emit extra code to compute and verify the reversed
condition, and to call @code{__builtin_trap} if the results do not
match.  Use with @samp{-fharden-conditional-branches} to cover all
conditionals.

@item -fharden-conditional-branches
@opindex fharden-conditional-branches
For every non-vectorized conditional branch that survives gimple
optimizations, emit extra code to compute and verify the reversed
condition, and to call @code{__builtin_trap} if the result is
unexpected.  Use with @samp{-fharden-compares} to cover all
conditionals.

@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-once
@opindex finstrument-functions-once
This is similar to @option{-finstrument-functions}, but the profiling
functions are called only once per instrumented function, i.e. the first
profiling function is called after the first entry into the instrumented
function and the second profiling function is called before the exit
corresponding to this first entry.

The definition of @code{once} for the purpose of this option is a little
vague because the implementation is not protected against data races.
As a result, the implementation only guarantees that the profiling
functions are called at @emph{least} once per process and at @emph{most}
once per thread, but the calls are always paired, that is to say, if a
thread calls the first function, then it will call the second function,
unless it never reaches the exit of the instrumented function.

@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.  On
PowerPC with the ELFv2 ABI, for a function with dual entry points,
the local entry point is this function entry address.

The maximum value of @var{N} and @var{M} is 65535.  On PowerPC with the
ELFv2 ABI, for a function with dual entry points, the supported values
for @var{M} are 0, 2, 6 and 14.
@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.

@item -fuse-ld=mold
@opindex fuse-ld=mold
Use the Modern Linker (@command{mold}) 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 -nostdlib++
@opindex nostdlib++
Do not implicitly link with standard C++ libraries.

@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{https://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 -fmultiflags
@opindex fmultiflags
This option enables multilib-aware @code{TFLAGS} to be used to build
target libraries with options different from those the compiler is
configured to use by default, through the use of specs (@xref{Spec
Files}) set up by compiler internals, by the target, or by builders at
configure time.

Like @code{TFLAGS}, this allows the target libraries to be built for
portable baseline environments, while the compiler defaults to more
demanding ones.  That's useful because users can easily override the
defaults the compiler is configured to use to build their own programs,
if the defaults are not ideal for their target environment, whereas
rebuilding the runtime libraries is usually not as easy or desirable.

Unlike @code{TFLAGS}, the use of specs enables different flags to be
selected for different multilibs.  The way to accomplish that is to
build with @samp{make TFLAGS=-fmultiflags}, after configuring
@samp{--with-specs=%@{fmultiflags:...@}}.

This option is discarded by the driver once it's done processing driver
self spec.

It is also useful to check that @code{TFLAGS} are being used to build
all target libraries, by configuring a non-bootstrap compiler
@samp{--with-specs='%@{!fmultiflags:%emissing TFLAGS@}'} and building
the compiler and target libraries.

@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::
* 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::
* LoongArch 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::
* V850 Options::
* VAX Options::
* Visium Options::
* VMS Options::
* VxWorks Options::
* x86 Options::
* x86 Windows Options::
* Xstormy16 Options::
* Xtensa Options::
* zSeries Options::
@end menu

@node AArch64 Options
@subsection AArch64 Options
@cindex AArch64 Options

These options are defined for AArch64 implementations:

@table @gcctabopt

@item -mabi=@var{name}
@opindex mabi
Generate code for the specified data model.  Permissible values
are @samp{ilp32} for SysV-like data model where int, long int and pointers
are 32 bits, and @samp{lp64} for SysV-like data model where int is 32 bits,
but long int and pointers are 64 bits.

The default depends on the specific target configuration.  Note that
the LP64 and ILP32 ABIs are not link-compatible; you must compile your
entire program with the same ABI, and link with a compatible set of libraries.

@item -mbig-endian
@opindex mbig-endian
Generate big-endian code.  This is the default when GCC is configured for an
@samp{aarch64_be-*-*} target.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code which uses only the general-purpose registers.  This will prevent
the compiler from using floating-point and Advanced SIMD registers but will not
impose any restrictions on the assembler.

@item -mlittle-endian
@opindex mlittle-endian
Generate little-endian code.  This is the default when GCC is configured for an
@samp{aarch64-*-*} but not an @samp{aarch64_be-*-*} target.

@item -mcmodel=tiny
@opindex mcmodel=tiny
Generate code for the tiny code model.  The program and its statically defined
symbols must be within 1MB of each other.  Programs can be statically or
dynamically linked.

@item -mcmodel=small
@opindex mcmodel=small
Generate code for the small code model.  The program and its statically defined
symbols must be within 4GB of each other.  Programs can be statically or
dynamically linked.  This is the default code model.

@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large code model.  This makes no assumptions about
addresses and sizes of sections.  Programs can be statically linked only.  The
@option{-mcmodel=large} option is incompatible with @option{-mabi=ilp32},
@option{-fpic} and @option{-fPIC}.

@item -mstrict-align
@itemx -mno-strict-align
@opindex mstrict-align
@opindex mno-strict-align
Avoid or allow generating memory accesses that may not be aligned on a natural
object boundary as described in the architecture specification.

@item -momit-leaf-frame-pointer
@itemx -mno-omit-leaf-frame-pointer
@opindex momit-leaf-frame-pointer
@opindex mno-omit-leaf-frame-pointer
Omit or keep the frame pointer in leaf functions.  The former behavior is the
default.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-reg=@var{reg}
@itemx -mstack-protector-guard-offset=@var{offset}
@opindex mstack-protector-guard
@opindex mstack-protector-guard-reg
@opindex mstack-protector-guard-offset
Generate stack protection code using canary at @var{guard}.  Supported
locations are @samp{global} for a global canary or @samp{sysreg} for a
canary in an appropriate system register.

With the latter choice the options
@option{-mstack-protector-guard-reg=@var{reg}} and
@option{-mstack-protector-guard-offset=@var{offset}} furthermore specify
which system register to use as base register for reading the canary,
and from what offset from that base register. There is no default
register or offset as this is entirely for use within the Linux
kernel.

@item -mtls-dialect=desc
@opindex mtls-dialect=desc
Use TLS descriptors as the thread-local storage mechanism for dynamic accesses
of TLS variables.  This is the default.

@item -mtls-dialect=traditional
@opindex mtls-dialect=traditional
Use traditional TLS as the thread-local storage mechanism for dynamic accesses
of TLS variables.

@item -mtls-size=@var{size}
@opindex mtls-size
Specify bit size of immediate TLS offsets.  Valid values are 12, 24, 32, 48.
This option requires binutils 2.26 or newer.

@item -mfix-cortex-a53-835769
@itemx -mno-fix-cortex-a53-835769
@opindex mfix-cortex-a53-835769
@opindex mno-fix-cortex-a53-835769
Enable or disable the workaround for the ARM Cortex-A53 erratum number 835769.
This involves inserting a NOP instruction between memory instructions and
64-bit integer multiply-accumulate instructions.

@item -mfix-cortex-a53-843419
@itemx -mno-fix-cortex-a53-843419
@opindex mfix-cortex-a53-843419
@opindex mno-fix-cortex-a53-843419
Enable or disable the workaround for the ARM Cortex-A53 erratum number 843419.
This erratum workaround is made at link time and this will only pass the
corresponding flag to the linker.

@item -mlow-precision-recip-sqrt
@itemx -mno-low-precision-recip-sqrt
@opindex mlow-precision-recip-sqrt
@opindex mno-low-precision-recip-sqrt
Enable or disable the reciprocal square root approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of reciprocal square root results to about 16 bits for
single precision and to 32 bits for double precision.

@item -mlow-precision-sqrt
@itemx -mno-low-precision-sqrt
@opindex mlow-precision-sqrt
@opindex mno-low-precision-sqrt
Enable or disable the square root approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of square root results to about 16 bits for
single precision and to 32 bits for double precision.
If enabled, it implies @option{-mlow-precision-recip-sqrt}.

@item -mlow-precision-div
@itemx -mno-low-precision-div
@opindex mlow-precision-div
@opindex mno-low-precision-div
Enable or disable the division approximation.
This option only has an effect if @option{-ffast-math} or
@option{-funsafe-math-optimizations} is used as well.  Enabling this reduces
precision of division results to about 16 bits for
single precision and to 32 bits for double precision.

@item -mtrack-speculation
@itemx -mno-track-speculation
Enable or disable generation of additional code to track speculative
execution through conditional branches.  The tracking state can then
be used by the compiler when expanding calls to
@code{__builtin_speculation_safe_copy} to permit a more efficient code
sequence to be generated.

@item -moutline-atomics
@itemx -mno-outline-atomics
Enable or disable calls to out-of-line helpers to implement atomic operations.
These helpers will, at runtime, determine if the LSE instructions from
ARMv8.1-A can be used; if not, they will use the load/store-exclusive
instructions that are present in the base ARMv8.0 ISA.

This option is only applicable when compiling for the base ARMv8.0
instruction set.  If using a later revision, e.g. @option{-march=armv8.1-a}
or @option{-march=armv8-a+lse}, the ARMv8.1-Atomics instructions will be
used directly.  The same applies when using @option{-mcpu=} when the
selected cpu supports the @samp{lse} feature.
This option is on by default.

@item -march=@var{name}
@opindex march
Specify the name of the target architecture and, optionally, one or
more feature modifiers.  This option has the form
@option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}.

The table below summarizes the permissible values for @var{arch}
and the features that they enable by default:

@multitable @columnfractions 0.20 0.20 0.60
@headitem @var{arch} value @tab Architecture @tab Includes by default
@item @samp{armv8-a} @tab Armv8-A @tab @samp{+fp}, @samp{+simd}
@item @samp{armv8.1-a} @tab Armv8.1-A @tab @samp{armv8-a}, @samp{+crc}, @samp{+lse}, @samp{+rdma}
@item @samp{armv8.2-a} @tab Armv8.2-A @tab @samp{armv8.1-a}
@item @samp{armv8.3-a} @tab Armv8.3-A @tab @samp{armv8.2-a}, @samp{+pauth}
@item @samp{armv8.4-a} @tab Armv8.4-A @tab @samp{armv8.3-a}, @samp{+flagm}, @samp{+fp16fml}, @samp{+dotprod}
@item @samp{armv8.5-a} @tab Armv8.5-A @tab @samp{armv8.4-a}, @samp{+sb}, @samp{+ssbs}, @samp{+predres}
@item @samp{armv8.6-a} @tab Armv8.6-A @tab @samp{armv8.5-a}, @samp{+bf16}, @samp{+i8mm}
@item @samp{armv8.7-a} @tab Armv8.7-A @tab @samp{armv8.6-a}, @samp{+ls64}
@item @samp{armv8.8-a} @tab Armv8.8-a @tab @samp{armv8.7-a}, @samp{+mops}
@item @samp{armv9-a} @tab Armv9-A @tab @samp{armv8.5-a}, @samp{+sve}, @samp{+sve2}
@item @samp{armv9.1-a} @tab Armv9.1-A @tab @samp{armv9-a}, @samp{+bf16}, @samp{+i8mm}
@item @samp{armv9.2-a} @tab Armv9.2-A @tab @samp{armv9.1-a}, @samp{+ls64}
@item @samp{armv9.3-a} @tab Armv9.3-A @tab @samp{armv9.2-a}, @samp{+mops}
@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{neoverse-v2}, @samp{qdf24xx},
@samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan},
@samp{octeontx}, @samp{octeontx81},  @samp{octeontx83},
@samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96}
@samp{octeontx2t93}, @samp{octeontx2f95}, @samp{octeontx2f95n},
@samp{octeontx2f95mm},
@samp{a64fx},
@samp{thunderx}, @samp{thunderxt88},
@samp{thunderxt88p1}, @samp{thunderxt81}, @samp{tsv110},
@samp{thunderxt83}, @samp{thunderx2t99}, @samp{thunderx3t110}, @samp{zeus},
@samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55},
@samp{cortex-r82}, @samp{cortex-x1}, @samp{cortex-x1c}, @samp{cortex-x2},
@samp{cortex-x3}, @samp{cortex-a510}, @samp{cortex-a710}, @samp{cortex-a715},
@samp{ampere1}, @samp{ampere1a}, and @samp{native}.

The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
@samp{cortex-a75.cortex-a55}, @samp{cortex-a76.cortex-a55} specify that GCC
should tune for a big.LITTLE system.

The value @samp{neoverse-512tvb} specifies that GCC should tune
for Neoverse cores that (a) implement SVE and (b) have a total vector
bandwidth of 512 bits per cycle.  In other words, the option tells GCC to
tune for Neoverse cores that can execute 4 128-bit Advanced SIMD arithmetic
instructions a cycle and that can execute an equivalent number of SVE
arithmetic instructions per cycle (2 for 256-bit SVE, 4 for 128-bit SVE).
This is more general than tuning for a specific core like Neoverse V1
but is more specific than the default tuning described below.

Additionally on native AArch64 GNU/Linux systems the value
@samp{native} tunes performance to the host system.  This option has no effect
if the compiler is unable to recognize the processor of the host system.

Where none of @option{-mtune=}, @option{-mcpu=} or @option{-march=}
are specified, the code is tuned to perform well across a range
of target processors.

This option cannot be suffixed by feature modifiers.

@item -mcpu=@var{name}
@opindex mcpu
Specify the name of the target processor, optionally suffixed by one
or more feature modifiers.  This option has the form
@option{-mcpu=@var{cpu}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}, where
the permissible values for @var{cpu} are the same as those available
for @option{-mtune}.  The permissible values for @var{feature} are
documented in the sub-section on
@ref{aarch64-feature-modifiers,,@option{-march} and @option{-mcpu}
Feature Modifiers}.  Where conflicting feature modifiers are
specified, the right-most feature is used.

GCC uses @var{name} to determine what kind of instructions it can emit when
generating assembly code (as if by @option{-march}) and to determine
the target processor for which to tune for performance (as if
by @option{-mtune}).  Where this option is used in conjunction
with @option{-march} or @option{-mtune}, those options take precedence
over the appropriate part of this option.

@option{-mcpu=neoverse-512tvb} is special in that it does not refer
to a specific core, but instead refers to all Neoverse cores that
(a) implement SVE and (b) have a total vector bandwidth of 512 bits
a cycle.  Unless overridden by @option{-march},
@option{-mcpu=neoverse-512tvb} generates code that can run on a
Neoverse V1 core, since Neoverse V1 is the first Neoverse core with
these properties.  Unless overridden by @option{-mtune},
@option{-mcpu=neoverse-512tvb} tunes code in the same way as for
@option{-mtune=neoverse-512tvb}.

@item -moverride=@var{string}
@opindex moverride
Override tuning decisions made by the back-end in response to a
@option{-mtune=} switch.  The syntax, semantics, and accepted values
for @var{string} in this option are not guaranteed to be consistent
across releases.

This option is only intended to be useful when developing GCC.

@item -mverbose-cost-dump
@opindex mverbose-cost-dump
Enable verbose cost model dumping in the debug dump files.  This option is
provided for use in debugging the compiler.

@item -mpc-relative-literal-loads
@itemx -mno-pc-relative-literal-loads
@opindex mpc-relative-literal-loads
@opindex mno-pc-relative-literal-loads
Enable or disable PC-relative literal loads.  With this option literal pools are
accessed using a single instruction and emitted after each function.  This
limits the maximum size of functions to 1MB.  This is enabled by default for
@option{-mcmodel=tiny}.

@item -msign-return-address=@var{scope}
@opindex msign-return-address
Select the function scope on which return address signing will be applied.
Permissible values are @samp{none}, which disables return address signing,
@samp{non-leaf}, which enables pointer signing for functions which are not leaf
functions, and @samp{all}, which enables pointer signing for all functions.  The
default value is @samp{none}. This option has been deprecated by
-mbranch-protection.

@item -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}+@var{b-key}]|@var{bti}
@opindex mbranch-protection
Select the branch protection features to use.
@samp{none} is the default and turns off all types of branch protection.
@samp{standard} turns on all types of branch protection features.  If a feature
has additional tuning options, then @samp{standard} sets it to its standard
level.
@samp{pac-ret[+@var{leaf}]} turns on return address signing to its standard
level: signing functions that save the return address to memory (non-leaf
functions will practically always do this) using the a-key.  The optional
argument @samp{leaf} can be used to extend the signing to include leaf
functions.  The optional argument @samp{b-key} can be used to sign the functions
with the B-key instead of the A-key.
@samp{bti} turns on branch target identification mechanism.

@item -mharden-sls=@var{opts}
@opindex mharden-sls
Enable compiler hardening against straight line speculation (SLS).
@var{opts} is a comma-separated list of the following options:
@table @samp
@item retbr
@item blr
@end table
In addition, @samp{-mharden-sls=all} enables all SLS hardening while
@samp{-mharden-sls=none} disables all SLS hardening.

@item -msve-vector-bits=@var{bits}
@opindex msve-vector-bits
Specify the number of bits in an SVE vector register.  This option only has
an effect when SVE is enabled.

GCC supports two forms of SVE code generation: ``vector-length
agnostic'' output that works with any size of vector register and
``vector-length specific'' output that allows GCC to make assumptions
about the vector length when it is useful for optimization reasons.
The possible values of @samp{bits} are: @samp{scalable}, @samp{128},
@samp{256}, @samp{512}, @samp{1024} and @samp{2048}.
Specifying @samp{scalable} selects vector-length agnostic
output.  At present @samp{-msve-vector-bits=128} also generates vector-length
agnostic output for big-endian targets.  All other values generate
vector-length specific code.  The behavior of these values may change
in future releases and no value except @samp{scalable} should be
relied on for producing code that is portable across different
hardware SVE vector lengths.

The default is @samp{-msve-vector-bits=scalable}, which produces
vector-length agnostic code.
@end table

@subsubsection @option{-march} and @option{-mcpu} Feature Modifiers
@anchor{aarch64-feature-modifiers}
@cindex @option{-march} feature modifiers
@cindex @option{-mcpu} feature modifiers
Feature modifiers used with @option{-march} and @option{-mcpu} can be any of
the following and their inverses @option{no@var{feature}}:

@table @samp
@item crc
Enable CRC extension.  This is on by default for
@option{-march=armv8.1-a}.
@item crypto
Enable Crypto extension.  This also enables Advanced SIMD and floating-point
instructions.
@item fp
Enable floating-point instructions.  This is on by default for all possible
values for options @option{-march} and @option{-mcpu}.
@item simd
Enable Advanced SIMD instructions.  This also enables floating-point
instructions.  This is on by default for all possible values for options
@option{-march} and @option{-mcpu}.
@item sve
Enable Scalable Vector Extension instructions.  This also enables Advanced
SIMD and floating-point instructions.
@item lse
Enable Large System Extension instructions.  This is on by default for
@option{-march=armv8.1-a}.
@item rdma
Enable Round Double Multiply Accumulate instructions.  This is on by default
for @option{-march=armv8.1-a}.
@item fp16
Enable FP16 extension.  This also enables floating-point instructions.
@item fp16fml
Enable FP16 fmla extension.  This also enables FP16 extensions and
floating-point instructions. This option is enabled by default for @option{-march=armv8.4-a}. Use of this option with architectures prior to Armv8.2-A is not supported.

@item rcpc
Enable the RcPc extension.  This does not change code generation from GCC,
but is passed on to the assembler, enabling inline asm statements to use
instructions from the RcPc extension.
@item dotprod
Enable the Dot Product extension.  This also enables Advanced SIMD instructions.
@item aes
Enable the Armv8-a aes and pmull crypto extension.  This also enables Advanced
SIMD instructions.
@item sha2
Enable the Armv8-a sha2 crypto extension.  This also enables Advanced SIMD instructions.
@item sha3
Enable the sha512 and sha3 crypto extension.  This also enables Advanced SIMD
instructions. Use of this option with architectures prior to Armv8.2-A is not supported.
@item sm4
Enable the sm3 and sm4 crypto extension.  This also enables Advanced SIMD instructions.
Use of this option with architectures prior to Armv8.2-A is not supported.
@item profile
Enable the Statistical Profiling extension.  This option is only to enable the
extension at the assembler level and does not affect code generation.
@item rng
Enable the Armv8.5-a Random Number instructions.  This option is only to
enable the extension at the assembler level and does not affect code
generation.
@item memtag
Enable the Armv8.5-a Memory Tagging Extensions.
Use of this option with architectures prior to Armv8.5-A is not supported.
@item sb
Enable the Armv8-a Speculation Barrier instruction.  This option is only to
enable the extension at the assembler level and does not affect code
generation.  This option is enabled by default for @option{-march=armv8.5-a}.
@item ssbs
Enable the Armv8-a Speculative Store Bypass Safe instruction.  This option
is only to enable the extension at the assembler level and does not affect code
generation.  This option is enabled by default for @option{-march=armv8.5-a}.
@item predres
Enable the Armv8-a Execution and Data Prediction Restriction instructions.
This option is only to enable the extension at the assembler level and does
not affect code generation.  This option is enabled by default for
@option{-march=armv8.5-a}.
@item sve2
Enable the Armv8-a Scalable Vector Extension 2.  This also enables SVE
instructions.
@item sve2-bitperm
Enable SVE2 bitperm instructions.  This also enables SVE2 instructions.
@item sve2-sm4
Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
@item sve2-aes
Enable SVE2 aes instructions.  This also enables SVE2 instructions.
@item sve2-sha3
Enable SVE2 sha3 instructions.  This also enables SVE2 instructions.
@item tme
Enable the Transactional Memory Extension.
@item i8mm
Enable 8-bit Integer Matrix Multiply instructions.  This also enables
Advanced SIMD and floating-point instructions.  This option is enabled by
default for @option{-march=armv8.6-a}.  Use of this option with architectures
prior to Armv8.2-A is not supported.
@item f32mm
Enable 32-bit Floating point Matrix Multiply instructions.  This also enables
SVE instructions.  Use of this option with architectures prior to Armv8.2-A is
not supported.
@item f64mm
Enable 64-bit Floating point Matrix Multiply instructions.  This also enables
SVE instructions.  Use of this option with architectures prior to Armv8.2-A is
not supported.
@item bf16
Enable brain half-precision floating-point instructions.  This also enables
Advanced SIMD and floating-point instructions.  This option is enabled by
default for @option{-march=armv8.6-a}.  Use of this option with architectures
prior to Armv8.2-A is not supported.
@item ls64
Enable the 64-byte atomic load and store instructions for accelerators.
This option is enabled by default for @option{-march=armv8.7-a}.
@item mops
Enable the instructions to accelerate memory operations like @code{memcpy},
@code{memmove}, @code{memset}.  This option is enabled by default for
@option{-march=armv8.8-a}
@item flagm
Enable the Flag Manipulation instructions Extension.
@item pauth
Enable the Pointer Authentication Extension.

@end table

Feature @option{crypto} implies @option{aes}, @option{sha2}, and @option{simd},
which implies @option{fp}.
Conversely, @option{nofp} implies @option{nosimd}, which implies
@option{nocrypto}, @option{noaes} and @option{nosha2}.

@node Adapteva Epiphany Options
@subsection Adapteva Epiphany Options

These @samp{-m} options are defined for Adapteva Epiphany:

@table @gcctabopt
@item -mhalf-reg-file
@opindex mhalf-reg-file
Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
That allows code to run on hardware variants that lack these registers.

@item -mprefer-short-insn-regs
@opindex mprefer-short-insn-regs
Preferentially allocate registers that allow short instruction generation.
This can result in increased instruction count, so this may either reduce or
increase overall code size.

@item -mbranch-cost=@var{num}
@opindex mbranch-cost
Set the cost of branches to roughly @var{num} ``simple'' instructions.
This cost is only a heuristic and is not guaranteed to produce
consistent results across releases.

@item -mcmove
@opindex mcmove
Enable the generation of conditional moves.

@item -mnops=@var{num}
@opindex mnops
Emit @var{num} NOPs before every other generated instruction.

@item -mno-soft-cmpsf
@opindex mno-soft-cmpsf
@opindex msoft-cmpsf
For single-precision floating-point comparisons, emit an @code{fsub} instruction
and test the flags.  This is faster than a software comparison, but can
get incorrect results in the presence of NaNs, or when two different small
numbers are compared such that their difference is calculated as zero.
The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
software comparisons.

@item -mstack-offset=@var{num}
@opindex mstack-offset
Set the offset between the top of the stack and the stack pointer.
E.g., a value of 8 means that the eight bytes in the range @code{sp+0@dots{}sp+7}
can be used by leaf functions without stack allocation.
Values other than @samp{8} or @samp{16} are untested and unlikely to work.
Note also that this option changes the ABI; compiling a program with a
different stack offset than the libraries have been compiled with
generally does not work.
This option can be useful if you want to evaluate if a different stack
offset would give you better code, but to actually use a different stack
offset to build working programs, it is recommended to configure the
toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.

@item -mno-round-nearest
@opindex mno-round-nearest
@opindex mround-nearest
Make the scheduler assume that the rounding mode has been set to
truncating.  The default is @option{-mround-nearest}.

@item -mlong-calls
@opindex mlong-calls
If not otherwise specified by an attribute, assume all calls might be beyond
the offset range of the @code{b} / @code{bl} instructions, and therefore load the
function address into a register before performing a (otherwise direct) call.
This is the default.

@item -mshort-calls
@opindex short-calls
If not otherwise specified by an attribute, assume all direct calls are
in the range of the @code{b} / @code{bl} instructions, so use these instructions
for direct calls.  The default is @option{-mlong-calls}.

@item -msmall16
@opindex msmall16
Assume addresses can be loaded as 16-bit unsigned values.  This does not
apply to function addresses for which @option{-mlong-calls} semantics
are in effect.

@item -mfp-mode=@var{mode}
@opindex mfp-mode
Set the prevailing mode of the floating-point unit.
This determines the floating-point mode that is provided and expected
at function call and return time.  Making this mode match the mode you
predominantly need at function start can make your programs smaller and
faster by avoiding unnecessary mode switches.

@var{mode} can be set to one the following values:

@table @samp
@item caller
Any mode at function entry is valid, and retained or restored when
the function returns, and when it calls other functions.
This mode is useful for compiling libraries or other compilation units
you might want to incorporate into different programs with different
prevailing FPU modes, and the convenience of being able to use a single
object file outweighs the size and speed overhead for any extra
mode switching that might be needed, compared with what would be needed
with a more specific choice of prevailing FPU mode.

@item truncate
This is the mode used for floating-point calculations with
truncating (i.e.@: round towards zero) rounding mode.  That includes
conversion from floating point to integer.

@item round-nearest
This is the mode used for floating-point calculations with
round-to-nearest-or-even rounding mode.

@item int
This is the mode used to perform integer calculations in the FPU, e.g.@:
integer multiply, or integer multiply-and-accumulate.
@end table

The default is @option{-mfp-mode=caller}

@item -mno-split-lohi
@itemx -mno-postinc
@itemx -mno-postmodify
@opindex mno-split-lohi
@opindex msplit-lohi
@opindex mno-postinc
@opindex mpostinc
@opindex mno-postmodify
@opindex mpostmodify
Code generation tweaks that disable, respectively, splitting of 32-bit
loads, generation of post-increment addresses, and generation of
post-modify addresses.  The defaults are @option{msplit-lohi},
@option{-mpost-inc}, and @option{-mpost-modify}.

@item -mnovect-double
@opindex mno-vect-double
@opindex mvect-double
Change the preferred SIMD mode to SImode.  The default is
@option{-mvect-double}, which uses DImode as preferred SIMD mode.

@item -max-vect-align=@var{num}
@opindex max-vect-align
The maximum alignment for SIMD vector mode types.
@var{num} may be 4 or 8.  The default is 8.
Note that this is an ABI change, even though many library function
interfaces are unaffected if they don't use SIMD vector modes
in places that affect size and/or alignment of relevant types.

@item -msplit-vecmove-early
@opindex msplit-vecmove-early
Split vector moves into single word moves before reload.  In theory this
can give better register allocation, but so far the reverse seems to be
generally the case.

@item -m1reg-@var{reg}
@opindex m1reg-
Specify a register to hold the constant @minus{}1, which makes loading small negative
constants and certain bitmasks faster.
Allowable values for @var{reg} are @samp{r43} and @samp{r63},
which specify use of that register as a fixed register,
and @samp{none}, which means that no register is used for this
purpose.  The default is @option{-m1reg-none}.

@end table

@node AMD GCN Options
@subsection AMD GCN Options
@cindex AMD GCN Options

These options are defined specifically for the AMD GCN port.

@table @gcctabopt

@item -march=@var{gpu}
@opindex march
@itemx -mtune=@var{gpu}
@opindex mtune
Set architecture type or tuning for @var{gpu}. Supported values for @var{gpu}
are

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

@item gfx908
Compile for CDNA1 Instinct MI100 series devices (gfx908).

@item gfx90a
Compile for CDNA2 Instinct MI200 series devices (gfx90a).

@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-always
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 hs4x
Compile for ARC HS4x CPU.

@item hs4xd
Compile for ARC HS4xD CPU.

@item hs4x_rel31
Compile for ARC HS4x CPU release 3.10a.

@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
Does nothing.  Preserved for backward compatibility.

@item -mRcw
@opindex mRcw
Does nothing.  Preserved for backward compatibility.

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

@item core3
Tune for ARCv2 core3 type CPU.  This option enable usage of
@code{dbnz} instruction.

@item release31a
Tune for ARC4x release 3.10a.

@end table

@item -mmultcost=@var{num}
@opindex mmultcost
Cost to assume for a multiply instruction, with @samp{4} being equal to a
normal instruction.

@item -munalign-prob-threshold=@var{probability}
@opindex munalign-prob-threshold
Does nothing.  Preserved for backward compatibility.

@end table

The following options are maintained for backward compatibility, but
are now deprecated and will be removed in a future release:

@c Deprecated options
@table @gcctabopt

@item -margonaut
@opindex margonaut
Obsolete FPX.

@item -mbig-endian
@opindex mbig-endian
@itemx -EB
@opindex EB
Compile code for big-endian targets.  Use of these options is now
deprecated.  Big-endian code is supported by configuring GCC to build
@w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets,
for which big endian is the default.

@item -mlittle-endian
@opindex mlittle-endian
@itemx -EL
@opindex EL
Compile code for little-endian targets.  Use of these options is now
deprecated.  Little-endian code is supported by configuring GCC to build 
@w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets,
for which little endian is the default.

@item -mbarrel_shifter
@opindex mbarrel_shifter
Replaced by @option{-mbarrel-shifter}.

@item -mdpfp_compact
@opindex mdpfp_compact
Replaced by @option{-mdpfp-compact}.

@item -mdpfp_fast
@opindex mdpfp_fast
Replaced by @option{-mdpfp-fast}.

@item -mdsp_packa
@opindex mdsp_packa
Replaced by @option{-mdsp-packa}.

@item -mEA
@opindex mEA
Replaced by @option{-mea}.

@item -mmac_24
@opindex mmac_24
Replaced by @option{-mmac-24}.

@item -mmac_d16
@opindex mmac_d16
Replaced by @option{-mmac-d16}.

@item -mspfp_compact
@opindex mspfp_compact
Replaced by @option{-mspfp-compact}.

@item -mspfp_fast
@opindex mspfp_fast
Replaced by @option{-mspfp-fast}.

@item -mtune=@var{cpu}
@opindex mtune
Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
@samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
@samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively.

@item -multcost=@var{num}
@opindex multcost
Replaced by @option{-mmultcost}.

@end table

@node ARM Options
@subsection ARM Options
@cindex ARM options

These @samp{-m} options are defined for the ARM port:

@table @gcctabopt
@item -mabi=@var{name}
@opindex mabi
Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.

@item -mapcs-frame
@opindex mapcs-frame
Generate a stack frame that is compliant with the ARM Procedure Call
Standard for all functions, even if this is not strictly necessary for
correct execution of the code.  Specifying @option{-fomit-frame-pointer}
with this option causes the stack frames not to be generated for
leaf functions.  The default is @option{-mno-apcs-frame}.
This option is deprecated.

@item -mapcs
@opindex mapcs
This is a synonym for @option{-mapcs-frame} and is deprecated.

@ignore
@c not currently implemented
@item -mapcs-stack-check
@opindex mapcs-stack-check
Generate code to check the amount of stack space available upon entry to
every function (that actually uses some stack space).  If there is
insufficient space available then either the function
@code{__rt_stkovf_split_small} or @code{__rt_stkovf_split_big} is
called, depending upon the amount of stack space required.  The runtime
system is required to provide these functions.  The default is
@option{-mno-apcs-stack-check}, since this produces smaller code.

@c not currently implemented
@item -mapcs-reentrant
@opindex mapcs-reentrant
Generate reentrant, position-independent code.  The default is
@option{-mno-apcs-reentrant}.
@end ignore

@item -mthumb-interwork
@opindex mthumb-interwork
Generate code that supports calling between the ARM and Thumb
instruction sets.  Without this option, on pre-v5 architectures, the
two instruction sets cannot be reliably used inside one program.  The
default is @option{-mno-thumb-interwork}, since slightly larger code
is generated when @option{-mthumb-interwork} is specified.  In AAPCS
configurations this option is meaningless.

@item -mno-sched-prolog
@opindex mno-sched-prolog
@opindex msched-prolog
Prevent the reordering of instructions in the function prologue, or the
merging of those instruction with the instructions in the function's
body.  This means that all functions start with a recognizable set
of instructions (or in fact one of a choice from a small set of
different function prologues), and this information can be used to
locate the start of functions inside an executable piece of code.  The
default is @option{-msched-prolog}.

@item -mfloat-abi=@var{name}
@opindex mfloat-abi
Specifies which floating-point ABI to use.  Permissible values
are: @samp{soft}, @samp{softfp} and @samp{hard}.

Specifying @samp{soft} causes GCC to generate output containing
library calls for floating-point operations.
@samp{softfp} allows the generation of code using hardware floating-point
instructions, but still uses the soft-float calling conventions.
@samp{hard} allows generation of floating-point instructions
and uses FPU-specific calling conventions.

The default depends on the specific target configuration.  Note that
the hard-float and soft-float ABIs are not link-compatible; you must
compile your entire program with the same ABI, and link with a
compatible set of libraries.

@item -mgeneral-regs-only
@opindex mgeneral-regs-only
Generate code which uses only the general-purpose registers.  This will prevent
the compiler from using floating-point and Advanced SIMD registers but will not
impose any restrictions on the assembler.

@item -mlittle-endian
@opindex mlittle-endian
Generate code for a processor running in little-endian mode.  This is
the default for all standard configurations.

@item -mbig-endian
@opindex mbig-endian
Generate code for a processor running in big-endian mode; the default is
to compile code for a little-endian processor.

@item -mbe8
@itemx -mbe32
@opindex mbe8
When linking a big-endian image select between BE8 and BE32 formats.
The option has no effect for little-endian images and is ignored.  The
default is dependent on the selected target architecture.  For ARMv6
and later architectures the default is BE8, for older architectures
the default is BE32.  BE32 format has been deprecated by ARM.

@item -march=@var{name}@r{[}+extension@dots{}@r{]}
@opindex march
This specifies the name of the target ARM architecture.  GCC uses this
name to determine what kind of instructions it can emit when generating
assembly code.  This option can be used in conjunction with or instead
of the @option{-mcpu=} option.

Permissible names are:
@samp{armv4t},
@samp{armv5t}, @samp{armv5te},
@samp{armv6}, @samp{armv6j}, @samp{armv6k}, @samp{armv6kz}, @samp{armv6t2},
@samp{armv6z}, @samp{armv6zk},
@samp{armv7}, @samp{armv7-a}, @samp{armv7ve}, 
@samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a},
@samp{armv8.4-a},
@samp{armv8.5-a},
@samp{armv8.6-a},
@samp{armv9-a},
@samp{armv7-r},
@samp{armv8-r},
@samp{armv6-m}, @samp{armv6s-m},
@samp{armv7-m}, @samp{armv7e-m},
@samp{armv8-m.base}, @samp{armv8-m.main},
@samp{armv8.1-m.main},
@samp{armv9-a},
@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{cortex-a710},
@samp{ares}, @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5},
@samp{cortex-r7}, @samp{cortex-r8}, @samp{cortex-r52}, @samp{cortex-r52plus},
@samp{cortex-m0}, @samp{cortex-m0plus}, @samp{cortex-m1}, @samp{cortex-m3},
@samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m23}, @samp{cortex-m33},
@samp{cortex-m35p}, @samp{cortex-m55}, @samp{cortex-x1}, @samp{cortex-x1c},
@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{star-mc1},
@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}
and @samp{cortex-m55}. Also disable the M-Profile Vector Extension (MVE)
integer and single precision floating-point instructions on @samp{cortex-m55}.

@item +nomve
Disable the M-Profile Vector Extension (MVE) integer and single precision
floating-point instructions on @samp{cortex-m55}.

@item +nomve.fp
Disable the M-Profile Vector Extension (MVE) single precision floating-point
instructions on @samp{cortex-m55}.

@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}, @samp{cortex-m35p}
and @samp{cortex-m55}.
Disables the floating-point and SIMD instructions on
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7},
@samp{cortex-a8}, @samp{cortex-a9}, @samp{cortex-a12},
@samp{cortex-a15}, @samp{cortex-a17}, @samp{cortex-a15.cortex-a7},
@samp{cortex-a17.cortex-a7}, @samp{cortex-a32}, @samp{cortex-a35},
@samp{cortex-a53} and @samp{cortex-a55}.

@item +nofp.dp
Disables the double-precision component of the floating-point instructions
on @samp{cortex-r5}, @samp{cortex-r7}, @samp{cortex-r8}, @samp{cortex-r52},
@samp{cortex-r52plus} and @samp{cortex-m7}.

@item +nosimd
Disables the SIMD (but not floating-point) instructions on
@samp{generic-armv7-a}, @samp{cortex-a5}, @samp{cortex-a7}
and @samp{cortex-a9}.

@item +crypto
Enables the cryptographic instructions on @samp{cortex-a32},
@samp{cortex-a35}, @samp{cortex-a53}, @samp{cortex-a55}, @samp{cortex-a57},
@samp{cortex-a72}, @samp{cortex-a73}, @samp{cortex-a75}, @samp{exynos-m1},
@samp{xgene1}, @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
@samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53} and
@samp{cortex-a75.cortex-a55}.
@end table

Additionally the @samp{generic-armv7-a} pseudo target defaults to
VFPv3 with 16 double-precision registers.  It supports the following
extension options: @samp{mp}, @samp{sec}, @samp{vfpv3-d16},
@samp{vfpv3}, @samp{vfpv3-d16-fp16}, @samp{vfpv3-fp16},
@samp{vfpv4-d16}, @samp{vfpv4}, @samp{neon}, @samp{neon-vfpv3},
@samp{neon-fp16}, @samp{neon-vfpv4}.  The meanings are the same as for
the extensions to @option{-march=armv7-a}.

@option{-mcpu=generic-@var{arch}} is also permissible, and is
equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
See @option{-mtune} for more information.

@option{-mcpu=native} causes the compiler to auto-detect the CPU
of the build computer.  At present, this feature is only supported on
GNU/Linux, and not all architectures are recognized.  If the auto-detect
is unsuccessful the option has no effect.

@item -mfpu=@var{name}
@opindex mfpu
This specifies what floating-point hardware (or hardware emulation) is
available on the target.  Permissible names are: @samp{auto}, @samp{vfpv2},
@samp{vfpv3},
@samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
@samp{vfpv3xd-fp16}, @samp{neon-vfpv3}, @samp{neon-fp16}, @samp{vfpv4},
@samp{vfpv4-d16}, @samp{fpv4-sp-d16}, @samp{neon-vfpv4},
@samp{fpv5-d16}, @samp{fpv5-sp-d16},
@samp{fp-armv8}, @samp{neon-fp-armv8} and @samp{crypto-neon-fp-armv8}.
Note that @samp{neon} is an alias for @samp{neon-vfpv3} and @samp{vfp}
is an alias for @samp{vfpv2}.

The setting @samp{auto} is the default and is special.  It causes the
compiler to select the floating-point and Advanced SIMD instructions
based on the settings of @option{-mcpu} and @option{-march}.

If the selected floating-point hardware includes the NEON extension
(e.g.@: @option{-mfpu=neon}), note that floating-point
operations are not generated by GCC's auto-vectorization pass unless
@option{-funsafe-math-optimizations} is also specified.  This is
because NEON hardware does not fully implement the IEEE 754 standard for
floating-point arithmetic (in particular denormal values are treated as
zero), so the use of NEON instructions may lead to a loss of precision.

You can also set the fpu name at function level by using the @code{target("fpu=")} function attributes (@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mfp16-format=@var{name}
@opindex mfp16-format
Specify the format of the @code{__fp16} half-precision floating-point type.
Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
the default is @samp{none}, in which case the @code{__fp16} type is not
defined.  @xref{Half-Precision}, for more information.

@item -mstructure-size-boundary=@var{n}
@opindex mstructure-size-boundary
The sizes of all structures and unions are rounded up to a multiple
of the number of bits set by this option.  Permissible values are 8, 32
and 64.  The default value varies for different toolchains.  For the COFF
targeted toolchain the default value is 8.  A value of 64 is only allowed
if the underlying ABI supports it.

Specifying a larger number can produce faster, more efficient code, but
can also increase the size of the program.  Different values are potentially
incompatible.  Code compiled with one value cannot necessarily expect to
work with code or libraries compiled with another value, if they exchange
information using structures or unions.

This option is deprecated.

@item -mabort-on-noreturn
@opindex mabort-on-noreturn
Generate a call to the function @code{abort} at the end of a
@code{noreturn} function.  It is executed if the function tries to
return.

@item -mlong-calls
@itemx -mno-long-calls
@opindex mlong-calls
@opindex mno-long-calls
Tells the compiler to perform function calls by first loading the
address of the function into a register and then performing a subroutine
call on this register.  This switch is needed if the target function
lies outside of the 64-megabyte addressing range of the offset-based
version of subroutine call instruction.

Even if this switch is enabled, not all function calls are turned
into long calls.  The heuristic is that static functions, functions
that have the @code{short_call} attribute, functions that are inside
the scope of a @code{#pragma no_long_calls} directive, and functions whose
definitions have already been compiled within the current compilation
unit are not turned into long calls.  The exceptions to this rule are
that weak function definitions, functions with the @code{long_call}
attribute or the @code{section} attribute, and functions that are within
the scope of a @code{#pragma long_calls} directive are always
turned into long calls.

This feature is not enabled by default.  Specifying
@option{-mno-long-calls} restores the default behavior, as does
placing the function calls within the scope of a @code{#pragma
long_calls_off} directive.  Note these switches have no effect on how
the compiler generates code to handle function calls via function
pointers.

@item -msingle-pic-base
@opindex msingle-pic-base
Treat the register used for PIC addressing as read-only, rather than
loading it in the prologue for each function.  The runtime system is
responsible for initializing this register with an appropriate value
before execution begins.

@item -mpic-register=@var{reg}
@opindex mpic-register
Specify the register to be used for PIC addressing.
For standard PIC base case, the default is any suitable register
determined by compiler.  For single PIC base case, the default is
@samp{R9} if target is EABI based or stack-checking is enabled,
otherwise the default is @samp{R10}.

@item -mpic-data-is-text-relative
@opindex mpic-data-is-text-relative
Assume that the displacement between the text and data segments is fixed
at static link time.  This permits using PC-relative addressing
operations to access data known to be in the data segment.  For
non-VxWorks RTP targets, this option is enabled by default.  When
disabled on such targets, it will enable @option{-msingle-pic-base} by
default.

@item -mpoke-function-name
@opindex mpoke-function-name
Write the name of each function into the text section, directly
preceding the function prologue.  The generated code is similar to this:

@smallexample
     t0
         .ascii "arm_poke_function_name", 0
         .align
     t1
         .word 0xff000000 + (t1 - t0)
     arm_poke_function_name
         mov     ip, sp
         stmfd   sp!, @{fp, ip, lr, pc@}
         sub     fp, ip, #4
@end smallexample

When performing a stack backtrace, code can inspect the value of
@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
location @code{pc - 12} and the top 8 bits are set, then we know that
there is a function name embedded immediately preceding this location
and has length @code{((pc[-3]) & 0xff000000)}.

@item -mthumb
@itemx -marm
@opindex marm
@opindex mthumb

Select between generating code that executes in ARM and Thumb
states.  The default for most configurations is to generate code
that executes in ARM state, but the default can be changed by
configuring GCC with the @option{--with-mode=}@var{state}
configure option.

You can also override the ARM and Thumb mode for each function
by using the @code{target("thumb")} and @code{target("arm")} function attributes
(@pxref{ARM Function Attributes}) or pragmas (@pxref{Function Specific Option Pragmas}).

@item -mflip-thumb 
@opindex mflip-thumb
Switch ARM/Thumb modes on alternating functions.
This option is provided for regression testing of mixed Thumb/ARM code
generation, and is not intended for ordinary use in compiling code.

@item -mtpcs-frame
@opindex mtpcs-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all non-leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-tpcs-frame}.

@item -mtpcs-leaf-frame
@opindex mtpcs-leaf-frame
Generate a stack frame that is compliant with the Thumb Procedure Call
Standard for all leaf functions.  (A leaf function is one that does
not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.

@item -mcallee-super-interworking
@opindex mcallee-super-interworking
Gives all externally visible functions in the file being compiled an ARM
instruction set header which switches to Thumb mode before executing the
rest of the function.  This allows these functions to be called from
non-interworking code.  This option is not valid in AAPCS configurations
because interworking is enabled by default.

@item -mcaller-super-interworking
@opindex mcaller-super-interworking
Allows calls via function pointers (including virtual functions) to
execute correctly regardless of whether the target code has been
compiled for interworking or not.  There is a small overhead in the cost
of executing a function pointer if this option is enabled.  This option
is not valid in AAPCS configurations because interworking is enabled
by default.

@item -mtp=@var{name}
@opindex mtp
Specify the access model for the thread local storage pointer.  The valid
models are @samp{soft}, which generates calls to @code{__aeabi_read_tp},
@samp{cp15}, which fetches the thread pointer from @code{cp15} directly
(supported in the arm6k architecture), and @samp{auto}, which uses the
best available method for the selected processor.  The default setting is
@samp{auto}.

@item -mtls-dialect=@var{dialect}
@opindex mtls-dialect
Specify the dialect to use for accessing thread local storage.  Two
@var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
@samp{gnu} dialect selects the original GNU scheme for supporting
local and global dynamic TLS models.  The @samp{gnu2} dialect
selects the GNU descriptor scheme, which provides better performance
for shared libraries.  The GNU descriptor scheme is compatible with
the original scheme, but does require new assembler, linker and
library support.  Initial and local exec TLS models are unaffected by
this option and always use the original scheme.

@item -mword-relocations
@opindex mword-relocations
Only generate absolute relocations on word-sized values (i.e.@: R_ARM_ABS32).
This is enabled by default on targets (uClinux, SymbianOS) where the runtime
loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
is specified. This option conflicts with @option{-mslow-flash-data}.

@item -mfix-cortex-m3-ldrd
@opindex mfix-cortex-m3-ldrd
Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
with overlapping destination and base registers are used.  This option avoids
generating these instructions.  This option is enabled by default when
@option{-mcpu=cortex-m3} is specified.

@item -mfix-cortex-a57-aes-1742098
@itemx -mno-fix-cortex-a57-aes-1742098
@itemx -mfix-cortex-a72-aes-1655431
@itemx -mno-fix-cortex-a72-aes-1655431
Enable (disable) mitigation for an erratum on Cortex-A57 and
Cortex-A72 that affects the AES cryptographic instructions.  This
option is enabled by default when either @option{-mcpu=cortex-a57} or
@option{-mcpu=cortex-a72} 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}, @code{cortex-m55} or @code{star-mc1}.
The option @option{-mno-fix-cmse-cve-2021-35465} can be used to disable
the mitigation.

@item -mstack-protector-guard=@var{guard}
@itemx -mstack-protector-guard-offset=@var{offset}
@opindex mstack-protector-guard
@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 a
canary accessible via the TLS register. The option
@option{-mstack-protector-guard-offset=} is for use with
@option{-fstack-protector-guard=tls} and not for use in user-land code.

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

@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 disabled 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 -melf
@opindex melf
Legacy no-op option.

@item -sim
@opindex sim
This option 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 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 LoongArch Options
@subsection LoongArch Options
@cindex LoongArch Options

These command-line options are defined for LoongArch targets:

@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 loongarch64
A generic CPU with 64-bit extensions.
@item la464
LoongArch LA464 CPU with LBT, LSX, LASX, LVZ.
@end table

@item -mtune=@var{cpu-type}
@opindex mtune
Optimize the output for the given processor, specified by microarchitecture
name.

@item -mabi=@var{base-abi-type}
@opindex mabi
Generate code for the specified calling convention.
@var{base-abi-type} can be one of:
@table @samp
@item lp64d
Uses 64-bit general purpose registers and 32/64-bit floating-point
registers for parameter passing.  Data model is LP64, where @samp{int}
is 32 bits, while @samp{long int} and pointers are 64 bits.
@item lp64f
Uses 64-bit general purpose registers and 32-bit floating-point
registers for parameter passing.  Data model is LP64, where @samp{int}
is 32 bits, while @samp{long int} and pointers are 64 bits.
@item lp64s
Uses 64-bit general purpose registers and no floating-point
registers for parameter passing.  Data model is LP64, where @samp{int}
is 32 bits, while @samp{long int} and pointers are 64 bits.
@end table

@item -mfpu=@var{fpu-type}
@opindex mfpu
Generate code for the specified FPU type, which can be one of:
@table @samp
@item 64
Allow the use of hardware floating-point instructions for 32-bit
and 64-bit operations.
@item 32
Allow the use of hardware floating-point instructions for 32-bit
operations.
@item none
@item 0
Prevent the use of hardware floating-point instructions.
@end table

@item -msoft-float
@opindex msoft-float
Force @option{-mfpu=none} and prevents the use of floating-point
registers for parameter passing.  This option may change the target
ABI.

@item -msingle-float
@opindex msingle-float
Force @option{-mfpu=32} and allow the use of 32-bit floating-point
registers for parameter passing.  This option may change the target
ABI.

@item -mdouble-float
@opindex mdouble-float
Force @option{-mfpu=64} and allow the use of 32/64-bit floating-point
registers for parameter passing.  This option may change the target
ABI.

@item -mbranch-cost=@var{n}
@opindex mbranch-cost
Set the cost of branches to roughly @var{n} instructions.

@item -mcheck-zero-division
@itemx -mno-check-zero-divison
@opindex mcheck-zero-division
Trap (do not trap) on integer division by zero.  The default is
@option{-mcheck-zero-division} for @option{-O0} or @option{-Og}, and
@option{-mno-check-zero-division} for other optimization levels.

@item -mcond-move-int
@itemx -mno-cond-move-int
@opindex mcond-move-int
Conditional moves for integral data in general-purpose registers
are enabled (disabled).  The default is @option{-mcond-move-int}.

@item -mcond-move-float
@itemx -mno-cond-move-float
@opindex mcond-move-float
Conditional moves for floating-point registers are enabled (disabled).
The default is @option{-mcond-move-float}.

@item -mmemcpy
@itemx -mno-memcpy
@opindex mmemcpy
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.  Setting optimization level to @option{-Os} also
forces the use of @code{memcpy}, but @option{-mno-memcpy} may override this
behavior if explicitly specified, regardless of the order these options on
the command line.

@item -mstrict-align
@itemx -mno-strict-align
@opindex mstrict-align
Avoid or allow generating memory accesses that may not be aligned on a natural
object boundary as described in the architecture specification. The default is
@option{-mno-strict-align}.

@item -msmall-data-limit=@var{number}
@opindex msmall-data-limit
Put global and static data smaller than @var{number} bytes into a special
section (on some targets).  The default value is 0.

@item -mmax-inline-memcpy-size=@var{n}
@opindex mmax-inline-memcpy-size
Inline all block moves (such as calls to @code{memcpy} or structure copies)
less than or equal to @var{n} bytes.  The default value of @var{n} is 1024.

@item -mcmodel=@var{code-model}
Set the code model to one of:
@table @samp
@item tiny-static (Not implemented yet)
@item tiny (Not implemented yet)

@item normal
The text segment must be within 128MB addressing space.  The data segment must
be within 2GB addressing space.

@item medium
The text segment and data segment must be within 2GB addressing space.

@item large (Not implemented yet)

@item extreme
This mode does not limit the size of the code segment and data segment.
The @option{-mcmodel=extreme} option is incompatible with @option{-fplt} and
@option{-mno-explicit-relocs}.
@end table
The default code model is @code{normal}.

@item -mexplicit-relocs
@itemx -mno-explicit-relocs
@opindex mexplicit-relocs
@opindex mno-explicit-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.  The default value for the option is determined during
GCC build-time by detecting corresponding assembler support:
@code{-mexplicit-relocs} if said support is present,
@code{-mno-explicit-relocs} otherwise.  This option is mostly useful for
debugging, or interoperation with assemblers different from the build-time
one.

@item -mdirect-extern-access
@itemx -mno-direct-extern-access
@opindex mdirect-extern-access
Do not use or use GOT to access external symbols.  The default is
@option{-mno-direct-extern-access}: GOT is used for external symbols with
default visibility, but not used for other external symbols.

With @option{-mdirect-extern-access}, GOT is not used and all external
symbols are PC-relatively addressed.  It is @strong{only} suitable for
environments where no dynamic link is performed, like firmwares, OS
kernels, executables linked with @option{-static} or @option{-static-pie}.
@option{-mdirect-extern-access} is not compatible with @option{-fPIC} or
@option{-fpic}.
@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{https://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 -munaligned-access
@itemx -mno-unaligned-access
@opindex munaligned-access
@opindex mno-unaligned-access
Enable (disable) direct unaligned access for MIPS Release 6.
MIPSr6 requires load/store unaligned-access support,
by hardware or trap&emulate.
So @option{-mno-unaligned-access} may be needed by kernel.

@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 for MIPS Release 6 onwards.
If a compact branch instruction is not available (or pre-R6),
a delay slot form of the branch will be used instead.

If it is used for MIPS16/microMIPS targets, it will be just ignored now.
The behaviour for MIPS16/microMIPS may change in future,
since they do have some compact branch instructions.

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 -march=@var{architecture-string}
@opindex march
Generate code for the specified PTX ISA target architecture
(e.g.@: @samp{sm_35}).  Valid architecture strings are @samp{sm_30},
@samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and
@samp{sm_80}.
The default depends on how the compiler has been configured, see
@option{--with-arch}.

This option sets the value of the preprocessor macro
@code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value
@samp{350}.

@item -misa=@var{architecture-string}
@opindex misa
Alias of @option{-march=}.

@item -march-map=@var{architecture-string}
@opindex march
Select the closest available @option{-march=} value that is not more
capable.  For instance, for @option{-march-map=sm_50} select
@option{-march=sm_35}, and for @option{-march-map=sm_53} select
@option{-march=sm_53}.

@item -mptx=@var{version-string}
@opindex mptx
Generate code for the specified PTX ISA version (e.g.@: @samp{7.0}).
Valid version strings include @samp{3.1}, @samp{6.0}, @samp{6.3}, and
@samp{7.0}.  The default PTX ISA version is 6.0, unless a higher
version is required for specified PTX ISA target architecture via
option @option{-march=}.

This option sets the values of the preprocessor macros
@code{__PTX_ISA_VERSION_MAJOR__} and @code{__PTX_ISA_VERSION_MINOR__};
for instance, for @samp{3.1} the macros have the values @samp{3} and
@samp{1}, respectively.

@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 -misa-spec=@var{ISA-spec-string}
@opindex misa-spec
Specify the version of the RISC-V Unprivileged (formerly User-Level)
ISA specification to produce code conforming to.  The possibilities
for @var{ISA-spec-string} are:
@table @code
@item 2.2
Produce code conforming to version 2.2.
@item 20190608
Produce code conforming to version 20190608.
@item 20191213
Produce code conforming to version 20191213.
@end table
The default is @option{-misa-spec=20191213} unless GCC has been configured
with @option{--with-isa-spec=} specifying a different default version.

@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{thead-c906}, @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.

The code generated by the medium-any code model is position-independent, but is
not guaranteed to function correctly when linked into position-independent
executables or libraries.

@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
@opindex mrelax
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 -mriscv-attribute
@itemx -mno-riscv-attribute
@opindex mriscv-attribute
Emit (do not emit) RISC-V attribute to record extra information into ELF
objects.  This feature requires at least binutils 2.32.

@item -mcsr-check
@itemx -mno-csr-check
@opindex mcsr-check
Enables or disables the CSR checking.

@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{power10}, @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}) must be enabled to use the IEEE
128-bit floating point support.  The IEEE 128-bit floating point is only
supported on Linux.

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.  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.  The @option{-mprefixed} option requires that
the option @option{-mcpu=power10} (or later) is enabled.

@item -mmma
@itemx -mno-mma
@opindex mmma
@opindex mno-mma
Generate (do not generate) the MMA instructions.  The @option{-mma}
option requires that the option @option{-mcpu=power10} (or later)
is enabled.

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

@item --param rs6000-vect-unroll-limit=
The vectorizer will check with target information to determine whether it
would be beneficial to unroll the main vectorized loop and by how much.  This
parameter sets the upper bound of how much the vectorizer will unroll the main
loop.  The default value is four.

@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},
@samp{z16}/@samp{arch14}, 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 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.

@item -mlra
@itemx -mno-lra
@opindex mlra
@opindex mno-lra
Enable Local Register Allocation.  This is still experimental for the VAX,
so by default the compiler uses standard reload.
@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 and FXSR instruction
set support.

@item pentium3
@itemx pentium3m
Intel Pentium III CPU, based on Pentium Pro core with MMX, FXSR and SSE
instruction set support.

@item pentium-m
Intel Pentium M; low-power version of Intel Pentium III CPU
with MMX, SSE, SSE2 and FXSR instruction set support.  Used by Centrino
notebooks.

@item pentium4
@itemx pentium4m
Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction set support.

@item prescott
Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2, SSE3 and FXSR
instruction set support.

@item nocona
Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
SSE2, SSE3 and FXSR instruction set support.

@item core2
Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, CX16,
SAHF and FXSR instruction set support.

@item nehalem
Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction set support.

@item westmere
Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR 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, CX16, SAHF, FXSR, AVX, XSAVE 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, CX16, SAHF, FXSR, AVX, XSAVE, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support.

@item broadwell
Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
CLFLUSHOPT, XSAVEC, XSAVES and SGX 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, CX16, SAHF, FXSR, PCLMUL, PREFETCHW 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, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT 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, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES,
SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE,
RDPID and SGX instruction set support.

@item tremont
Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA,
RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID,
SGX, CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set
support.

@item sierraforest
Intel Sierra Forest 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, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
AVXIFMA, AVXVNNIINT8, AVXNECONVERT and CMPCCXADD instruction set support.

@item grandridge
Intel Grand Ridge 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, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI,
AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD and RAOINT 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support.

@item knm
Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL,
FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX,
PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
, VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2
, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB
instruction set support.

@item cascadelake
Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
CLFLUSHOPT, XSAVEC, XSAVES, SGX, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
CLFLUSHOPT, XSAVEC, XSAVES, SGX, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK,
UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16 and AVX512BF16
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, 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, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.

@item graniterapids
Intel graniterapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16,
AVX512BF16, AMX-FP16 and PREFETCHI 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 znver4
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, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
AVX512BITALG, AVX512VPOPCNTDQ, GFNI 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 lujiazui
ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, CX16,
ABM, BMI, BMI2, F16C, FXSR, RDSEED instruction set support.

@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 m80387
@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
@need 200
@itemx -mavxifma
@opindex mavxifma
@need 200
@itemx -mavxvnniint8
@opindex mavxvnniint8
@need 200
@itemx -mavxneconvert
@opindex mavxneconvert
@need 200
@itemx -mcmpccxadd
@opindex mcmpccxadd
@need 200
@itemx -mamx-fp16
@opindex mamx-fp16
@need 200
@itemx -mprefetchi
@opindex mprefetchi
@need 200
@itemx -mraoint
@opindex mraoint
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,
AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AMX-FP16, PREFETCHI, RAOINT 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.

@item -mmove-max=@var{bits}
@opindex mmove-max
This option instructs GCC to set the maximum number of bits can be
moved from memory to memory efficiently to @var{bits}.  The valid
@var{bits} are 128, 256 and 512.

@item -mstore-max=@var{bits}
@opindex mstore-max
This option instructs GCC to set the maximum number of bits can be
stored to memory efficiently to @var{bits}.  The valid @var{bits} are
128, 256 and 512.

@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 -mcet-switch
@opindex mcet-switch
By default, CET instrumentation is turned off on switch statements that
use a jump table and indirect branch track is disabled.  Since jump
tables are stored in read-only memory, this does not result in a direct
loss of hardening.  But if the jump table index is attacker-controlled,
the indirect jump may not be constrained by CET.  This option turns on
CET instrumentation to enable indirect branch track for switch statements
with jump tables which leads to the jump targets reachable via any indirect
jumps.

@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 -mrelax-cmpxchg-loop
@opindex mrelax-cmpxchg-loop
Relax cmpxchg loop by emitting an early load and compare before cmpxchg,
execute pause if load value is not expected. This reduces excessive
cachline bouncing when and works for all atomic logic fetch builtins
that generates compare and swap loop.

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

@item -mharden-sls=@var{choice}
@opindex mharden-sls
Generate code to mitigate against straight line speculation (SLS) with
@var{choice}.  The default is @samp{none} which disables all SLS
hardening.  @samp{return} enables SLS hardening for function returns.
@samp{indirect-jmp} enables SLS hardening for indirect jumps.
@samp{all} enables all SLS hardening.

@item -mindirect-branch-cs-prefix
@opindex mindirect-branch-cs-prefix
Add CS prefix to call and jmp to indirect thunk with branch target in
r8-r15 registers so that the call and jmp instruction length is 6 bytes
to allow them to be replaced with @samp{lfence; call *%r8-r15} or
@samp{lfence; jmp *%r8-r15} at run-time.

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

@item -mno-direct-extern-access
@opindex mno-direct-extern-access
@opindex mdirect-extern-access
Without @option{-fpic} nor @option{-fPIC}, always use the GOT pointer
to access external symbols.  With @option{-fpic} or @option{-fPIC},
treat access to protected symbols as local symbols.  The default is
@option{-mdirect-extern-access}.

@strong{Warning:} shared libraries compiled with
@option{-mno-direct-extern-access} and executable compiled with
@option{-mdirect-extern-access} may not be binary compatible if
protected symbols are used in shared libraries and executable.

@item -munroll-only-small-loops
@opindex munroll-only-small-loops
@opindex mno-unroll-only-small-loops
Controls conservative small loop unrolling. It is default enabled by
O2, and unrolls loop with less than 4 insns by 1 time. Explicit
-f[no-]unroll-[all-]loops would disable this flag to avoid any
unintended unrolling behavior that user does not want.
@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.

@item -mextra-l32r-costs=@var{n}
@opindex mextra-l32r-costs
Specify an extra cost of instruction RAM/ROM access for @code{L32R}
instructions, in clock cycles.  This affects, when optimizing for speed,
whether loading a constant from literal pool using @code{L32R} or
synthesizing the constant from a small one with a couple of arithmetic
instructions.  The default value is 0.
@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 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.

@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 Standard Library Header Units
The Standard Library is not provided as importable header units.  If
you want to import such units, you must explicitly build them first.
If you do not do this with care, you may have multiple declarations,
which the module machinery must merge---compiler resource usage can be
affected by how you partition header files into header units.

@end table

Modular compilation is @emph{not} enabled with just the
@option{-std=c++20} option.  You must explicitly enable it with the
@option{-fmodules-ts} option.  It is independent of the language
version selected, although in pre-C++20 versions, it is of course an
extension.

No new source file suffixes are required or supported.  If you wish to
use a non-standard suffix (@pxref{Overall Options}), you also need
to provide a @option{-x c++} option too.@footnote{Some users like to
distinguish module interface files with a new suffix, such as naming
the source @code{module.cppm}, which involves
teaching all tools about the new suffix.  A different scheme, such as
naming @code{module-m.cpp} would be less invasive.}

Compiling a module interface unit produces an additional output (to
the assembly or object file), called a Compiled Module Interface
(CMI).  This encodes the exported declarations of the module.
Importing a module reads in the CMI.  The import graph is a Directed
Acyclic Graph (DAG).  You must build imports before the importer.

Header files may themselves be compiled to header units, which are a
transitional ability aiming at faster compilation.  The
@option{-fmodule-header} option is used to enable this, and implies
the @option{-fmodules-ts} option.  These CMIs are named by the fully
resolved underlying header file, and thus may be a complete pathname
containing subdirectories.  If the header file is found at an absolute
pathname, the CMI location is still relative to a CMI root directory.

As header files often have no suffix, you commonly have to specify a
@option{-x} option to tell the compiler the source is a header file.
You may use @option{-x c++-header}, @option{-x c++-user-header} or
@option{-x c++-system-header}.  When used in conjunction with
@option{-fmodules-ts}, these all imply an appropriate
@option{-fmodule-header} option.  The latter two variants use the
user or system include path to search for the file specified.  This
allows you to, for instance, compile standard library header files as
header units, without needing to know exactly where they are
installed.  Specifying the language as one of these variants also
inhibits output of the object file, as header files have no associated
object file.

The @option{-fmodule-only} option disables generation of the
associated object file for compiling a module interface.  Only the CMI
is generated.  This option is implied when using the
@option{-fmodule-header} option.

The @option{-flang-info-include-translate} and
@option{-flang-info-include-translate-not} options notes whether
include translation occurs or not.  With no argument, the first will
note all include translation.  The second will note all
non-translations of include files not known to intentionally be
textual.  With an argument, queries about include translation of a
header files with that particular trailing pathname are noted.  You
may repeat this form to cover several different header files.  This
option may be helpful in determining whether include translation is
happening---if it is working correctly, it behaves as if it isn't
there at all.

The @option{-flang-info-module-cmi} option can be used to determine
where the compiler is reading a CMI from.  Without the option, the
compiler is silent when such a read is successful.  This option has an
optional argument, which will restrict the notification to just the
set of named modules or header units specified.

The @option{-Winvalid-imported-macros} option causes all imported macros
to be resolved at the end of compilation.  Without this, imported
macros are only resolved when expanded or (re)defined.  This option
detects conflicting import definitions for all macros.

For details of the @option{-fmodule-mapper} family of options,
@pxref{C++ Module Mapper}.

@menu
* C++ Module Mapper::       Module Mapper
* C++ Module Preprocessing::  Module Preprocessing
* C++ Compiled Module Interface:: Compiled Module Interface
@end menu

@node C++ Module Mapper
@subsection Module Mapper
@cindex C++ Module Mapper

A module mapper provides a server or file that the compiler queries to
determine the mapping between module names and CMI files.  It is also
used to build CMIs on demand.  @emph{Mapper functionality is in its
infancy and is intended for experimentation with build system
interactions.}

You can specify a mapper with the @option{-fmodule-mapper=@var{val}}
option or @env{CXX_MODULE_MAPPER} environment variable.  The value may
have one of the following forms:

@table @gcctabopt

@item @r{[}@var{hostname}@r{]}:@var{port}@r{[}?@var{ident}@r{]}
An optional hostname and a numeric port number to connect to.  If the
hostname is omitted, the loopback address is used.  If the hostname
corresponds to multiple IPV6 addresses, these are tried in turn, until
one is successful.  If your host lacks IPv6, this form is
non-functional.  If you must use IPv4 use
@option{-fmodule-mapper='|ncat @var{ipv4host} @var{port}'}.

@item =@var{socket}@r{[}?@var{ident}@r{]}
A local domain socket.  If your host lacks local domain sockets, this
form is non-functional.

@item |@var{program}@r{[}?@var{ident}@r{]} @r{[}@var{args...}@r{]}
A program to spawn, and communicate with on its stdin/stdout streams.
Your @var{PATH} environment variable is searched for the program.
Arguments are separated by space characters, (it is not possible for
one of the arguments delivered to the program to contain a space).  An
exception is if @var{program} begins with @@.  In that case
@var{program} (sans @@) is looked for in the compiler's internal
binary directory.  Thus the sample mapper-server can be specified
with @code{@@g++-mapper-server}.

@item <>@r{[}?@var{ident}@r{]}
@item <>@var{inout}@r{[}?@var{ident}@r{]}
@item <@var{in}>@var{out}@r{[}?@var{ident}@r{]}
Named pipes or file descriptors to communicate over.  The first form,
@option{<>}, communicates over stdin and stdout.  The other forms
allow you to specify a file descriptor or name a pipe.  A numeric value
is interpreted as a file descriptor, otherwise named pipe is opened.
The second form specifies a bidirectional pipe and the last form
allows specifying two independent pipes.  Using file descriptors
directly in this manner is fragile in general, as it can require the
cooperation of intermediate processes.  In particular using stdin &
stdout is fraught with danger as other compiler options might also
cause the compiler to read stdin or write stdout, and it can have
unfortunate interactions with signal delivery from the terminal.

@item @var{file}@r{[}?@var{ident}@r{]}
A mapping file consisting of space-separated module-name, filename
pairs, one per line.  Only the mappings for the direct imports and any
module export name need be provided.  If other mappings are provided,
they override those stored in any imported CMI files.  A repository
root may be specified in the mapping file by using @samp{$root} as the
module name in the first active line.  Use of this option will disable
any default module->CMI name mapping.

@end table

As shown, an optional @var{ident} may suffix the first word of the
option, indicated by a @samp{?} prefix.  The value is used in the
initial handshake with the module server, or to specify a prefix on
mapping file lines.  In the server case, the main source file name is
used if no @var{ident} is specified.  In the file case, all non-blank
lines are significant, unless a value is specified, in which case only
lines beginning with @var{ident} are significant.  The @var{ident}
must be separated by whitespace from the module name.  Be aware that
@samp{<}, @samp{>}, @samp{?}, and @samp{|} characters are often
significant to the shell, and therefore may need quoting.

The mapper is connected to or loaded lazily, when the first module
mapping is required.  The networking protocols are only supported on
hosts that provide networking.  If no mapper is specified a default is
provided.

A project-specific mapper is expected to be provided by the build
system that invokes the compiler.  It is not expected that a
general-purpose server is provided for all compilations.  As such, the
server will know the build configuration, the compiler it invoked, and
the environment (such as working directory) in which that is
operating.  As it may parallelize builds, several compilations may
connect to the same socket.

The default mapper generates CMI files in a @samp{gcm.cache}
directory.  CMI files have a @samp{.gcm} suffix.  The module unit name
is used directly to provide the basename.  Header units construct a
relative path using the underlying header file name.  If the path is
already relative, a @samp{,} directory is prepended.  Internal
@samp{..} components are translated to @samp{,,}.  No attempt is made
to canonicalize these filenames beyond that done by the preprocessor's
include search algorithm, as in general it is ambiguous when symbolic
links are present.

The mapper protocol was published as ``A Module Mapper''
@uref{https://wg21.link/p1184}.  The implementation is provided by
@command{libcody}, @uref{https://github.com/urnathan/libcody},
which specifies the canonical protocol definition.  A proof of concept
server implementation embedded in @command{make} was described in
''Make Me A Module'', @uref{https://wg21.link/p1602}.

@node C++ Module Preprocessing
@subsection Module Preprocessing
@cindex C++ Module Preprocessing

Modules affect preprocessing because of header units and include
translation.  Some uses of the preprocessor as a separate step either
do not produce a correct output, or require CMIs to be available.

Header units import macros.  These macros can affect later conditional
inclusion, which therefore can cascade to differing import sets.  When
preprocessing, it is necessary to load the CMI.  If a header unit is
unavailable, the preprocessor issues a warning and continue (when
not just preprocessing, an error is emitted).  Detecting such imports
requires preprocessor tokenization of the input stream to phase 4
(macro expansion).

Include translation converts @code{#include}, @code{#include_next} and
@code{#import} directives to internal @code{import} declarations.
Whether a particular directive is translated is controlled by the
module mapper.  Header unit names are canonicalized during
preprocessing.

Dependency information can be emitted for macro import, extending the
functionality of @option{-MD} and @option{-MMD} options.  Detection of
import declarations also requires phase 4 preprocessing, and thus
requires full preprocessing (or compilation).

The @option{-M}, @option{-MM} and @option{-E -fdirectives-only} options halt
preprocessing before phase 4.

The @option{-save-temps} option uses @option{-fdirectives-only} for
preprocessing, and preserve the macro definitions in the preprocessed
output.  Usually you also want to use this option when explicitly
preprocessing a header-unit, or consuming such preprocessed output:

@smallexample
g++ -fmodules-ts -E -fdirectives-only my-header.hh -o my-header.ii
g++ -x c++-header -fmodules-ts -fpreprocessed -fdirectives-only my-header.ii
@end smallexample

@node C++ Compiled Module Interface
@subsection Compiled Module Interface
@cindex C++ Compiled Module Interface

CMIs are an additional artifact when compiling named module
interfaces, partitions or header units.  These are read when
importing.  CMI contents are implementation-specific, and in GCC's
case tied to the compiler version.  Consider them a rebuildable cache
artifact, not a distributable object.

When creating an output CMI, any missing directory components are
created in a manner that is safe for concurrent builds creating
multiple, different, CMIs within a common subdirectory tree.

CMI contents are written to a temporary file, which is then atomically
renamed.  Observers either see old contents (if there is an
existing file), or complete new contents.  They do not observe the
CMI during its creation.  This is unlike object file writing, which
may be observed by an external process.

CMIs are read in lazily, if the host OS provides @code{mmap}
functionality.  Generally blocks are read when name lookup or template
instantiation occurs.  To inhibit this, the @option{-fno-module-lazy}
option may be used.

The @option{--param lazy-modules=@var{n}} parameter controls the limit
on the number of concurrently open module files during lazy loading.
Should more modules be imported, an LRU algorithm is used to determine
which files to close---until that file is needed again.  This limit
may be exceeded with deep module dependency hierarchies.  With large
code bases there may be more imports than the process limit of file
descriptors.  By default, the limit is a few less than the per-process
file descriptor hard limit, if that is determinable.@footnote{Where
applicable the soft limit is incremented as needed towards the hard limit.}

GCC CMIs use ELF32 as an architecture-neutral encapsulation mechanism.
You may use @command{readelf} to inspect them, although section
contents are largely undecipherable.  There is a section named
@code{.gnu.c++.README}, which contains human-readable text.  Other
than the first line, each line consists of @code{@var{tag}: @code{value}}
tuples.

@smallexample
> @command{readelf -p.gnu.c++.README gcm.cache/foo.gcm}

String dump of section '.gnu.c++.README':
  [     0]  GNU C++ primary module interface
  [    21]  compiler: 11.0.0 20201116 (experimental) [c++-modules revision 20201116-0454]
  [    6f]  version: 2020/11/16-04:54
  [    89]  module: foo
  [    95]  source: c_b.ii
  [    a4]  dialect: C++20/coroutines
  [    be]  cwd: /data/users/nathans/modules/obj/x86_64/gcc
  [    ee]  repository: gcm.cache
  [   104]  buildtime: 2020/11/16 15:03:21 UTC
  [   127]  localtime: 2020/11/16 07:03:21 PST
  [   14a]  export: foo:part1 foo-part1.gcm
@end smallexample

Amongst other things, this lists the source that was built, C++
dialect used and imports of the module.@footnote{The precise contents
of this output may change.} The timestamp is the same value as that
provided by the @code{__DATE__} & @code{__TIME__} macros, and may be
explicitly specified with the environment variable
@code{SOURCE_DATE_EPOCH}.  For further details
@pxref{Environment Variables}.

A set of related CMIs may be copied, provided the relative pathnames
are preserved.

The @code{.gnu.c++.README} contents do not affect CMI integrity, and
it may be removed or altered.  The section numbering of the sections
whose names do not begin with @code{.gnu.c++.}, or are not the string
section is significant and must not be altered.
