gcc80: Add pregenerated manpages.
authorzrj <rimvydas.jasinskas@gmail.com>
Wed, 2 May 2018 13:40:58 +0000 (16:40 +0300)
committerzrj <zrj@dragonflybsd.org>
Mon, 14 May 2018 17:21:08 +0000 (20:21 +0300)
gnu/usr.bin/cc80/drivers/cc/gcc.1 [new file with mode: 0644]
gnu/usr.bin/cc80/drivers/cpp/cpp.1 [new file with mode: 0644]
gnu/usr.bin/cc80/drivers/gcov/gcov.1 [new file with mode: 0644]
gnu/usr.bin/cc80/support-libs/liblto_plugin/b-header-vars [new file with mode: 0644]

diff --git a/gnu/usr.bin/cc80/drivers/cc/gcc.1 b/gnu/usr.bin/cc80/drivers/cc/gcc.1
new file mode 100644 (file)
index 0000000..7cbea60
--- /dev/null
@@ -0,0 +1,27459 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GCC 1"
+.TH GCC 1 "2018-05-02" "gcc-8.1.0" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gcc \- GNU project C and C++ compiler
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
+    [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
+    [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
+    [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
+    [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
+    [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
+    [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
+.PP
+Only the most useful options are listed here; see below for the
+remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+When you invoke \s-1GCC,\s0 it normally does preprocessing, compilation,
+assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
+process at an intermediate stage.  For example, the \fB\-c\fR option
+says not to run the linker.  Then the output consists of object files
+output by the assembler.
+.PP
+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.
+.PP
+Most of the command-line options that you can use with \s-1GCC\s0 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.
+.PP
+The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
+\&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
+\&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a specific version of \s-1GCC.\s0
+When you compile \*(C+ programs, you should invoke \s-1GCC\s0 as \fBg++\fR 
+instead.
+.PP
+The \fBgcc\fR program accepts options and file names as operands.  Many
+options have multi-letter names; therefore multiple single-letter options
+may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
+.PP
+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 \fB\-L\fR more
+than once, the directories are searched in the order specified.  Also,
+the placement of the \fB\-l\fR option is significant.
+.PP
+Many options have long names starting with \fB\-f\fR or with
+\&\fB\-W\fR\-\-\-for example,
+\&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
+these have both positive and negative forms; the negative form of
+\&\fB\-ffoo\fR is \fB\-fno\-foo\fR.  This manual documents
+only one of these two forms, whichever one is not the default.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.SS "Option Summary"
+.IX Subsection "Option Summary"
+Here is a summary of all the options, grouped by type.  Explanations are
+in the following sections.
+.IP "\fIOverall Options\fR" 4
+.IX Item "Overall Options"
+\&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-x\fR \fIlanguage\fR  
+\&\fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  \-\-version 
+\&\-pass\-exit\-codes  \-pipe  \-specs=\fR\fIfile\fR  \fB\-wrapper  
+@\fR\fIfile\fR  \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  
+\&\fB\-fplugin=\fR\fIfile\fR  \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR  
+\&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]  \fB\-fada\-spec\-parent=\fR\fIunit\fR  \fB\-fdump\-go\-spec=\fR\fIfile\fR
+.IP "\fIC Language Options\fR" 4
+.IX Item "C Language Options"
+\&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
+\&\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR 
+\&\fB\-aux\-info\fR \fIfilename\fR  \fB\-fallow\-parameterless\-variadic\-functions 
+\&\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR  \fB\-fgimple
+\&\-fhosted  \-ffreestanding  \-fopenacc  \-fopenmp  \-fopenmp\-simd 
+\&\-fms\-extensions  \-fplan9\-extensions  \-fsso\-struct=\fR\fIendianness\fR 
+\&\fB\-fallow\-single\-precision  \-fcond\-mismatch  \-flax\-vector\-conversions 
+\&\-fsigned\-bitfields  \-fsigned\-char 
+\&\-funsigned\-bitfields  \-funsigned\-char\fR
+.IP "\fI\*(C+ Language Options\fR" 4
+.IX Item " Language Options"
+\&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control 
+\&\-faligned\-new=\fR\fIn\fR  \fB\-fargs\-in\-order=\fR\fIn\fR  \fB\-fcheck\-new 
+\&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-fconstexpr\-loop\-limit=\fR\fIn\fR 
+\&\fB\-ffriend\-injection 
+\&\-fno\-elide\-constructors 
+\&\-fno\-enforce\-eh\-specs 
+\&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
+\&\-fno\-implicit\-templates 
+\&\-fno\-implicit\-inline\-templates 
+\&\-fno\-implement\-inlines  \-fms\-extensions 
+\&\-fnew\-inheriting\-ctors 
+\&\-fnew\-ttp\-matching 
+\&\-fno\-nonansi\-builtins  \-fnothrow\-opt  \-fno\-operator\-names 
+\&\-fno\-optional\-diags  \-fpermissive 
+\&\-fno\-pretty\-templates 
+\&\-frepo  \-fno\-rtti  \-fsized\-deallocation 
+\&\-ftemplate\-backtrace\-limit=\fR\fIn\fR 
+\&\fB\-ftemplate\-depth=\fR\fIn\fR 
+\&\fB\-fno\-threadsafe\-statics  \-fuse\-cxa\-atexit 
+\&\-fno\-weak  \-nostdinc++ 
+\&\-fvisibility\-inlines\-hidden 
+\&\-fvisibility\-ms\-compat 
+\&\-fext\-numeric\-literals 
+\&\-Wabi=\fR\fIn\fR  \fB\-Wabi\-tag  \-Wconversion\-null  \-Wctor\-dtor\-privacy 
+\&\-Wdelete\-non\-virtual\-dtor  \-Wliteral\-suffix  \-Wmultiple\-inheritance 
+\&\-Wnamespaces  \-Wnarrowing 
+\&\-Wnoexcept  \-Wnoexcept\-type  \-Wclass\-memaccess 
+\&\-Wnon\-virtual\-dtor  \-Wreorder  \-Wregister 
+\&\-Weffc++  \-Wstrict\-null\-sentinel  \-Wtemplates 
+\&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
+\&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
+\&\-Wsign\-promo  \-Wvirtual\-inheritance\fR
+.IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
+.IX Item "Objective-C and Objective- Language Options"
+\&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
+\&\fB\-fgnu\-runtime  \-fnext\-runtime 
+\&\-fno\-nil\-receivers 
+\&\-fobjc\-abi\-version=\fR\fIn\fR 
+\&\fB\-fobjc\-call\-cxx\-cdtors 
+\&\-fobjc\-direct\-dispatch 
+\&\-fobjc\-exceptions 
+\&\-fobjc\-gc 
+\&\-fobjc\-nilcheck 
+\&\-fobjc\-std=objc1 
+\&\-fno\-local\-ivars 
+\&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 
+\&\fB\-freplace\-objc\-classes 
+\&\-fzero\-link 
+\&\-gen\-decls 
+\&\-Wassign\-intercept 
+\&\-Wno\-protocol  \-Wselector 
+\&\-Wstrict\-selector\-match 
+\&\-Wundeclared\-selector\fR
+.IP "\fIDiagnostic Message Formatting Options\fR" 4
+.IX Item "Diagnostic Message Formatting Options"
+\&\fB\-fmessage\-length=\fR\fIn\fR  
+\&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
+\&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]  
+\&\fB\-fno\-diagnostics\-show\-option  \-fno\-diagnostics\-show\-caret 
+\&\-fdiagnostics\-parseable\-fixits  \-fdiagnostics\-generate\-patch 
+\&\-fdiagnostics\-show\-template\-tree \-fno\-elide\-type 
+\&\-fno\-show\-column\fR
+.IP "\fIWarning Options\fR" 4
+.IX Item "Warning Options"
+\&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-Wpedantic 
+\&\-pedantic\-errors 
+\&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  
+\&\-Walloc\-zero  \-Walloc\-size\-larger\-than=\fR\fIn\fR
+\&\fB\-Walloca  \-Walloca\-larger\-than=\fR\fIn\fR 
+\&\fB\-Wno\-aggressive\-loop\-optimizations  \-Warray\-bounds  \-Warray\-bounds=\fR\fIn\fR 
+\&\fB\-Wno\-attributes  \-Wbool\-compare  \-Wbool\-operation 
+\&\-Wno\-builtin\-declaration\-mismatch 
+\&\-Wno\-builtin\-macro\-redefined  \-Wc90\-c99\-compat  \-Wc99\-c11\-compat 
+\&\-Wc++\-compat  \-Wc++11\-compat  \-Wc++14\-compat  
+\&\-Wcast\-align  \-Wcast\-align=strict  \-Wcast\-function\-type  \-Wcast\-qual  
+\&\-Wchar\-subscripts  \-Wchkp  \-Wcatch\-value  \-Wcatch\-value=\fR\fIn\fR 
+\&\fB\-Wclobbered  \-Wcomment  \-Wconditionally\-supported 
+\&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-cpp  \-Wdangling\-else  \-Wdate\-time 
+\&\-Wdelete\-incomplete 
+\&\-Wno\-deprecated  \-Wno\-deprecated\-declarations  \-Wno\-designated\-init 
+\&\-Wdisabled\-optimization 
+\&\-Wno\-discarded\-qualifiers  \-Wno\-discarded\-array\-qualifiers 
+\&\-Wno\-div\-by\-zero  \-Wdouble\-promotion 
+\&\-Wduplicated\-branches  \-Wduplicated\-cond 
+\&\-Wempty\-body  \-Wenum\-compare  \-Wno\-endif\-labels  \-Wexpansion\-to\-defined 
+\&\-Werror  \-Werror=*  \-Wextra\-semi  \-Wfatal\-errors 
+\&\-Wfloat\-equal  \-Wformat  \-Wformat=2 
+\&\-Wno\-format\-contains\-nul  \-Wno\-format\-extra\-args  
+\&\-Wformat\-nonliteral \-Wformat\-overflow=\fR\fIn\fR 
+\&\fB\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-truncation=\fR\fIn\fR 
+\&\fB\-Wformat\-y2k  \-Wframe\-address 
+\&\-Wframe\-larger\-than=\fR\fIlen\fR  \fB\-Wno\-free\-nonheap\-object  \-Wjump\-misses\-init 
+\&\-Wif\-not\-aligned 
+\&\-Wignored\-qualifiers  \-Wignored\-attributes  \-Wincompatible\-pointer\-types 
+\&\-Wimplicit  \-Wimplicit\-fallthrough  \-Wimplicit\-fallthrough=\fR\fIn\fR 
+\&\fB\-Wimplicit\-function\-declaration  \-Wimplicit\-int 
+\&\-Winit\-self  \-Winline  \-Wno\-int\-conversion  \-Wint\-in\-bool\-context 
+\&\-Wno\-int\-to\-pointer\-cast  \-Winvalid\-memory\-model  \-Wno\-invalid\-offsetof 
+\&\-Winvalid\-pch  \-Wlarger\-than=\fR\fIlen\fR 
+\&\fB\-Wlogical\-op  \-Wlogical\-not\-parentheses  \-Wlong\-long 
+\&\-Wmain  \-Wmaybe\-uninitialized  \-Wmemset\-elt\-size  \-Wmemset\-transposed\-args 
+\&\-Wmisleading\-indentation  \-Wmissing\-attributes \-Wmissing\-braces 
+\&\-Wmissing\-field\-initializers  \-Wmissing\-include\-dirs 
+\&\-Wno\-multichar  \-Wmultistatement\-macros  \-Wnonnull  \-Wnonnull\-compare 
+\&\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 
+\&\fB\-Wnull\-dereference  \-Wodr  \-Wno\-overflow  \-Wopenmp\-simd  
+\&\-Woverride\-init\-side\-effects  \-Woverlength\-strings 
+\&\-Wpacked  \-Wpacked\-bitfield\-compat \-Wpacked\-not\-aligned \-Wpadded 
+\&\-Wparentheses  \-Wno\-pedantic\-ms\-format 
+\&\-Wplacement\-new  \-Wplacement\-new=\fR\fIn\fR 
+\&\fB\-Wpointer\-arith  \-Wpointer\-compare  \-Wno\-pointer\-to\-int\-cast 
+\&\-Wno\-pragmas  \-Wredundant\-decls  \-Wrestrict  \-Wno\-return\-local\-addr 
+\&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow  \-Wno\-shadow\-ivar 
+\&\-Wshadow=global,  \-Wshadow=local,  \-Wshadow=compatible\-local 
+\&\-Wshift\-overflow  \-Wshift\-overflow=\fR\fIn\fR 
+\&\fB\-Wshift\-count\-negative  \-Wshift\-count\-overflow  \-Wshift\-negative\-value 
+\&\-Wsign\-compare  \-Wsign\-conversion  \-Wfloat\-conversion 
+\&\-Wno\-scalar\-storage\-order  \-Wsizeof\-pointer\-div 
+\&\-Wsizeof\-pointer\-memaccess  \-Wsizeof\-array\-argument 
+\&\-Wstack\-protector  \-Wstack\-usage=\fR\fIlen\fR  \fB\-Wstrict\-aliasing 
+\&\-Wstrict\-aliasing=n  \-Wstrict\-overflow  \-Wstrict\-overflow=\fR\fIn\fR 
+\&\fB\-Wstringop\-overflow=\fR\fIn\fR \fB\-Wstringop\-truncation 
+\&\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBmalloc\fR] 
+\&\fB\-Wsuggest\-final\-types   \-Wsuggest\-final\-methods  \-Wsuggest\-override 
+\&\-Wmissing\-format\-attribute  \-Wsubobject\-linkage 
+\&\-Wswitch  \-Wswitch\-bool  \-Wswitch\-default  \-Wswitch\-enum 
+\&\-Wswitch\-unreachable  \-Wsync\-nand 
+\&\-Wsystem\-headers  \-Wtautological\-compare  \-Wtrampolines  \-Wtrigraphs 
+\&\-Wtype\-limits  \-Wundef 
+\&\-Wuninitialized  \-Wunknown\-pragmas  \-Wunsafe\-loop\-optimizations 
+\&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
+\&\-Wunused\-label  \-Wunused\-local\-typedefs  \-Wunused\-macros 
+\&\-Wunused\-parameter  \-Wno\-unused\-result 
+\&\-Wunused\-value  \-Wunused\-variable 
+\&\-Wunused\-const\-variable  \-Wunused\-const\-variable=\fR\fIn\fR 
+\&\fB\-Wunused\-but\-set\-parameter  \-Wunused\-but\-set\-variable 
+\&\-Wuseless\-cast  \-Wvariadic\-macros  \-Wvector\-operation\-performance 
+\&\-Wvla  \-Wvla\-larger\-than=\fR\fIn\fR  \fB\-Wvolatile\-register\-var  \-Wwrite\-strings 
+\&\-Wzero\-as\-null\-pointer\-constant  \-Whsa\fR
+.IP "\fIC and Objective-C-only Warning Options\fR" 4
+.IX Item "C and Objective-C-only Warning Options"
+\&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
+\&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
+\&\-Wold\-style\-declaration  \-Wold\-style\-definition 
+\&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
+\&\-Wdeclaration\-after\-statement  \-Wpointer\-sign\fR
+.IP "\fIDebugging Options\fR" 4
+.IX Item "Debugging Options"
+\&\fB\-g  \-g\fR\fIlevel\fR  \fB\-gdwarf  \-gdwarf\-\fR\fIversion\fR 
+\&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
+\&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
+\&\-gas\-loc\-support  \-gno\-as\-loc\-support 
+\&\-gas\-locview\-support  \-gno\-as\-locview\-support 
+\&\-gcolumn\-info  \-gno\-column\-info 
+\&\-gstatement\-frontiers  \-gno\-statement\-frontiers 
+\&\-gvariable\-location\-views  \-gno\-variable\-location\-views 
+\&\-ginternal\-reset\-location\-views  \-gno\-internal\-reset\-location\-views 
+\&\-ginline\-points  \-gno\-inline\-points 
+\&\-gvms  \-gxcoff  \-gxcoff+  \-gz\fR[\fB=\fR\fItype\fR] 
+\&\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  \fB\-fdebug\-types\-section 
+\&\-fno\-eliminate\-unused\-debug\-types 
+\&\-femit\-struct\-debug\-baseonly  \-femit\-struct\-debug\-reduced 
+\&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
+\&\fB\-feliminate\-unused\-debug\-symbols  \-femit\-class\-debug\-always 
+\&\-fno\-merge\-debug\-strings  \-fno\-dwarf2\-cfi\-asm 
+\&\-fvar\-tracking  \-fvar\-tracking\-assignments\fR
+.IP "\fIOptimization Options\fR" 4
+.IX Item "Optimization Options"
+\&\fB\-faggressive\-loop\-optimizations  \-falign\-functions[=\fR\fIn\fR\fB] 
+\&\-falign\-jumps[=\fR\fIn\fR\fB] 
+\&\-falign\-labels[=\fR\fIn\fR\fB]  \-falign\-loops[=\fR\fIn\fR\fB] 
+\&\-fassociative\-math  \-fauto\-profile  \-fauto\-profile[=\fR\fIpath\fR\fB] 
+\&\-fauto\-inc\-dec  \-fbranch\-probabilities 
+\&\-fbranch\-target\-load\-optimize  \-fbranch\-target\-load\-optimize2 
+\&\-fbtr\-bb\-exclusive  \-fcaller\-saves 
+\&\-fcombine\-stack\-adjustments  \-fconserve\-stack 
+\&\-fcompare\-elim  \-fcprop\-registers  \-fcrossjumping 
+\&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks  \-fcx\-fortran\-rules 
+\&\-fcx\-limited\-range 
+\&\-fdata\-sections  \-fdce  \-fdelayed\-branch 
+\&\-fdelete\-null\-pointer\-checks  \-fdevirtualize  \-fdevirtualize\-speculatively 
+\&\-fdevirtualize\-at\-ltrans  \-fdse 
+\&\-fearly\-inlining  \-fipa\-sra  \-fexpensive\-optimizations  \-ffat\-lto\-objects 
+\&\-ffast\-math  \-ffinite\-math\-only  \-ffloat\-store  \-fexcess\-precision=\fR\fIstyle\fR 
+\&\fB\-fforward\-propagate  \-ffp\-contract=\fR\fIstyle\fR  \fB\-ffunction\-sections 
+\&\-fgcse  \-fgcse\-after\-reload  \-fgcse\-las  \-fgcse\-lm  \-fgraphite\-identity 
+\&\-fgcse\-sm  \-fhoist\-adjacent\-loads  \-fif\-conversion 
+\&\-fif\-conversion2  \-findirect\-inlining 
+\&\-finline\-functions  \-finline\-functions\-called\-once  \-finline\-limit=\fR\fIn\fR 
+\&\fB\-finline\-small\-functions  \-fipa\-cp  \-fipa\-cp\-clone 
+\&\-fipa\-bit\-cp \-fipa\-vrp 
+\&\-fipa\-pta  \-fipa\-profile  \-fipa\-pure\-const  \-fipa\-reference  \-fipa\-icf 
+\&\-fira\-algorithm=\fR\fIalgorithm\fR 
+\&\fB\-fira\-region=\fR\fIregion\fR  \fB\-fira\-hoist\-pressure 
+\&\-fira\-loop\-pressure  \-fno\-ira\-share\-save\-slots 
+\&\-fno\-ira\-share\-spill\-slots 
+\&\-fisolate\-erroneous\-paths\-dereference  \-fisolate\-erroneous\-paths\-attribute 
+\&\-fivopts  \-fkeep\-inline\-functions  \-fkeep\-static\-functions 
+\&\-fkeep\-static\-consts  \-flimit\-function\-alignment  \-flive\-range\-shrinkage 
+\&\-floop\-block  \-floop\-interchange  \-floop\-strip\-mine 
+\&\-floop\-unroll\-and\-jam  \-floop\-nest\-optimize 
+\&\-floop\-parallelize\-all  \-flra\-remat  \-flto  \-flto\-compression\-level 
+\&\-flto\-partition=\fR\fIalg\fR  \fB\-fmerge\-all\-constants 
+\&\-fmerge\-constants  \-fmodulo\-sched  \-fmodulo\-sched\-allow\-regmoves 
+\&\-fmove\-loop\-invariants  \-fno\-branch\-count\-reg 
+\&\-fno\-defer\-pop  \-fno\-fp\-int\-builtin\-inexact  \-fno\-function\-cse 
+\&\-fno\-guess\-branch\-probability  \-fno\-inline  \-fno\-math\-errno  \-fno\-peephole 
+\&\-fno\-peephole2  \-fno\-printf\-return\-value  \-fno\-sched\-interblock 
+\&\-fno\-sched\-spec  \-fno\-signed\-zeros 
+\&\-fno\-toplevel\-reorder  \-fno\-trapping\-math  \-fno\-zero\-initialized\-in\-bss 
+\&\-fomit\-frame\-pointer  \-foptimize\-sibling\-calls 
+\&\-fpartial\-inlining  \-fpeel\-loops  \-fpredictive\-commoning 
+\&\-fprefetch\-loop\-arrays 
+\&\-fprofile\-correction 
+\&\-fprofile\-use  \-fprofile\-use=\fR\fIpath\fR  \fB\-fprofile\-values 
+\&\-fprofile\-reorder\-functions 
+\&\-freciprocal\-math  \-free  \-frename\-registers  \-freorder\-blocks 
+\&\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR 
+\&\fB\-freorder\-blocks\-and\-partition  \-freorder\-functions 
+\&\-frerun\-cse\-after\-loop  \-freschedule\-modulo\-scheduled\-loops 
+\&\-frounding\-math  \-fsched2\-use\-superblocks  \-fsched\-pressure 
+\&\-fsched\-spec\-load  \-fsched\-spec\-load\-dangerous 
+\&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB]  \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
+\&\-fsched\-group\-heuristic  \-fsched\-critical\-path\-heuristic 
+\&\-fsched\-spec\-insn\-heuristic  \-fsched\-rank\-heuristic 
+\&\-fsched\-last\-insn\-heuristic  \-fsched\-dep\-count\-heuristic 
+\&\-fschedule\-fusion 
+\&\-fschedule\-insns  \-fschedule\-insns2  \-fsection\-anchors 
+\&\-fselective\-scheduling  \-fselective\-scheduling2 
+\&\-fsel\-sched\-pipelining  \-fsel\-sched\-pipelining\-outer\-loops 
+\&\-fsemantic\-interposition  \-fshrink\-wrap  \-fshrink\-wrap\-separate 
+\&\-fsignaling\-nans 
+\&\-fsingle\-precision\-constant  \-fsplit\-ivs\-in\-unroller  \-fsplit\-loops
+\&\-fsplit\-paths 
+\&\-fsplit\-wide\-types  \-fssa\-backprop  \-fssa\-phiopt 
+\&\-fstdarg\-opt  \-fstore\-merging  \-fstrict\-aliasing 
+\&\-fthread\-jumps  \-ftracer  \-ftree\-bit\-ccp 
+\&\-ftree\-builtin\-call\-dce  \-ftree\-ccp  \-ftree\-ch 
+\&\-ftree\-coalesce\-vars  \-ftree\-copy\-prop  \-ftree\-dce  \-ftree\-dominator\-opts 
+\&\-ftree\-dse  \-ftree\-forwprop  \-ftree\-fre  \-fcode\-hoisting 
+\&\-ftree\-loop\-if\-convert  \-ftree\-loop\-im 
+\&\-ftree\-phiprop  \-ftree\-loop\-distribution  \-ftree\-loop\-distribute\-patterns 
+\&\-ftree\-loop\-ivcanon  \-ftree\-loop\-linear  \-ftree\-loop\-optimize 
+\&\-ftree\-loop\-vectorize 
+\&\-ftree\-parallelize\-loops=\fR\fIn\fR  \fB\-ftree\-pre  \-ftree\-partial\-pre  \-ftree\-pta 
+\&\-ftree\-reassoc  \-ftree\-sink  \-ftree\-slsr  \-ftree\-sra 
+\&\-ftree\-switch\-conversion  \-ftree\-tail\-merge 
+\&\-ftree\-ter  \-ftree\-vectorize  \-ftree\-vrp  \-funconstrained\-commons 
+\&\-funit\-at\-a\-time  \-funroll\-all\-loops  \-funroll\-loops 
+\&\-funsafe\-math\-optimizations  \-funswitch\-loops 
+\&\-fipa\-ra  \-fvariable\-expansion\-in\-unroller  \-fvect\-cost\-model  \-fvpt 
+\&\-fweb  \-fwhole\-program  \-fwpa  \-fuse\-linker\-plugin 
+\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
+\&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os  \-Ofast  \-Og\fR
+.IP "\fIProgram Instrumentation Options\fR" 4
+.IX Item "Program Instrumentation Options"
+\&\fB\-p  \-pg  \-fprofile\-arcs  \-\-coverage  \-ftest\-coverage 
+\&\-fprofile\-abs\-path 
+\&\-fprofile\-dir=\fR\fIpath\fR  \fB\-fprofile\-generate  \-fprofile\-generate=\fR\fIpath\fR 
+\&\fB\-fsanitize=\fR\fIstyle\fR  \fB\-fsanitize\-recover  \-fsanitize\-recover=\fR\fIstyle\fR 
+\&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR  \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,... 
+\&\-fsanitize\-undefined\-trap\-on\-error  \-fbounds\-check 
+\&\-fcheck\-pointer\-bounds  \-fchkp\-check\-incomplete\-type 
+\&\-fchkp\-first\-field\-has\-own\-bounds  \-fchkp\-narrow\-bounds 
+\&\-fchkp\-narrow\-to\-innermost\-array  \-fchkp\-optimize 
+\&\-fchkp\-use\-fast\-string\-functions  \-fchkp\-use\-nochk\-string\-functions 
+\&\-fchkp\-use\-static\-bounds  \-fchkp\-use\-static\-const\-bounds 
+\&\-fchkp\-treat\-zero\-dynamic\-size\-as\-infinite  \-fchkp\-check\-read 
+\&\-fchkp\-check\-read  \-fchkp\-check\-write  \-fchkp\-store\-bounds 
+\&\-fchkp\-instrument\-calls  \-fchkp\-instrument\-marked\-only 
+\&\-fchkp\-use\-wrappers  \-fchkp\-flexible\-struct\-trailing\-arrays
+\&\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR] 
+\&\fB\-fstack\-protector  \-fstack\-protector\-all  \-fstack\-protector\-strong 
+\&\-fstack\-protector\-explicit  \-fstack\-check 
+\&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
+\&\fB\-fno\-stack\-limit  \-fsplit\-stack 
+\&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 
+\&\fB\-fvtv\-counts  \-fvtv\-debug 
+\&\-finstrument\-functions 
+\&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
+\&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR
+.IP "\fIPreprocessor Options\fR" 4
+.IX Item "Preprocessor Options"
+\&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
+\&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
+\&\fB\-C  \-CC  \-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] 
+\&\fB\-dD  \-dI  \-dM  \-dN  \-dU 
+\&\-fdebug\-cpp  \-fdirectives\-only  \-fdollars\-in\-identifiers  
+\&\-fexec\-charset=\fR\fIcharset\fR  \fB\-fextended\-identifiers  
+\&\-finput\-charset=\fR\fIcharset\fR \fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  
+\&\fB\-fno\-canonical\-system\-headers  \-fpch\-deps  \-fpch\-preprocess  
+\&\-fpreprocessed \-ftabstop=\fR\fIwidth\fR  \fB\-ftrack\-macro\-expansion  
+\&\-fwide\-exec\-charset=\fR\fIcharset\fR  \fB\-fworking\-directory 
+\&\-H  \-imacros\fR \fIfile\fR  \fB\-include\fR \fIfile\fR 
+\&\fB\-M  \-MD  \-MF  \-MG  \-MM  \-MMD  \-MP  \-MQ  \-MT 
+\&\-no\-integrated\-cpp  \-P  \-pthread  \-remap 
+\&\-traditional  \-traditional\-cpp  \-trigraphs 
+\&\-U\fR\fImacro\fR  \fB\-undef  
+\&\-Wp,\fR\fIoption\fR  \fB\-Xpreprocessor\fR \fIoption\fR
+.IP "\fIAssembler Options\fR" 4
+.IX Item "Assembler Options"
+\&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
+.IP "\fILinker Options\fR" 4
+.IX Item "Linker Options"
+\&\fIobject-file-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR  \fB\-l\fR\fIlibrary\fR 
+\&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib  \-pie  \-pthread  \-rdynamic 
+\&\-s  \-static \-static\-pie \-static\-libgcc  \-static\-libstdc++ 
+\&\-static\-libasan  \-static\-libtsan  \-static\-liblsan  \-static\-libubsan 
+\&\-static\-libmpx  \-static\-libmpxwrappers 
+\&\-shared  \-shared\-libgcc  \-symbolic 
+\&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
+\&\fB\-u\fR \fIsymbol\fR  \fB\-z\fR \fIkeyword\fR
+.IP "\fIDirectory Options\fR" 4
+.IX Item "Directory Options"
+\&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-I\- 
+\&\-idirafter\fR \fIdir\fR 
+\&\fB\-imacros\fR \fIfile\fR  \fB\-imultilib\fR \fIdir\fR 
+\&\fB\-iplugindir=\fR\fIdir\fR  \fB\-iprefix\fR \fIfile\fR 
+\&\fB\-iquote\fR \fIdir\fR  \fB\-isysroot\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
+\&\fB\-iwithprefix\fR \fIdir\fR  \fB\-iwithprefixbefore\fR \fIdir\fR  
+\&\fB\-L\fR\fIdir\fR  \fB\-no\-canonical\-prefixes  \-\-no\-sysroot\-suffix 
+\&\-nostdinc  \-nostdinc++  \-\-sysroot=\fR\fIdir\fR
+.IP "\fICode Generation Options\fR" 4
+.IX Item "Code Generation Options"
+\&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
+\&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
+\&\-fnon\-call\-exceptions  \-fdelete\-dead\-exceptions  \-funwind\-tables 
+\&\-fasynchronous\-unwind\-tables 
+\&\-fno\-gnu\-unique 
+\&\-finhibit\-size\-directive  \-fno\-common  \-fno\-ident 
+\&\-fpcc\-struct\-return  \-fpic  \-fPIC  \-fpie  \-fPIE  \-fno\-plt 
+\&\-fno\-jump\-tables 
+\&\-frecord\-gcc\-switches 
+\&\-freg\-struct\-return  \-fshort\-enums  \-fshort\-wchar 
+\&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  
+\&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
+\&\fB\-fstack\-reuse=\fR\fIreuse_level\fR 
+\&\fB\-ftrampolines  \-ftrapv  \-fwrapv 
+\&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 
+\&\fB\-fstrict\-volatile\-bitfields  \-fsync\-libcalls\fR
+.IP "\fIDeveloper Options\fR" 4
+.IX Item "Developer Options"
+\&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
+\&\-dumpfullversion  \-fchecking  \-fchecking=\fR\fIn\fR  \fB\-fdbg\-cnt\-list 
+\&\-fdbg\-cnt=\fR\fIcounter-value-list\fR 
+\&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
+\&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
+\&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
+\&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
+\&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
+\&\fB\-fdump\-noaddr  \-fdump\-unnumbered  \-fdump\-unnumbered\-links 
+\&\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
+\&\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] 
+\&\fB\-fdump\-ipa\-all  \-fdump\-ipa\-cgraph  \-fdump\-ipa\-inline 
+\&\-fdump\-lang\-all 
+\&\-fdump\-lang\-\fR\fIswitch\fR 
+\&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 
+\&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 
+\&\fB\-fdump\-passes 
+\&\-fdump\-rtl\-\fR\fIpass\fR  \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR 
+\&\fB\-fdump\-statistics 
+\&\-fdump\-tree\-all 
+\&\-fdump\-tree\-\fR\fIswitch\fR 
+\&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 
+\&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 
+\&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
+\&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
+\&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
+\&\fB\-fira\-verbose=\fR\fIn\fR 
+\&\fB\-flto\-report  \-flto\-report\-wpa  \-fmem\-report\-wpa 
+\&\-fmem\-report  \-fpre\-ipa\-mem\-report  \-fpost\-ipa\-mem\-report 
+\&\-fopt\-info  \-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] 
+\&\fB\-fprofile\-report 
+\&\-frandom\-seed=\fR\fIstring\fR  \fB\-fsched\-verbose=\fR\fIn\fR 
+\&\fB\-fsel\-sched\-verbose  \-fsel\-sched\-dump\-cfg  \-fsel\-sched\-pipelining\-verbose 
+\&\-fstats  \-fstack\-usage  \-ftime\-report  \-ftime\-report\-details 
+\&\-fvar\-tracking\-assignments\-toggle  \-gtoggle 
+\&\-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
+\&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
+\&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
+\&\-print\-sysroot  \-print\-sysroot\-headers\-suffix 
+\&\-save\-temps  \-save\-temps=cwd  \-save\-temps=obj  \-time\fR[\fB=\fR\fIfile\fR]
+.IP "\fIMachine-Dependent Options\fR" 4
+.IX Item "Machine-Dependent Options"
+\&\fIAArch64 Options\fR
+\&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian 
+\&\-mgeneral\-regs\-only 
+\&\-mcmodel=tiny  \-mcmodel=small  \-mcmodel=large 
+\&\-mstrict\-align 
+\&\-momit\-leaf\-frame\-pointer 
+\&\-mtls\-dialect=desc  \-mtls\-dialect=traditional 
+\&\-mtls\-size=\fR\fIsize\fR 
+\&\fB\-mfix\-cortex\-a53\-835769  \-mfix\-cortex\-a53\-843419 
+\&\-mlow\-precision\-recip\-sqrt  \-mlow\-precision\-sqrt  \-mlow\-precision\-div 
+\&\-mpc\-relative\-literal\-loads 
+\&\-msign\-return\-address=\fR\fIscope\fR 
+\&\fB\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR  
+\&\fB\-moverride=\fR\fIstring\fR  \fB\-mverbose\-cost\-dump\fR
+.Sp
+\&\fIAdapteva Epiphany Options\fR
+\&\fB\-mhalf\-reg\-file  \-mprefer\-short\-insn\-regs 
+\&\-mbranch\-cost=\fR\fInum\fR  \fB\-mcmove  \-mnops=\fR\fInum\fR  \fB\-msoft\-cmpsf 
+\&\-msplit\-lohi  \-mpost\-inc  \-mpost\-modify  \-mstack\-offset=\fR\fInum\fR 
+\&\fB\-mround\-nearest  \-mlong\-calls  \-mshort\-calls  \-msmall16 
+\&\-mfp\-mode=\fR\fImode\fR  \fB\-mvect\-double  \-max\-vect\-align=\fR\fInum\fR 
+\&\fB\-msplit\-vecmove\-early  \-m1reg\-\fR\fIreg\fR
+.Sp
+\&\fI\s-1ARC\s0 Options\fR
+\&\fB\-mbarrel\-shifter \-mjli\-always 
+\&\-mcpu=\fR\fIcpu\fR  \fB\-mA6  \-mARC600  \-mA7  \-mARC700 
+\&\-mdpfp  \-mdpfp\-compact  \-mdpfp\-fast  \-mno\-dpfp\-lrsr 
+\&\-mea  \-mno\-mpy  \-mmul32x16  \-mmul64  \-matomic 
+\&\-mnorm  \-mspfp  \-mspfp\-compact  \-mspfp\-fast  \-msimd  \-msoft\-float  \-mswap 
+\&\-mcrc  \-mdsp\-packa  \-mdvbf  \-mlock  \-mmac\-d16  \-mmac\-24  \-mrtsc  \-mswape 
+\&\-mtelephony  \-mxy  \-misize  \-mannotate\-align  \-marclinux  \-marclinux_prof 
+\&\-mlong\-calls  \-mmedium\-calls  \-msdata \-mirq\-ctrl\-saved 
+\&\-mrgf\-banked\-regs \-mlpc\-width=\fR\fIwidth\fR \fB\-G\fR \fInum\fR 
+\&\fB\-mvolatile\-cache  \-mtp\-regno=\fR\fIregno\fR 
+\&\fB\-malign\-call  \-mauto\-modify\-reg  \-mbbit\-peephole  \-mno\-brcc 
+\&\-mcase\-vector\-pcrel  \-mcompact\-casesi  \-mno\-cond\-exec  \-mearly\-cbranchsi 
+\&\-mexpand\-adddi  \-mindexed\-loads  \-mlra  \-mlra\-priority\-none 
+\&\-mlra\-priority\-compact mlra-priority-noncompact  \-mno\-millicode 
+\&\-mmixed\-code  \-mq\-class  \-mRcq  \-mRcw  \-msize\-level=\fR\fIlevel\fR 
+\&\fB\-mtune=\fR\fIcpu\fR  \fB\-mmultcost=\fR\fInum\fR 
+\&\fB\-munalign\-prob\-threshold=\fR\fIprobability\fR  \fB\-mmpy\-option=\fR\fImulto\fR 
+\&\fB\-mdiv\-rem  \-mcode\-density  \-mll64  \-mfpu=\fR\fIfpu\fR \fB\-mrf16\fR
+.Sp
+\&\fI\s-1ARM\s0 Options\fR
+\&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
+\&\-mabi=\fR\fIname\fR 
+\&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
+\&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
+\&\-msched\-prolog  \-mno\-sched\-prolog 
+\&\-mlittle\-endian  \-mbig\-endian 
+\&\-mbe8 \-mbe32 
+\&\-mfloat\-abi=\fR\fIname\fR 
+\&\fB\-mfp16\-format=\fR\fIname\fR
+\&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
+\&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
+\&\fB\-mtune=\fR\fIname\fR  \fB\-mprint\-tune\-info 
+\&\-mstructure\-size\-boundary=\fR\fIn\fR 
+\&\fB\-mabort\-on\-noreturn 
+\&\-mlong\-calls  \-mno\-long\-calls 
+\&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
+\&\-mpic\-register=\fR\fIreg\fR 
+\&\fB\-mnop\-fun\-dllimport 
+\&\-mpoke\-function\-name 
+\&\-mthumb  \-marm  \-mflip\-thumb 
+\&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
+\&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
+\&\-mtp=\fR\fIname\fR  \fB\-mtls\-dialect=\fR\fIdialect\fR 
+\&\fB\-mword\-relocations 
+\&\-mfix\-cortex\-m3\-ldrd 
+\&\-munaligned\-access 
+\&\-mneon\-for\-64bits 
+\&\-mslow\-flash\-data 
+\&\-masm\-syntax\-unified 
+\&\-mrestrict\-it 
+\&\-mverbose\-cost\-dump 
+\&\-mpure\-code 
+\&\-mcmse\fR
+.Sp
+\&\fI\s-1AVR\s0 Options\fR
+\&\fB\-mmcu=\fR\fImcu\fR  \fB\-mabsdata  \-maccumulate\-args 
+\&\-mbranch\-cost=\fR\fIcost\fR 
+\&\fB\-mcall\-prologues  \-mgas\-isr\-prologues  \-mint8 
+\&\-mn_flash=\fR\fIsize\fR  \fB\-mno\-interrupts 
+\&\-mmain\-is\-OS_task \-mrelax  \-mrmw  \-mstrict\-X  \-mtiny\-stack 
+\&\-mfract\-convert\-truncate 
+\&\-mshort\-calls  \-nodevicelib 
+\&\-Waddr\-space\-convert  \-Wmisspelled\-isr\fR
+.Sp
+\&\fIBlackfin Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
+\&\fB\-msim  \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
+\&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
+\&\-mlow\-64k  \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
+\&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
+\&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
+\&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
+\&\-mfast\-fp  \-minline\-plt  \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
+\&\-micplb\fR
+.Sp
+\&\fIC6X Options\fR
+\&\fB\-mbig\-endian  \-mlittle\-endian  \-march=\fR\fIcpu\fR 
+\&\fB\-msim  \-msdata=\fR\fIsdata-type\fR
+.Sp
+\&\fI\s-1CRIS\s0 Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
+\&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
+\&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
+\&\-mstack\-align  \-mdata\-align  \-mconst\-align 
+\&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
+\&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
+\&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
+.Sp
+\&\fI\s-1CR16\s0 Options\fR
+\&\fB\-mmac 
+\&\-mcr16cplus  \-mcr16c 
+\&\-msim  \-mint32  \-mbit\-ops
+\&\-mdata\-model=\fR\fImodel\fR
+.Sp
+\&\fIDarwin Options\fR
+\&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
+\&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
+\&\-client_name  \-compatibility_version  \-current_version 
+\&\-dead_strip 
+\&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
+\&\-dynamic  \-dynamiclib  \-exported_symbols_list 
+\&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
+\&\-force_flat_namespace  \-headerpad_max_install_names 
+\&\-iframework 
+\&\-image_base  \-init  \-install_name  \-keep_private_externs 
+\&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
+\&\-noall_load   \-no_dead_strip_inits_and_terms 
+\&\-nofixprebinding  \-nomultidefs  \-noprebind  \-noseglinkedit 
+\&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
+\&\-private_bundle  \-read_only_relocs  \-sectalign 
+\&\-sectobjectsymbols  \-whyload  \-seg1addr 
+\&\-sectcreate  \-sectobjectsymbols  \-sectorder 
+\&\-segaddr  \-segs_read_only_addr  \-segs_read_write_addr 
+\&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
+\&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
+\&\-single_module  \-static  \-sub_library  \-sub_umbrella 
+\&\-twolevel_namespace  \-umbrella  \-undefined 
+\&\-unexported_symbols_list  \-weak_reference_mismatches 
+\&\-whatsloaded  \-F  \-gused  \-gfull  \-mmacosx\-version\-min=\fR\fIversion\fR 
+\&\fB\-mkernel  \-mone\-byte\-bool\fR
+.Sp
+\&\fI\s-1DEC\s0 Alpha Options\fR
+\&\fB\-mno\-fp\-regs  \-msoft\-float 
+\&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
+\&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
+\&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
+\&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
+\&\-mfloat\-vax  \-mfloat\-ieee 
+\&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
+\&\-msmall\-text  \-mlarge\-text 
+\&\-mmemory\-latency=\fR\fItime\fR
+.Sp
+\&\fI\s-1FR30\s0 Options\fR
+\&\fB\-msmall\-model  \-mno\-lsim\fR
+.Sp
+\&\fI\s-1FT32\s0 Options\fR
+\&\fB\-msim  \-mlra  \-mnodiv  \-mft32b  \-mcompress  \-mnopm\fR
+.Sp
+\&\fI\s-1FRV\s0 Options\fR
+\&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
+\&\-mhard\-float  \-msoft\-float 
+\&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
+\&\-mdouble  \-mno\-double 
+\&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
+\&\-mfdpic  \-minline\-plt  \-mgprel\-ro  \-multilib\-library\-pic 
+\&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
+\&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
+\&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
+\&\-moptimize\-membar  \-mno\-optimize\-membar 
+\&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
+\&\-mvliw\-branch  \-mno\-vliw\-branch 
+\&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
+\&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
+\&\-mTLS  \-mtls 
+\&\-mcpu=\fR\fIcpu\fR
+.Sp
+\&\fIGNU/Linux Options\fR
+\&\fB\-mglibc  \-muclibc  \-mmusl  \-mbionic  \-mandroid 
+\&\-tno\-android\-cc  \-tno\-android\-ld\fR
+.Sp
+\&\fIH8/300 Options\fR
+\&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr  \-mno\-exr  \-mint32  \-malign\-300\fR
+.Sp
+\&\fI\s-1HPPA\s0 Options\fR
+\&\fB\-march=\fR\fIarchitecture-type\fR 
+\&\fB\-mcaller\-copies  \-mdisable\-fpregs  \-mdisable\-indexing 
+\&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
+\&\-mfixed\-range=\fR\fIregister-range\fR 
+\&\fB\-mjump\-in\-delay  \-mlinker\-opt  \-mlong\-calls 
+\&\-mlong\-load\-store  \-mno\-disable\-fpregs 
+\&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
+\&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
+\&\-mno\-portable\-runtime  \-mno\-soft\-float 
+\&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
+\&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
+\&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
+\&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
+.Sp
+\&\fI\s-1IA\-64\s0 Options\fR
+\&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
+\&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata  \-mno\-sdata 
+\&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
+\&\-minline\-float\-divide\-min\-latency 
+\&\-minline\-float\-divide\-max\-throughput 
+\&\-mno\-inline\-float\-divide 
+\&\-minline\-int\-divide\-min\-latency 
+\&\-minline\-int\-divide\-max\-throughput  
+\&\-mno\-inline\-int\-divide 
+\&\-minline\-sqrt\-min\-latency  \-minline\-sqrt\-max\-throughput 
+\&\-mno\-inline\-sqrt 
+\&\-mdwarf2\-asm  \-mearly\-stop\-bits 
+\&\-mfixed\-range=\fR\fIregister-range\fR  \fB\-mtls\-size=\fR\fItls-size\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-milp32  \-mlp64 
+\&\-msched\-br\-data\-spec  \-msched\-ar\-data\-spec  \-msched\-control\-spec 
+\&\-msched\-br\-in\-data\-spec  \-msched\-ar\-in\-data\-spec  \-msched\-in\-control\-spec 
+\&\-msched\-spec\-ldc  \-msched\-spec\-control\-ldc 
+\&\-msched\-prefer\-non\-data\-spec\-insns  \-msched\-prefer\-non\-control\-spec\-insns 
+\&\-msched\-stop\-bits\-after\-every\-cycle  \-msched\-count\-spec\-in\-critical\-path 
+\&\-msel\-sched\-dont\-check\-control\-spec  \-msched\-fp\-mem\-deps\-zero\-cost 
+\&\-msched\-max\-memory\-insns\-hard\-limit  \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
+.Sp
+\&\fI\s-1LM32\s0 Options\fR
+\&\fB\-mbarrel\-shift\-enabled  \-mdivide\-enabled  \-mmultiply\-enabled 
+\&\-msign\-extend\-enabled  \-muser\-enabled\fR
+.Sp
+\&\fIM32R/D Options\fR
+\&\fB\-m32r2  \-m32rx  \-m32r 
+\&\-mdebug 
+\&\-malign\-loops  \-mno\-align\-loops 
+\&\-missue\-rate=\fR\fInumber\fR 
+\&\fB\-mbranch\-cost=\fR\fInumber\fR 
+\&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
+\&\fB\-msdata=\fR\fIsdata-type\fR 
+\&\fB\-mno\-flush\-func  \-mflush\-func=\fR\fIname\fR 
+\&\fB\-mno\-flush\-trap  \-mflush\-trap=\fR\fInumber\fR 
+\&\fB\-G\fR \fInum\fR
+.Sp
+\&\fIM32C Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR  \fB\-msim  \-memregs=\fR\fInumber\fR
+.Sp
+\&\fIM680x0 Options\fR
+\&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR 
+\&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
+\&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
+\&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
+\&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
+\&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
+\&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
+\&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
+\&\-mxgot  \-mno\-xgot  \-mlong\-jump\-table\-offsets\fR
+.Sp
+\&\fIMCore Options\fR
+\&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
+\&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
+\&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
+\&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
+\&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
+.Sp
+\&\fIMeP Options\fR
+\&\fB\-mabsdiff  \-mall\-opts  \-maverage  \-mbased=\fR\fIn\fR  \fB\-mbitops 
+\&\-mc=\fR\fIn\fR  \fB\-mclip  \-mconfig=\fR\fIname\fR  \fB\-mcop  \-mcop32  \-mcop64  \-mivc2 
+\&\-mdc  \-mdiv  \-meb  \-mel  \-mio\-volatile  \-ml  \-mleadz  \-mm  \-mminmax 
+\&\-mmult  \-mno\-opts  \-mrepeat  \-ms  \-msatur  \-msdram  \-msim  \-msimnovec  \-mtf 
+\&\-mtiny=\fR\fIn\fR
+.Sp
+\&\fIMicroBlaze Options\fR
+\&\fB\-msoft\-float  \-mhard\-float  \-msmall\-divides  \-mcpu=\fR\fIcpu\fR 
+\&\fB\-mmemcpy  \-mxl\-soft\-mul  \-mxl\-soft\-div  \-mxl\-barrel\-shift 
+\&\-mxl\-pattern\-compare  \-mxl\-stack\-check  \-mxl\-gp\-opt  \-mno\-clearbss 
+\&\-mxl\-multiply\-high  \-mxl\-float\-convert  \-mxl\-float\-sqrt 
+\&\-mbig\-endian  \-mlittle\-endian  \-mxl\-reorder  \-mxl\-mode\-\fR\fIapp-model\fR
+.Sp
+\&\fI\s-1MIPS\s0 Options\fR
+\&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
+\&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5 
+\&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6 
+\&\-mips16  \-mno\-mips16  \-mflip\-mips16 
+\&\-minterlink\-compressed  \-mno\-interlink\-compressed 
+\&\-minterlink\-mips16  \-mno\-interlink\-mips16 
+\&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
+\&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
+\&\-mgp32  \-mgp64  \-mfp32  \-mfpxx  \-mfp64  \-mhard\-float  \-msoft\-float 
+\&\-mno\-float  \-msingle\-float  \-mdouble\-float 
+\&\-modd\-spreg  \-mno\-odd\-spreg 
+\&\-mabs=\fR\fImode\fR  \fB\-mnan=\fR\fIencoding\fR 
+\&\fB\-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
+\&\-mmcu  \-mmno\-mcu 
+\&\-meva  \-mno\-eva 
+\&\-mvirt  \-mno\-virt 
+\&\-mxpa  \-mno\-xpa 
+\&\-mmicromips  \-mno\-micromips 
+\&\-mmsa  \-mno\-msa 
+\&\-mfpu=\fR\fIfpu-type\fR 
+\&\fB\-msmartmips  \-mno\-smartmips 
+\&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
+\&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
+\&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
+\&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
+\&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
+\&\-membedded\-data  \-mno\-embedded\-data 
+\&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
+\&\-mcode\-readable=\fR\fIsetting\fR 
+\&\fB\-msplit\-addresses  \-mno\-split\-addresses 
+\&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
+\&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
+\&\-mdivide\-traps  \-mdivide\-breaks 
+\&\-mload\-store\-pairs  \-mno\-load\-store\-pairs 
+\&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
+\&\-mmad  \-mno\-mad  \-mimadd  \-mno\-imadd  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
+\&\-mfix\-24k  \-mno\-fix\-24k 
+\&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
+\&\-mfix\-r10000  \-mno\-fix\-r10000  \-mfix\-rm7000  \-mno\-fix\-rm7000 
+\&\-mfix\-vr4120  \-mno\-fix\-vr4120 
+\&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
+\&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
+\&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
+\&\-mcompact\-branches=\fR\fIpolicy\fR 
+\&\fB\-mfp\-exceptions  \-mno\-fp\-exceptions 
+\&\-mvr4130\-align  \-mno\-vr4130\-align  \-msynci  \-mno\-synci 
+\&\-mlxc1\-sxc1 \-mno\-lxc1\-sxc1 \-mmadd4 \-mno\-madd4 
+\&\-mrelax\-pic\-calls  \-mno\-relax\-pic\-calls  \-mmcount\-ra\-address 
+\&\-mframe\-header\-opt  \-mno\-frame\-header\-opt\fR
+.Sp
+\&\fI\s-1MMIX\s0 Options\fR
+\&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
+\&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
+\&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
+\&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
+.Sp
+\&\fI\s-1MN10300\s0 Options\fR
+\&\fB\-mmult\-bug  \-mno\-mult\-bug 
+\&\-mno\-am33  \-mam33  \-mam33\-2  \-mam34 
+\&\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mreturn\-pointer\-on\-d0 
+\&\-mno\-crt0  \-mrelax  \-mliw  \-msetlb\fR
+.Sp
+\&\fIMoxie Options\fR
+\&\fB\-meb  \-mel  \-mmul.x  \-mno\-crt0\fR
+.Sp
+\&\fI\s-1MSP430\s0 Options\fR
+\&\fB\-msim  \-masm\-hex  \-mmcu=  \-mcpu=  \-mlarge  \-msmall  \-mrelax 
+\&\-mwarn\-mcu 
+\&\-mcode\-region=  \-mdata\-region= 
+\&\-msilicon\-errata=  \-msilicon\-errata\-warn= 
+\&\-mhwmult=  \-minrt\fR
+.Sp
+\&\fI\s-1NDS32\s0 Options\fR
+\&\fB\-mbig\-endian  \-mlittle\-endian 
+\&\-mreduced\-regs  \-mfull\-regs 
+\&\-mcmov  \-mno\-cmov 
+\&\-mext\-perf  \-mno\-ext\-perf 
+\&\-mext\-perf2  \-mno\-ext\-perf2 
+\&\-mext\-string  \-mno\-ext\-string 
+\&\-mv3push  \-mno\-v3push 
+\&\-m16bit  \-mno\-16bit 
+\&\-misr\-vector\-size=\fR\fInum\fR 
+\&\fB\-mcache\-block\-size=\fR\fInum\fR 
+\&\fB\-march=\fR\fIarch\fR 
+\&\fB\-mcmodel=\fR\fIcode-model\fR 
+\&\fB\-mctor\-dtor  \-mrelax\fR
+.Sp
+\&\fINios \s-1II\s0 Options\fR
+\&\fB\-G\fR \fInum\fR  \fB\-mgpopt=\fR\fIoption\fR  \fB\-mgpopt  \-mno\-gpopt 
+\&\-mgprel\-sec=\fR\fIregexp\fR \fB\-mr0rel\-sec=\fR\fIregexp\fR 
+\&\fB\-mel  \-meb 
+\&\-mno\-bypass\-cache  \-mbypass\-cache 
+\&\-mno\-cache\-volatile  \-mcache\-volatile 
+\&\-mno\-fast\-sw\-div  \-mfast\-sw\-div 
+\&\-mhw\-mul  \-mno\-hw\-mul  \-mhw\-mulx  \-mno\-hw\-mulx  \-mno\-hw\-div  \-mhw\-div 
+\&\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR  \fB\-mno\-custom\-\fR\fIinsn\fR 
+\&\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR 
+\&\fB\-mhal  \-msmallc  \-msys\-crt0=\fR\fIname\fR  \fB\-msys\-lib=\fR\fIname\fR 
+\&\fB\-march=\fR\fIarch\fR  \fB\-mbmx  \-mno\-bmx  \-mcdx  \-mno\-cdx\fR
+.Sp
+\&\fINvidia \s-1PTX\s0 Options\fR
+\&\fB\-m32  \-m64  \-mmainkernel  \-moptimize\fR
+.Sp
+\&\fI\s-1PDP\-11\s0 Options\fR
+\&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
+\&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
+\&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
+\&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
+\&\-mbranch\-expensive  \-mbranch\-cheap 
+\&\-munix\-asm  \-mdec\-asm\fR
+.Sp
+\&\fIpicoChip Options\fR
+\&\fB\-mae=\fR\fIae_type\fR  \fB\-mvliw\-lookahead=\fR\fIN\fR 
+\&\fB\-msymbol\-as\-address  \-mno\-inefficient\-warnings\fR
+.Sp
+\&\fIPowerPC Options\fR
+See \s-1RS/6000\s0 and PowerPC Options.
+.Sp
+\&\fIPowerPC \s-1SPE\s0 Options\fR
+\&\fB\-mcpu=\fR\fIcpu-type\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb 
+\&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
+\&\-m32  \-mxl\-compat  \-mno\-xl\-compat 
+\&\-malign\-power  \-malign\-natural 
+\&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
+\&\-msingle\-float  \-mdouble\-float 
+\&\-mupdate  \-mno\-update 
+\&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
+\&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
+\&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
+\&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
+\&\-msingle\-pic\-base 
+\&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
+\&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
+\&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
+\&\fB\-mcall\-sysv  \-mcall\-netbsd 
+\&\-maix\-struct\-return  \-msvr4\-struct\-return 
+\&\-mabi=\fR\fIabi-type\fR  \fB\-msecure\-plt  \-mbss\-plt 
+\&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
+\&\fB\-misel  \-mno\-isel 
+\&\-misel=yes  \-misel=no 
+\&\-mspe  \-mno\-spe 
+\&\-mspe=yes  \-mspe=no 
+\&\-mfloat\-gprs=yes  \-mfloat\-gprs=no  \-mfloat\-gprs=single  \-mfloat\-gprs=double 
+\&\-mprototype  \-mno\-prototype 
+\&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
+\&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR 
+\&\fB\-mrecip  \-mrecip=\fR\fIopt\fR  \fB\-mno\-recip  \-mrecip\-precision 
+\&\-mno\-recip\-precision 
+\&\-mpointers\-to\-nested\-functions  \-mno\-pointers\-to\-nested\-functions 
+\&\-msave\-toc\-indirect  \-mno\-save\-toc\-indirect 
+\&\-mcompat\-align\-parm  \-mno\-compat\-align\-parm 
+\&\-mfloat128  \-mno\-float128 
+\&\-mgnu\-attribute  \-mno\-gnu\-attribute 
+\&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
+.Sp
+\&\fIRISC-V Options\fR
+\&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR 
+\&\fB\-mplt  \-mno\-plt 
+\&\-mabi=\fR\fIABI-string\fR 
+\&\fB\-mfdiv  \-mno\-fdiv 
+\&\-mdiv  \-mno\-div 
+\&\-march=\fR\fIISA-string\fR 
+\&\fB\-mtune=\fR\fIprocessor-string\fR 
+\&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 
+\&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR 
+\&\fB\-msave\-restore  \-mno\-save\-restore 
+\&\-mstrict\-align \-mno\-strict\-align 
+\&\-mcmodel=medlow \-mcmodel=medany 
+\&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
+\&\-mrelax \-mno\-relax\fR
+.Sp
+\&\fI\s-1RL78\s0 Options\fR
+\&\fB\-msim  \-mmul=none  \-mmul=g13  \-mmul=g14  \-mallregs 
+\&\-mcpu=g10  \-mcpu=g13  \-mcpu=g14  \-mg10  \-mg13  \-mg14 
+\&\-m64bit\-doubles  \-m32bit\-doubles  \-msave\-mduc\-in\-interrupts\fR
+.Sp
+\&\fI\s-1RS/6000\s0 and PowerPC Options\fR
+\&\fB\-mcpu=\fR\fIcpu-type\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mcmodel=\fR\fIcode-model\fR 
+\&\fB\-mpowerpc64 
+\&\-maltivec  \-mno\-altivec 
+\&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
+\&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
+\&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb  \-mpopcntd  \-mno\-popcntd 
+\&\-mfprnd  \-mno\-fprnd 
+\&\-mcmpb  \-mno\-cmpb  \-mmfpgpr  \-mno\-mfpgpr  \-mhard\-dfp  \-mno\-hard\-dfp 
+\&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
+\&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
+\&\-malign\-power  \-malign\-natural 
+\&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
+\&\-msingle\-float  \-mdouble\-float  \-msimple\-fpu 
+\&\-mupdate  \-mno\-update 
+\&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
+\&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
+\&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
+\&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
+\&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
+\&\-mdynamic\-no\-pic  \-maltivec  \-mswdiv  \-msingle\-pic\-base 
+\&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
+\&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
+\&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
+\&\fB\-mcall\-aixdesc  \-mcall\-eabi  \-mcall\-freebsd  
+\&\-mcall\-linux  \-mcall\-netbsd  \-mcall\-openbsd  
+\&\-mcall\-sysv  \-mcall\-sysv\-eabi  \-mcall\-sysv\-noeabi 
+\&\-mtraceback=\fR\fItraceback_type\fR 
+\&\fB\-maix\-struct\-return  \-msvr4\-struct\-return 
+\&\-mabi=\fR\fIabi-type\fR  \fB\-msecure\-plt  \-mbss\-plt 
+\&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
+\&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR 
+\&\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR 
+\&\fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR 
+\&\fB\-misel  \-mno\-isel 
+\&\-misel=yes  \-misel=no 
+\&\-mpaired 
+\&\-mvrsave  \-mno\-vrsave 
+\&\-mmulhw  \-mno\-mulhw 
+\&\-mdlmzb  \-mno\-dlmzb 
+\&\-mprototype  \-mno\-prototype 
+\&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
+\&\-msdata=\fR\fIopt\fR  \fB\-mreadonly\-in\-sdata  \-mvxworks  \-G\fR \fInum\fR 
+\&\fB\-mrecip  \-mrecip=\fR\fIopt\fR  \fB\-mno\-recip  \-mrecip\-precision 
+\&\-mno\-recip\-precision 
+\&\-mveclibabi=\fR\fItype\fR  \fB\-mfriz  \-mno\-friz 
+\&\-mpointers\-to\-nested\-functions  \-mno\-pointers\-to\-nested\-functions 
+\&\-msave\-toc\-indirect  \-mno\-save\-toc\-indirect 
+\&\-mpower8\-fusion  \-mno\-mpower8\-fusion  \-mpower8\-vector  \-mno\-power8\-vector 
+\&\-mcrypto  \-mno\-crypto  \-mhtm  \-mno\-htm 
+\&\-mquad\-memory  \-mno\-quad\-memory 
+\&\-mquad\-memory\-atomic  \-mno\-quad\-memory\-atomic 
+\&\-mcompat\-align\-parm  \-mno\-compat\-align\-parm 
+\&\-mfloat128  \-mno\-float128  \-mfloat128\-hardware  \-mno\-float128\-hardware 
+\&\-mgnu\-attribute  \-mno\-gnu\-attribute 
+\&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
+.Sp
+\&\fI\s-1RX\s0 Options\fR
+\&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
+\&\-mcpu=
+\&\-mbig\-endian\-data  \-mlittle\-endian\-data 
+\&\-msmall\-data 
+\&\-msim  \-mno\-sim
+\&\-mas100\-syntax  \-mno\-as100\-syntax
+\&\-mrelax
+\&\-mmax\-constant\-size=
+\&\-mint\-register=
+\&\-mpid
+\&\-mallow\-string\-insns  \-mno\-allow\-string\-insns
+\&\-mjsr
+\&\-mno\-warn\-multiple\-fast\-interrupts
+\&\-msave\-acc\-in\-interrupts\fR
+.Sp
+\&\fIS/390 and zSeries Options\fR
+\&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
+\&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp  \-mno\-hard\-dfp 
+\&\-mlong\-double\-64  \-mlong\-double\-128 
+\&\-mbackchain  \-mno\-backchain  \-mpacked\-stack  \-mno\-packed\-stack 
+\&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle  \-mno\-mvcle 
+\&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
+\&\-mhtm  \-mvx  \-mzvector 
+\&\-mtpf\-trace  \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
+\&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size  \-mstack\-guard 
+\&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
+.Sp
+\&\fIScore Options\fR
+\&\fB\-meb  \-mel 
+\&\-mnhwloop 
+\&\-muls 
+\&\-mmac 
+\&\-mscore5  \-mscore5u  \-mscore7  \-mscore7d\fR
+.Sp
+\&\fI\s-1SH\s0 Options\fR
+\&\fB\-m1  \-m2  \-m2e 
+\&\-m2a\-nofpu  \-m2a\-single\-only  \-m2a\-single  \-m2a 
+\&\-m3  \-m3e 
+\&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
+\&\-m4a\-nofpu  \-m4a\-single\-only  \-m4a\-single  \-m4a  \-m4al 
+\&\-mb  \-ml  \-mdalign  \-mrelax 
+\&\-mbigtable  \-mfmovd  \-mrenesas  \-mno\-renesas  \-mnomacsave 
+\&\-mieee  \-mno\-ieee  \-mbitops  \-misize  \-minline\-ic_invalidate  \-mpadstruct 
+\&\-mprefergot  \-musermode  \-multcost=\fR\fInumber\fR  \fB\-mdiv=\fR\fIstrategy\fR 
+\&\fB\-mdivsi3_libfunc=\fR\fIname\fR  \fB\-mfixed\-range=\fR\fIregister-range\fR 
+\&\fB\-maccumulate\-outgoing\-args 
+\&\-matomic\-model=\fR\fIatomic-model\fR 
+\&\fB\-mbranch\-cost=\fR\fInum\fR  \fB\-mzdcbranch  \-mno\-zdcbranch 
+\&\-mcbranch\-force\-delay\-slot 
+\&\-mfused\-madd  \-mno\-fused\-madd  \-mfsca  \-mno\-fsca  \-mfsrra  \-mno\-fsrra 
+\&\-mpretend\-cmove  \-mtas\fR
+.Sp
+\&\fISolaris 2 Options\fR
+\&\fB\-mclear\-hwcap  \-mno\-clear\-hwcap  \-mimpure\-text  \-mno\-impure\-text 
+\&\-pthreads\fR
+.Sp
+\&\fI\s-1SPARC\s0 Options\fR
+\&\fB\-mcpu=\fR\fIcpu-type\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mcmodel=\fR\fIcode-model\fR 
+\&\fB\-mmemory\-model=\fR\fImem-model\fR 
+\&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
+\&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
+\&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
+\&\-mhard\-quad\-float  \-msoft\-quad\-float 
+\&\-mstack\-bias  \-mno\-stack\-bias 
+\&\-mstd\-struct\-return  \-mno\-std\-struct\-return 
+\&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
+\&\-muser\-mode  \-mno\-user\-mode 
+\&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
+\&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
+\&\-mvis4 \-mno\-vis4 \-mvis4b \-mno\-vis4b 
+\&\-mcbcond  \-mno\-cbcond  \-mfmaf  \-mno\-fmaf  \-mfsmuld  \-mno\-fsmuld  
+\&\-mpopc  \-mno\-popc  \-msubxc  \-mno\-subxc 
+\&\-mfix\-at697f  \-mfix\-ut699  \-mfix\-ut700  \-mfix\-gr712rc 
+\&\-mlra  \-mno\-lra\fR
+.Sp
+\&\fI\s-1SPU\s0 Options\fR
+\&\fB\-mwarn\-reloc  \-merror\-reloc 
+\&\-msafe\-dma  \-munsafe\-dma 
+\&\-mbranch\-hints 
+\&\-msmall\-mem  \-mlarge\-mem  \-mstdmain 
+\&\-mfixed\-range=\fR\fIregister-range\fR 
+\&\fB\-mea32  \-mea64 
+\&\-maddress\-space\-conversion  \-mno\-address\-space\-conversion 
+\&\-mcache\-size=\fR\fIcache-size\fR 
+\&\fB\-matomic\-updates  \-mno\-atomic\-updates\fR
+.Sp
+\&\fISystem V Options\fR
+\&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
+.Sp
+\&\fITILE-Gx Options\fR
+\&\fB\-mcpu=CPU  \-m32  \-m64  \-mbig\-endian  \-mlittle\-endian 
+\&\-mcmodel=\fR\fIcode-model\fR
+.Sp
+\&\fITILEPro Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR  \fB\-m32\fR
+.Sp
+\&\fIV850 Options\fR
+\&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
+\&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
+\&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
+\&\fB\-mapp\-regs  \-mno\-app\-regs 
+\&\-mdisable\-callt  \-mno\-disable\-callt 
+\&\-mv850e2v3  \-mv850e2  \-mv850e1  \-mv850es 
+\&\-mv850e  \-mv850  \-mv850e3v5 
+\&\-mloop 
+\&\-mrelax 
+\&\-mlong\-jumps 
+\&\-msoft\-float 
+\&\-mhard\-float 
+\&\-mgcc\-abi 
+\&\-mrh850\-abi 
+\&\-mbig\-switch\fR
+.Sp
+\&\fI\s-1VAX\s0 Options\fR
+\&\fB\-mg  \-mgnu  \-munix\fR
+.Sp
+\&\fIVisium Options\fR
+\&\fB\-mdebug  \-msim  \-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
+\&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR  \fB\-msv\-mode  \-muser\-mode\fR
+.Sp
+\&\fI\s-1VMS\s0 Options\fR
+\&\fB\-mvms\-return\-codes  \-mdebug\-main=\fR\fIprefix\fR  \fB\-mmalloc64 
+\&\-mpointer\-size=\fR\fIsize\fR
+.Sp
+\&\fIVxWorks Options\fR
+\&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
+\&\-Xbind\-lazy  \-Xbind\-now\fR
+.Sp
+\&\fIx86 Options\fR
+\&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
+\&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR  \fB\-mdump\-tune\-features  \-mno\-default 
+\&\-mfpmath=\fR\fIunit\fR 
+\&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
+\&\-mno\-fp\-ret\-in\-387  \-m80387  \-mhard\-float  \-msoft\-float 
+\&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
+\&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
+\&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
+\&\fB\-mcld  \-mcx16  \-msahf  \-mmovbe  \-mcrc32 
+\&\-mrecip  \-mrecip=\fR\fIopt\fR 
+\&\fB\-mvzeroupper  \-mprefer\-avx128 \-mprefer\-vector\-width=\fR\fIopt\fR 
+\&\fB\-mmmx  \-msse  \-msse2  \-msse3  \-mssse3  \-msse4.1  \-msse4.2  \-msse4  \-mavx 
+\&\-mavx2  \-mavx512f  \-mavx512pf  \-mavx512er  \-mavx512cd  \-mavx512vl 
+\&\-mavx512bw  \-mavx512dq  \-mavx512ifma  \-mavx512vbmi  \-msha  \-maes 
+\&\-mpclmul  \-mfsgsbase  \-mrdrnd  \-mf16c  \-mfma \-mpconfig \-mwbnoinvd 
+\&\-mprefetchwt1  \-mclflushopt  \-mxsavec  \-mxsaves 
+\&\-msse4a  \-m3dnow  \-m3dnowa  \-mpopcnt  \-mabm  \-mbmi  \-mtbm  \-mfma4  \-mxop 
+\&\-mlzcnt  \-mbmi2  \-mfxsr  \-mxsave  \-mxsaveopt  \-mrtm  \-mlwp  \-mmpx  
+\&\-mmwaitx  \-mclzero  \-mpku  \-mthreads \-mgfni  \-mvaes  
+\&\-mshstk \-mforce\-indirect\-call \-mavx512vbmi2 
+\&\-mvpclmulqdq \-mavx512bitalg \-mmovdiri \-mmovdir64b \-mavx512vpopcntdq 
+\&\-mms\-bitfields  \-mno\-align\-stringops  \-minline\-all\-stringops 
+\&\-minline\-stringops\-dynamically  \-mstringop\-strategy=\fR\fIalg\fR 
+\&\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR  \fB\-mmemset\-strategy=\fR\fIstrategy\fR 
+\&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
+\&\-m96bit\-long\-double  \-mlong\-double\-64  \-mlong\-double\-80  \-mlong\-double\-128 
+\&\-mregparm=\fR\fInum\fR  \fB\-msseregparm 
+\&\-mveclibabi=\fR\fItype\fR  \fB\-mvect8\-ret\-in\-mem 
+\&\-mpc32  \-mpc64  \-mpc80  \-mstackrealign 
+\&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone  \-mno\-tls\-direct\-seg\-refs 
+\&\-mcmodel=\fR\fIcode-model\fR  \fB\-mabi=\fR\fIname\fR  \fB\-maddress\-mode=\fR\fImode\fR 
+\&\fB\-m32  \-m64  \-mx32  \-m16  \-miamcu  \-mlarge\-data\-threshold=\fR\fInum\fR 
+\&\fB\-msse2avx  \-mfentry  \-mrecord\-mcount  \-mnop\-mcount  \-m8bit\-idiv 
+\&\-mavx256\-split\-unaligned\-load  \-mavx256\-split\-unaligned\-store 
+\&\-malign\-data=\fR\fItype\fR  \fB\-mstack\-protector\-guard=\fR\fIguard\fR 
+\&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 
+\&\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR \fB\-mmitigate\-rop 
+\&\-mgeneral\-regs\-only \-mcall\-ms2sysv\-xlogues 
+\&\-mindirect\-branch=\fR\fIchoice\fR \fB\-mfunction\-return=\fR\fIchoice\fR 
+\&\fB\-mindirect\-branch\-register\fR
+.Sp
+\&\fIx86 Windows Options\fR
+\&\fB\-mconsole  \-mcygwin  \-mno\-cygwin  \-mdll 
+\&\-mnop\-fun\-dllimport  \-mthread 
+\&\-municode  \-mwin32  \-mwindows  \-fno\-set\-stack\-executable\fR
+.Sp
+\&\fIXstormy16 Options\fR
+\&\fB\-msim\fR
+.Sp
+\&\fIXtensa Options\fR
+\&\fB\-mconst16  \-mno\-const16 
+\&\-mfused\-madd  \-mno\-fused\-madd 
+\&\-mforce\-no\-pic 
+\&\-mserialize\-volatile  \-mno\-serialize\-volatile 
+\&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
+\&\-mauto\-litpools  \-mno\-auto\-litpools 
+\&\-mtarget\-align  \-mno\-target\-align 
+\&\-mlongcalls  \-mno\-longcalls\fR
+.Sp
+\&\fIzSeries Options\fR
+See S/390 and zSeries Options.
+.SS "Options Controlling the Kind of Output"
+.IX Subsection "Options Controlling the Kind of Output"
+Compilation can involve up to four stages: preprocessing, compilation
+proper, assembly and linking, always in that order.  \s-1GCC\s0 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.
+.PP
+For any given input file, the file name suffix determines what kind of
+compilation is done:
+.IP "\fIfile\fR\fB.c\fR" 4
+.IX Item "file.c"
+C source code that must be preprocessed.
+.IP "\fIfile\fR\fB.i\fR" 4
+.IX Item "file.i"
+C source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.ii\fR" 4
+.IX Item "file.ii"
+\&\*(C+ source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.m\fR" 4
+.IX Item "file.m"
+Objective-C source code.  Note that you must link with the \fIlibobjc\fR
+library to make an Objective-C program work.
+.IP "\fIfile\fR\fB.mi\fR" 4
+.IX Item "file.mi"
+Objective-C source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.mm\fR" 4
+.IX Item "file.mm"
+.PD 0
+.IP "\fIfile\fR\fB.M\fR" 4
+.IX Item "file.M"
+.PD
+Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
+library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
+to a literal capital M.
+.IP "\fIfile\fR\fB.mii\fR" 4
+.IX Item "file.mii"
+Objective\-\*(C+ source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.h\fR" 4
+.IX Item "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 \fB\-fdump\-ada\-spec\fR switch).
+.IP "\fIfile\fR\fB.cc\fR" 4
+.IX Item "file.cc"
+.PD 0
+.IP "\fIfile\fR\fB.cp\fR" 4
+.IX Item "file.cp"
+.IP "\fIfile\fR\fB.cxx\fR" 4
+.IX Item "file.cxx"
+.IP "\fIfile\fR\fB.cpp\fR" 4
+.IX Item "file.cpp"
+.IP "\fIfile\fR\fB.CPP\fR" 4
+.IX Item "file.CPP"
+.IP "\fIfile\fR\fB.c++\fR" 4
+.IX Item "file.c++"
+.IP "\fIfile\fR\fB.C\fR" 4
+.IX Item "file.C"
+.PD
+\&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
+the last two letters must both be literally \fBx\fR.  Likewise,
+\&\fB.C\fR refers to a literal capital C.
+.IP "\fIfile\fR\fB.mm\fR" 4
+.IX Item "file.mm"
+.PD 0
+.IP "\fIfile\fR\fB.M\fR" 4
+.IX Item "file.M"
+.PD
+Objective\-\*(C+ source code that must be preprocessed.
+.IP "\fIfile\fR\fB.mii\fR" 4
+.IX Item "file.mii"
+Objective\-\*(C+ source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.hh\fR" 4
+.IX Item "file.hh"
+.PD 0
+.IP "\fIfile\fR\fB.H\fR" 4
+.IX Item "file.H"
+.IP "\fIfile\fR\fB.hp\fR" 4
+.IX Item "file.hp"
+.IP "\fIfile\fR\fB.hxx\fR" 4
+.IX Item "file.hxx"
+.IP "\fIfile\fR\fB.hpp\fR" 4
+.IX Item "file.hpp"
+.IP "\fIfile\fR\fB.HPP\fR" 4
+.IX Item "file.HPP"
+.IP "\fIfile\fR\fB.h++\fR" 4
+.IX Item "file.h++"
+.IP "\fIfile\fR\fB.tcc\fR" 4
+.IX Item "file.tcc"
+.PD
+\&\*(C+ header file to be turned into a precompiled header or Ada spec.
+.IP "\fIfile\fR\fB.f\fR" 4
+.IX Item "file.f"
+.PD 0
+.IP "\fIfile\fR\fB.for\fR" 4
+.IX Item "file.for"
+.IP "\fIfile\fR\fB.ftn\fR" 4
+.IX Item "file.ftn"
+.PD
+Fixed form Fortran source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.F\fR" 4
+.IX Item "file.F"
+.PD 0
+.IP "\fIfile\fR\fB.FOR\fR" 4
+.IX Item "file.FOR"
+.IP "\fIfile\fR\fB.fpp\fR" 4
+.IX Item "file.fpp"
+.IP "\fIfile\fR\fB.FPP\fR" 4
+.IX Item "file.FPP"
+.IP "\fIfile\fR\fB.FTN\fR" 4
+.IX Item "file.FTN"
+.PD
+Fixed form Fortran source code that must be preprocessed (with the traditional
+preprocessor).
+.IP "\fIfile\fR\fB.f90\fR" 4
+.IX Item "file.f90"
+.PD 0
+.IP "\fIfile\fR\fB.f95\fR" 4
+.IX Item "file.f95"
+.IP "\fIfile\fR\fB.f03\fR" 4
+.IX Item "file.f03"
+.IP "\fIfile\fR\fB.f08\fR" 4
+.IX Item "file.f08"
+.PD
+Free form Fortran source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.F90\fR" 4
+.IX Item "file.F90"
+.PD 0
+.IP "\fIfile\fR\fB.F95\fR" 4
+.IX Item "file.F95"
+.IP "\fIfile\fR\fB.F03\fR" 4
+.IX Item "file.F03"
+.IP "\fIfile\fR\fB.F08\fR" 4
+.IX Item "file.F08"
+.PD
+Free form Fortran source code that must be preprocessed (with the
+traditional preprocessor).
+.IP "\fIfile\fR\fB.go\fR" 4
+.IX Item "file.go"
+Go source code.
+.IP "\fIfile\fR\fB.brig\fR" 4
+.IX Item "file.brig"
+\&\s-1BRIG\s0 files (binary representation of \s-1HSAIL\s0).
+.IP "\fIfile\fR\fB.ads\fR" 4
+.IX Item "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 \fIspecs\fR.
+.IP "\fIfile\fR\fB.adb\fR" 4
+.IX Item "file.adb"
+Ada source code file containing a library unit body (a subprogram or
+package body).  Such files are also called \fIbodies\fR.
+.IP "\fIfile\fR\fB.s\fR" 4
+.IX Item "file.s"
+Assembler code.
+.IP "\fIfile\fR\fB.S\fR" 4
+.IX Item "file.S"
+.PD 0
+.IP "\fIfile\fR\fB.sx\fR" 4
+.IX Item "file.sx"
+.PD
+Assembler code that must be preprocessed.
+.IP "\fIother\fR" 4
+.IX Item "other"
+An object file to be fed straight into linking.
+Any file name with no recognized suffix is treated this way.
+.PP
+You can specify the input language explicitly with the \fB\-x\fR option:
+.IP "\fB\-x\fR \fIlanguage\fR" 4
+.IX Item "-x language"
+Specify explicitly the \fIlanguage\fR 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 \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
+.Sp
+.Vb 9
+\&        c  c\-header  cpp\-output
+\&        c++  c++\-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
+\&        f77  f77\-cpp\-input f95  f95\-cpp\-input
+\&        go
+\&        brig
+.Ve
+.IP "\fB\-x none\fR" 4
+.IX 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 \fB\-x\fR
+has not been used at all).
+.PP
+If you only want some of the stages of compilation, you can use
+\&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
+one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
+\&\fBgcc\fR is to stop.  Note that some combinations (for example,
+\&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+Compile or assemble the source files, but do not link.  The linking
+stage simply is not done.  The ultimate output is in the form of an
+object file for each source file.
+.Sp
+By default, the object file name for a source file is made by replacing
+the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
+.Sp
+Unrecognized input files, not requiring compilation or assembly, are
+ignored.
+.IP "\fB\-S\fR" 4
+.IX Item "-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.
+.Sp
+By default, the assembler file name for a source file is made by
+replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
+.Sp
+Input files that don't require compilation are ignored.
+.IP "\fB\-E\fR" 4
+.IX Item "-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.
+.Sp
+Input files that don't require preprocessing are ignored.
+.IP "\fB\-o\fR \fIfile\fR" 4
+.IX Item "-o file"
+Place output in file \fIfile\fR.  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.
+.Sp
+If \fB\-o\fR is not specified, the default is to put an executable
+file in \fIa.out\fR, the object file for
+\&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
+assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
+\&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
+standard output.
+.IP "\fB\-v\fR" 4
+.IX Item "-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.
+.IP "\fB\-###\fR" 4
+.IX Item "-###"
+Like \fB\-v\fR except the commands are not executed and arguments
+are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
+This is useful for shell scripts to capture the driver-generated command lines.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print (on the standard output) a description of the command-line options
+understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
+then \fB\-\-help\fR is also passed on to the various processes
+invoked by \fBgcc\fR, so that they can display the command-line options
+they accept.  If the \fB\-Wextra\fR option has also been specified
+(prior to the \fB\-\-help\fR option), then command-line options that
+have no documentation associated with them are also displayed.
+.IP "\fB\-\-target\-help\fR" 4
+.IX Item "--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.
+.IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
+.IX Item "--help={class|[^]qualifier}[,...]"
+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:
+.RS 4
+.IP "\fBoptimizers\fR" 4
+.IX Item "optimizers"
+Display all of the optimization options supported by the
+compiler.
+.IP "\fBwarnings\fR" 4
+.IX Item "warnings"
+Display all of the options controlling warning messages
+produced by the compiler.
+.IP "\fBtarget\fR" 4
+.IX Item "target"
+Display target-specific options.  Unlike the
+\&\fB\-\-target\-help\fR option however, target-specific options of the
+linker and assembler are not displayed.  This is because those
+tools do not currently support the extended \fB\-\-help=\fR syntax.
+.IP "\fBparams\fR" 4
+.IX Item "params"
+Display the values recognized by the \fB\-\-param\fR
+option.
+.IP "\fIlanguage\fR" 4
+.IX Item "language"
+Display the options supported for \fIlanguage\fR, where
+\&\fIlanguage\fR is the name of one of the languages supported in this
+version of \s-1GCC.\s0
+.IP "\fBcommon\fR" 4
+.IX Item "common"
+Display the options that are common to all languages.
+.RE
+.RS 4
+.Sp
+These are the supported qualifiers:
+.IP "\fBundocumented\fR" 4
+.IX Item "undocumented"
+Display only those options that are undocumented.
+.IP "\fBjoined\fR" 4
+.IX Item "joined"
+Display options taking an argument that appears after an equal
+sign in the same continuous piece of text, such as:
+\&\fB\-\-help=target\fR.
+.IP "\fBseparate\fR" 4
+.IX Item "separate"
+Display options taking an argument that appears as a separate word
+following the original option, such as: \fB\-o output-file\fR.
+.RE
+.RS 4
+.Sp
+Thus for example to display all the undocumented target-specific
+switches supported by the compiler, use:
+.Sp
+.Vb 1
+\&        \-\-help=target,undocumented
+.Ve
+.Sp
+The sense of a qualifier can be inverted by prefixing it with the
+\&\fB^\fR 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:
+.Sp
+.Vb 1
+\&        \-\-help=warnings,^joined,^undocumented
+.Ve
+.Sp
+The argument to \fB\-\-help=\fR should not consist solely of inverted
+qualifiers.
+.Sp
+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
+\&\fItarget\fR.  For example, to display all the target-specific
+optimization options, use:
+.Sp
+.Vb 1
+\&        \-\-help=target,optimizers
+.Ve
+.Sp
+The \fB\-\-help=\fR option can be repeated on the command line.  Each
+successive use displays its requested class of options, skipping
+those that have already been displayed.
+.Sp
+If the \fB\-Q\fR option appears on the command line before the
+\&\fB\-\-help=\fR option, then the descriptive text displayed by
+\&\fB\-\-help=\fR 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 \fB\-\-help=\fR option is used).
+.Sp
+Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
+.Sp
+.Vb 5
+\&          % gcc \-Q \-mabi=2 \-\-help=target \-c
+\&          The following options are target specific:
+\&          \-mabi=                                2
+\&          \-mabort\-on\-noreturn                   [disabled]
+\&          \-mapcs                                [disabled]
+.Ve
+.Sp
+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 \fB\-O2\fR by using:
+.Sp
+.Vb 1
+\&        \-Q \-O2 \-\-help=optimizers
+.Ve
+.Sp
+Alternatively you can discover which binary optimizations are enabled
+by \fB\-O3\fR by using:
+.Sp
+.Vb 3
+\&        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
+.Ve
+.RE
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Display the version number and copyrights of the invoked \s-1GCC.\s0
+.IP "\fB\-pass\-exit\-codes\fR" 4
+.IX Item "-pass-exit-codes"
+Normally the \fBgcc\fR program exits with the code of 1 if any
+phase of the compiler returns a non-success return code.  If you specify
+\&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR 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.
+.IP "\fB\-pipe\fR" 4
+.IX Item "-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 \s-1GNU\s0 assembler has
+no trouble.
+.IP "\fB\-specs=\fR\fIfile\fR" 4
+.IX Item "-specs=file"
+Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
+file, in order to override the defaults which the \fBgcc\fR driver
+program uses when determining what switches to pass to \fBcc1\fR,
+\&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
+\&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
+are processed in order, from left to right.
+.IP "\fB\-wrapper\fR" 4
+.IX Item "-wrapper"
+Invoke all subcommands under a wrapper program.  The name of the
+wrapper program and its parameters are passed as a comma separated
+list.
+.Sp
+.Vb 1
+\&        gcc \-c t.c \-wrapper gdb,\-\-args
+.Ve
+.Sp
+This invokes all subprograms of \fBgcc\fR under
+\&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
+\&\fBgdb \-\-args cc1 ...\fR.
+.IP "\fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "-ffile-prefix-map=old=new"
+When compiling files residing in directory \fI\fIold\fI\fR, record
+any references to them in the result of the compilation as if the
+files resided in directory \fI\fInew\fI\fR instead.  Specifying this
+option is equivalent to specifying all the individual
+\&\fB\-f*\-prefix\-map\fR options.  This can be used to make reproducible
+builds that are location independent.  See also
+\&\fB\-fmacro\-prefix\-map\fR and \fB\-fdebug\-prefix\-map\fR.
+.IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
+.IX Item "-fplugin=name.so"
+Load the plugin code in file \fIname\fR.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
+\&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
+Each plugin should define the callback functions specified in the
+Plugins \s-1API.\s0
+.IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
+.IX Item "-fplugin-arg-name-key=value"
+Define an argument called \fIkey\fR with a value of \fIvalue\fR
+for the plugin called \fIname\fR.
+.IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
+.IX Item "-fdump-ada-spec[-slim]"
+For C and \*(C+ source and include files, generate corresponding Ada specs.
+.IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
+.IX Item "-fada-spec-parent=unit"
+In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
+Ada specs as child units of parent \fIunit\fR.
+.IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
+.IX Item "-fdump-go-spec=file"
+For input files in any language, generate corresponding Go
+declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
+\&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
+useful way to start writing a Go interface to code written in some
+other language.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SS "Compiling \*(C+ Programs"
+.IX Subsection "Compiling Programs"
+\&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
+\&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
+\&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
+\&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
+preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 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 \fBgcc\fR).
+.PP
+However, the use of \fBgcc\fR does not add the \*(C+ library.
+\&\fBg++\fR is a program that calls \s-1GCC\s0 and automatically specifies linking
+against the \*(C+ library.  It treats \fB.c\fR,
+\&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
+files unless \fB\-x\fR is used.  This program is also useful when
+precompiling a C header file with a \fB.h\fR extension for use in \*(C+
+compilations.  On many systems, \fBg++\fR is also installed with
+the name \fBc++\fR.
+.PP
+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.
+.SS "Options Controlling C Dialect"
+.IX Subsection "Options Controlling C 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:
+.IP "\fB\-ansi\fR" 4
+.IX Item "-ansi"
+In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
+equivalent to \fB\-std=c++98\fR.
+.Sp
+This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO
+C90\s0 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
+such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
+predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
+type of system you are using.  It also enables the undesirable and
+rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
+it disables recognition of \*(C+ style \fB//\fR comments as well as
+the \f(CW\*(C`inline\*(C'\fR keyword.
+.Sp
+The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
+\&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
+\&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO C\s0 program, of
+course, but it is useful to put them in header files that might be included
+in compilations done with \fB\-ansi\fR.  Alternate predefined macros
+such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
+without \fB\-ansi\fR.
+.Sp
+The \fB\-ansi\fR option does not cause non-ISO programs to be
+rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
+addition to \fB\-ansi\fR.
+.Sp
+The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
+option is used.  Some header files may notice this macro and refrain
+from declaring certain functions or defining certain macros that the
+\&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
+programs that might use these names for other things.
+.Sp
+Functions that are normally built in but do not have semantics
+defined by \s-1ISO C\s0 (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
+functions when \fB\-ansi\fR is used.
+.IP "\fB\-std=\fR" 4
+.IX Item "-std="
+Determine the language standard.   This option
+is currently only supported when compiling C or \*(C+.
+.Sp
+The compiler can accept several base standards, such as \fBc90\fR or
+\&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
+\&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
+compiler accepts all programs following that standard plus those
+using \s-1GNU\s0 extensions that do not contradict it.  For example,
+\&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
+incompatible with \s-1ISO C90,\s0 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
+keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
+\&\s-1ISO C90,\s0 such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
+expression. On the other hand, when a \s-1GNU\s0 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 \fB\-Wpedantic\fR to identify which features are \s-1GNU\s0
+extensions given that version of the standard. For example
+\&\fB\-std=gnu90 \-Wpedantic\fR warns about \*(C+ style \fB//\fR
+comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
+.Sp
+A value for this option must be provided; possible values are
+.RS 4
+.IP "\fBc90\fR" 4
+.IX Item "c90"
+.PD 0
+.IP "\fBc89\fR" 4
+.IX Item "c89"
+.IP "\fBiso9899:1990\fR" 4
+.IX Item "iso9899:1990"
+.PD
+Support all \s-1ISO C90\s0 programs (certain \s-1GNU\s0 extensions that conflict
+with \s-1ISO C90\s0 are disabled). Same as \fB\-ansi\fR for C code.
+.IP "\fBiso9899:199409\fR" 4
+.IX Item "iso9899:199409"
+\&\s-1ISO C90\s0 as modified in amendment 1.
+.IP "\fBc99\fR" 4
+.IX Item "c99"
+.PD 0
+.IP "\fBc9x\fR" 4
+.IX Item "c9x"
+.IP "\fBiso9899:1999\fR" 4
+.IX Item "iso9899:1999"
+.IP "\fBiso9899:199x\fR" 4
+.IX Item "iso9899:199x"
+.PD
+\&\s-1ISO C99.\s0  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
+<\fBhttp://gcc.gnu.org/c99status.html\fR> for more information.  The
+names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
+.IP "\fBc11\fR" 4
+.IX Item "c11"
+.PD 0
+.IP "\fBc1x\fR" 4
+.IX Item "c1x"
+.IP "\fBiso9899:2011\fR" 4
+.IX Item "iso9899:2011"
+.PD
+\&\s-1ISO C11,\s0 the 2011 revision of the \s-1ISO C\s0 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 \fBc1x\fR is deprecated.
+.IP "\fBc17\fR" 4
+.IX Item "c17"
+.PD 0
+.IP "\fBc18\fR" 4
+.IX Item "c18"
+.IP "\fBiso9899:2017\fR" 4
+.IX Item "iso9899:2017"
+.IP "\fBiso9899:2018\fR" 4
+.IX Item "iso9899:2018"
+.PD
+\&\s-1ISO C17,\s0 the 2017 revision of the \s-1ISO C\s0 standard (expected to be
+published in 2018).  This standard is
+same as C11 except for corrections of defects (all of which are also
+applied with \fB\-std=c11\fR) and a new value of
+\&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR, and so is supported to the same extent as C11.
+.IP "\fBgnu90\fR" 4
+.IX Item "gnu90"
+.PD 0
+.IP "\fBgnu89\fR" 4
+.IX Item "gnu89"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C90\s0 (including some C99 features).
+.IP "\fBgnu99\fR" 4
+.IX Item "gnu99"
+.PD 0
+.IP "\fBgnu9x\fR" 4
+.IX Item "gnu9x"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C99.\s0  The name \fBgnu9x\fR is deprecated.
+.IP "\fBgnu11\fR" 4
+.IX Item "gnu11"
+.PD 0
+.IP "\fBgnu1x\fR" 4
+.IX Item "gnu1x"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C11.\s0
+The name \fBgnu1x\fR is deprecated.
+.IP "\fBgnu17\fR" 4
+.IX Item "gnu17"
+.PD 0
+.IP "\fBgnu18\fR" 4
+.IX Item "gnu18"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C17.\s0  This is the default for C code.
+.IP "\fBc++98\fR" 4
+.IX Item "c++98"
+.PD 0
+.IP "\fBc++03\fR" 4
+.IX Item "c++03"
+.PD
+The 1998 \s-1ISO \*(C+\s0 standard plus the 2003 technical corrigendum and some
+additional defect reports. Same as \fB\-ansi\fR for \*(C+ code.
+.IP "\fBgnu++98\fR" 4
+.IX Item "gnu++98"
+.PD 0
+.IP "\fBgnu++03\fR" 4
+.IX Item "gnu++03"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.
+.IP "\fBc++11\fR" 4
+.IX Item "c++11"
+.PD 0
+.IP "\fBc++0x\fR" 4
+.IX Item "c++0x"
+.PD
+The 2011 \s-1ISO \*(C+\s0 standard plus amendments.
+The name \fBc++0x\fR is deprecated.
+.IP "\fBgnu++11\fR" 4
+.IX Item "gnu++11"
+.PD 0
+.IP "\fBgnu++0x\fR" 4
+.IX Item "gnu++0x"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++11\fR.
+The name \fBgnu++0x\fR is deprecated.
+.IP "\fBc++14\fR" 4
+.IX Item "c++14"
+.PD 0
+.IP "\fBc++1y\fR" 4
+.IX Item "c++1y"
+.PD
+The 2014 \s-1ISO \*(C+\s0 standard plus amendments.
+The name \fBc++1y\fR is deprecated.
+.IP "\fBgnu++14\fR" 4
+.IX Item "gnu++14"
+.PD 0
+.IP "\fBgnu++1y\fR" 4
+.IX Item "gnu++1y"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++14\fR.
+This is the default for \*(C+ code.
+The name \fBgnu++1y\fR is deprecated.
+.IP "\fBc++17\fR" 4
+.IX Item "c++17"
+.PD 0
+.IP "\fBc++1z\fR" 4
+.IX Item "c++1z"
+.PD
+The 2017 \s-1ISO \*(C+\s0 standard plus amendments.
+The name \fBc++1z\fR is deprecated.
+.IP "\fBgnu++17\fR" 4
+.IX Item "gnu++17"
+.PD 0
+.IP "\fBgnu++1z\fR" 4
+.IX Item "gnu++1z"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++17\fR.
+The name \fBgnu++1z\fR is deprecated.
+.IP "\fBc++2a\fR" 4
+.IX Item "c++2a"
+The next revision of the \s-1ISO \*(C+\s0 standard, tentatively planned for
+2020.  Support is highly experimental, and will almost certainly
+change in incompatible ways in future releases.
+.IP "\fBgnu++2a\fR" 4
+.IX Item "gnu++2a"
+\&\s-1GNU\s0 dialect of \fB\-std=c++2a\fR.  Support is highly experimental,
+and will almost certainly change in incompatible ways in future
+releases.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fgnu89\-inline\fR" 4
+.IX Item "-fgnu89-inline"
+The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
+\&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
+.Sp
+Using this option is roughly equivalent to adding the
+\&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
+.Sp
+The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
+C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
+specifies the default behavior).
+This option is not supported in \fB\-std=c90\fR or
+\&\fB\-std=gnu90\fR mode.
+.Sp
+The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
+\&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
+in effect for \f(CW\*(C`inline\*(C'\fR functions.
+.IP "\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR" 4
+.IX Item "-fpermitted-flt-eval-methods=style"
+\&\s-1ISO/IEC TS 18661\-3\s0 defines new permissible values for
+\&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR 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 \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR.  As such, code
+conforming to C11 may not have been written expecting the possibility of
+the new values.
+.Sp
+\&\fB\-fpermitted\-flt\-eval\-methods\fR specifies whether the compiler
+should allow only the values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR specified in C99/C11,
+or the extended set of values specified in \s-1ISO/IEC TS 18661\-3.\s0
+.Sp
+\&\fIstyle\fR is either \f(CW\*(C`c11\*(C'\fR or \f(CW\*(C`ts\-18661\-3\*(C'\fR as appropriate.
+.Sp
+The default when in a standards compliant mode (\fB\-std=c11\fR or similar)
+is \fB\-fpermitted\-flt\-eval\-methods=c11\fR.  The default when in a \s-1GNU\s0
+dialect (\fB\-std=gnu11\fR or similar) is
+\&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR.
+.IP "\fB\-aux\-info\fR \fIfilename\fR" 4
+.IX Item "-aux-info filename"
+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.
+.Sp
+Besides declarations, the file indicates, in comments, the origin of
+each declaration (source file and line), whether the declaration was
+implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
+\&\fBO\fR for old, respectively, in the first character after the line
+number and the colon), and whether it came from a declaration or a
+definition (\fBC\fR or \fBF\fR, 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.
+.IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
+.IX Item "-fallow-parameterless-variadic-functions"
+Accept variadic functions without named parameters.
+.Sp
+Although it is possible to define such a function, this is not very
+useful as it is not possible to read the arguments.  This is only
+supported for C as this construct is allowed by \*(C+.
+.IP "\fB\-fno\-asm\fR" 4
+.IX Item "-fno-asm"
+Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
+keyword, so that code can use these words as identifiers.  You can use
+the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
+instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
+.Sp
+In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
+\&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
+use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
+effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
+switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
+\&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO C99.\s0
+.IP "\fB\-fno\-builtin\fR" 4
+.IX Item "-fno-builtin"
+.PD 0
+.IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
+.IX Item "-fno-builtin-function"
+.PD
+Don't recognize built-in functions that do not begin with
+\&\fB_\|_builtin_\fR as prefix.
+.Sp
+\&\s-1GCC\s0 normally generates special code to handle certain built-in functions
+more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
+instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
+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, \s-1GCC\s0 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 \fB\-Wformat\fR for bad calls to
+\&\f(CW\*(C`printf\*(C'\fR when \f(CW\*(C`printf\*(C'\fR is built in and \f(CW\*(C`strlen\*(C'\fR is
+known not to modify global memory.
+.Sp
+With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
+only the built-in function \fIfunction\fR is
+disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
+function is named that is not built-in in this version of \s-1GCC,\s0 this
+option is ignored.  There is no corresponding
+\&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
+built-in functions selectively when using \fB\-fno\-builtin\fR or
+\&\fB\-ffreestanding\fR, you may define macros such as:
+.Sp
+.Vb 2
+\&        #define abs(n)          _\|_builtin_abs ((n))
+\&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
+.Ve
+.IP "\fB\-fgimple\fR" 4
+.IX Item "-fgimple"
+Enable parsing of function definitions marked with \f(CW\*(C`_\|_GIMPLE\*(C'\fR.
+This is an experimental feature that allows unit testing of \s-1GIMPLE\s0
+passes.
+.IP "\fB\-fhosted\fR" 4
+.IX Item "-fhosted"
+Assert that compilation targets a hosted environment.  This implies
+\&\fB\-fbuiltin\fR.  A hosted environment is one in which the
+entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
+type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
+This is equivalent to \fB\-fno\-freestanding\fR.
+.IP "\fB\-ffreestanding\fR" 4
+.IX Item "-ffreestanding"
+Assert that compilation targets a freestanding environment.  This
+implies \fB\-fno\-builtin\fR.  A freestanding environment
+is one in which the standard library may not exist, and program startup may
+not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
+This is equivalent to \fB\-fno\-hosted\fR.
+.IP "\fB\-fopenacc\fR" 4
+.IX Item "-fopenacc"
+Enable handling of OpenACC directives \f(CW\*(C`#pragma acc\*(C'\fR in C/\*(C+ and
+\&\f(CW\*(C`!$acc\*(C'\fR in Fortran.  When \fB\-fopenacc\fR is specified, the
+compiler generates accelerated code according to the OpenACC Application
+Programming Interface v2.0 <\fBhttps://www.openacc.org\fR>.  This option
+implies \fB\-pthread\fR, and thus is only supported on targets that
+have support for \fB\-pthread\fR.
+.IP "\fB\-fopenacc\-dim=\fR\fIgeom\fR" 4
+.IX Item "-fopenacc-dim=geom"
+Specify default compute dimensions for parallel offload regions that do
+not explicitly specify.  The \fIgeom\fR 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.
+.IP "\fB\-fopenmp\fR" 4
+.IX Item "-fopenmp"
+Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
+\&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
+compiler generates parallel code according to the OpenMP Application
+Program Interface v4.5 <\fBhttp://www.openmp.org/\fR>.  This option
+implies \fB\-pthread\fR, and thus is only supported on targets that
+have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
+\&\fB\-fopenmp\-simd\fR.
+.IP "\fB\-fopenmp\-simd\fR" 4
+.IX Item "-fopenmp-simd"
+Enable handling of OpenMP's \s-1SIMD\s0 directives with \f(CW\*(C`#pragma omp\*(C'\fR
+in C/\*(C+ and \f(CW\*(C`!$omp\*(C'\fR in Fortran. Other OpenMP directives
+are ignored.
+.IP "\fB\-fgnu\-tm\fR" 4
+.IX Item "-fgnu-tm"
+When the option \fB\-fgnu\-tm\fR is specified, the compiler
+generates code for the Linux variant of Intel's current Transactional
+Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
+an experimental feature whose interface may change in future versions
+of \s-1GCC,\s0 as the official specification changes.  Please note that not
+all architectures are supported for this feature.
+.Sp
+For more information on \s-1GCC\s0's support for transactional memory,
+.Sp
+Note that the transactional memory feature is not supported with
+non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
+.IP "\fB\-fms\-extensions\fR" 4
+.IX Item "-fms-extensions"
+Accept some non-standard constructs used in Microsoft header files.
+.Sp
+In \*(C+ code, this allows member names in structures to be similar
+to previous types declarations.
+.Sp
+.Vb 4
+\&        typedef int UOW;
+\&        struct ABC {
+\&          UOW UOW;
+\&        };
+.Ve
+.Sp
+Some cases of unnamed fields in structures and unions are only
+accepted with this option.
+.Sp
+Note that this option is off for all targets but x86 
+targets using ms-abi.
+.IP "\fB\-fplan9\-extensions\fR" 4
+.IX Item "-fplan9-extensions"
+Accept some non-standard constructs used in Plan 9 code.
+.Sp
+This enables \fB\-fms\-extensions\fR, 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.    This is only
+supported for C, not \*(C+.
+.IP "\fB\-fcond\-mismatch\fR" 4
+.IX Item "-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+.
+.IP "\fB\-flax\-vector\-conversions\fR" 4
+.IX Item "-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.
+.IP "\fB\-funsigned\-char\fR" 4
+.IX Item "-funsigned-char"
+Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
+.Sp
+Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
+be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
+\&\f(CW\*(C`signed char\*(C'\fR by default.
+.Sp
+Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
+\&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
+But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR 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.
+.Sp
+The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
+\&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
+is always just like one of those two.
+.IP "\fB\-fsigned\-char\fR" 4
+.IX Item "-fsigned-char"
+Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
+.Sp
+Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
+the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
+\&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
+.IP "\fB\-fsigned\-bitfields\fR" 4
+.IX Item "-fsigned-bitfields"
+.PD 0
+.IP "\fB\-funsigned\-bitfields\fR" 4
+.IX Item "-funsigned-bitfields"
+.IP "\fB\-fno\-signed\-bitfields\fR" 4
+.IX Item "-fno-signed-bitfields"
+.IP "\fB\-fno\-unsigned\-bitfields\fR" 4
+.IX Item "-fno-unsigned-bitfields"
+.PD
+These options control whether a bit-field is signed or unsigned, when the
+declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
+default, such a bit-field is signed, because this is consistent: the
+basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
+.IP "\fB\-fsso\-struct=\fR\fIendianness\fR" 4
+.IX Item "-fsso-struct=endianness"
+Set the default scalar storage order of structures and unions to the
+specified endianness.  The accepted values are \fBbig-endian\fR,
+\&\fBlittle-endian\fR and \fBnative\fR for the native endianness of
+the target (the default).  This option is not supported for \*(C+.
+.Sp
+\&\fBWarning:\fR the \fB\-fsso\-struct\fR switch causes \s-1GCC\s0 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.
+.SS "Options Controlling \*(C+ Dialect"
+.IX Subsection "Options Controlling Dialect"
+This section describes the command-line options that are only meaningful
+for \*(C+ programs.  You can also use most of the \s-1GNU\s0 compiler options
+regardless of what language your program is in.  For example, you
+might compile a file \fIfirstClass.C\fR like this:
+.PP
+.Vb 1
+\&        g++ \-g \-fstrict\-enums \-O \-c firstClass.C
+.Ve
+.PP
+In this example, only \fB\-fstrict\-enums\fR is an option meant
+only for \*(C+ programs; you can use the other options with any
+language supported by \s-1GCC.\s0
+.PP
+Some options for compiling C programs, such as \fB\-std\fR, are also
+relevant for \*(C+ programs.
+.PP
+Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
+.IP "\fB\-fabi\-version=\fR\fIn\fR" 4
+.IX Item "-fabi-version=n"
+Use version \fIn\fR of the \*(C+ \s-1ABI.\s0  The default is version 0.
+.Sp
+Version 0 refers to the version conforming most closely to
+the \*(C+ \s-1ABI\s0 specification.  Therefore, the \s-1ABI\s0 obtained using version 0
+will change in different versions of G++ as \s-1ABI\s0 bugs are fixed.
+.Sp
+Version 1 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.
+.Sp
+Version 2 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++
+3.4, and was the default through G++ 4.9.
+.Sp
+Version 3 corrects an error in mangling a constant address as a
+template argument.
+.Sp
+Version 4, which first appeared in G++ 4.5, implements a standard
+mangling for vector types.
+.Sp
+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.
+.Sp
+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.
+.Sp
+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.
+.Sp
+Version 8, which first appeared in G++ 4.9, corrects the substitution
+behavior of function types with function-cv-qualifiers.
+.Sp
+Version 9, which first appeared in G++ 5.2, corrects the alignment of
+\&\f(CW\*(C`nullptr_t\*(C'\fR.
+.Sp
+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. \fBstdcall\fR).
+.Sp
+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 \fB\-fnew\-inheriting\-ctors\fR.
+.Sp
+See also \fB\-Wabi\fR.
+.IP "\fB\-fabi\-compat\-version=\fR\fIn\fR" 4
+.IX Item "-fabi-compat-version=n"
+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 \s-1ABI\s0 version to use for the alias.
+.Sp
+With \fB\-fabi\-version=0\fR (the default), this defaults to 8 (\s-1GCC 5\s0
+compatibility).  If another \s-1ABI\s0 version is explicitly selected, this
+defaults to 0.  For compatibility with \s-1GCC\s0 versions 3.2 through 4.9,
+use \fB\-fabi\-compat\-version=2\fR.
+.Sp
+If this option is not provided but \fB\-Wabi=\fR\fIn\fR is, that
+version is used for compatibility aliases.  If this option is provided
+along with \fB\-Wabi\fR (without the version), the version from this
+option is used for the warning.
+.IP "\fB\-fno\-access\-control\fR" 4
+.IX Item "-fno-access-control"
+Turn off all access checking.  This switch is mainly useful for working
+around bugs in the access control code.
+.IP "\fB\-faligned\-new\fR" 4
+.IX Item "-faligned-new"
+Enable support for \*(C+17 \f(CW\*(C`new\*(C'\fR of types that require more
+alignment than \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR provides.  A
+numeric argument such as \f(CW\*(C`\-faligned\-new=32\*(C'\fR 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
+\&\f(CW\*(C`alignof(std::max_align_t)\*(C'\fR.
+.Sp
+This flag is enabled by default for \fB\-std=c++17\fR.
+.IP "\fB\-fcheck\-new\fR" 4
+.IX Item "-fcheck-new"
+Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
+before attempting to modify the storage allocated.  This check is
+normally unnecessary because the \*(C+ standard specifies that
+\&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
+\&\f(CW\*(C`throw()\*(C'\fR, in which case the compiler always checks the
+return value even without this option.  In all other cases, when
+\&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
+exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
+\&\fBnew (nothrow)\fR.
+.IP "\fB\-fconcepts\fR" 4
+.IX Item "-fconcepts"
+Enable support for the \*(C+ Extensions for Concepts Technical
+Specification, \s-1ISO 19217\s0 (2015), which allows code like
+.Sp
+.Vb 2
+\&        template <class T> concept bool Addable = requires (T t) { t + t; };
+\&        template <Addable T> T add (T a, T b) { return a + b; }
+.Ve
+.IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
+.IX Item "-fconstexpr-depth=n"
+Set the maximum nested evaluation depth for \*(C+11 constexpr functions
+to \fIn\fR.  A limit is needed to detect endless recursion during
+constant expression evaluation.  The minimum specified by the standard
+is 512.
+.IP "\fB\-fconstexpr\-loop\-limit=\fR\fIn\fR" 4
+.IX Item "-fconstexpr-loop-limit=n"
+Set the maximum number of iterations for a loop in \*(C+14 constexpr functions
+to \fIn\fR.  A limit is needed to detect infinite loops during
+constant expression evaluation.  The default is 262144 (1<<18).
+.IP "\fB\-fdeduce\-init\-list\fR" 4
+.IX Item "-fdeduce-init-list"
+Enable deduction of a template type parameter as
+\&\f(CW\*(C`std::initializer_list\*(C'\fR from a brace-enclosed initializer list, i.e.
+.Sp
+.Vb 4
+\&        template <class T> auto forward(T t) \-> decltype (realfn (t))
+\&        {
+\&          return realfn (t);
+\&        }
+\&        
+\&        void f()
+\&        {
+\&          forward({1,2}); // call forward<std::initializer_list<int>>
+\&        }
+.Ve
+.Sp
+This deduction was implemented as a possible extension to the
+originally proposed semantics for the \*(C+11 standard, but was not part
+of the final standard, so it is disabled by default.  This option is
+deprecated, and may be removed in a future version of G++.
+.IP "\fB\-ffriend\-injection\fR" 4
+.IX Item "-ffriend-injection"
+Inject friend functions into the enclosing namespace, so that they are
+visible outside the scope of the class in which they are declared.
+Friend functions were documented to work this way in the old Annotated
+\&\*(C+ Reference Manual.  
+However, in \s-1ISO \*(C+\s0 a friend function that is not declared
+in an enclosing scope can only be found using argument dependent
+lookup.  \s-1GCC\s0 defaults to the standard behavior.
+.Sp
+This option is deprecated and will be removed.
+.IP "\fB\-fno\-elide\-constructors\fR" 4
+.IX Item "-fno-elide-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.
+.Sp
+In \*(C+17, the compiler is required to omit these temporaries, but this
+option still affects trivial member functions.
+.IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
+.IX Item "-fno-enforce-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
+\&\f(CW\*(C`NDEBUG\*(C'\fR.  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.
+.IP "\fB\-fextern\-tls\-init\fR" 4
+.IX Item "-fextern-tls-init"
+.PD 0
+.IP "\fB\-fno\-extern\-tls\-init\fR" 4
+.IX Item "-fno-extern-tls-init"
+.PD
+The \*(C+11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
+\&\f(CW\*(C`threadprivate\*(C'\fR 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 \s-1TU\s0 needs to trigger dynamic initialization (either
+because the variable is statically initialized, or a use of the
+variable in the defining \s-1TU\s0 will be executed before any uses in
+another \s-1TU\s0), they can avoid this overhead with the
+\&\fB\-fno\-extern\-tls\-init\fR option.
+.Sp
+On targets that support symbol aliases, the default is
+\&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
+aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
+.IP "\fB\-ffor\-scope\fR" 4
+.IX Item "-ffor-scope"
+.PD 0
+.IP "\fB\-fno\-for\-scope\fR" 4
+.IX Item "-fno-for-scope"
+.PD
+If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
+a \fIfor-init-statement\fR is limited to the \f(CW\*(C`for\*(C'\fR loop itself,
+as specified by the \*(C+ standard.
+If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
+a \fIfor-init-statement\fR extends to the end of the enclosing scope,
+as was the case in old versions of G++, and other (traditional)
+implementations of \*(C+.
+.Sp
+This option is deprecated and the associated non-standard
+functionality will be removed.
+.IP "\fB\-fno\-gnu\-keywords\fR" 4
+.IX Item "-fno-gnu-keywords"
+Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
+word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
+This option is implied by the strict \s-1ISO \*(C+\s0 dialects: \fB\-ansi\fR,
+\&\fB\-std=c++98\fR, \fB\-std=c++11\fR, etc.
+.IP "\fB\-fno\-implicit\-templates\fR" 4
+.IX Item "-fno-implicit-templates"
+Never emit code for non-inline templates that are instantiated
+implicitly (i.e. by use); only emit code for explicit instantiations.
+.IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
+.IX Item "-fno-implicit-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.
+.IP "\fB\-fno\-implement\-inlines\fR" 4
+.IX Item "-fno-implement-inlines"
+To save space, do not emit out-of-line copies of inline functions
+controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
+errors if these functions are not inlined everywhere they are called.
+.IP "\fB\-fms\-extensions\fR" 4
+.IX Item "-fms-extensions"
+Disable Wpedantic warnings about constructs used in \s-1MFC,\s0 such as implicit
+int and getting a pointer to member function via non-standard syntax.
+.IP "\fB\-fnew\-inheriting\-ctors\fR" 4
+.IX Item "-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 \fB\-fabi\-version=10\fR or lower is specified.
+.IP "\fB\-fnew\-ttp\-matching\fR" 4
+.IX Item "-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
+\&\fB\-std=c++17\fR.
+.IP "\fB\-fno\-nonansi\-builtins\fR" 4
+.IX Item "-fno-nonansi-builtins"
+Disable built-in declarations of functions that are not mandated by
+\&\s-1ANSI/ISO C.\s0  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
+\&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
+.IP "\fB\-fnothrow\-opt\fR" 4
+.IX Item "-fnothrow-opt"
+Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as if it were a
+\&\f(CW\*(C`noexcept\*(C'\fR 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 \s-1EH\s0 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 \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
+.IP "\fB\-fno\-operator\-names\fR" 4
+.IX Item "-fno-operator-names"
+Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
+\&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
+synonyms as keywords.
+.IP "\fB\-fno\-optional\-diags\fR" 4
+.IX Item "-fno-optional-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.
+.IP "\fB\-fpermissive\fR" 4
+.IX Item "-fpermissive"
+Downgrade some diagnostics about nonconformant code from errors to
+warnings.  Thus, using \fB\-fpermissive\fR allows some
+nonconforming code to compile.
+.IP "\fB\-fno\-pretty\-templates\fR" 4
+.IX Item "-fno-pretty-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. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
+rather than \f(CW\*(C`void f(int)\*(C'\fR) 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 \fB\-fno\-pretty\-templates\fR to disable them.
+.IP "\fB\-frepo\fR" 4
+.IX Item "-frepo"
+Enable automatic template instantiation at link time.  This option also
+implies \fB\-fno\-implicit\-templates\fR.
+.IP "\fB\-fno\-rtti\fR" 4
+.IX Item "-fno-rtti"
+Disable generation of information about every class with virtual
+functions for use by the \*(C+ run-time type identification features
+(\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  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 \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
+do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
+unambiguous base classes.
+.IP "\fB\-fsized\-deallocation\fR" 4
+.IX Item "-fsized-deallocation"
+Enable the built-in global declarations
+.Sp
+.Vb 2
+\&        void operator delete (void *, std::size_t) noexcept;
+\&        void operator delete[] (void *, std::size_t) noexcept;
+.Ve
+.Sp
+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
+\&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
+warns about places that might want to add a definition.
+.IP "\fB\-fstrict\-enums\fR" 4
+.IX Item "-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.
+.IP "\fB\-fstrong\-eval\-order\fR" 4
+.IX Item "-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 \fB\-std=c++17\fR.
+\&\fB\-fstrong\-eval\-order=some\fR enables just the ordering of member
+access and shift expressions, and is the default without
+\&\fB\-std=c++17\fR.
+.IP "\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR" 4
+.IX Item "-ftemplate-backtrace-limit=n"
+Set the maximum number of template instantiation notes for a single
+warning or error to \fIn\fR.  The default value is 10.
+.IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
+.IX Item "-ftemplate-depth=n"
+Set the maximum instantiation depth for template classes to \fIn\fR.
+A limit on the template instantiation depth is needed to detect
+endless recursions during template class instantiation.  \s-1ANSI/ISO \*(C+\s0
+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.
+.IP "\fB\-fno\-threadsafe\-statics\fR" 4
+.IX Item "-fno-threadsafe-statics"
+Do not emit the extra code to use the routines specified in the \*(C+
+\&\s-1ABI\s0 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.
+.IP "\fB\-fuse\-cxa\-atexit\fR" 4
+.IX Item "-fuse-cxa-atexit"
+Register destructors for objects with static storage duration with the
+\&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
+This option is required for fully standards-compliant handling of static
+destructors, but only works if your C library supports
+\&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
+.IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
+.IX Item "-fno-use-cxa-get-exception-ptr"
+Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
+causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
+if the runtime routine is not available.
+.IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
+.IX Item "-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.
+.Sp
+The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
+\&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
+appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
+when used within the \s-1DSO.\s0  Enabling this option can have a dramatic effect
+on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
+dynamic export table when the library makes heavy use of templates.
+.Sp
+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.
+.Sp
+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.
+.Sp
+Explicitly instantiated inline methods are unaffected by this option
+as their linkage might otherwise cross a shared library boundary.
+.IP "\fB\-fvisibility\-ms\-compat\fR" 4
+.IX Item "-fvisibility-ms-compat"
+This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
+linkage model compatible with that of Microsoft Visual Studio.
+.Sp
+The flag makes these changes to \s-1GCC\s0's linkage model:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
+\&\fB\-fvisibility=hidden\fR.
+.IP "2." 4
+.IX Item "2."
+Types, but not their members, are not hidden by default.
+.IP "3." 4
+.IX Item "3."
+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.
+.RE
+.RS 4
+.Sp
+In new code it is better to use \fB\-fvisibility=hidden\fR 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.
+.Sp
+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 \s-1ODR\s0 to define types with the same name differently.
+.RE
+.IP "\fB\-fno\-weak\fR" 4
+.IX Item "-fno-weak"
+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++.
+.IP "\fB\-nostdinc++\fR" 4
+.IX Item "-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.)
+.PP
+In addition, these optimization, warning, and code generation options
+have meanings only for \*(C+ programs:
+.IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wabi (C, Objective-C, and Objective- only)"
+Warn when G++ it generates code that is probably not compatible with
+the vendor-neutral \*(C+ \s-1ABI.\s0  Since G++ now defaults to updating the
+\&\s-1ABI\s0 with each major release, normally \fB\-Wabi\fR will warn only if
+there is a check added later in a release series for an \s-1ABI\s0 issue
+discovered since the initial release.  \fB\-Wabi\fR will warn about
+more things if an older \s-1ABI\s0 version is selected (with
+\&\fB\-fabi\-version=\fR\fIn\fR).
+.Sp
+\&\fB\-Wabi\fR can also be used with an explicit version number to
+warn about compatibility with a particular \fB\-fabi\-version\fR
+level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
+\&\fB\-fabi\-version=2\fR.
+.Sp
+If an explicit version number is provided and
+\&\fB\-fabi\-compat\-version\fR 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
+\&\fB\-fabi\-compat\-version\fR is specified, that version number is
+used for \s-1ABI\s0 warnings.
+.Sp
+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.
+.Sp
+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.
+.Sp
+Known incompatibilities in \fB\-fabi\-version=2\fR (which was the
+default from \s-1GCC 3.4\s0 to 4.9) include:
+.RS 4
+.IP "*" 4
+A template with a non-type template parameter of reference type was
+mangled incorrectly:
+.Sp
+.Vb 3
+\&        extern int N;
+\&        template <int &> struct S {};
+\&        void n (S<N>) {2}
+.Ve
+.Sp
+This was fixed in \fB\-fabi\-version=3\fR.
+.IP "*" 4
+\&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
+mangled in a non-standard way that does not allow for overloading of
+functions taking vectors of different sizes.
+.Sp
+The mangling was changed in \fB\-fabi\-version=4\fR.
+.IP "*" 4
+\&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
+qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
+.Sp
+These mangling issues were fixed in \fB\-fabi\-version=5\fR.
+.IP "*" 4
+Scoped enumerators passed as arguments to a variadic function are
+promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
+On most targets this does not actually affect the parameter passing
+\&\s-1ABI,\s0 as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
+.Sp
+Also, the \s-1ABI\s0 changed the mangling of template argument packs,
+\&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
+a class scope function used as a template argument.
+.Sp
+These issues were corrected in \fB\-fabi\-version=6\fR.
+.IP "*" 4
+Lambdas in default argument scope were mangled incorrectly, and the
+\&\s-1ABI\s0 changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
+.Sp
+These issues were corrected in \fB\-fabi\-version=7\fR.
+.IP "*" 4
+When mangling a function type with function-cv-qualifiers, the
+un-qualified function type was incorrectly treated as a substitution
+candidate.
+.Sp
+This was fixed in \fB\-fabi\-version=8\fR, the default for \s-1GCC 5.1.\s0
+.IP "*" 4
+\&\f(CW\*(C`decltype(nullptr)\*(C'\fR incorrectly had an alignment of 1, leading to
+unaligned accesses.  Note that this did not affect the \s-1ABI\s0 of a
+function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
+minimum alignment.
+.Sp
+This was fixed in \fB\-fabi\-version=9\fR, the default for \s-1GCC 5.2.\s0
+.IP "*" 4
+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.
+.Sp
+This was fixed in \fB\-fabi\-version=10\fR, the default for \s-1GCC 6.1.\s0
+.RE
+.RS 4
+.Sp
+It also warns about psABI-related changes.  The known psABI changes at this
+point include:
+.IP "*" 4
+For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are 
+passed in memory as specified in psABI.  For example:
+.Sp
+.Vb 4
+\&        union U {
+\&          long double ld;
+\&          int i;
+\&        };
+.Ve
+.Sp
+\&\f(CW\*(C`union U\*(C'\fR is always passed in memory.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wabi\-tag\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wabi-tag ( and Objective- only)"
+Warn when a type with an \s-1ABI\s0 tag is used in a context that does not
+have that \s-1ABI\s0 tag.  See \fB\*(C+ Attributes\fR for more information
+about \s-1ABI\s0 tags.
+.IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wctor-dtor-privacy ( and Objective- only)"
+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.
+.IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
+Warn when \f(CW\*(C`delete\*(C'\fR 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 \fB\-Wall\fR.
+.IP "\fB\-Wliteral\-suffix\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wliteral-suffix ( and Objective- only)"
+Warn when a string or character literal is followed by a ud-suffix which does
+not begin with an underscore.  As a conforming extension, \s-1GCC\s0 treats such
+suffixes as separate preprocessing tokens in order to maintain backwards
+compatibility with code that uses formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.
+For example:
+.Sp
+.Vb 3
+\&        #define _\|_STDC_FORMAT_MACROS
+\&        #include <inttypes.h>
+\&        #include <stdio.h>
+\&        
+\&        int main() {
+\&          int64_t i64 = 123;
+\&          printf("My int64: %" PRId64"\en", i64);
+\&        }
+.Ve
+.Sp
+In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
+.Sp
+Additionally, warn 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.
+.Sp
+This warning is enabled by default.
+.IP "\fB\-Wlto\-type\-mismatch\fR" 4
+.IX Item "-Wlto-type-mismatch"
+During the link-time optimization warn about type mismatches in
+global declarations from different compilation units.
+Requires \fB\-flto\fR to be enabled.  Enabled by default.
+.IP "\fB\-Wno\-narrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-narrowing ( and Objective- only)"
+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 \fB\-Wno\-narrowing\fR suppresses the diagnostic.
+Note that this does not affect the meaning of well-formed code;
+narrowing conversions are still considered ill-formed in \s-1SFINAE\s0 contexts.
+.Sp
+With \fB\-Wnarrowing\fR in \*(C+98, warn when a narrowing
+conversion prohibited by \*(C+11 occurs within
+\&\fB{ }\fR, e.g.
+.Sp
+.Vb 1
+\&        int i = { 2.2 }; // error: narrowing from double to int
+.Ve
+.Sp
+This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
+.IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wnoexcept ( and Objective- only)"
+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. \f(CW\*(C`throw()\*(C'\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
+the compiler to never throw an exception.
+.IP "\fB\-Wnoexcept\-type\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wnoexcept-type ( and Objective- only)"
+Warn if the \*(C+17 feature making \f(CW\*(C`noexcept\*(C'\fR part of a function
+type changes the mangled name of a symbol relative to \*(C+14.  Enabled
+by \fB\-Wabi\fR and \fB\-Wc++17\-compat\fR.
+.Sp
+As an example:
+.Sp
+.Vb 3
+\&        template <class T> void f(T t) { t(); };
+\&        void g() noexcept;
+\&        void h() { f(g); }
+.Ve
+.Sp
+In \*(C+14, \f(CW\*(C`f\*(C'\fR calls calls \f(CW\*(C`f<void(*)()>\*(C'\fR, but in
+\&\*(C+17 it calls \f(CW\*(C`f<void(*)()noexcept>\*(C'\fR.
+.IP "\fB\-Wclass\-memaccess\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wclass-memaccess ( and Objective- only)"
+Warn when the destination of a call to a raw memory function such as
+\&\f(CW\*(C`memset\*(C'\fR or \f(CW\*(C`memcpy\*(C'\fR 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 \f(CW\*(C`memset\*(C'\fR 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.
+.Sp
+.Vb 2
+\&        std::string str = "abc";
+\&        memset (&str, 0, sizeof str);
+.Ve
+.Sp
+The \fB\-Wclass\-memaccess\fR option is enabled by \fB\-Wall\fR.
+Explicitly casting the pointer to the class object to \f(CW\*(C`void *\*(C'\fR or
+to a type that can be safely accessed by the raw memory function suppresses
+the warning.
+.IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wnon-virtual-dtor ( and Objective- only)"
+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 \fB\-Weffc++\fR is specified.
+.IP "\fB\-Wregister\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wregister ( and Objective- only)"
+Warn on uses of the \f(CW\*(C`register\*(C'\fR storage class specifier, except
+when it is part of the \s-1GNU\s0 \fBExplicit Register Variables\fR extension.
+The use of the \f(CW\*(C`register\*(C'\fR keyword as storage class specifier has
+been deprecated in \*(C+11 and removed in \*(C+17.
+Enabled by default with \fB\-std=c++17\fR.
+.IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wreorder ( and Objective- only)"
+Warn when the order of member initializers given in the code does not
+match the order in which they must be executed.  For instance:
+.Sp
+.Vb 5
+\&        struct A {
+\&          int i;
+\&          int j;
+\&          A(): j (0), i (1) { }
+\&        };
+.Ve
+.Sp
+The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
+and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
+a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-fext\-numeric\-literals\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-fext-numeric-literals ( and Objective- only)"
+Accept imaginary, fixed-point, or machine-defined
+literal number suffixes as \s-1GNU\s0 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 \s-1GNU\s0 dialects:
+\&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
+\&\fB\-std=gnu++14\fR.
+This option is off by default
+for \s-1ISO \*(C+11\s0 onwards (\fB\-std=c++11\fR, ...).
+.PP
+The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
+.IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Weffc++ ( and Objective- only)"
+Warn about violations of the following style guidelines from Scott Meyers'
+\&\fIEffective \*(C+\fR series of books:
+.RS 4
+.IP "*" 4
+Define a copy constructor and an assignment operator for classes
+with dynamically-allocated memory.
+.IP "*" 4
+Prefer initialization to assignment in constructors.
+.IP "*" 4
+Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
+.IP "*" 4
+Don't try to return a reference when you must return an object.
+.IP "*" 4
+Distinguish between prefix and postfix forms of increment and
+decrement operators.
+.IP "*" 4
+Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
+.RE
+.RS 4
+.Sp
+This option also enables \fB\-Wnon\-virtual\-dtor\fR, 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.
+.Sp
+When selecting this option, be aware that the standard library
+headers do not obey all of these guidelines; use \fBgrep \-v\fR
+to filter out those warnings.
+.RE
+.IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wstrict-null-sentinel ( and Objective- only)"
+Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
+compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
+to \f(CW\*(C`_\|_null\*(C'\fR.  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.
+.IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-non-template-friend ( and Objective- only)"
+Disable warnings when non-template friend functions are declared
+within a template.  In very old versions of \s-1GCC\s0 that predate implementation
+of the \s-1ISO\s0 standard, declarations such as 
+\&\fBfriend int foo(int)\fR, 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.
+.IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wold-style-cast ( and Objective- only)"
+Warn if an old-style (C\-style) cast to a non-void type is used within
+a \*(C+ program.  The new-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
+\&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
+less vulnerable to unintended effects and much easier to search for.
+.IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Woverloaded-virtual ( and Objective- only)"
+Warn when a function declaration hides virtual functions from a
+base class.  For example, in:
+.Sp
+.Vb 3
+\&        struct A {
+\&          virtual void f();
+\&        };
+\&        
+\&        struct B: public A {
+\&          void f(int);
+\&        };
+.Ve
+.Sp
+the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
+like:
+.Sp
+.Vb 2
+\&        B* b;
+\&        b\->f();
+.Ve
+.Sp
+fails to compile.
+.IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-pmf-conversions ( and Objective- only)"
+Disable the diagnostic for converting a bound pointer to member function
+to a plain pointer.
+.IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wsign-promo ( and Objective- only)"
+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.
+.IP "\fB\-Wtemplates\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wtemplates ( and Objective- only)"
+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 \s-1STL,\s0 so
+one can still use the \s-1STL.\s0  One may also instantiate or specialize
+templates.
+.IP "\fB\-Wmultiple\-inheritance\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wmultiple-inheritance ( and Objective- only)"
+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 \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
+classes that indirectly use multiple inheritance.
+.IP "\fB\-Wvirtual\-inheritance\fR" 4
+.IX Item "-Wvirtual-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 \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
+classes that indirectly use virtual inheritance.
+.IP "\fB\-Wnamespaces\fR" 4
+.IX Item "-Wnamespaces"
+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 \s-1STL,\s0 so one can still
+use the \s-1STL.\s0  One may also use using directives and qualified names.
+.IP "\fB\-Wno\-terminate\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-terminate ( and Objective- only)"
+Disable the warning about a throw-expression that will immediately
+result in a call to \f(CW\*(C`terminate\*(C'\fR.
+.SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
+.IX Subsection "Options Controlling Objective-C and Objective- Dialects"
+(\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
+languages themselves.
+.PP
+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 \s-1GNU\s0 compiler options.
+For example, you might compile a file \fIsome_class.m\fR like this:
+.PP
+.Vb 1
+\&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
+.Ve
+.PP
+In this example, \fB\-fgnu\-runtime\fR is an option meant only for
+Objective-C and Objective\-\*(C+ programs; you can use the other options with
+any language supported by \s-1GCC.\s0
+.PP
+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.,
+\&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
+\&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
+.PP
+Here is a list of options that are \fIonly\fR for compiling Objective-C
+and Objective\-\*(C+ programs:
+.IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
+.IX Item "-fconstant-string-class=class-name"
+Use \fIclass-name\fR as the name of the class to instantiate for each
+literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
+class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
+\&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
+\&\fB\-fconstant\-cfstrings\fR option, if also present, overrides the
+\&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
+to be laid out as constant CoreFoundation strings.
+.IP "\fB\-fgnu\-runtime\fR" 4
+.IX Item "-fgnu-runtime"
+Generate object code compatible with the standard \s-1GNU\s0 Objective-C
+runtime.  This is the default for most types of systems.
+.IP "\fB\-fnext\-runtime\fR" 4
+.IX Item "-fnext-runtime"
+Generate output compatible with the NeXT runtime.  This is the default
+for NeXT-based systems, including Darwin and Mac \s-1OS X.\s0  The macro
+\&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
+used.
+.IP "\fB\-fno\-nil\-receivers\fR" 4
+.IX Item "-fno-nil-receivers"
+Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
+message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
+not \f(CW\*(C`nil\*(C'\fR.  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 \s-1ABI\s0 version 0 or 1.
+.IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
+.IX Item "-fobjc-abi-version=n"
+Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
+This option is currently supported only for the NeXT runtime.  In that
+case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
+properties and other Objective-C 2.0 additions.  Version 1 is the
+traditional (32\-bit) \s-1ABI\s0 with support for properties and other
+Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI.\s0  If
+nothing is specified, the default is Version 0 on 32\-bit target
+machines, and Version 2 on 64\-bit target machines.
+.IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
+.IX Item "-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 \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
+non-trivial default constructors on any such instance variables, in order,
+and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
+is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
+special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
+all such default destructors, in reverse order.
+.Sp
+The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
+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 \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
+by the runtime immediately after a new object instance is allocated;
+the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
+before the runtime deallocates an object instance.
+.Sp
+As of this writing, only the NeXT runtime on Mac \s-1OS X 10.4\s0 and later has
+support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
+\&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
+.IP "\fB\-fobjc\-direct\-dispatch\fR" 4
+.IX Item "-fobjc-direct-dispatch"
+Allow fast jumps to the message dispatcher.  On Darwin this is
+accomplished via the comm page.
+.IP "\fB\-fobjc\-exceptions\fR" 4
+.IX Item "-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 \f(CW@try\fR,
+\&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
+\&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
+runtime and the NeXT runtime (but not available in conjunction with
+the NeXT runtime on Mac \s-1OS X 10.2\s0 and earlier).
+.IP "\fB\-fobjc\-gc\fR" 4
+.IX Item "-fobjc-gc"
+Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
+programs.  This option is only available with the NeXT runtime; the
+\&\s-1GNU\s0 runtime has a different garbage collection implementation that
+does not require special compiler flags.
+.IP "\fB\-fobjc\-nilcheck\fR" 4
+.IX Item "-fobjc-nilcheck"
+For the NeXT runtime with version 2 of the \s-1ABI,\s0 check for a nil
+receiver in method invocations before doing the actual method call.
+This is the default and can be disabled using
+\&\fB\-fno\-objc\-nilcheck\fR.  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 \s-1GNU\s0 runtime, or an older
+version of the NeXT runtime \s-1ABI,\s0 is used.
+.IP "\fB\-fobjc\-std=objc1\fR" 4
+.IX Item "-fobjc-std=objc1"
+Conform to the language syntax of Objective-C 1.0, the language
+recognized by \s-1GCC 4.0.\s0  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 \s-1GCC 4.0\s0 is rejected.
+This is useful if you need to make sure that your Objective-C code can
+be compiled with older versions of \s-1GCC.\s0
+.IP "\fB\-freplace\-objc\-classes\fR" 4
+.IX Item "-freplace-objc-classes"
+Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
+the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR 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 \s-1OS X 10.3\s0
+and later.
+.IP "\fB\-fzero\-link\fR" 4
+.IX Item "-fzero-link"
+When compiling for the NeXT runtime, the compiler ordinarily replaces calls
+to \f(CW\*(C`objc_getClass("...")\*(C'\fR (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 \fB\-fzero\-link\fR flag
+suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
+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 \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
+regardless of command-line options.
+.IP "\fB\-fno\-local\-ivars\fR" 4
+.IX Item "-fno-local-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 \fB\-fno\-local\-ivars\fR
+flag disables this behavior thus avoiding variable shadowing issues.
+.IP "\fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR]" 4
+.IX Item "-fivar-visibility=[public|protected|private|package]"
+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.
+.IP "\fB\-gen\-decls\fR" 4
+.IX Item "-gen-decls"
+Dump interface declarations for all classes seen in the source file to a
+file named \fI\fIsourcename\fI.decl\fR.
+.IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wassign-intercept (Objective-C and Objective- only)"
+Warn whenever an Objective-C assignment is being intercepted by the
+garbage collector.
+.IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-protocol (Objective-C and Objective- only)"
+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 \fB\-Wno\-protocol\fR option, then
+methods inherited from the superclass are considered to be implemented,
+and no warning is issued for them.
+.IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wselector (Objective-C and Objective- only)"
+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 \f(CW\*(C`@selector(...)\*(C'\fR
+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 \fB\-fsyntax\-only\fR option is
+being used.
+.IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
+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 \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  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.
+.IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
+Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
+undeclared selector is found.  A selector is considered undeclared if no
+method with that name has been declared before the
+\&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
+\&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
+an \f(CW@implementation\fR section.  This option always performs its
+checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
+while \fB\-Wselector\fR 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.
+.IP "\fB\-print\-objc\-runtime\-info\fR" 4
+.IX Item "-print-objc-runtime-info"
+Generate C header describing the largest structure that is passed by
+value, if any.
+.SS "Options to Control Diagnostic Messages Formatting"
+.IX Subsection "Options to Control Diagnostic Messages Formatting"
+Traditionally, diagnostic messages have been formatted irrespective of
+the output device's aspect (e.g. its width, ...).  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.
+.IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
+.IX Item "-fmessage-length=n"
+Try to format error messages so that they fit on lines of about
+\&\fIn\fR characters.  If \fIn\fR is zero, then no line-wrapping is
+done; each error message appears on a single line.  This is the
+default for all front ends.
+.IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
+.IX Item "-fdiagnostics-show-location=once"
+Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
+reporter to emit source location information \fIonce\fR; 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.
+.IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
+.IX 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.
+.IP "\fB\-fdiagnostics\-color[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
+.IX Item "-fdiagnostics-color[=WHEN]"
+.PD 0
+.IP "\fB\-fno\-diagnostics\-color\fR" 4
+.IX Item "-fno-diagnostics-color"
+.PD
+Use color in diagnostics.  \fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR,
+or \fBauto\fR.  The default depends on how the compiler has been configured,
+it can be any of the above \fI\s-1WHEN\s0\fR options or also \fBnever\fR
+if \fB\s-1GCC_COLORS\s0\fR environment variable isn't present in the environment,
+and \fBauto\fR otherwise.
+\&\fBauto\fR means to use color only when the standard error is a terminal.
+The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
+aliases for \fB\-fdiagnostics\-color=always\fR and
+\&\fB\-fdiagnostics\-color=never\fR, respectively.
+.Sp
+The colors are defined by the environment variable \fB\s-1GCC_COLORS\s0\fR.
+Its value is a colon-separated list of capabilities and Select Graphic
+Rendition (\s-1SGR\s0) substrings. \s-1SGR\s0 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
+\&\fB1\fR for bold,
+\&\fB4\fR for underline,
+\&\fB5\fR for blink,
+\&\fB7\fR for inverse,
+\&\fB39\fR for default foreground color,
+\&\fB30\fR to \fB37\fR for foreground colors,
+\&\fB90\fR to \fB97\fR for 16\-color mode foreground colors,
+\&\fB38;5;0\fR to \fB38;5;255\fR
+for 88\-color and 256\-color modes foreground colors,
+\&\fB49\fR for default background color,
+\&\fB40\fR to \fB47\fR for background colors,
+\&\fB100\fR to \fB107\fR for 16\-color mode background colors,
+and \fB48;5;0\fR to \fB48;5;255\fR
+for 88\-color and 256\-color modes background colors.
+.Sp
+The default \fB\s-1GCC_COLORS\s0\fR is
+.Sp
+.Vb 4
+\&        error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e
+\&        quote=01:fixit\-insert=32:fixit\-delete=31:\e
+\&        diff\-filename=01:diff\-hunk=32:diff\-delete=31:diff\-insert=32:\e
+\&        type\-diff=01;32
+.Ve
+.Sp
+where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
+\&\fB01;36\fR is bold cyan, \fB32\fR is green, \fB34\fR is blue,
+\&\fB01\fR is bold, and \fB31\fR is red.
+Setting \fB\s-1GCC_COLORS\s0\fR to the empty string disables colors.
+Supported capabilities are as follows.
+.RS 4
+.ie n .IP """error=""" 4
+.el .IP "\f(CWerror=\fR" 4
+.IX Item "error="
+\&\s-1SGR\s0 substring for error: markers.
+.ie n .IP """warning=""" 4
+.el .IP "\f(CWwarning=\fR" 4
+.IX Item "warning="
+\&\s-1SGR\s0 substring for warning: markers.
+.ie n .IP """note=""" 4
+.el .IP "\f(CWnote=\fR" 4
+.IX Item "note="
+\&\s-1SGR\s0 substring for note: markers.
+.ie n .IP """range1=""" 4
+.el .IP "\f(CWrange1=\fR" 4
+.IX Item "range1="
+\&\s-1SGR\s0 substring for first additional range.
+.ie n .IP """range2=""" 4
+.el .IP "\f(CWrange2=\fR" 4
+.IX Item "range2="
+\&\s-1SGR\s0 substring for second additional range.
+.ie n .IP """locus=""" 4
+.el .IP "\f(CWlocus=\fR" 4
+.IX Item "locus="
+\&\s-1SGR\s0 substring for location information, \fBfile:line\fR or
+\&\fBfile:line:column\fR etc.
+.ie n .IP """quote=""" 4
+.el .IP "\f(CWquote=\fR" 4
+.IX Item "quote="
+\&\s-1SGR\s0 substring for information printed within quotes.
+.ie n .IP """fixit\-insert=""" 4
+.el .IP "\f(CWfixit\-insert=\fR" 4
+.IX Item "fixit-insert="
+\&\s-1SGR\s0 substring for fix-it hints suggesting text to
+be inserted or replaced.
+.ie n .IP """fixit\-delete=""" 4
+.el .IP "\f(CWfixit\-delete=\fR" 4
+.IX Item "fixit-delete="
+\&\s-1SGR\s0 substring for fix-it hints suggesting text to
+be deleted.
+.ie n .IP """diff\-filename=""" 4
+.el .IP "\f(CWdiff\-filename=\fR" 4
+.IX Item "diff-filename="
+\&\s-1SGR\s0 substring for filename headers within generated patches.
+.ie n .IP """diff\-hunk=""" 4
+.el .IP "\f(CWdiff\-hunk=\fR" 4
+.IX Item "diff-hunk="
+\&\s-1SGR\s0 substring for the starts of hunks within generated patches.
+.ie n .IP """diff\-delete=""" 4
+.el .IP "\f(CWdiff\-delete=\fR" 4
+.IX Item "diff-delete="
+\&\s-1SGR\s0 substring for deleted lines within generated patches.
+.ie n .IP """diff\-insert=""" 4
+.el .IP "\f(CWdiff\-insert=\fR" 4
+.IX Item "diff-insert="
+\&\s-1SGR\s0 substring for inserted lines within generated patches.
+.ie n .IP """type\-diff=""" 4
+.el .IP "\f(CWtype\-diff=\fR" 4
+.IX Item "type-diff="
+\&\s-1SGR\s0 substring for highlighting mismatching types within template
+arguments in the \*(C+ frontend.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
+.IX Item "-fno-diagnostics-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
+\&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
+.IP "\fB\-fno\-diagnostics\-show\-caret\fR" 4
+.IX Item "-fno-diagnostics-show-caret"
+By default, each diagnostic emitted includes the original source line
+and a caret \fB^\fR indicating the column.  This option suppresses this
+information.  The source line is truncated to \fIn\fR characters, if
+the \fB\-fmessage\-length=n\fR option is given.  When the output is done
+to the terminal, the width is limited to the width given by the
+\&\fB\s-1COLUMNS\s0\fR environment variable or, if not set, to the terminal width.
+.IP "\fB\-fdiagnostics\-parseable\-fixits\fR" 4
+.IX Item "-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 \*(L"fix-it:\*(R".  For example:
+.Sp
+.Vb 1
+\&        fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all"
+.Ve
+.Sp
+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 \*(L"test.c\*(R" are to be replaced with the
+given string:
+.Sp
+.Vb 5
+\&        00000000011111111112222222222
+\&        12345678901234567890123456789
+\&          gtk_widget_showall (dlg);
+\&          ^^^^^^^^^^^^^^^^^^
+\&          gtk_widget_show_all
+.Ve
+.Sp
+The filename and replacement string escape backslash as \*(L"\e\e\*(R", tab as \*(L"\et\*(R",
+newline as \*(L"\en\*(R", double quotes as \*(L"\e\*(R"\*(L", non-printable characters as octal
+(e.g. vertical tab as \*(R"\e013").
+.Sp
+An empty replacement string indicates that the given range is to be removed.
+An empty range (e.g. \*(L"45:3\-45:3\*(R") indicates that the string is to
+be inserted at the given position.
+.IP "\fB\-fdiagnostics\-generate\-patch\fR" 4
+.IX Item "-fdiagnostics-generate-patch"
+Print fix-it hints to stderr in unified diff format, after any diagnostics
+are printed.  For example:
+.Sp
+.Vb 3
+\&        \-\-\- test.c
+\&        +++ test.c
+\&        @ \-42,5 +42,5 @
+\&        
+\&         void show_cb(GtkDialog *dlg)
+\&         {
+\&        \-  gtk_widget_showall(dlg);
+\&        +  gtk_widget_show_all(dlg);
+\&         }
+.Ve
+.Sp
+The diff may or may not be colorized, following the same rules
+as for diagnostics (see \fB\-fdiagnostics\-color\fR).
+.IP "\fB\-fdiagnostics\-show\-template\-tree\fR" 4
+.IX Item "-fdiagnostics-show-template-tree"
+In the \*(C+ frontend, when printing diagnostics showing mismatching
+template types, such as:
+.Sp
+.Vb 2
+\&          could not convert \*(Aqstd::map<int, std::vector<double> >()\*(Aq
+\&            from \*(Aqmap<[...],vector<double>>\*(Aq to \*(Aqmap<[...],vector<float>>
+.Ve
+.Sp
+the \fB\-fdiagnostics\-show\-template\-tree\fR flag enables printing a
+tree-like structure showing the common and differing parts of the types,
+such as:
+.Sp
+.Vb 4
+\&          map<
+\&            [...],
+\&            vector<
+\&              [double != float]>>
+.Ve
+.Sp
+The parts that differ are highlighted with color (\*(L"double\*(R" and
+\&\*(L"float\*(R" in this case).
+.IP "\fB\-fno\-elide\-type\fR" 4
+.IX Item "-fno-elide-type"
+By default when the \*(C+ frontend prints diagnostics showing mismatching
+template types, common parts of the types are printed as \*(L"[...]\*(R" to
+simplify the error message.  For example:
+.Sp
+.Vb 2
+\&          could not convert \*(Aqstd::map<int, std::vector<double> >()\*(Aq
+\&            from \*(Aqmap<[...],vector<double>>\*(Aq to \*(Aqmap<[...],vector<float>>
+.Ve
+.Sp
+Specifying the \fB\-fno\-elide\-type\fR flag suppresses that behavior.
+This flag also affects the output of the
+\&\fB\-fdiagnostics\-show\-template\-tree\fR flag.
+.IP "\fB\-fno\-show\-column\fR" 4
+.IX Item "-fno-show-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 \fBdejagnu\fR.
+.SS "Options to Request or Suppress Warnings"
+.IX Subsection "Options to Request or Suppress 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.
+.PP
+The following language-independent options do not enable specific
+warnings but control the kinds of diagnostics produced by \s-1GCC.\s0
+.IP "\fB\-fsyntax\-only\fR" 4
+.IX Item "-fsyntax-only"
+Check the code for syntax errors, but don't do anything beyond that.
+.IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
+.IX Item "-fmax-errors=n"
+Limits the maximum number of error messages to \fIn\fR, at which point
+\&\s-1GCC\s0 bails out rather than attempting to continue processing the source
+code.  If \fIn\fR is 0 (the default), there is no limit on the number
+of error messages produced.  If \fB\-Wfatal\-errors\fR is also
+specified, then \fB\-Wfatal\-errors\fR takes precedence over this
+option.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+Inhibit all warning messages.
+.IP "\fB\-Werror\fR" 4
+.IX Item "-Werror"
+Make all warnings into errors.
+.IP "\fB\-Werror=\fR" 4
+.IX Item "-Werror="
+Make the specified warning into an error.  The specifier for a warning
+is appended; for example \fB\-Werror=switch\fR turns the warnings
+controlled by \fB\-Wswitch\fR into errors.  This switch takes a
+negative form, to be used to negate \fB\-Werror\fR for specific
+warnings; for example \fB\-Wno\-error=switch\fR makes
+\&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
+is in effect.
+.Sp
+The warning message for each controllable warning includes the
+option that controls the warning.  That option can then be used with
+\&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
+(Printing of the option in the warning message can be disabled using the
+\&\fB\-fno\-diagnostics\-show\-option\fR flag.)
+.Sp
+Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
+\&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
+imply anything.
+.IP "\fB\-Wfatal\-errors\fR" 4
+.IX Item "-Wfatal-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.
+.PP
+You can request many specific warnings with options beginning with
+\&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
+implicit declarations.  Each of these specific warning options also
+has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
+example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
+two forms, whichever is not the default.  For further
+language-specific options also refer to \fB\*(C+ Dialect Options\fR and
+\&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
+.PP
+Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
+options, such as \fB\-Wunused\fR, which may turn on further options,
+such as \fB\-Wunused\-value\fR. 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 take effect
+as if they appeared at the end of the command-line.
+.PP
+When an unrecognized warning option is requested (e.g.,
+\&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 emits a diagnostic stating
+that the option is not recognized.  However, if the \fB\-Wno\-\fR form
+is used, the behavior is slightly different: no diagnostic is
+produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
+are being produced.  This allows the use of new \fB\-Wno\-\fR options
+with old compilers, but if something goes wrong, the compiler
+warns that an unrecognized option is present.
+.IP "\fB\-Wpedantic\fR" 4
+.IX Item "-Wpedantic"
+.PD 0
+.IP "\fB\-pedantic\fR" 4
+.IX Item "-pedantic"
+.PD
+Issue all the warnings demanded by strict \s-1ISO C\s0 and \s-1ISO \*(C+\s0;
+reject all programs that use forbidden extensions, and some other
+programs that do not follow \s-1ISO C\s0 and \s-1ISO \*(C+.\s0  For \s-1ISO C,\s0 follows the
+version of the \s-1ISO C\s0 standard specified by any \fB\-std\fR option used.
+.Sp
+Valid \s-1ISO C\s0 and \s-1ISO \*(C+\s0 programs should compile properly with or without
+this option (though a rare few require \fB\-ansi\fR or a
+\&\fB\-std\fR option specifying the required version of \s-1ISO C\s0).  However,
+without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
+features are supported as well.  With this option, they are rejected.
+.Sp
+\&\fB\-Wpedantic\fR does not cause warning messages for use of the
+alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
+warnings are also disabled in the expression that follows
+\&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
+these escape routes; application programs should avoid them.
+.Sp
+Some users try to use \fB\-Wpedantic\fR to check programs for strict \s-1ISO
+C\s0 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
+\&\s-1ISO C\s0 \fIrequires\fR a diagnostic, and some others for which
+diagnostics have been added.
+.Sp
+A feature to report any failure to conform to \s-1ISO C\s0 might be useful in
+some instances, but would require considerable additional work and would
+be quite different from \fB\-Wpedantic\fR.  We don't have plans to
+support such a feature in the near future.
+.Sp
+Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
+extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
+corresponding \fIbase standard\fR, the version of \s-1ISO C\s0 on which the \s-1GNU\s0
+extended dialect is based.  Warnings from \fB\-Wpedantic\fR 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 \s-1GNU
+C\s0 dialect, since by definition the \s-1GNU\s0 dialects of C include all
+features the compiler supports with the given option, and there would be
+nothing to warn about.)
+.IP "\fB\-pedantic\-errors\fR" 4
+.IX Item "-pedantic-errors"
+Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
+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 \fB\-Werror=pedantic\fR, since there are errors enabled
+by this option and not enabled by the latter and vice versa.
+.IP "\fB\-Wall\fR" 4
+.IX Item "-Wall"
+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 \fB\*(C+ Dialect
+Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
+.Sp
+\&\fB\-Wall\fR turns on the following warning flags:
+.Sp
+\&\fB\-Waddress   
+\&\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)  
+\&\fB\-Wbool\-compare  
+\&\-Wbool\-operation  
+\&\-Wc++11\-compat  \-Wc++14\-compat  
+\&\-Wcatch\-value\fR (\*(C+ and Objective\-\*(C+ only)  
+\&\fB\-Wchar\-subscripts  
+\&\-Wcomment  
+\&\-Wduplicate\-decl\-specifier\fR (C and Objective-C only) 
+\&\fB\-Wenum\-compare\fR (in C/ObjC; this is on by default in \*(C+) 
+\&\fB\-Wformat   
+\&\-Wint\-in\-bool\-context  
+\&\-Wimplicit\fR (C and Objective-C only) 
+\&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
+\&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
+\&\fB\-Winit\-self\fR (only for \*(C+) 
+\&\fB\-Wlogical\-not\-parentheses 
+\&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
+\&\fB\-Wmaybe\-uninitialized 
+\&\-Wmemset\-elt\-size 
+\&\-Wmemset\-transposed\-args 
+\&\-Wmisleading\-indentation\fR (only for C/\*(C+) 
+\&\fB\-Wmissing\-attributes 
+\&\-Wmissing\-braces\fR (only for C/ObjC) 
+\&\fB\-Wmultistatement\-macros  
+\&\-Wnarrowing\fR (only for \*(C+)  
+\&\fB\-Wnonnull  
+\&\-Wnonnull\-compare  
+\&\-Wopenmp\-simd 
+\&\-Wparentheses  
+\&\-Wpointer\-sign  
+\&\-Wreorder   
+\&\-Wrestrict   
+\&\-Wreturn\-type  
+\&\-Wsequence\-point  
+\&\-Wsign\-compare\fR (only in \*(C+)  
+\&\fB\-Wsizeof\-pointer\-div 
+\&\-Wsizeof\-pointer\-memaccess 
+\&\-Wstrict\-aliasing  
+\&\-Wstrict\-overflow=1  
+\&\-Wswitch  
+\&\-Wtautological\-compare  
+\&\-Wtrigraphs  
+\&\-Wuninitialized  
+\&\-Wunknown\-pragmas  
+\&\-Wunused\-function  
+\&\-Wunused\-label     
+\&\-Wunused\-value     
+\&\-Wunused\-variable  
+\&\-Wvolatile\-register\-var\fR
+.Sp
+Note that some warning flags are not implied by \fB\-Wall\fR.  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 \fB\-Wextra\fR but many of
+them must be enabled individually.
+.IP "\fB\-Wextra\fR" 4
+.IX Item "-Wextra"
+This enables some extra warning flags that are not enabled by
+\&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
+name is still supported, but the newer name is more descriptive.)
+.Sp
+\&\fB\-Wclobbered  
+\&\-Wcast\-function\-type  
+\&\-Wempty\-body  
+\&\-Wignored\-qualifiers 
+\&\-Wimplicit\-fallthrough=3 
+\&\-Wmissing\-field\-initializers  
+\&\-Wmissing\-parameter\-type\fR (C only)  
+\&\fB\-Wold\-style\-declaration\fR (C only)  
+\&\fB\-Woverride\-init  
+\&\-Wsign\-compare\fR (C only) 
+\&\fB\-Wtype\-limits  
+\&\-Wuninitialized  
+\&\-Wshift\-negative\-value\fR (in \*(C+03 and in C99 and newer)  
+\&\fB\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
+\&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
+.Sp
+The option \fB\-Wextra\fR also prints warning messages for the
+following cases:
+.RS 4
+.IP "*" 4
+A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
+\&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
+.IP "*" 4
+(\*(C+ only) An enumerator and a non-enumerator both appear in a
+conditional expression.
+.IP "*" 4
+(\*(C+ only) Ambiguous virtual bases.
+.IP "*" 4
+(\*(C+ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
+.IP "*" 4
+(\*(C+ only) Taking the address of a variable that has been declared
+\&\f(CW\*(C`register\*(C'\fR.
+.IP "*" 4
+(\*(C+ only) A base class is not initialized in the copy constructor
+of a derived class.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wchar\-subscripts\fR" 4
+.IX Item "-Wchar-subscripts"
+Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
+of error, as programmers often forget that this type is signed on some
+machines.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wchkp\fR" 4
+.IX Item "-Wchkp"
+Warn about an invalid memory access that is found by Pointer Bounds Checker
+(\fB\-fcheck\-pointer\-bounds\fR).
+.IP "\fB\-Wno\-coverage\-mismatch\fR" 4
+.IX Item "-Wno-coverage-mismatch"
+Warn if feedback profiles do not match when using the
+\&\fB\-fprofile\-use\fR option.
+If a source file is changed between compiling with \fB\-fprofile\-gen\fR and
+with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
+to match the source file and \s-1GCC\s0 cannot use the profile feedback
+information.  By default, this warning is enabled and is treated as an
+error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
+warning or \fB\-Wno\-error=coverage\-mismatch\fR 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.
+.IP "\fB\-Wno\-cpp\fR" 4
+.IX Item "-Wno-cpp"
+(C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
+.Sp
+Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
+.IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
+Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
+promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
+floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
+\&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
+using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
+overhead required for software emulation.
+.Sp
+It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
+floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
+example, in:
+.Sp
+.Vb 4
+\&        float area(float radius)
+\&        {
+\&           return 3.14159 * radius * radius;
+\&        }
+.Ve
+.Sp
+the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
+because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
+.IP "\fB\-Wduplicate\-decl\-specifier\fR (C and Objective-C only)" 4
+.IX Item "-Wduplicate-decl-specifier (C and Objective-C only)"
+Warn if a declaration has duplicate \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`volatile\*(C'\fR,
+\&\f(CW\*(C`restrict\*(C'\fR or \f(CW\*(C`_Atomic\*(C'\fR specifier.  This warning is enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Wformat\fR" 4
+.IX Item "-Wformat"
+.PD 0
+.IP "\fB\-Wformat=\fR\fIn\fR" 4
+.IX Item "-Wformat=n"
+.PD
+Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, 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, in the \f(CW\*(C`printf\*(C'\fR,
+\&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (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
+\&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
+.Sp
+The formats are checked against the format features supported by \s-1GNU\s0
+libc version 2.2.  These include all \s-1ISO C90\s0 and C99 features, as well
+as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
+extensions.  Other library implementations may not support all these
+features; \s-1GCC\s0 does not support warning about features that go beyond a
+particular library's limitations.  However, if \fB\-Wpedantic\fR is used
+with \fB\-Wformat\fR, warnings are given about format features not
+in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
+since those are not in any version of the C standard).
+.RS 4
+.IP "\fB\-Wformat=1\fR" 4
+.IX Item "-Wformat=1"
+.PD 0
+.IP "\fB\-Wformat\fR" 4
+.IX Item "-Wformat"
+.PD
+Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
+\&\fB\-Wno\-format\fR is equivalent to \fB\-Wformat=0\fR.  Since
+\&\fB\-Wformat\fR also checks for null format arguments for several
+functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.  Some
+aspects of this level of format checking can be disabled by the
+options: \fB\-Wno\-format\-contains\-nul\fR,
+\&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
+\&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-format\-contains\-nul\fR" 4
+.IX Item "-Wno-format-contains-nul"
+If \fB\-Wformat\fR is specified, do not warn about format strings that
+contain \s-1NUL\s0 bytes.
+.IP "\fB\-Wno\-format\-extra\-args\fR" 4
+.IX Item "-Wno-format-extra-args"
+If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
+\&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
+that such arguments are ignored.
+.Sp
+Where the unused arguments lie between used arguments that are
+specified with \fB$\fR operand number specifications, normally
+warnings are still given, since the implementation could not know what
+type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
+in the case of \f(CW\*(C`scanf\*(C'\fR 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.
+.IP "\fB\-Wformat\-overflow\fR" 4
+.IX Item "-Wformat-overflow"
+.PD 0
+.IP "\fB\-Wformat\-overflow=\fR\fIlevel\fR" 4
+.IX Item "-Wformat-overflow=level"
+.PD
+Warn about calls to formatted input/output functions such as \f(CW\*(C`sprintf\*(C'\fR
+and \f(CW\*(C`vsprintf\*(C'\fR 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
+\&\fIlevel\fR argument and on optimization.  While enabling optimization
+will in most cases improve the accuracy of the warning, it may also
+result in false positives.
+.RS 4
+.IP "\fB\-Wformat\-overflow\fR" 4
+.IX Item "-Wformat-overflow"
+.PD 0
+.IP "\fB\-Wformat\-overflow=1\fR" 4
+.IX Item "-Wformat-overflow=1"
+.PD
+Level \fI1\fR of \fB\-Wformat\-overflow\fR enabled by \fB\-Wformat\fR
+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 \f(CW\*(C`sprintf\*(C'\fR
+below is diagnosed because even with both \fIa\fR and \fIb\fR equal to zero,
+the terminating \s-1NUL\s0 character (\f(CW\*(Aq\e0\*(Aq\fR) 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.
+.Sp
+.Vb 5
+\&        void f (int a, int b)
+\&        {
+\&          char buf [13];
+\&          sprintf (buf, "a = %i, b = %i\en", a, b);
+\&        }
+.Ve
+.IP "\fB\-Wformat\-overflow=2\fR" 4
+.IX Item "-Wformat-overflow=2"
+Level \fI2\fR warns also about calls that might overflow the destination
+buffer given an argument of sufficient length or magnitude.  At level
+\&\fI2\fR, 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.
+.Sp
+At level \fI2\fR, the call in the example above is again diagnosed, but
+this time because with \fIa\fR equal to a 32\-bit \f(CW\*(C`INT_MIN\*(C'\fR the first
+\&\f(CW%i\fR 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.  \s-1GCC\s0 includes the minimum size of the buffer in
+an informational note following the warning.
+.Sp
+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 \fIa\fR and \fIb\fR in the
+example above can be assumed to be within the precision of
+the \f(CW\*(C`short int\*(C'\fR type then using either the \f(CW%hi\fR format
+directive or casting the argument to \f(CW\*(C`short\*(C'\fR reduces the maximum
+required size of the buffer to 24 bytes.
+.Sp
+.Vb 5
+\&        void f (int a, int b)
+\&        {
+\&          char buf [23];
+\&          sprintf (buf, "a = %hi, b = %i\en", a, (short)b);
+\&        }
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wno\-format\-zero\-length\fR" 4
+.IX Item "-Wno-format-zero-length"
+If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
+The C standard specifies that zero-length formats are allowed.
+.IP "\fB\-Wformat=2\fR" 4
+.IX Item "-Wformat=2"
+Enable \fB\-Wformat\fR plus additional format checks.  Currently
+equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
+\&\-Wformat\-y2k\fR.
+.IP "\fB\-Wformat\-nonliteral\fR" 4
+.IX Item "-Wformat-nonliteral"
+If \fB\-Wformat\fR 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 \f(CW\*(C`va_list\*(C'\fR.
+.IP "\fB\-Wformat\-security\fR" 4
+.IX Item "-Wformat-security"
+If \fB\-Wformat\fR is specified, also warn about uses of format
+functions that represent possible security problems.  At present, this
+warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
+format string is not a string literal and there are no format arguments,
+as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
+string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
+currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
+in future warnings may be added to \fB\-Wformat\-security\fR that are not
+included in \fB\-Wformat\-nonliteral\fR.)
+.IP "\fB\-Wformat\-signedness\fR" 4
+.IX Item "-Wformat-signedness"
+If \fB\-Wformat\fR is specified, also warn if the format string
+requires an unsigned argument and the argument is signed and vice versa.
+.IP "\fB\-Wformat\-truncation\fR" 4
+.IX Item "-Wformat-truncation"
+.PD 0
+.IP "\fB\-Wformat\-truncation=\fR\fIlevel\fR" 4
+.IX Item "-Wformat-truncation=level"
+.PD
+Warn about calls to formatted input/output functions such as \f(CW\*(C`snprintf\*(C'\fR
+and \f(CW\*(C`vsnprintf\*(C'\fR 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 \fIlevel\fR 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 \fB\-Wformat\-overflow\fR.
+.RS 4
+.IP "\fB\-Wformat\-truncation\fR" 4
+.IX Item "-Wformat-truncation"
+.PD 0
+.IP "\fB\-Wformat\-truncation=1\fR" 4
+.IX Item "-Wformat-truncation=1"
+.PD
+Level \fI1\fR of \fB\-Wformat\-truncation\fR enabled by \fB\-Wformat\fR
+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.
+.IP "\fB\-Wformat\-truncation=2\fR" 4
+.IX Item "-Wformat-truncation=2"
+Level \fI2\fR 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.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wformat\-y2k\fR" 4
+.IX Item "-Wformat-y2k"
+If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
+formats that may yield only a two-digit year.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wnonnull\fR" 4
+.IX Item "-Wnonnull"
+Warn about passing a null pointer for arguments marked as
+requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
+.Sp
+\&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
+can be disabled with the \fB\-Wno\-nonnull\fR option.
+.IP "\fB\-Wnonnull\-compare\fR" 4
+.IX Item "-Wnonnull-compare"
+Warn when comparing an argument marked with the \f(CW\*(C`nonnull\*(C'\fR
+function attribute against null inside the function.
+.Sp
+\&\fB\-Wnonnull\-compare\fR is included in \fB\-Wall\fR.  It
+can be disabled with the \fB\-Wno\-nonnull\-compare\fR option.
+.IP "\fB\-Wnull\-dereference\fR" 4
+.IX Item "-Wnull-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 \fB\-fdelete\-null\-pointer\-checks\fR is active,
+which is enabled by optimizations in most targets.  The precision of
+the warnings depends on the optimization options used.
+.IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Winit-self (C, , Objective-C and Objective- only)"
+Warn about uninitialized variables that are initialized with themselves.
+Note this option can only be used with the \fB\-Wuninitialized\fR option.
+.Sp
+For example, \s-1GCC\s0 warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
+following snippet only when \fB\-Winit\-self\fR has been specified:
+.Sp
+.Vb 5
+\&        int f()
+\&        {
+\&          int i = i;
+\&          return i;
+\&        }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR in \*(C+.
+.IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
+.IX Item "-Wimplicit-int (C and Objective-C only)"
+Warn when a declaration does not specify a type.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
+.IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
+Give a warning whenever a function is used before being declared. In
+C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
+enabled by default and it is made into an error by
+\&\fB\-pedantic\-errors\fR. This warning is also enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
+.IX Item "-Wimplicit (C and Objective-C only)"
+Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wimplicit\-fallthrough\fR" 4
+.IX Item "-Wimplicit-fallthrough"
+\&\fB\-Wimplicit\-fallthrough\fR is the same as \fB\-Wimplicit\-fallthrough=3\fR
+and \fB\-Wno\-implicit\-fallthrough\fR is the same as
+\&\fB\-Wimplicit\-fallthrough=0\fR.
+.IP "\fB\-Wimplicit\-fallthrough=\fR\fIn\fR" 4
+.IX Item "-Wimplicit-fallthrough=n"
+Warn when a switch case falls through.  For example:
+.Sp
+.Vb 11
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            a = 1;
+\&            break;
+\&          case 2:
+\&            a = 2;
+\&          case 3:
+\&            a = 3;
+\&            break;
+\&          }
+.Ve
+.Sp
+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.  \fB\-Wimplicit\-fallthrough=\fR
+also takes into account control flow statements, such as ifs, and only
+warns when appropriate.  E.g.
+.Sp
+.Vb 10
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            if (i > 3) {
+\&              bar (5);
+\&              break;
+\&            } else if (i < 1) {
+\&              bar (0);
+\&            } else
+\&              return;
+\&          default:
+\&            ...
+\&          }
+.Ve
+.Sp
+Since there are occasions where a switch case fall through is desirable,
+\&\s-1GCC\s0 provides an attribute, \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR, that is
+to be used along with a null statement to suppress this warning that
+would normally occur:
+.Sp
+.Vb 8
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            bar (0);
+\&            _\|_attribute_\|_ ((fallthrough));
+\&          default:
+\&            ...
+\&          }
+.Ve
+.Sp
+\&\*(C+17 provides a standard way to suppress the \fB\-Wimplicit\-fallthrough\fR
+warning using \f(CW\*(C`[[fallthrough]];\*(C'\fR instead of the \s-1GNU\s0 attribute.  In \*(C+11
+or \*(C+14 users can use \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR, which is a \s-1GNU\s0 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 \fIn\fR
+specifies what kind of comments are accepted:
+.RS 4
+.IP "*<\fB\-Wimplicit\-fallthrough=0\fR disables the warning altogether.>" 4
+.IX Item "*<-Wimplicit-fallthrough=0 disables the warning altogether.>"
+.PD 0
+.ie n .IP "*<\fB\-Wimplicit\-fallthrough=1\fR matches "".*"" regular>" 4
+.el .IP "*<\fB\-Wimplicit\-fallthrough=1\fR matches \f(CW.*\fR regular>" 4
+.IX Item "*<-Wimplicit-fallthrough=1 matches .* regular>"
+.PD
+expression, any comment is used as fallthrough comment.
+.IP "*<\fB\-Wimplicit\-fallthrough=2\fR case insensitively matches>" 4
+.IX Item "*<-Wimplicit-fallthrough=2 case insensitively matches>"
+\&\f(CW\*(C`.*falls?[ \et\-]*thr(ough|u).*\*(C'\fR regular expression.
+.IP "*<\fB\-Wimplicit\-fallthrough=3\fR case sensitively matches one of the>" 4
+.IX Item "*<-Wimplicit-fallthrough=3 case sensitively matches one of the>"
+following regular expressions:
+.RS 4
+.ie n .IP "*<""\-fallthrough"">" 4
+.el .IP "*<\f(CW\-fallthrough\fR>" 4
+.IX Item "*<-fallthrough>"
+.PD 0
+.ie n .IP "*<""@fallthrough@"">" 4
+.el .IP "*<\f(CW@fallthrough@\fR>" 4
+.IX Item "*<@fallthrough@>"
+.ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
+.el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
+.IX Item "*<lint -fallthrough[ t]*>"
+.ie n .IP "*<""[ \et.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |\-)?THR(OUGH|U)[ \et.!]*(\-[^\en\er]*)?"">" 4
+.el .IP "*<\f(CW[ \et.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |\-)?THR(OUGH|U)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
+.IX Item "*<[ t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ t.!]*(-[^nr]*)?>"
+.ie n .IP "*<""[ \et.!]*(Else,? |Intentional(ly)? )?Fall((s | |\-)[Tt]|t)hr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
+.el .IP "*<\f(CW[ \et.!]*(Else,? |Intentional(ly)? )?Fall((s | |\-)[Tt]|t)hr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
+.IX Item "*<[ t.!]*(Else,? |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ t.!]*(-[^nr]*)?>"
+.ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
+.el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
+.IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>"
+.RE
+.RS 4
+.RE
+.IP "*<\fB\-Wimplicit\-fallthrough=4\fR case sensitively matches one of the>" 4
+.IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>"
+.PD
+following regular expressions:
+.RS 4
+.ie n .IP "*<""\-fallthrough"">" 4
+.el .IP "*<\f(CW\-fallthrough\fR>" 4
+.IX Item "*<-fallthrough>"
+.PD 0
+.ie n .IP "*<""@fallthrough@"">" 4
+.el .IP "*<\f(CW@fallthrough@\fR>" 4
+.IX Item "*<@fallthrough@>"
+.ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
+.el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
+.IX Item "*<lint -fallthrough[ t]*>"
+.ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4
+.el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4
+.IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>"
+.RE
+.RS 4
+.RE
+.IP "*<\fB\-Wimplicit\-fallthrough=5\fR doesn't recognize any comments as>" 4
+.IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>"
+.PD
+fallthrough comments, only attributes disable the warning.
+.RE
+.RS 4
+.Sp
+The comment needs to be followed after optional whitespace and other comments
+by \f(CW\*(C`case\*(C'\fR or \f(CW\*(C`default\*(C'\fR keywords or by a user label that precedes some
+\&\f(CW\*(C`case\*(C'\fR or \f(CW\*(C`default\*(C'\fR label.
+.Sp
+.Vb 8
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            bar (0);
+\&            /* FALLTHRU */
+\&          default:
+\&            ...
+\&          }
+.Ve
+.Sp
+The \fB\-Wimplicit\-fallthrough=3\fR warning is enabled by \fB\-Wextra\fR.
+.RE
+.IP "\fB\-Wif\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wif-not-aligned (C, , Objective-C and Objective- only)"
+Control if warning triggered by the \f(CW\*(C`warn_if_not_aligned\*(C'\fR attribute
+should be issued.  This is is enabled by default.
+Use \fB\-Wno\-if\-not\-aligned\fR to disable it.
+.IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
+.IX Item "-Wignored-qualifiers (C and only)"
+Warn if the return type of a function has a type qualifier
+such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO C\s0 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 \f(CW\*(C`void\*(C'\fR.
+\&\s-1ISO C\s0 prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
+definitions, so such return types always receive a warning
+even without this option.
+.Sp
+This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wignored\-attributes\fR (C and \*(C+ only)" 4
+.IX Item "-Wignored-attributes (C and only)"
+Warn when an attribute is ignored.  This is different from the
+\&\fB\-Wattributes\fR 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.
+.IP "\fB\-Wmain\fR" 4
+.IX Item "-Wmain"
+Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR 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 \fB\-Wall\fR
+or \fB\-Wpedantic\fR.
+.IP "\fB\-Wmisleading\-indentation\fR (C and \*(C+ only)" 4
+.IX Item "-Wmisleading-indentation (C and only)"
+Warn when the indentation of the code does not reflect the block structure.
+Specifically, a warning is issued for \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`while\*(C'\fR, and
+\&\f(CW\*(C`for\*(C'\fR clauses with a guarded statement that does not use braces,
+followed by an unguarded statement with the same indentation.
+.Sp
+In the following example, the call to \*(L"bar\*(R" is misleadingly indented as
+if it were guarded by the \*(L"if\*(R" conditional.
+.Sp
+.Vb 3
+\&          if (some_condition ())
+\&            foo ();
+\&            bar ();  /* Gotcha: this is not guarded by the "if".  */
+.Ve
+.Sp
+In the case of mixed tabs and spaces, the warning uses the
+\&\fB\-ftabstop=\fR option to determine if the statements line up
+(defaulting to 8).
+.Sp
+The warning is not issued for code involving multiline preprocessor logic
+such as the following example.
+.Sp
+.Vb 6
+\&          if (flagA)
+\&            foo (0);
+\&        #if SOME_CONDITION_THAT_DOES_NOT_HOLD
+\&          if (flagB)
+\&        #endif
+\&            foo (1);
+.Ve
+.Sp
+The warning is not issued after a \f(CW\*(C`#line\*(C'\fR directive, since this
+typically indicates autogenerated code, and no assumptions can be made
+about the layout of the file that the directive references.
+.Sp
+This warning is enabled by \fB\-Wall\fR in C and \*(C+.
+.IP "\fB\-Wmissing\-attributes\fR" 4
+.IX Item "-Wmissing-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, in
+\&\*(C+, the warning is issued when an explicit specialization of a primary
+template declared with attribute \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
+\&\f(CW\*(C`assume_aligned\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`format_arg\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
+or \f(CW\*(C`nonnull\*(C'\fR is declared without it.  Attributes \f(CW\*(C`deprecated\*(C'\fR,
+\&\f(CW\*(C`error\*(C'\fR, and \f(CW\*(C`warning\*(C'\fR suppress the warning..
+.Sp
+\&\fB\-Wmissing\-attributes\fR is enabled by \fB\-Wall\fR.
+.Sp
+For example, since the declaration of the primary function template
+below makes use of both attribute \f(CW\*(C`malloc\*(C'\fR and \f(CW\*(C`alloc_size\*(C'\fR
+the declaration of the explicit specialization of the template is
+diagnosed because it is missing one of the attributes.
+.Sp
+.Vb 3
+\&        template <class T>
+\&        T* _\|_attribute_\|_ ((malloc, alloc_size (1)))
+\&        allocate (size_t);
+\&        
+\&        template <>
+\&        void* _\|_attribute_\|_ ((malloc))   // missing alloc_size
+\&        allocate<void> (size_t);
+.Ve
+.IP "\fB\-Wmissing\-braces\fR" 4
+.IX Item "-Wmissing-braces"
+Warn if an aggregate or union initializer is not fully bracketed.  In
+the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
+bracketed, but that for \f(CW\*(C`b\*(C'\fR is fully bracketed.  This warning is
+enabled by \fB\-Wall\fR in C.
+.Sp
+.Vb 2
+\&        int a[2][2] = { 0, 1, 2, 3 };
+\&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
+Warn if a user-supplied include directory does not exist.
+.IP "\fB\-Wmultistatement\-macros\fR" 4
+.IX Item "-Wmultistatement-macros"
+Warn about unsafe multiple statement macros that appear to be guarded
+by a clause such as \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`for\*(C'\fR, \f(CW\*(C`switch\*(C'\fR, or
+\&\f(CW\*(C`while\*(C'\fR, in which only the first statement is actually guarded after
+the macro is expanded.
+.Sp
+For example:
+.Sp
+.Vb 3
+\&        #define DOIT x++; y++
+\&        if (c)
+\&          DOIT;
+.Ve
+.Sp
+will increment \f(CW\*(C`y\*(C'\fR unconditionally, not just when \f(CW\*(C`c\*(C'\fR holds.
+The can usually be fixed by wrapping the macro in a do-while loop:
+.Sp
+.Vb 3
+\&        #define DOIT do { x++; y++; } while (0)
+\&        if (c)
+\&          DOIT;
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR in C and \*(C+.
+.IP "\fB\-Wparentheses\fR" 4
+.IX Item "-Wparentheses"
+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.
+.Sp
+Also warn if a comparison like \f(CW\*(C`x<=y<=z\*(C'\fR appears; this is
+equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
+interpretation from that of ordinary mathematical notation.
+.Sp
+Also warn for dangerous uses of the \s-1GNU\s0 extension to
+\&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
+in the \f(CW\*(C`?\*(C'\fR: 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.
+.Sp
+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:
+.Sp
+.Vb 5
+\&        {
+\&          // Declares a local variable called mymutex.
+\&          std::unique_lock<std::mutex> (mymutex);
+\&          // User meant std::unique_lock<std::mutex> lock (mymutex);
+\&        }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wsequence\-point\fR" 4
+.IX Item "-Wsequence-point"
+Warn about code that may have undefined semantics because of violations
+of sequence point rules in the C and \*(C+ standards.
+.Sp
+The C and \*(C+ standards define the order in which expressions in a C/\*(C+
+program are evaluated in terms of \fIsequence points\fR, 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
+\&\f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, \f(CW\*(C`? :\*(C'\fR or \f(CW\*(C`,\*(C'\fR (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.
+.Sp
+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 \*(L"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.\*(R".  If a program breaks these rules, the results on any
+particular implementation are entirely unpredictable.
+.Sp
+Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
+= b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  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.
+.Sp
+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 warning will still warn
+about them, to help people avoid writing code that is undefined in C
+and earlier revisions of \*(C+.
+.Sp
+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 \s-1GCC\s0 readings page, at
+<\fBhttp://gcc.gnu.org/readings.html\fR>.
+.Sp
+This warning is enabled by \fB\-Wall\fR for C and \*(C+.
+.IP "\fB\-Wno\-return\-local\-addr\fR" 4
+.IX Item "-Wno-return-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.
+.IP "\fB\-Wreturn\-type\fR" 4
+.IX Item "-Wreturn-type"
+Warn whenever a function is defined with a return type that defaults
+to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
+return value in a function whose return type is not \f(CW\*(C`void\*(C'\fR
+(falling off the end of the function body is considered returning
+without a value).
+.Sp
+For C only, warn about a \f(CW\*(C`return\*(C'\fR statement with an expression in a
+function whose return type is \f(CW\*(C`void\*(C'\fR, unless the expression type is
+also \f(CW\*(C`void\*(C'\fR.  As a \s-1GNU\s0 extension, the latter case is accepted
+without a warning unless \fB\-Wpedantic\fR is used.
+.Sp
+For \*(C+, a function without return type always produces a diagnostic
+message, even when \fB\-Wno\-return\-type\fR is specified.  The only
+exceptions are \f(CW\*(C`main\*(C'\fR and functions defined in system headers.
+.Sp
+This warning is enabled by default for \*(C+ and is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wshift\-count\-negative\fR" 4
+.IX Item "-Wshift-count-negative"
+Warn if shift count is negative. This warning is enabled by default.
+.IP "\fB\-Wshift\-count\-overflow\fR" 4
+.IX Item "-Wshift-count-overflow"
+Warn if shift count >= width of type. This warning is enabled by default.
+.IP "\fB\-Wshift\-negative\-value\fR" 4
+.IX Item "-Wshift-negative-value"
+Warn if left shifting a negative value.  This warning is enabled by
+\&\fB\-Wextra\fR in C99 and \*(C+11 modes (and newer).
+.IP "\fB\-Wshift\-overflow\fR" 4
+.IX Item "-Wshift-overflow"
+.PD 0
+.IP "\fB\-Wshift\-overflow=\fR\fIn\fR" 4
+.IX Item "-Wshift-overflow=n"
+.PD
+Warn about left shift overflows.  This warning is enabled by
+default in C99 and \*(C+11 modes (and newer).
+.RS 4
+.IP "\fB\-Wshift\-overflow=1\fR" 4
+.IX Item "-Wshift-overflow=1"
+This is the warning level of \fB\-Wshift\-overflow\fR 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.)
+.IP "\fB\-Wshift\-overflow=2\fR" 4
+.IX Item "-Wshift-overflow=2"
+This warning level also warns about left-shifting 1 into the sign bit,
+unless \*(C+14 mode is active.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wswitch\fR" 4
+.IX Item "-Wswitch"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
+and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
+enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
+warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
+provoke warnings when this option is used (even if there is a
+\&\f(CW\*(C`default\*(C'\fR label).
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wswitch\-default\fR" 4
+.IX Item "-Wswitch-default"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
+case.
+.IP "\fB\-Wswitch\-enum\fR" 4
+.IX Item "-Wswitch-enum"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
+and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
+enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
+provoke warnings when this option is used.  The only difference
+between \fB\-Wswitch\fR and this option is that this option gives a
+warning about an omitted enumeration code even if there is a
+\&\f(CW\*(C`default\*(C'\fR label.
+.IP "\fB\-Wswitch\-bool\fR" 4
+.IX Item "-Wswitch-bool"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR 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 \f(CW\*(C`bool\*(C'\fR.  For example:
+.Sp
+.Vb 4
+\&        switch ((int) (a == 4))
+\&          {
+\&          ...
+\&          }
+.Ve
+.Sp
+This warning is enabled by default for C and \*(C+ programs.
+.IP "\fB\-Wswitch\-unreachable\fR" 4
+.IX Item "-Wswitch-unreachable"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement contains statements between the
+controlling expression and the first case label, which will never be
+executed.  For example:
+.Sp
+.Vb 7
+\&        switch (cond)
+\&          {
+\&           i = 15;
+\&          ...
+\&           case 5:
+\&          ...
+\&          }
+.Ve
+.Sp
+\&\fB\-Wswitch\-unreachable\fR does not warn if the statement between the
+controlling expression and the first case label is just a declaration:
+.Sp
+.Vb 8
+\&        switch (cond)
+\&          {
+\&           int i;
+\&          ...
+\&           case 5:
+\&           i = 5;
+\&          ...
+\&          }
+.Ve
+.Sp
+This warning is enabled by default for C and \*(C+ programs.
+.IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
+.IX Item "-Wsync-nand (C and only)"
+Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
+built-in functions are used.  These functions changed semantics in \s-1GCC 4.4.\s0
+.IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
+.IX Item "-Wunused-but-set-parameter"
+Warn whenever a function parameter is assigned to, but otherwise unused
+(aside from its declaration).
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.Sp
+This warning is also enabled by \fB\-Wunused\fR together with
+\&\fB\-Wextra\fR.
+.IP "\fB\-Wunused\-but\-set\-variable\fR" 4
+.IX Item "-Wunused-but-set-variable"
+Warn whenever a local variable is assigned to, but otherwise unused
+(aside from its declaration).
+This warning is enabled by \fB\-Wall\fR.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.Sp
+This warning is also enabled by \fB\-Wunused\fR, which is enabled
+by \fB\-Wall\fR.
+.IP "\fB\-Wunused\-function\fR" 4
+.IX Item "-Wunused-function"
+Warn whenever a static function is declared but not defined or a
+non-inline static function is unused.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wunused\-label\fR" 4
+.IX Item "-Wunused-label"
+Warn whenever a label is declared but not used.
+This warning is enabled by \fB\-Wall\fR.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
+Warn when a typedef locally defined in a function is not used.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wunused\-parameter\fR" 4
+.IX Item "-Wunused-parameter"
+Warn whenever a function parameter is unused aside from its declaration.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.IP "\fB\-Wno\-unused\-result\fR" 4
+.IX Item "-Wno-unused-result"
+Do not warn if a caller of a function marked with attribute
+\&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
+its return value. The default is \fB\-Wunused\-result\fR.
+.IP "\fB\-Wunused\-variable\fR" 4
+.IX Item "-Wunused-variable"
+Warn whenever a local or static variable is unused aside from its
+declaration. This option implies \fB\-Wunused\-const\-variable=1\fR for C,
+but not for \*(C+. This warning is enabled by \fB\-Wall\fR.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.IP "\fB\-Wunused\-const\-variable\fR" 4
+.IX Item "-Wunused-const-variable"
+.PD 0
+.IP "\fB\-Wunused\-const\-variable=\fR\fIn\fR" 4
+.IX Item "-Wunused-const-variable=n"
+.PD
+Warn whenever a constant static variable is unused aside from its declaration.
+\&\fB\-Wunused\-const\-variable=1\fR is enabled by \fB\-Wunused\-variable\fR
+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 \f(CW\*(C`#define\*(C'\fRs.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.RS 4
+.IP "\fB\-Wunused\-const\-variable=1\fR" 4
+.IX Item "-Wunused-const-variable=1"
+This is the warning level that is enabled by \fB\-Wunused\-variable\fR 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.
+.IP "\fB\-Wunused\-const\-variable=2\fR" 4
+.IX 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
+\&\fB\-Wunused\-const\-variable\fR 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.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wunused\-value\fR" 4
+.IX Item "-Wunused-value"
+Warn whenever a statement computes a result that is explicitly not
+used. To suppress this warning cast the unused expression to
+\&\f(CW\*(C`void\*(C'\fR. 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 \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
+\&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wunused\fR" 4
+.IX Item "-Wunused"
+All the above \fB\-Wunused\fR options combined.
+.Sp
+In order to get a warning about an unused function parameter, you must
+either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
+\&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
+.IP "\fB\-Wuninitialized\fR" 4
+.IX Item "-Wuninitialized"
+Warn if an automatic variable is used without first being initialized
+or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
+warn if a non-static reference or non-static \f(CW\*(C`const\*(C'\fR member
+appears in a class without constructors.
+.Sp
+If you want to warn about code that uses the uninitialized value of the
+variable in its own initializer, use the \fB\-Winit\-self\fR option.
+.Sp
+These warnings occur for individual uninitialized or clobbered
+elements of structure, union or array variables as well as for
+variables that are uninitialized or clobbered as a whole.  They do
+not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
+these warnings depend on optimization, the exact variables or elements
+for which there are warnings depends on the precise optimization
+options and version of \s-1GCC\s0 used.
+.Sp
+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.
+.IP "\fB\-Winvalid\-memory\-model\fR" 4
+.IX Item "-Winvalid-memory-model"
+Warn for invocations of \fB_\|_atomic Builtins\fR, \fB_\|_sync Builtins\fR,
+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 \f(CW\*(C`memory_order\*(C'\fR enumeration.  For example, since the
+\&\f(CW\*(C`_\|_atomic_store\*(C'\fR and \f(CW\*(C`_\|_atomic_store_n\*(C'\fR built-ins are only
+defined for the relaxed, release, and sequentially consistent memory
+orders the following code is diagnosed:
+.Sp
+.Vb 4
+\&        void store (int *i)
+\&        {
+\&          _\|_atomic_store_n (i, 0, memory_order_consume);
+\&        }
+.Ve
+.Sp
+\&\fB\-Winvalid\-memory\-model\fR is enabled by default.
+.IP "\fB\-Wmaybe\-uninitialized\fR" 4
+.IX Item "-Wmaybe-uninitialized"
+For an automatic (i.e. local) variable, if there exists a path from the
+function entry to a use of the variable that is initialized, but there exist
+some other paths for which the variable is not initialized, the compiler
+emits a warning if it cannot prove the uninitialized paths are not
+executed at run time.
+.Sp
+These warnings are only possible in optimizing compilation, because otherwise
+\&\s-1GCC\s0 does not keep track of the state of variables.
+.Sp
+These warnings are made optional because \s-1GCC\s0 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:
+.Sp
+.Vb 12
+\&        {
+\&          int x;
+\&          switch (y)
+\&            {
+\&            case 1: x = 1;
+\&              break;
+\&            case 2: x = 4;
+\&              break;
+\&            case 3: x = 5;
+\&            }
+\&          foo (x);
+\&        }
+.Ve
+.Sp
+If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
+always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
+warning, you need to provide a default case with \fIassert\fR\|(0) or
+similar code.
+.Sp
+This option also warns when a non-volatile automatic variable might be
+changed by a call to \f(CW\*(C`longjmp\*(C'\fR.
+The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
+where \f(CW\*(C`longjmp\*(C'\fR 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 \f(CW\*(C`longjmp\*(C'\fR cannot
+in fact be called at the place that would cause a problem.
+.Sp
+Some spurious warnings can be avoided if you declare all the functions
+you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
+.Sp
+This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
+.IP "\fB\-Wunknown\-pragmas\fR" 4
+.IX Item "-Wunknown-pragmas"
+Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
+\&\s-1GCC.\s0  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 \fB\-Wall\fR command-line option.
+.IP "\fB\-Wno\-pragmas\fR" 4
+.IX Item "-Wno-pragmas"
+Do not warn about misuses of pragmas, such as incorrect parameters,
+invalid syntax, or conflicts between pragmas.  See also
+\&\fB\-Wunknown\-pragmas\fR.
+.IP "\fB\-Wstrict\-aliasing\fR" 4
+.IX Item "-Wstrict-aliasing"
+This option is only active when \fB\-fstrict\-aliasing\fR 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 \fB\-Wall\fR.
+It is equivalent to \fB\-Wstrict\-aliasing=3\fR
+.IP "\fB\-Wstrict\-aliasing=n\fR" 4
+.IX Item "-Wstrict-aliasing=n"
+This option is only active when \fB\-fstrict\-aliasing\fR 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 \fB\-O\fR 
+works.
+\&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=3\fR.
+.Sp
+Level 1: Most aggressive, quick, least accurate.
+Possibly useful when higher levels
+do not warn but \fB\-fstrict\-aliasing\fR 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.
+.Sp
+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.
+.Sp
+Level 3 (default for \fB\-Wstrict\-aliasing\fR):
+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:
+\&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
+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.
+.IP "\fB\-Wstrict\-overflow\fR" 4
+.IX Item "-Wstrict-overflow"
+.PD 0
+.IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
+.IX Item "-Wstrict-overflow=n"
+.PD
+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.
+.Sp
+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.
+.RS 4
+.IP "\fB\-Wstrict\-overflow=1\fR" 4
+.IX Item "-Wstrict-overflow=1"
+Warn about cases that are both questionable and easy to avoid.  For
+example the compiler simplifies
+\&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
+\&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
+are not, and must be explicitly requested.
+.IP "\fB\-Wstrict\-overflow=2\fR" 4
+.IX Item "-Wstrict-overflow=2"
+Also warn about other cases where a comparison is simplified to a
+constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
+simplified when signed integer overflow is undefined, because
+\&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
+zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
+\&\fB\-Wstrict\-overflow=2\fR.
+.IP "\fB\-Wstrict\-overflow=3\fR" 4
+.IX Item "-Wstrict-overflow=3"
+Also warn about other cases where a comparison is simplified.  For
+example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
+.IP "\fB\-Wstrict\-overflow=4\fR" 4
+.IX Item "-Wstrict-overflow=4"
+Also warn about other simplifications not covered by the above cases.
+For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
+.IP "\fB\-Wstrict\-overflow=5\fR" 4
+.IX Item "-Wstrict-overflow=5"
+Also warn about cases where the compiler reduces the magnitude of a
+constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
+simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  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.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wstringop\-overflow\fR" 4
+.IX Item "-Wstringop-overflow"
+.PD 0
+.IP "\fB\-Wstringop\-overflow=\fR\fItype\fR" 4
+.IX Item "-Wstringop-overflow=type"
+.PD
+Warn for calls to string manipulation functions such as \f(CW\*(C`memcpy\*(C'\fR and
+\&\f(CW\*(C`strcpy\*(C'\fR 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.  
+The argument is meaningful only for functions that operate on character arrays
+but not for raw memory functions like \f(CW\*(C`memcpy\*(C'\fR 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 \f(CW\*(C`SIZE_MAX / 2\*(C'\fR 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 \s-1GCC\s0 built-in functions like \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR 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 will issue a warning for
+the \f(CW\*(C`strcpy\*(C'\fR call below because it copies at least 5 characters
+(the string \f(CW"blue"\fR including the terminating \s-1NUL\s0) into the buffer
+of size 4.
+.Sp
+.Vb 11
+\&        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
+\&        }
+.Ve
+.Sp
+Option \fB\-Wstringop\-overflow=2\fR is enabled by default.
+.RS 4
+.IP "\fB\-Wstringop\-overflow\fR" 4
+.IX Item "-Wstringop-overflow"
+.PD 0
+.IP "\fB\-Wstringop\-overflow=1\fR" 4
+.IX Item "-Wstringop-overflow=1"
+.PD
+The \fB\-Wstringop\-overflow=1\fR option uses type-zero Object Size Checking
+to determine the sizes of destination objects.  This is the default setting
+of the option.  At this setting the option will 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 \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR macro is defined to
+a non-zero value.
+.IP "\fB\-Wstringop\-overflow=2\fR" 4
+.IX Item "-Wstringop-overflow=2"
+The \fB\-Wstringop\-overflow=2\fR option uses type-one Object Size Checking
+to determine the sizes of destination objects.  At this setting the option
+will warn about overflows when writing to members of the largest complete
+objects whose exact size is known.  It will, however, 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.
+.IP "\fB\-Wstringop\-overflow=3\fR" 4
+.IX Item "-Wstringop-overflow=3"
+The \fB\-Wstringop\-overflow=3\fR 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.
+.IP "\fB\-Wstringop\-overflow=4\fR" 4
+.IX Item "-Wstringop-overflow=4"
+The \fB\-Wstringop\-overflow=4\fR option uses type-three Object Size Checking
+to determine the sizes of destination objects.  At this setting the option
+will warn 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 \fB\-Wstringop\-overflow=3\fR this
+setting of the option may result in warnings for benign code.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wstringop\-truncation\fR" 4
+.IX Item "-Wstringop-truncation"
+Warn for calls to bounded string manipulation functions such as \f(CW\*(C`strncat\*(C'\fR,
+\&\f(CW\*(C`strncpy\*(C'\fR, and \f(CW\*(C`stpncpy\*(C'\fR that may either truncate the copied string
+or leave the destination unchanged.
+.Sp
+In the following example, the call to \f(CW\*(C`strncat\*(C'\fR 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 \f(CW\*(C`bufsize \- strlen (buf) \- 1)\*(C'\fR as the bound.
+.Sp
+.Vb 4
+\&        void append (char *buf, size_t bufsize)
+\&        {
+\&          strncat (buf, ".txt", 3);
+\&        }
+.Ve
+.Sp
+As another example, the following call to \f(CW\*(C`strncpy\*(C'\fR results in copying
+to \f(CW\*(C`d\*(C'\fR just the characters preceding the terminating \s-1NUL,\s0 without
+appending the \s-1NUL\s0 to the end.  Assuming the result of \f(CW\*(C`strncpy\*(C'\fR 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 \f(CW\*(C`memcpy\*(C'\fR instead.
+.Sp
+.Vb 4
+\&        void copy (char *d, const char *s)
+\&        {
+\&          strncpy (d, s, strlen (s));
+\&        }
+.Ve
+.Sp
+In the following example, the call to \f(CW\*(C`strncpy\*(C'\fR 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 \f(CW\*(C`sizeof buf \- 1\*(C'\fR as the bound and set the last
+element of the buffer to \f(CW\*(C`NUL\*(C'\fR.
+.Sp
+.Vb 6
+\&        void copy (const char *s)
+\&        {
+\&          char buf[80];
+\&          strncpy (buf, s, sizeof buf);
+\&          ...
+\&        }
+.Ve
+.Sp
+In situations where a character array is intended to store a sequence
+of bytes with no terminating \f(CW\*(C`NUL\*(C'\fR such an array may be annotated
+with attribute \f(CW\*(C`nonstring\*(C'\fR to avoid this warning.  Such arrays,
+however, are not suitable arguments to functions that expect
+\&\f(CW\*(C`NUL\*(C'\fR\-terminated strings.  To help detect accidental misuses of
+such arrays \s-1GCC\s0 issues warnings unless it can prove that the use is
+safe.
+.IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBcold\fR|\fBmalloc\fR]" 4
+.IX Item "-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]"
+Warn for cases where adding an attribute may be beneficial. The
+attributes currently supported are listed below.
+.RS 4
+.IP "\fB\-Wsuggest\-attribute=pure\fR" 4
+.IX Item "-Wsuggest-attribute=pure"
+.PD 0
+.IP "\fB\-Wsuggest\-attribute=const\fR" 4
+.IX Item "-Wsuggest-attribute=const"
+.IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
+.IX Item "-Wsuggest-attribute=noreturn"
+.IP "\fB\-Wsuggest\-attribute=malloc\fR" 4
+.IX Item "-Wsuggest-attribute=malloc"
+.PD
+Warn about functions that might be candidates for attributes
+\&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR or \f(CW\*(C`malloc\*(C'\fR. The compiler
+only warns for functions visible in other compilation units or (in the case of
+\&\f(CW\*(C`pure\*(C'\fR and \f(CW\*(C`const\*(C'\fR) 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 \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis
+requires option \fB\-fipa\-pure\-const\fR, which is enabled by default at
+\&\fB\-O\fR and higher.  Higher optimization levels improve the accuracy
+of the analysis.
+.IP "\fB\-Wsuggest\-attribute=format\fR" 4
+.IX Item "-Wsuggest-attribute=format"
+.PD 0
+.IP "\fB\-Wmissing\-format\-attribute\fR" 4
+.IX Item "-Wmissing-format-attribute"
+.PD
+Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
+attributes.  Note these are only possible candidates, not absolute ones.
+\&\s-1GCC\s0 guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
+are used in assignment, initialization, parameter passing or return
+statements should have a corresponding \f(CW\*(C`format\*(C'\fR 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 \f(CW\*(C`format\*(C'\fR
+attribute to avoid the warning.
+.Sp
+\&\s-1GCC\s0 also warns about function definitions that might be
+candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
+possible candidates.  \s-1GCC\s0 guesses that \f(CW\*(C`format\*(C'\fR attributes
+might be appropriate for any function that calls a function like
+\&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
+case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
+appropriate may not be detected.
+.IP "\fB\-Wsuggest\-attribute=cold\fR" 4
+.IX Item "-Wsuggest-attribute=cold"
+Warn about functions that might be candidates for \f(CW\*(C`cold\*(C'\fR attribute.  This
+is based on static detection and generally will only warn about functions which
+always leads to a call to another \f(CW\*(C`cold\*(C'\fR function such as wrappers of
+\&\*(C+ \f(CW\*(C`throw\*(C'\fR or fatal error reporting functions leading to \f(CW\*(C`abort\*(C'\fR.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wsuggest\-final\-types\fR" 4
+.IX Item "-Wsuggest-final-types"
+Warn about types with virtual methods where code quality would be improved
+if the type were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
+or, if possible,
+declared in an anonymous namespace. This allows \s-1GCC\s0 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.
+.IP "\fB\-Wsuggest\-final\-methods\fR" 4
+.IX Item "-Wsuggest-final-methods"
+Warn about virtual methods where code quality would be improved if the method
+were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
+or, if possible, its type were
+declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR 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 \fB\-Wsuggest\-final\-types\fR and then rebuild with new
+annotations.
+.IP "\fB\-Wsuggest\-override\fR" 4
+.IX Item "-Wsuggest-override"
+Warn about overriding virtual functions that are not marked with the override
+keyword.
+.IP "\fB\-Walloc\-zero\fR" 4
+.IX Item "-Walloc-zero"
+Warn about calls to allocation functions decorated with attribute
+\&\f(CW\*(C`alloc_size\*(C'\fR that specify zero bytes, including those to the built-in
+forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`calloc\*(C'\fR,
+\&\f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.  Because the behavior of these functions
+when called with a zero size differs among implementations (and in the case
+of \f(CW\*(C`realloc\*(C'\fR has been deprecated) relying on it may result in subtle
+portability bugs and should be avoided.
+.IP "\fB\-Walloc\-size\-larger\-than=\fR\fIn\fR" 4
+.IX Item "-Walloc-size-larger-than=n"
+Warn about calls to functions decorated with attribute \f(CW\*(C`alloc_size\*(C'\fR
+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 \f(CW\*(C`SIZE_MAX / 2\*(C'\fR.  The option argument \fIn\fR
+may end in one of the standard suffixes designating a multiple of bytes
+such as \f(CW\*(C`kB\*(C'\fR and \f(CW\*(C`KiB\*(C'\fR for kilobyte and kibibyte, respectively,
+\&\f(CW\*(C`MB\*(C'\fR and \f(CW\*(C`MiB\*(C'\fR for megabyte and mebibyte, and so on.
+.IP "\fB\-Walloca\fR" 4
+.IX Item "-Walloca"
+This option warns on all uses of \f(CW\*(C`alloca\*(C'\fR in the source.
+.IP "\fB\-Walloca\-larger\-than=\fR\fIn\fR" 4
+.IX Item "-Walloca-larger-than=n"
+This option warns on calls to \f(CW\*(C`alloca\*(C'\fR that are not bounded by a
+controlling predicate limiting its argument of integer type to at most
+\&\fIn\fR bytes, or calls to \f(CW\*(C`alloca\*(C'\fR where the bound is unknown.
+Arguments of non-integer types are considered unbounded even if they
+appear to be constrained to the expected range.
+.Sp
+For example, a bounded case of \f(CW\*(C`alloca\*(C'\fR could be:
+.Sp
+.Vb 9
+\&        void func (size_t n)
+\&        {
+\&          void *p;
+\&          if (n <= 1000)
+\&            p = alloca (n);
+\&          else
+\&            p = malloc (n);
+\&          f (p);
+\&        }
+.Ve
+.Sp
+In the above example, passing \f(CW\*(C`\-Walloca\-larger\-than=1000\*(C'\fR would not
+issue a warning because the call to \f(CW\*(C`alloca\*(C'\fR is known to be at most
+1000 bytes.  However, if \f(CW\*(C`\-Walloca\-larger\-than=500\*(C'\fR were passed,
+the compiler would emit a warning.
+.Sp
+Unbounded uses, on the other hand, are uses of \f(CW\*(C`alloca\*(C'\fR with no
+controlling predicate constraining its integer argument.  For example:
+.Sp
+.Vb 5
+\&        void func ()
+\&        {
+\&          void *p = alloca (n);
+\&          f (p);
+\&        }
+.Ve
+.Sp
+If \f(CW\*(C`\-Walloca\-larger\-than=500\*(C'\fR were passed, the above would trigger
+a warning, but this time because of the lack of bounds checking.
+.Sp
+Note, that even seemingly correct code involving signed integers could
+cause a warning:
+.Sp
+.Vb 8
+\&        void func (signed int n)
+\&        {
+\&          if (n < 500)
+\&            {
+\&              p = alloca (n);
+\&              f (p);
+\&            }
+\&        }
+.Ve
+.Sp
+In the above example, \fIn\fR could be negative, causing a larger than
+expected argument to be implicitly cast into the \f(CW\*(C`alloca\*(C'\fR call.
+.Sp
+This option also warns when \f(CW\*(C`alloca\*(C'\fR is used in a loop.
+.Sp
+This warning is not enabled by \fB\-Wall\fR, and is only active when
+\&\fB\-ftree\-vrp\fR is active (default for \fB\-O2\fR and above).
+.Sp
+See also \fB\-Wvla\-larger\-than=\fR\fIn\fR.
+.IP "\fB\-Warray\-bounds\fR" 4
+.IX Item "-Warray-bounds"
+.PD 0
+.IP "\fB\-Warray\-bounds=\fR\fIn\fR" 4
+.IX Item "-Warray-bounds=n"
+.PD
+This option is only active when \fB\-ftree\-vrp\fR is active
+(default for \fB\-O2\fR and above). It warns about subscripts to arrays
+that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
+.RS 4
+.IP "\fB\-Warray\-bounds=1\fR" 4
+.IX Item "-Warray-bounds=1"
+This is the warning level of \fB\-Warray\-bounds\fR and is enabled
+by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
+.IP "\fB\-Warray\-bounds=2\fR" 4
+.IX Item "-Warray-bounds=2"
+This warning level also warns about out of bounds access for
+arrays at the end of a struct and for arrays accessed through
+pointers. This warning level may give a larger number of
+false positives and is deactivated by default.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wattribute\-alias\fR" 4
+.IX Item "-Wattribute-alias"
+Warn about declarations using the \f(CW\*(C`alias\*(C'\fR and similar attributes whose
+target is incompatible with the type of the alias.
+.IP "\fB\-Wbool\-compare\fR" 4
+.IX Item "-Wbool-compare"
+Warn about boolean expression compared with an integer value different from
+\&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
+always false:
+.Sp
+.Vb 3
+\&        int n = 5;
+\&        ...
+\&        if ((n > 1) == 2) { ... }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wbool\-operation\fR" 4
+.IX Item "-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.)
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wduplicated\-branches\fR" 4
+.IX Item "-Wduplicated-branches"
+Warn when an if-else has identical branches.  This warning detects cases like
+.Sp
+.Vb 4
+\&        if (p != NULL)
+\&          return 0;
+\&        else
+\&          return 0;
+.Ve
+.Sp
+It doesn't warn when both branches contain just a null statement.  This warning
+also warn for conditional operators:
+.Sp
+.Vb 1
+\&          int i = x ? *p : *p;
+.Ve
+.IP "\fB\-Wduplicated\-cond\fR" 4
+.IX Item "-Wduplicated-cond"
+Warn about duplicated conditions in an if-else-if chain.  For instance,
+warn for the following code:
+.Sp
+.Vb 2
+\&        if (p\->q != NULL) { ... }
+\&        else if (p\->q != NULL) { ... }
+.Ve
+.IP "\fB\-Wframe\-address\fR" 4
+.IX Item "-Wframe-address"
+Warn when the \fB_\|_builtin_frame_address\fR or \fB_\|_builtin_return_address\fR
+is called with an argument greater than 0.  Such calls may return indeterminate
+values or crash the program.  The warning is included in \fB\-Wall\fR.
+.IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective-C only)" 4
+.IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
+Do not warn if type qualifiers on pointers are being discarded.
+Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
+passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
+can be used to suppress such a warning.
+.IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective-C only)" 4
+.IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
+Do not warn if type qualifiers on arrays which are pointer targets
+are being discarded. Typically, the compiler warns if a
+\&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
+takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
+suppress such a warning.
+.IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective-C only)" 4
+.IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
+Do not warn when there is a conversion between pointers that have incompatible
+types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
+which warns for pointer argument passing or assignment with different
+signedness.
+.IP "\fB\-Wno\-int\-conversion\fR (C and Objective-C only)" 4
+.IX Item "-Wno-int-conversion (C and Objective-C only)"
+Do not warn about incompatible integer to pointer and pointer to integer
+conversions.  This warning is about implicit conversions; for explicit
+conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
+\&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
+.IP "\fB\-Wno\-div\-by\-zero\fR" 4
+.IX Item "-Wno-div-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.
+.IP "\fB\-Wsystem\-headers\fR" 4
+.IX Item "-Wsystem-headers"
+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
+\&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
+code.  However, note that using \fB\-Wall\fR in conjunction with this
+option does \fInot\fR warn about unknown pragmas in system
+headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
+.IP "\fB\-Wtautological\-compare\fR" 4
+.IX Item "-Wtautological-compare"
+Warn if a self-comparison always evaluates to true or false.  This
+warning detects various mistakes such as:
+.Sp
+.Vb 3
+\&        int i = 1;
+\&        ...
+\&        if (i > i) { ... }
+.Ve
+.Sp
+This warning also warns about bitwise comparisons that always evaluate
+to true or false, for instance:
+.Sp
+.Vb 1
+\&        if ((a & 16) == 10) { ... }
+.Ve
+.Sp
+will always be false.
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wtrampolines\fR" 4
+.IX Item "-Wtrampolines"
+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.
+.IP "\fB\-Wfloat\-equal\fR" 4
+.IX Item "-Wfloat-equal"
+Warn if floating-point values are used in equality comparisons.
+.Sp
+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.
+.IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
+.IX Item "-Wtraditional (C and Objective-C only)"
+Warn about certain constructs that behave differently in traditional and
+\&\s-1ISO C.\s0  Also warn about \s-1ISO C\s0 constructs that have no traditional C
+equivalent, and/or problematic constructs that should be avoided.
+.RS 4
+.IP "*" 4
+Macro parameters that appear within string literals in the macro body.
+In traditional C macro replacement takes place within string literals,
+but in \s-1ISO C\s0 it does not.
+.IP "*" 4
+In traditional C, some preprocessor directives did not exist.
+Traditional preprocessors only considered a line to be a directive
+if the \fB#\fR appeared in column 1 on the line.  Therefore
+\&\fB\-Wtraditional\fR warns about directives that traditional C
+understands but ignores because the \fB#\fR does not appear as the
+first character on the line.  It also suggests you hide directives like
+\&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
+traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
+suggests avoiding it altogether.
+.IP "*" 4
+A function-like macro that appears without arguments.
+.IP "*" 4
+The unary plus operator.
+.IP "*" 4
+The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
+constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
+constants.)  Note, these suffixes appear in macros defined in the system
+headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
+Use of these macros in user code might normally lead to spurious
+warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
+avoid warning in these cases.
+.IP "*" 4
+A function declared external in one block and then used after the end of
+the block.
+.IP "*" 4
+A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
+.IP "*" 4
+A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
+This construct is not accepted by some traditional C compilers.
+.IP "*" 4
+The \s-1ISO\s0 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.
+.IP "*" 4
+Usage of \s-1ISO\s0 string concatenation is detected.
+.IP "*" 4
+Initialization of automatic aggregates.
+.IP "*" 4
+Identifier conflicts with labels.  Traditional C lacks a separate
+namespace for labels.
+.IP "*" 4
+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. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
+initializer warnings and relies on default initialization to zero in the
+traditional C case.
+.IP "*" 4
+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 \fB\-Wtraditional\-conversion\fR.
+.IP "*" 4
+Use of \s-1ISO C\s0 style function definitions.  This warning intentionally is
+\&\fInot\fR issued for prototype declarations or variadic functions
+because these \s-1ISO C\s0 features appear in your code when using
+libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
+\&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
+because that feature is already a \s-1GCC\s0 extension and thus not relevant to
+traditional C compatibility.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
+.IX Item "-Wtraditional-conversion (C and Objective-C only)"
+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.
+.IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
+.IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
+Warn when a declaration is found after a statement in a block.  This
+construct, known from \*(C+, was introduced with \s-1ISO C99\s0 and is by default
+allowed in \s-1GCC.\s0  It is not supported by \s-1ISO C90.\s0
+.IP "\fB\-Wshadow\fR" 4
+.IX Item "-Wshadow"
+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.
+Same as \fB\-Wshadow=global\fR.
+.IP "\fB\-Wno\-shadow\-ivar\fR (Objective-C only)" 4
+.IX Item "-Wno-shadow-ivar (Objective-C only)"
+Do not warn whenever a local variable shadows an instance variable in an
+Objective-C method.
+.IP "\fB\-Wshadow=global\fR" 4
+.IX Item "-Wshadow=global"
+The default for \fB\-Wshadow\fR. Warns for any (global) shadowing.
+.IP "\fB\-Wshadow=local\fR" 4
+.IX Item "-Wshadow=local"
+Warn when a local variable shadows another local variable or parameter.
+This warning is enabled by \fB\-Wshadow=global\fR.
+.IP "\fB\-Wshadow=compatible\-local\fR" 4
+.IX Item "-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 \fB\-Wshadow=local\fR) 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:
+.Sp
+.Vb 8
+\&        for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
+\&        {
+\&          for (int i = 0; i < N; ++i)
+\&          {
+\&            ...
+\&          }
+\&          ...
+\&        }
+.Ve
+.Sp
+Since the two variable \f(CW\*(C`i\*(C'\fR in the example above have incompatible types,
+enabling only \fB\-Wshadow=compatible\-local\fR will not emit a warning.
+Because their types are incompatible, if a programmer accidentally uses one
+in place of the other, type checking will catch that and emit an error or
+warning. So not warning (about shadowing) in this case will not lead to
+undetected bugs. Use of this flag instead of \fB\-Wshadow=local\fR can
+possibly reduce the number of warnings triggered by intentional shadowing.
+.Sp
+This warning is enabled by \fB\-Wshadow=local\fR.
+.IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
+.IX Item "-Wlarger-than=len"
+Warn whenever an object of larger than \fIlen\fR bytes is defined.
+.IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
+.IX Item "-Wframe-larger-than=len"
+Warn if the size of a function frame is larger than \fIlen\fR bytes.
+The computation done to determine the stack frame size is approximate
+and not conservative.
+The actual requirements may be somewhat greater than \fIlen\fR
+even if you do not get a warning.  In addition, any space allocated
+via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
+is not included by the compiler when determining
+whether or not to issue a warning.
+.IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
+.IX Item "-Wno-free-nonheap-object"
+Do not warn when attempting to free an object that was not allocated
+on the heap.
+.IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
+.IX Item "-Wstack-usage=len"
+Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
+The computation done to determine the stack usage is conservative.
+Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
+constructs is included by the compiler when determining whether or not to
+issue a warning.
+.Sp
+The message is in keeping with the output of \fB\-fstack\-usage\fR.
+.RS 4
+.IP "*" 4
+If the stack usage is fully static but exceeds the specified amount, it's:
+.Sp
+.Vb 1
+\&          warning: stack usage is 1120 bytes
+.Ve
+.IP "*" 4
+If the stack usage is (partly) dynamic but bounded, it's:
+.Sp
+.Vb 1
+\&          warning: stack usage might be 1648 bytes
+.Ve
+.IP "*" 4
+If the stack usage is (partly) dynamic and not bounded, it's:
+.Sp
+.Vb 1
+\&          warning: stack usage might be unbounded
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
+.IX Item "-Wunsafe-loop-optimizations"
+Warn if the loop cannot be optimized because the compiler cannot
+assume anything on the bounds of the loop indices.  With
+\&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler makes
+such assumptions.
+.IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
+.IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
+When used in combination with \fB\-Wformat\fR
+and \fB\-pedantic\fR without \s-1GNU\s0 extensions, this option
+disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
+width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
+which depend on the \s-1MS\s0 runtime.
+.IP "\fB\-Waligned\-new\fR" 4
+.IX Item "-Waligned-new"
+Warn about a new-expression of a type that requires greater alignment
+than the \f(CW\*(C`alignof(std::max_align_t)\*(C'\fR but uses an allocation
+function without an explicit alignment parameter. This option is
+enabled by \fB\-Wall\fR.
+.Sp
+Normally this only warns about global allocation functions, but
+\&\fB\-Waligned\-new=all\fR also warns about class member allocation
+functions.
+.IP "\fB\-Wplacement\-new\fR" 4
+.IX Item "-Wplacement-new"
+.PD 0
+.IP "\fB\-Wplacement\-new=\fR\fIn\fR" 4
+.IX Item "-Wplacement-new=n"
+.PD
+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.
+.Sp
+.Vb 2
+\&        char buf [64];
+\&        new (buf) int[64];
+.Ve
+.Sp
+This warning is enabled by default.
+.RS 4
+.IP "\fB\-Wplacement\-new=1\fR" 4
+.IX Item "-Wplacement-new=1"
+This is the default warning level of \fB\-Wplacement\-new\fR.  At this
+level the warning is not issued for some strictly undefined constructs that
+\&\s-1GCC\s0 allows as extensions for compatibility with legacy code.  For example,
+the following \f(CW\*(C`new\*(C'\fR 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.
+.Sp
+.Vb 3
+\&        struct S { int n, a[1]; };
+\&        S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]);
+\&        new (s\->a)int [32]();
+.Ve
+.IP "\fB\-Wplacement\-new=2\fR" 4
+.IX 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.
+.Sp
+.Vb 3
+\&        struct S { int n, a[]; };
+\&        S *s = (S *)malloc (sizeof *s + 32 * sizeof s\->a[0]);
+\&        new (s\->a)int [32]();
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wpointer\-arith\fR" 4
+.IX Item "-Wpointer-arith"
+Warn about anything that depends on the \*(L"size of\*(R" a function type or
+of \f(CW\*(C`void\*(C'\fR.  \s-1GNU C\s0 assigns these types a size of 1, for
+convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
+to functions.  In \*(C+, warn also when an arithmetic operation involves
+\&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
+.IP "\fB\-Wpointer\-compare\fR" 4
+.IX Item "-Wpointer-compare"
+Warn if a pointer is compared with a zero character constant.  This usually
+means that the pointer was meant to be dereferenced.  For example:
+.Sp
+.Vb 3
+\&        const char *p = foo ();
+\&        if (p == \*(Aq\e0\*(Aq)
+\&          return 42;
+.Ve
+.Sp
+Note that the code above is invalid in \*(C+11.
+.Sp
+This warning is enabled by default.
+.IP "\fB\-Wtype\-limits\fR" 4
+.IX Item "-Wtype-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
+\&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
+\&\fB\-Wextra\fR.
+.IP "\fB\-Wcomment\fR" 4
+.IX Item "-Wcomment"
+.PD 0
+.IP "\fB\-Wcomments\fR" 4
+.IX Item "-Wcomments"
+.PD
+Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
+comment, or whenever a backslash-newline appears in a \fB//\fR comment.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wtrigraphs\fR" 4
+.IX Item "-Wtrigraphs"
+Warn if any trigraphs are encountered that might change the meaning of
+the program.  Trigraphs within comments are not warned about,
+except those that would form escaped newlines.
+.Sp
+This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
+given, this option is still enabled unless trigraphs are enabled.  To
+get trigraph conversion without warnings, but get the other
+\&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
+.IP "\fB\-Wundef\fR" 4
+.IX Item "-Wundef"
+Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
+Such identifiers are replaced with zero.
+.IP "\fB\-Wexpansion\-to\-defined\fR" 4
+.IX Item "-Wexpansion-to-defined"
+Warn whenever \fBdefined\fR is encountered in the expansion of a macro
+(including the case where the macro is expanded by an \fB#if\fR directive).
+Such usage is not portable.
+This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
+.IP "\fB\-Wunused\-macros\fR" 4
+.IX Item "-Wunused-macros"
+Warn about macros defined in the main file that are unused.  A macro
+is \fIused\fR if it is expanded or tested for existence at least once.
+The preprocessor also warns if the macro has not been used at the
+time it is redefined or undefined.
+.Sp
+Built-in macros, macros defined on the command line, and macros
+defined in include files are not warned about.
+.Sp
+\&\fINote:\fR If a macro is actually used, but only used in skipped
+conditional blocks, then the preprocessor reports it as unused.  To avoid the
+warning in such a case, you might improve the scope of the macro's
+definition by, for example, moving it into the first skipped block.
+Alternatively, you could provide a dummy use with something like:
+.Sp
+.Vb 2
+\&        #if defined the_macro_causing_the_warning
+\&        #endif
+.Ve
+.IP "\fB\-Wno\-endif\-labels\fR" 4
+.IX Item "-Wno-endif-labels"
+Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
+This sometimes happens in older programs with code of the form
+.Sp
+.Vb 5
+\&        #if FOO
+\&        ...
+\&        #else FOO
+\&        ...
+\&        #endif FOO
+.Ve
+.Sp
+The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
+This warning is on by default.
+.IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
+.IX Item "-Wbad-function-cast (C and Objective-C only)"
+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.
+.IP "\fB\-Wc90\-c99\-compat\fR (C and Objective-C only)" 4
+.IX Item "-Wc90-c99-compat (C and Objective-C only)"
+Warn about features not present in \s-1ISO C90,\s0 but present in \s-1ISO C99.\s0
+For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
+type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
+on.  This option is independent of the standards mode.  Warnings are disabled
+in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
+.IP "\fB\-Wc99\-c11\-compat\fR (C and Objective-C only)" 4
+.IX Item "-Wc99-c11-compat (C and Objective-C only)"
+Warn about features not present in \s-1ISO C99,\s0 but present in \s-1ISO C11.\s0
+For instance, warn about use of anonymous structures and unions,
+\&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage-class specifier,
+\&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
+and so on.  This option is independent of the standards mode.  Warnings are
+disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
+.IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
+.IX Item "-Wc++-compat (C and Objective-C only)"
+Warn about \s-1ISO C\s0 constructs that are outside of the common subset of
+\&\s-1ISO C\s0 and \s-1ISO \*(C+,\s0 e.g. request for implicit conversion from
+\&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
+.IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wc++11-compat ( and Objective- only)"
+Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 1998\s0
+and \s-1ISO \*(C+ 2011,\s0 e.g., identifiers in \s-1ISO \*(C+ 1998\s0 that are keywords
+in \s-1ISO \*(C+ 2011.\s0  This warning turns on \fB\-Wnarrowing\fR and is
+enabled by \fB\-Wall\fR.
+.IP "\fB\-Wc++14\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wc++14-compat ( and Objective- only)"
+Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2011\s0
+and \s-1ISO \*(C+ 2014.\s0  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wc++17\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wc++17-compat ( and Objective- only)"
+Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2014\s0
+and \s-1ISO \*(C+ 2017.\s0  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wcast\-qual\fR" 4
+.IX Item "-Wcast-qual"
+Warn whenever a pointer is cast so as to remove a type qualifier from
+the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
+to an ordinary \f(CW\*(C`char *\*(C'\fR.
+.Sp
+Also warn when making a cast that introduces a type qualifier in an
+unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
+is unsafe, as in this example:
+.Sp
+.Vb 6
+\&          /* 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 = \*(Aqb\*(Aq;
+.Ve
+.IP "\fB\-Wcast\-align\fR" 4
+.IX Item "-Wcast-align"
+Warn whenever a pointer is cast such that the required alignment of the
+target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
+an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
+two\- or four-byte boundaries.
+.IP "\fB\-Wcast\-align=strict\fR" 4
+.IX Item "-Wcast-align=strict"
+Warn whenever a pointer is cast such that the required alignment of the
+target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
+an \f(CW\*(C`int *\*(C'\fR regardless of the target machine.
+.IP "\fB\-Wcast\-function\-type\fR" 4
+.IX Item "-Wcast-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 \f(CW\*(C`int\*(C'\fR vs. \f(CW\*(C`long\*(C'\fR
+on \s-1ILP32\s0 targets.  Likewise type qualifiers are ignored.  The function
+type \f(CW\*(C`void (*) (void)\*(C'\fR 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 \fB\-Wextra\fR.
+.IP "\fB\-Wwrite\-strings\fR" 4
+.IX Item "-Wwrite-strings"
+When compiling C, give string constants the type \f(CW\*(C`const
+char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
+non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR 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 \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it is
+just a nuisance. This is why we did not make \fB\-Wall\fR request
+these warnings.
+.Sp
+When compiling \*(C+, warn about the deprecated conversion from string
+literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
+programs.
+.IP "\fB\-Wcatch\-value\fR" 4
+.IX Item "-Wcatch-value"
+.PD 0
+.IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wcatch-value=n ( and Objective- only)"
+.PD
+Warn about catch handlers that do not catch via reference.
+With \fB\-Wcatch\-value=1\fR (or \fB\-Wcatch\-value\fR for short)
+warn about polymorphic class types that are caught by value.
+With \fB\-Wcatch\-value=2\fR warn about all class types that are caught
+by value. With \fB\-Wcatch\-value=3\fR warn about all types that are
+not caught by reference. \fB\-Wcatch\-value\fR is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wclobbered\fR" 4
+.IX Item "-Wclobbered"
+Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
+\&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wconditionally\-supported\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wconditionally-supported ( and Objective- only)"
+Warn for conditionally-supported (\*(C+11 [intro.defs]) constructs.
+.IP "\fB\-Wconversion\fR" 4
+.IX Item "-Wconversion"
+Warn for implicit conversions that may alter a value. This includes
+conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
+\&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
+like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
+\&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
+((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
+changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
+conversions between signed and unsigned integers can be disabled by
+using \fB\-Wno\-sign\-conversion\fR.
+.Sp
+For \*(C+, also warn for confusing overload resolution for user-defined
+conversions; and conversions that never use a type conversion
+operator: conversions to \f(CW\*(C`void\*(C'\fR, 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
+\&\fB\-Wsign\-conversion\fR is explicitly enabled.
+.IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-conversion-null ( and Objective- only)"
+Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
+types. \fB\-Wconversion\-null\fR is enabled by default.
+.IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
+Warn when a literal \fB0\fR is used as null pointer constant.  This can
+be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
+.IP "\fB\-Wsubobject\-linkage\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wsubobject-linkage ( and Objective- only)"
+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 \s-1ODR\s0 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.
+\&\fB\-Wsubobject\-linkage\fR is enabled by default.
+.IP "\fB\-Wdangling\-else\fR" 4
+.IX Item "-Wdangling-else"
+Warn about constructions where there may be confusion to which
+\&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
+such a case:
+.Sp
+.Vb 7
+\&        {
+\&          if (a)
+\&            if (b)
+\&              foo ();
+\&          else
+\&            bar ();
+\&        }
+.Ve
+.Sp
+In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
+\&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  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, \s-1GCC\s0 issues a warning when this flag
+is specified.  To eliminate the warning, add explicit braces around
+the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
+can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
+looks like this:
+.Sp
+.Vb 9
+\&        {
+\&          if (a)
+\&            {
+\&              if (b)
+\&                foo ();
+\&              else
+\&                bar ();
+\&            }
+\&        }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wparentheses\fR.
+.IP "\fB\-Wdate\-time\fR" 4
+.IX Item "-Wdate-time"
+Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
+are encountered as they might prevent bit-wise-identical reproducible
+compilations.
+.IP "\fB\-Wdelete\-incomplete\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wdelete-incomplete ( and Objective- only)"
+Warn when deleting a pointer to incomplete type, which may cause
+undefined behavior at runtime.  This warning is enabled by default.
+.IP "\fB\-Wuseless\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wuseless-cast ( and Objective- only)"
+Warn when an expression is casted to its own type.
+.IP "\fB\-Wempty\-body\fR" 4
+.IX Item "-Wempty-body"
+Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
+while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wenum\-compare\fR" 4
+.IX Item "-Wenum-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 \fB\-Wall\fR.
+.IP "\fB\-Wextra\-semi\fR (\*(C+, Objective\-\*(C+ only)" 4
+.IX Item "-Wextra-semi (, Objective- only)"
+Warn about redundant semicolon after in-class function definition.
+.IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
+.IX Item "-Wjump-misses-init (C, Objective-C only)"
+Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR 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.
+.Sp
+\&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
+can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
+.IP "\fB\-Wsign\-compare\fR" 4
+.IX Item "-Wsign-compare"
+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 \fB\-Wall\fR.  In C, it is
+also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wsign\-conversion\fR" 4
+.IX Item "-Wsign-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 \fB\-Wconversion\fR.
+.IP "\fB\-Wfloat\-conversion\fR" 4
+.IX Item "-Wfloat-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
+\&\fB\-Wconversion\fR.
+.IP "\fB\-Wno\-scalar\-storage\-order\fR" 4
+.IX Item "-Wno-scalar-storage-order"
+Do not warn on suspicious constructs involving reverse scalar storage order.
+.IP "\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wsized-deallocation ( and Objective- only)"
+Warn about a definition of an unsized deallocation function
+.Sp
+.Vb 2
+\&        void operator delete (void *) noexcept;
+\&        void operator delete[] (void *) noexcept;
+.Ve
+.Sp
+without a definition of the corresponding sized deallocation function
+.Sp
+.Vb 2
+\&        void operator delete (void *, std::size_t) noexcept;
+\&        void operator delete[] (void *, std::size_t) noexcept;
+.Ve
+.Sp
+or vice versa.  Enabled by \fB\-Wextra\fR along with
+\&\fB\-fsized\-deallocation\fR.
+.IP "\fB\-Wsizeof\-pointer\-div\fR" 4
+.IX Item "-Wsizeof-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 \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is
+not an array, but a pointer.  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wsizeof\-pointer\-memaccess\fR" 4
+.IX Item "-Wsizeof-pointer-memaccess"
+Warn for suspicious length parameters to certain string and memory built-in
+functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning triggers for
+example for \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not
+an array, but a pointer, and suggests a possible fix, or about
+\&\f(CW\*(C`memcpy (&foo, ptr, sizeof (&foo));\*(C'\fR.  \fB\-Wsizeof\-pointer\-memaccess\fR
+also warns about calls to bounded string copy functions like \f(CW\*(C`strncat\*(C'\fR
+or \f(CW\*(C`strncpy\*(C'\fR that specify as the bound a \f(CW\*(C`sizeof\*(C'\fR expression of
+the source array.  For example, in the following function the call to
+\&\f(CW\*(C`strncat\*(C'\fR specifies the size of the source string as the bound.  That
+is almost certainly a mistake and so the call is diagnosed.
+.Sp
+.Vb 7
+\&        void make_file (const char *name)
+\&        {
+\&          char path[PATH_MAX];
+\&          strncpy (path, name, sizeof path \- 1);
+\&          strncat (path, ".text", sizeof ".text");
+\&          ...
+\&        }
+.Ve
+.Sp
+The \fB\-Wsizeof\-pointer\-memaccess\fR option is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wsizeof\-array\-argument\fR" 4
+.IX Item "-Wsizeof-array-argument"
+Warn when the \f(CW\*(C`sizeof\*(C'\fR 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.
+.IP "\fB\-Wmemset\-elt\-size\fR" 4
+.IX Item "-Wmemset-elt-size"
+Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR 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 \fB\-Wall\fR.
+.IP "\fB\-Wmemset\-transposed\-args\fR" 4
+.IX Item "-Wmemset-transposed-args"
+Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function, if the
+second argument is not zero and the third argument is zero.  This warns e.g.@
+about \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR where most probably
+\&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostics
+is only emitted if the third argument is literal zero.  If it is some
+expression that is folded to zero, a cast of zero to some type, etc., 
+it is far less likely that the user has mistakenly exchanged the arguments 
+and no warning is emitted.  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Waddress\fR" 4
+.IX Item "-Waddress"
+Warn about suspicious uses of memory addresses. These include using
+the address of a function in a conditional expression, such as
+\&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
+address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
+uses typically indicate a programmer error: the address of a function
+always evaluates to true, so their use in a conditional usually
+indicate that the programmer forgot the parentheses in a function
+call; and comparisons against string literals result in unspecified
+behavior and are not portable in C, so they usually indicate that the
+programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Wlogical\-op\fR" 4
+.IX Item "-Wlogical-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:
+.Sp
+.Vb 2
+\&        extern int a;
+\&        if (a < 0 && a < 0) { ... }
+.Ve
+.IP "\fB\-Wlogical\-not\-parentheses\fR" 4
+.IX Item "-Wlogical-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:
+.Sp
+.Vb 3
+\&        int a;
+\&        ...
+\&        if (!a > 1) { ... }
+.Ve
+.Sp
+It is possible to suppress the warning by wrapping the \s-1LHS\s0 into
+parentheses:
+.Sp
+.Vb 1
+\&        if ((!a) > 1) { ... }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Waggregate\-return\fR" 4
+.IX Item "-Waggregate-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.)
+.IP "\fB\-Wno\-aggressive\-loop\-optimizations\fR" 4
+.IX Item "-Wno-aggressive-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.
+.IP "\fB\-Wno\-attributes\fR" 4
+.IX Item "-Wno-attributes"
+Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
+unrecognized attributes, function attributes applied to variables,
+etc.  This does not stop errors for incorrect use of supported
+attributes.
+.IP "\fB\-Wno\-builtin\-declaration\-mismatch\fR" 4
+.IX Item "-Wno-builtin-declaration-mismatch"
+Warn if a built-in function is declared with the wrong signature or 
+as non-function.
+This warning is enabled by default.
+.IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
+.IX Item "-Wno-builtin-macro-redefined"
+Do not warn if certain built-in macros are redefined.  This suppresses
+warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
+\&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
+.IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
+.IX Item "-Wstrict-prototypes (C and Objective-C only)"
+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.)
+.IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
+.IX Item "-Wold-style-declaration (C and Objective-C only)"
+Warn for obsolescent usages, according to the C Standard, in a
+declaration. For example, warn if storage-class specifiers like
+\&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
+is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
+.IX Item "-Wold-style-definition (C and Objective-C only)"
+Warn if an old-style function definition is used.  A warning is given
+even if there is a previous prototype.
+.IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
+.IX Item "-Wmissing-parameter-type (C and Objective-C only)"
+A function parameter is declared without a type specifier in K&R\-style
+functions:
+.Sp
+.Vb 1
+\&        void foo(bar) { }
+.Ve
+.Sp
+This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
+.IX Item "-Wmissing-prototypes (C and Objective-C only)"
+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 \fB\-Wmissing\-declarations\fR to detect missing declarations in \*(C+.
+.IP "\fB\-Wmissing\-declarations\fR" 4
+.IX Item "-Wmissing-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 \fB\-Wmissing\-prototypes\fR to detect
+missing prototypes.  In \*(C+, no warnings are issued for function templates,
+or for inline functions, or for functions in anonymous namespaces.
+.IP "\fB\-Wmissing\-field\-initializers\fR" 4
+.IX Item "-Wmissing-field-initializers"
+Warn if a structure's initializer has some fields missing.  For
+example, the following code causes such a warning, because
+\&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        struct s x = { 3, 4 };
+.Ve
+.Sp
+This option does not warn about designated initializers, so the following
+modification does not trigger a warning:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        struct s x = { .f = 3, .g = 4 };
+.Ve
+.Sp
+In C this option does not warn about the universal zero initializer
+\&\fB{ 0 }\fR:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        struct s x = { 0 };
+.Ve
+.Sp
+Likewise, in \*(C+ this option does not warn about the empty { }
+initializer, for example:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        s x = { };
+.Ve
+.Sp
+This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
+warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
+.IP "\fB\-Wno\-multichar\fR" 4
+.IX Item "-Wno-multichar"
+Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) 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.
+.IP "\fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR]" 4
+.IX Item "-Wnormalized=[none|id|nfc|nfkc]"
+In \s-1ISO C\s0 and \s-1ISO \*(C+,\s0 two identifiers are different if they are
+different sequences of characters.  However, sometimes when characters
+outside the basic \s-1ASCII\s0 character set are used, you can have two
+different character sequences that look the same.  To avoid confusion,
+the \s-1ISO 10646\s0 standard sets out some \fInormalization rules\fR which
+when applied ensure that two sequences that look the same are turned into
+the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
+have not been normalized; this option controls that warning.
+.Sp
+There are four levels of warning supported by \s-1GCC.\s0  The default is
+\&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
+not in the \s-1ISO 10646 \*(L"C\*(R"\s0 normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
+recommended form for most uses.  It is equivalent to
+\&\fB\-Wnormalized\fR.
+.Sp
+Unfortunately, there are some characters allowed in identifiers by
+\&\s-1ISO C\s0 and \s-1ISO \*(C+\s0 that, when turned into \s-1NFC,\s0 are not allowed in 
+identifiers.  That is, there's no way to use these symbols in portable
+\&\s-1ISO C\s0 or \*(C+ and have all your identifiers in \s-1NFC.\s0
+\&\fB\-Wnormalized=id\fR 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.
+.Sp
+You can switch the warning off for all characters by writing
+\&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
+only do this if you are using some other normalization scheme (like
+\&\*(L"D\*(R"), because otherwise you can easily create bugs that are
+literally impossible to see.
+.Sp
+Some characters in \s-1ISO 10646\s0 have distinct meanings but look identical
+in some fonts or display methodologies, especially once formatting has
+been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT LATIN SMALL
+LETTER N\*(R",\s0 displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
+placed in a superscript.  \s-1ISO 10646\s0 defines the \fI\s-1NFKC\s0\fR
+normalization scheme to convert all these into a standard form as
+well, and \s-1GCC\s0 warns if your code is not in \s-1NFKC\s0 if you use
+\&\fB\-Wnormalized=nfkc\fR.  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.
+.IP "\fB\-Wno\-deprecated\fR" 4
+.IX Item "-Wno-deprecated"
+Do not warn about usage of deprecated features.
+.IP "\fB\-Wno\-deprecated\-declarations\fR" 4
+.IX Item "-Wno-deprecated-declarations"
+Do not warn about uses of functions,
+variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
+attribute.
+.IP "\fB\-Wno\-overflow\fR" 4
+.IX Item "-Wno-overflow"
+Do not warn about compile-time overflow in constant expressions.
+.IP "\fB\-Wno\-odr\fR" 4
+.IX Item "-Wno-odr"
+Warn about One Definition Rule violations during link-time optimization.
+Requires \fB\-flto\-odr\-type\-merging\fR to be enabled.  Enabled by default.
+.IP "\fB\-Wopenmp\-simd\fR" 4
+.IX Item "-Wopenmp-simd"
+Warn if the vectorizer cost model overrides the OpenMP
+simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
+option can be used to relax the cost model.
+.IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
+.IX Item "-Woverride-init (C and Objective-C only)"
+Warn if an initialized field without side effects is overridden when
+using designated initializers.
+.Sp
+This warning is included in \fB\-Wextra\fR.  To get other
+\&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
+\&\-Wno\-override\-init\fR.
+.IP "\fB\-Woverride\-init\-side\-effects\fR (C and Objective-C only)" 4
+.IX Item "-Woverride-init-side-effects (C and Objective-C only)"
+Warn if an initialized field with side effects is overridden when
+using designated initializers.  This warning is enabled by default.
+.IP "\fB\-Wpacked\fR" 4
+.IX Item "-Wpacked"
+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 \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
+is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
+have the packed attribute:
+.Sp
+.Vb 8
+\&        struct foo {
+\&          int x;
+\&          char a, b, c, d;
+\&        } _\|_attribute_\|_((packed));
+\&        struct bar {
+\&          char z;
+\&          struct foo f;
+\&        };
+.Ve
+.IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
+.IX Item "-Wpacked-bitfield-compat"
+The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
+on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC 4.4\s0 but
+the change can lead to differences in the structure layout.  \s-1GCC\s0
+informs you when the offset of such a field has changed in \s-1GCC 4.4.\s0
+For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
+and \f(CW\*(C`b\*(C'\fR in this structure:
+.Sp
+.Vb 5
+\&        struct foo
+\&        {
+\&          char a:4;
+\&          char b:8;
+\&        } _\|_attribute_\|_ ((packed));
+.Ve
+.Sp
+This warning is enabled by default.  Use
+\&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
+.IP "\fB\-Wpacked\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wpacked-not-aligned (C, , Objective-C and Objective- only)"
+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 \f(CW\*(C`struct S\*(C'\fR, like, \f(CW\*(C`warning: alignment 1 of
+\&\*(Aqstruct S\*(Aq is less than 8\*(C'\fR, in this code:
+.Sp
+.Vb 4
+\&        struct _\|_attribute_\|_ ((aligned (8))) S8 { char a[8]; };
+\&        struct _\|_attribute_\|_ ((packed)) S {
+\&          struct S8 s8;
+\&        };
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wpadded\fR" 4
+.IX Item "-Wpadded"
+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.
+.IP "\fB\-Wredundant\-decls\fR" 4
+.IX Item "-Wredundant-decls"
+Warn if anything is declared more than once in the same scope, even in
+cases where multiple declaration is valid and changes nothing.
+.IP "\fB\-Wno\-restrict\fR" 4
+.IX Item "-Wno-restrict"
+Warn when an object referenced by a \f(CW\*(C`restrict\*(C'\fR\-qualified parameter
+(or, in \*(C+, a \f(CW\*(C`_\|_restrict\*(C'\fR\-qualified parameter) is aliased by another
+argument, or when copies between such objects overlap.  For example,
+the call to the \f(CW\*(C`strcpy\*(C'\fR function below attempts to truncate the string
+by replacing its initial characters with the last four.  However, because
+the call writes the terminating \s-1NUL\s0 into \f(CW\*(C`a[4]\*(C'\fR, the copies overlap and
+the call is diagnosed.
+.Sp
+.Vb 6
+\&        void foo (void)
+\&        {
+\&          char a[] = "abcd1234";
+\&          strcpy (a, a + 4);
+\&          ...
+\&        }
+.Ve
+.Sp
+The \fB\-Wrestrict\fR option detects some instances of simple overlap
+even without optimization but works best at \fB\-O2\fR and above.  It
+is included in \fB\-Wall\fR.
+.IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
+.IX Item "-Wnested-externs (C and Objective-C only)"
+Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
+.IP "\fB\-Wno\-inherited\-variadic\-ctor\fR" 4
+.IX Item "-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.
+.IP "\fB\-Winline\fR" 4
+.IX Item "-Winline"
+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.
+.Sp
+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 \fB\-Winline\fR to appear or disappear.
+.IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-invalid-offsetof ( and Objective- only)"
+Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non-POD
+type.  According to the 2014 \s-1ISO \*(C+\s0 standard, applying \f(CW\*(C`offsetof\*(C'\fR
+to a non-standard-layout type is undefined.  In existing \*(C+ implementations,
+however, \f(CW\*(C`offsetof\*(C'\fR 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.
+.Sp
+The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
+of the \*(C+ standard.
+.IP "\fB\-Wint\-in\-bool\-context\fR" 4
+.IX Item "-Wint-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 \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR.  Or left shifting of signed
+integers in boolean context, like \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR.  Likewise
+for all kinds of multiplications regardless of the data type.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
+.IX Item "-Wno-int-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. \fBWint-to-pointer-cast\fR is enabled by default.
+.IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
+.IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
+Suppress warnings from casts from a pointer to an integer type of a
+different size.
+.IP "\fB\-Winvalid\-pch\fR" 4
+.IX Item "-Winvalid-pch"
+Warn if a precompiled header is found in
+the search path but cannot be used.
+.IP "\fB\-Wlong\-long\fR" 4
+.IX Item "-Wlong-long"
+Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
+\&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in \s-1ISO C90\s0 and \*(C+98
+modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
+.IP "\fB\-Wvariadic\-macros\fR" 4
+.IX Item "-Wvariadic-macros"
+Warn if variadic macros are used in \s-1ISO C90\s0 mode, or if the \s-1GNU\s0
+alternate syntax is used in \s-1ISO C99\s0 mode.  This is enabled by either
+\&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
+messages, use \fB\-Wno\-variadic\-macros\fR.
+.IP "\fB\-Wvarargs\fR" 4
+.IX Item "-Wvarargs"
+Warn upon questionable usage of the macros used to handle variable
+arguments like \f(CW\*(C`va_start\*(C'\fR.  This is default.  To inhibit the
+warning messages, use \fB\-Wno\-varargs\fR.
+.IP "\fB\-Wvector\-operation\-performance\fR" 4
+.IX Item "-Wvector-operation-performance"
+Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
+architecture.  Mainly useful for the performance tuning.
+Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
+scalar operation is performed on every vector element; 
+\&\f(CW\*(C`in parallel\*(C'\fR, which means that the vector operation is implemented
+using scalars of wider type, which normally is more performance efficient;
+and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
+scalar type.
+.IP "\fB\-Wno\-virtual\-move\-assign\fR" 4
+.IX Item "-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.
+.IP "\fB\-Wvla\fR" 4
+.IX Item "-Wvla"
+Warn if a variable-length array is used in the code.
+\&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
+the variable-length array.
+.IP "\fB\-Wvla\-larger\-than=\fR\fIn\fR" 4
+.IX Item "-Wvla-larger-than=n"
+If this option is used, the compiler will warn on uses of
+variable-length arrays where the size is either unbounded, or bounded
+by an argument that can be larger than \fIn\fR bytes.  This is similar
+to how \fB\-Walloca\-larger\-than=\fR\fIn\fR works, but with
+variable-length arrays.
+.Sp
+Note that \s-1GCC\s0 may optimize small variable-length arrays of a known
+value into plain arrays, so this warning may not get triggered for
+such arrays.
+.Sp
+This warning is not enabled by \fB\-Wall\fR, and is only active when
+\&\fB\-ftree\-vrp\fR is active (default for \fB\-O2\fR and above).
+.Sp
+See also \fB\-Walloca\-larger\-than=\fR\fIn\fR.
+.IP "\fB\-Wvolatile\-register\-var\fR" 4
+.IX Item "-Wvolatile-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
+\&\fB\-Wall\fR.
+.IP "\fB\-Wdisabled\-optimization\fR" 4
+.IX Item "-Wdisabled-optimization"
+Warn if a requested optimization pass is disabled.  This warning does
+not generally indicate that there is anything wrong with your code; it
+merely indicates that \s-1GCC\s0's optimizers are unable to handle the code
+effectively.  Often, the problem is that your code is too big or too
+complex; \s-1GCC\s0 refuses to optimize programs when the optimization
+itself is likely to take inordinate amounts of time.
+.IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
+.IX Item "-Wpointer-sign (C and Objective-C only)"
+Warn for pointer argument passing or assignment with different signedness.
+This option is only supported for C and Objective-C.  It is implied by
+\&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
+\&\fB\-Wno\-pointer\-sign\fR.
+.IP "\fB\-Wstack\-protector\fR" 4
+.IX Item "-Wstack-protector"
+This option is only active when \fB\-fstack\-protector\fR is active.  It
+warns about functions that are not protected against stack smashing.
+.IP "\fB\-Woverlength\-strings\fR" 4
+.IX Item "-Woverlength-strings"
+Warn about string constants that are longer than the \*(L"minimum
+maximum\*(R" 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.
+.Sp
+The limit applies \fIafter\fR string constant concatenation, and does
+not count the trailing \s-1NUL.\s0  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+.
+.Sp
+This option is implied by \fB\-Wpedantic\fR, and can be disabled with
+\&\fB\-Wno\-overlength\-strings\fR.
+.IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
+.IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
+Issue a warning for any floating constant that does not have
+a suffix.  When used together with \fB\-Wsystem\-headers\fR it
+warns about such constants in system header files.  This can be useful
+when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
+from the decimal floating-point extension to C99.
+.IP "\fB\-Wno\-designated\-init\fR (C and Objective-C only)" 4
+.IX Item "-Wno-designated-init (C and Objective-C only)"
+Suppress warnings when a positional initializer is used to initialize
+a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
+attribute.
+.IP "\fB\-Whsa\fR" 4
+.IX Item "-Whsa"
+Issue a warning when \s-1HSAIL\s0 cannot be emitted for the compiled function or
+OpenMP construct.
+.SS "Options for Debugging Your Program"
+.IX Subsection "Options for Debugging Your Program"
+To tell \s-1GCC\s0 to emit extra information for use by a debugger, in almost 
+all cases you need only to add \fB\-g\fR to your other options.
+.PP
+\&\s-1GCC\s0 allows you to use \fB\-g\fR with
+\&\fB\-O\fR.  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.
+.PP
+If you are not using some other optimization option, consider
+using \fB\-Og\fR with \fB\-g\fR.  
+With no \fB\-O\fR option at all, some compiler passes that collect
+information useful for debugging do not run at all, so that
+\&\fB\-Og\fR may result in a better debugging experience.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+Produce debugging information in the operating system's native format
+(stabs, \s-1COFF, XCOFF,\s0 or \s-1DWARF\s0).  \s-1GDB\s0 can work with this debugging
+information.
+.Sp
+On most systems that use stabs format, \fB\-g\fR enables use of extra
+debugging information that only \s-1GDB\s0 can use; this extra information
+makes debugging work better in \s-1GDB\s0 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 \fB\-gstabs+\fR, \fB\-gstabs\fR,
+\&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
+.IP "\fB\-ggdb\fR" 4
+.IX Item "-ggdb"
+Produce debugging information for use by \s-1GDB.\s0  This means to use the
+most expressive format available (\s-1DWARF,\s0 stabs, or the native format
+if neither of those are supported), including \s-1GDB\s0 extensions if at all
+possible.
+.IP "\fB\-gdwarf\fR" 4
+.IX Item "-gdwarf"
+.PD 0
+.IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
+.IX Item "-gdwarf-version"
+.PD
+Produce debugging information in \s-1DWARF\s0 format (if that is supported).
+The value of \fIversion\fR may be either 2, 3, 4 or 5; the default version
+for most targets is 4.  \s-1DWARF\s0 Version 5 is only experimental.
+.Sp
+Note that with \s-1DWARF\s0 Version 2, some ports require and always
+use some non-conflicting \s-1DWARF 3\s0 extensions in the unwind tables.
+.Sp
+Version 4 may require \s-1GDB 7.0\s0 and \fB\-fvar\-tracking\-assignments\fR
+for maximum benefit.
+.Sp
+\&\s-1GCC\s0 no longer supports \s-1DWARF\s0 Version 1, which is substantially
+different than Version 2 and later.  For historical reasons, some
+other DWARF-related options such as
+\&\fB\-fno\-dwarf2\-cfi\-asm\fR) retain a reference to \s-1DWARF\s0 Version 2
+in their names, but apply to all currently-supported versions of \s-1DWARF.\s0
+.IP "\fB\-gstabs\fR" 4
+.IX Item "-gstabs"
+Produce debugging information in stabs format (if that is supported),
+without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
+systems.  On \s-1MIPS,\s0 Alpha and System V Release 4 systems this option
+produces stabs debugging output that is not understood by \s-1DBX.\s0
+On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
+.IP "\fB\-gstabs+\fR" 4
+.IX Item "-gstabs+"
+Produce debugging information in stabs format (if that is supported),
+using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program.
+.IP "\fB\-gxcoff\fR" 4
+.IX Item "-gxcoff"
+Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
+This is the format used by the \s-1DBX\s0 debugger on \s-1IBM RS/6000\s0 systems.
+.IP "\fB\-gxcoff+\fR" 4
+.IX Item "-gxcoff+"
+Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
+using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
+assembler (\s-1GAS\s0) to fail with an error.
+.IP "\fB\-gvms\fR" 4
+.IX Item "-gvms"
+Produce debugging information in Alpha/VMS debug format (if that is
+supported).  This is the format used by \s-1DEBUG\s0 on Alpha/VMS systems.
+.IP "\fB\-g\fR\fIlevel\fR" 4
+.IX Item "-glevel"
+.PD 0
+.IP "\fB\-ggdb\fR\fIlevel\fR" 4
+.IX Item "-ggdblevel"
+.IP "\fB\-gstabs\fR\fIlevel\fR" 4
+.IX Item "-gstabslevel"
+.IP "\fB\-gxcoff\fR\fIlevel\fR" 4
+.IX Item "-gxcofflevel"
+.IP "\fB\-gvms\fR\fIlevel\fR" 4
+.IX Item "-gvmslevel"
+.PD
+Request debugging information and also use \fIlevel\fR to specify how
+much information.  The default level is 2.
+.Sp
+Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
+\&\fB\-g\fR.
+.Sp
+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.
+.Sp
+Level 3 includes extra information, such as all the macro definitions
+present in the program.  Some debuggers support macro expansion when
+you use \fB\-g3\fR.
+.Sp
+\&\fB\-gdwarf\fR does not accept a concatenated debug level, to avoid
+confusion with \fB\-gdwarf\-\fR\fIlevel\fR.
+Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
+debug level for \s-1DWARF.\s0
+.IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
+.IX Item "-feliminate-unused-debug-symbols"
+Produce debugging information in stabs format (if that is supported),
+for only symbols that are actually used.
+.IP "\fB\-femit\-class\-debug\-always\fR" 4
+.IX Item "-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 \s-1GCC\s0
+normally emits debugging information for classes because using this
+option increases the size of debugging information by as much as a
+factor of two.
+.IP "\fB\-fno\-merge\-debug\-strings\fR" 4
+.IX Item "-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.
+.IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "-fdebug-prefix-map=old=new"
+When compiling files residing in directory \fI\fIold\fI\fR, record
+debugging information describing them as if the files resided in
+directory \fI\fInew\fI\fR 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
+\&\fI.\fR for \fInew\fR.  This can give more reproducible builds, which
+are location independent, but may require an extra command to tell \s-1GDB\s0
+where to find the source files. See also \fB\-ffile\-prefix\-map\fR.
+.IP "\fB\-fvar\-tracking\fR" 4
+.IX Item "-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).
+.Sp
+It is enabled by default when compiling with optimization (\fB\-Os\fR,
+\&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
+the debug info format supports it.
+.IP "\fB\-fvar\-tracking\-assignments\fR" 4
+.IX Item "-fvar-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 \fB\-gdwarf\-4\fR is recommended along with it.
+.Sp
+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 \fB\-fvar\-tracking\fR,
+except when selective scheduling is enabled.
+.IP "\fB\-gsplit\-dwarf\fR" 4
+.IX Item "-gsplit-dwarf"
+Separate as much \s-1DWARF\s0 debugging information as possible into a
+separate output file with the extension \fI.dwo\fR.  This option allows
+the build system to avoid linking files with debug information.  To
+be useful, this option requires a debugger capable of reading \fI.dwo\fR
+files.
+.IP "\fB\-gpubnames\fR" 4
+.IX Item "-gpubnames"
+Generate \s-1DWARF\s0 \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections.
+.IP "\fB\-ggnu\-pubnames\fR" 4
+.IX Item "-ggnu-pubnames"
+Generate \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections in a format
+suitable for conversion into a \s-1GDB\s0 index.  This option is only useful
+with a linker that can produce \s-1GDB\s0 index version 7.
+.IP "\fB\-fdebug\-types\-section\fR" 4
+.IX Item "-fdebug-types-section"
+When using \s-1DWARF\s0 Version 4 or higher, type DIEs can be put into
+their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
+\&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
+comdat sections since the linker can then remove duplicates.
+But not all \s-1DWARF\s0 consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
+and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
+debugging information.
+.IP "\fB\-grecord\-gcc\-switches\fR" 4
+.IX Item "-grecord-gcc-switches"
+.PD 0
+.IP "\fB\-gno\-record\-gcc\-switches\fR" 4
+.IX Item "-gno-record-gcc-switches"
+.PD
+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 \s-1DWARF\s0 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 \fB\-frecord\-gcc\-switches\fR for another
+way of storing compiler options into the object file.
+.IP "\fB\-gstrict\-dwarf\fR" 4
+.IX Item "-gstrict-dwarf"
+Disallow using extensions of later \s-1DWARF\s0 standard version than selected
+with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
+\&\s-1DWARF\s0 extensions from later standard versions is allowed.
+.IP "\fB\-gno\-strict\-dwarf\fR" 4
+.IX Item "-gno-strict-dwarf"
+Allow using extensions of later \s-1DWARF\s0 standard version than selected with
+\&\fB\-gdwarf\-\fR\fIversion\fR.
+.IP "\fB\-gas\-loc\-support\fR" 4
+.IX Item "-gas-loc-support"
+Inform the compiler that the assembler supports \f(CW\*(C`.loc\*(C'\fR directives.
+It may then use them for the assembler to generate \s-1DWARF2+\s0 line number
+tables.
+.Sp
+This is generally desirable, because assembler-generated line-number
+tables are a lot more compact than those the compiler can generate
+itself.
+.Sp
+This option will be enabled by default if, at \s-1GCC\s0 configure time, the
+assembler was found to support such directives.
+.IP "\fB\-gno\-as\-loc\-support\fR" 4
+.IX Item "-gno-as-loc-support"
+Force \s-1GCC\s0 to generate \s-1DWARF2+\s0 line number tables internally, if \s-1DWARF2+\s0
+line number tables are to be generated.
+.IP "\fBgas-locview-support\fR" 4
+.IX Item "gas-locview-support"
+Inform the compiler that the assembler supports \f(CW\*(C`view\*(C'\fR assignment
+and reset assertion checking in \f(CW\*(C`.loc\*(C'\fR directives.
+.Sp
+This option will be enabled by default if, at \s-1GCC\s0 configure time, the
+assembler was found to support them.
+.IP "\fBgno-as-locview-support\fR" 4
+.IX Item "gno-as-locview-support"
+Force \s-1GCC\s0 to assign view numbers internally, if
+\&\fB\-gvariable\-location\-views\fR are explicitly requested.
+.IP "\fB\-gcolumn\-info\fR" 4
+.IX Item "-gcolumn-info"
+.PD 0
+.IP "\fB\-gno\-column\-info\fR" 4
+.IX Item "-gno-column-info"
+.PD
+Emit location column information into \s-1DWARF\s0 debugging information, rather
+than just file and line.
+This option is enabled by default.
+.IP "\fB\-gstatement\-frontiers\fR" 4
+.IX Item "-gstatement-frontiers"
+.PD 0
+.IP "\fB\-gno\-statement\-frontiers\fR" 4
+.IX Item "-gno-statement-frontiers"
+.PD
+This option causes \s-1GCC\s0 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 \f(CW\*(C`is_stmt\*(C'\fR
+markers in the line number table.  This is enabled by default when
+compiling with optimization (\fB\-Os\fR, \fB\-O\fR, \fB\-O2\fR,
+\&...), and outputting \s-1DWARF 2\s0 debug information at the normal level.
+.IP "\fB\-gvariable\-location\-views\fR" 4
+.IX Item "-gvariable-location-views"
+.PD 0
+.IP "\fB\-gvariable\-location\-views=incompat5\fR" 4
+.IX Item "-gvariable-location-views=incompat5"
+.IP "\fB\-gno\-variable\-location\-views\fR" 4
+.IX Item "-gno-variable-location-views"
+.PD
+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.
+.Sp
+This is enabled by default when outputting \s-1DWARF 2\s0 debug information at
+the normal level, as long as there is assembler support,
+\&\fB\-fvar\-tracking\-assignments\fR is enabled and
+\&\fB\-gstrict\-dwarf\fR is not.  When assembler support is not
+available, this may still be enabled, but it will force \s-1GCC\s0 to output
+internal line number tables, and if
+\&\fB\-ginternal\-reset\-location\-views\fR is not enabled, that will most
+certainly lead to silently mismatching location views.
+.Sp
+There is a proposed representation for view numbers that is not backward
+compatible with the location list format introduced in \s-1DWARF 5,\s0 that can
+be enabled with \fB\-gvariable\-location\-views=incompat5\fR.  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.
+.IP "\fB\-ginternal\-reset\-location\-views\fR" 4
+.IX Item "-ginternal-reset-location-views"
+.PD 0
+.IP "\fB\-gnointernal\-reset\-location\-views\fR" 4
+.IX Item "-gnointernal-reset-location-views"
+.PD
+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 \s-1GNU\s0 assembler will flag
+any such error as a \f(CW\*(C`view number mismatch\*(C'\fR.  This is only enabled
+on ports that define a reliable estimation function.
+.IP "\fB\-ginline\-points\fR" 4
+.IX Item "-ginline-points"
+.PD 0
+.IP "\fB\-gno\-inline\-points\fR" 4
+.IX Item "-gno-inline-points"
+.PD
+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.
+.IP "\fB\-gz\fR[\fB=\fR\fItype\fR]" 4
+.IX Item "-gz[=type]"
+Produce compressed debug sections in \s-1DWARF\s0 format, if that is supported.
+If \fItype\fR is not given, the default type depends on the capabilities
+of the assembler and linker used.  \fItype\fR may be one of
+\&\fBnone\fR (don't compress debug sections), \fBzlib\fR (use zlib
+compression in \s-1ELF\s0 gABI format), or \fBzlib-gnu\fR (use zlib
+compression in traditional \s-1GNU\s0 format).  If the linker doesn't support
+writing compressed debug sections, the option is rejected.  Otherwise,
+if the assembler does not support them, \fB\-gz\fR is silently ignored
+when producing object files.
+.IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
+.IX Item "-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.
+.Sp
+This option substantially reduces the size of debugging information,
+but at significant potential loss in type information to the debugger.
+See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
+See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
+.Sp
+This option works only with \s-1DWARF\s0 debug output.
+.IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
+.IX Item "-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.
+.Sp
+This option significantly reduces the size of debugging information,
+with some potential loss in type information to the debugger.
+See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
+See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
+.Sp
+This option works only with \s-1DWARF\s0 debug output.
+.IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
+.IX Item "-femit-struct-debug-detailed[=spec-list]"
+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.
+.Sp
+This option is a detailed version of
+\&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
+which serves for most needs.
+.Sp
+A specification has the syntax[\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
+.Sp
+The optional first word limits the specification to
+structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
+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
+\&\fBstruct one direct; struct two * indirect;\fR.
+.Sp
+The optional second word limits the specification to
+ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
+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 \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
+.Sp
+The third word specifies the source files for those
+structs for which the compiler should emit debug information.
+The values \fBnone\fR and \fBany\fR have the normal meaning.
+The value \fBbase\fR 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 \fIfoo.c\fR, debug information
+is generated for types declared in that file and \fIfoo.h\fR,
+but not other header files.
+The value \fBsys\fR means those types satisfying \fBbase\fR
+or declared in system or compiler headers.
+.Sp
+You may need to experiment to determine the best settings for your application.
+.Sp
+The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
+.Sp
+This option works only with \s-1DWARF\s0 debug output.
+.IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
+.IX Item "-fno-dwarf2-cfi-asm"
+Emit \s-1DWARF\s0 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
+instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
+.IP "\fB\-fno\-eliminate\-unused\-debug\-types\fR" 4
+.IX Item "-fno-eliminate-unused-debug-types"
+Normally, when producing \s-1DWARF\s0 output, \s-1GCC\s0 avoids producing debug symbol 
+output for types that are nowhere used in the source file being compiled.
+Sometimes it is useful to have \s-1GCC\s0 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.
+.SS "Options That Control Optimization"
+.IX Subsection "Options That Control Optimization"
+These options control various sorts of optimizations.
+.PP
+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.
+.PP
+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.
+.PP
+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.
+.PP
+Not all optimizations are controlled directly by a flag.  Only
+optimizations that have a flag are listed in this section.
+.PP
+Most optimizations are only enabled if an \fB\-O\fR level is set on
+the command line.  Otherwise they are disabled, even if individual
+optimization flags are specified.
+.PP
+Depending on the target and how \s-1GCC\s0 was configured, a slightly different
+set of optimizations may be enabled at each \fB\-O\fR level than
+those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
+to find out the exact set of optimizations that are enabled at each level.
+.IP "\fB\-O\fR" 4
+.IX Item "-O"
+.PD 0
+.IP "\fB\-O1\fR" 4
+.IX Item "-O1"
+.PD
+Optimize.  Optimizing compilation takes somewhat more time, and a lot
+more memory for a large function.
+.Sp
+With \fB\-O\fR, the compiler tries to reduce code size and execution
+time, without performing any optimizations that take a great deal of
+compilation time.
+.Sp
+\&\fB\-O\fR turns on the following optimization flags:
+.Sp
+\&\fB\-fauto\-inc\-dec 
+\&\-fbranch\-count\-reg 
+\&\-fcombine\-stack\-adjustments 
+\&\-fcompare\-elim 
+\&\-fcprop\-registers 
+\&\-fdce 
+\&\-fdefer\-pop 
+\&\-fdelayed\-branch 
+\&\-fdse 
+\&\-fforward\-propagate 
+\&\-fguess\-branch\-probability 
+\&\-fif\-conversion2 
+\&\-fif\-conversion 
+\&\-finline\-functions\-called\-once 
+\&\-fipa\-pure\-const 
+\&\-fipa\-profile 
+\&\-fipa\-reference 
+\&\-fmerge\-constants 
+\&\-fmove\-loop\-invariants 
+\&\-fomit\-frame\-pointer 
+\&\-freorder\-blocks 
+\&\-fshrink\-wrap 
+\&\-fshrink\-wrap\-separate 
+\&\-fsplit\-wide\-types 
+\&\-fssa\-backprop 
+\&\-fssa\-phiopt 
+\&\-ftree\-bit\-ccp 
+\&\-ftree\-ccp 
+\&\-ftree\-ch 
+\&\-ftree\-coalesce\-vars 
+\&\-ftree\-copy\-prop 
+\&\-ftree\-dce 
+\&\-ftree\-dominator\-opts 
+\&\-ftree\-dse 
+\&\-ftree\-forwprop 
+\&\-ftree\-fre 
+\&\-ftree\-phiprop 
+\&\-ftree\-sink 
+\&\-ftree\-slsr 
+\&\-ftree\-sra 
+\&\-ftree\-pta 
+\&\-ftree\-ter 
+\&\-funit\-at\-a\-time\fR
+.IP "\fB\-O2\fR" 4
+.IX Item "-O2"
+Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
+that do not involve a space-speed tradeoff.
+As compared to \fB\-O\fR, this option increases both compilation time
+and the performance of the generated code.
+.Sp
+\&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
+also turns on the following optimization flags:
+\&\fB\-fthread\-jumps 
+\&\-falign\-functions  \-falign\-jumps 
+\&\-falign\-loops  \-falign\-labels 
+\&\-fcaller\-saves 
+\&\-fcrossjumping 
+\&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
+\&\-fdelete\-null\-pointer\-checks 
+\&\-fdevirtualize \-fdevirtualize\-speculatively 
+\&\-fexpensive\-optimizations 
+\&\-fgcse  \-fgcse\-lm  
+\&\-fhoist\-adjacent\-loads 
+\&\-finline\-small\-functions 
+\&\-findirect\-inlining 
+\&\-fipa\-cp 
+\&\-fipa\-bit\-cp 
+\&\-fipa\-vrp 
+\&\-fipa\-sra 
+\&\-fipa\-icf 
+\&\-fisolate\-erroneous\-paths\-dereference 
+\&\-flra\-remat 
+\&\-foptimize\-sibling\-calls 
+\&\-foptimize\-strlen 
+\&\-fpartial\-inlining 
+\&\-fpeephole2 
+\&\-freorder\-blocks\-algorithm=stc 
+\&\-freorder\-blocks\-and\-partition \-freorder\-functions 
+\&\-frerun\-cse\-after\-loop  
+\&\-fsched\-interblock  \-fsched\-spec 
+\&\-fschedule\-insns  \-fschedule\-insns2 
+\&\-fstore\-merging 
+\&\-fstrict\-aliasing 
+\&\-ftree\-builtin\-call\-dce 
+\&\-ftree\-switch\-conversion \-ftree\-tail\-merge 
+\&\-fcode\-hoisting 
+\&\-ftree\-pre 
+\&\-ftree\-vrp 
+\&\-fipa\-ra\fR
+.Sp
+Please note the warning under \fB\-fgcse\fR about
+invoking \fB\-O2\fR on programs that use computed gotos.
+.IP "\fB\-O3\fR" 4
+.IX Item "-O3"
+Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
+by \fB\-O2\fR and also turns on the following optimization flags:
+\&\fB\-finline\-functions 
+\&\-funswitch\-loops 
+\&\-fpredictive\-commoning 
+\&\-fgcse\-after\-reload 
+\&\-ftree\-loop\-vectorize 
+\&\-ftree\-loop\-distribution 
+\&\-ftree\-loop\-distribute\-patterns 
+\&\-floop\-interchange 
+\&\-floop\-unroll\-and\-jam 
+\&\-fsplit\-paths 
+\&\-ftree\-slp\-vectorize 
+\&\-fvect\-cost\-model 
+\&\-ftree\-partial\-pre 
+\&\-fpeel\-loops 
+\&\-fipa\-cp\-clone\fR
+.IP "\fB\-O0\fR" 4
+.IX Item "-O0"
+Reduce compilation time and make debugging produce the expected
+results.  This is the default.
+.IP "\fB\-Os\fR" 4
+.IX Item "-Os"
+Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
+do not typically increase code size.  It also performs further
+optimizations designed to reduce code size.
+.Sp
+\&\fB\-Os\fR disables the following optimization flags:
+\&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
+\&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-algorithm=stc 
+\&\-freorder\-blocks\-and\-partition  \-fprefetch\-loop\-arrays\fR
+.IP "\fB\-Ofast\fR" 4
+.IX Item "-Ofast"
+Disregard strict standards compliance.  \fB\-Ofast\fR enables all
+\&\fB\-O3\fR optimizations.  It also enables optimizations that are not
+valid for all standard-compliant programs.
+It turns on \fB\-ffast\-math\fR and the Fortran-specific
+\&\fB\-fstack\-arrays\fR, unless \fB\-fmax\-stack\-var\-size\fR is
+specified, and \fB\-fno\-protect\-parens\fR.
+.IP "\fB\-Og\fR" 4
+.IX Item "-Og"
+Optimize debugging experience.  \fB\-Og\fR enables optimizations
+that do not interfere with debugging. It 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.
+.PP
+If you use multiple \fB\-O\fR options, with or without level numbers,
+the last such option is the one that is effective.
+.PP
+Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
+flags.  Most flags have both positive and negative forms; the negative
+form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  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 \fBno\-\fR
+or adding it.
+.PP
+The following options control specific optimizations.  They are either
+activated by \fB\-O\fR options or are related to ones that are.  You
+can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
+optimizations to be performed is desired.
+.IP "\fB\-fno\-defer\-pop\fR" 4
+.IX Item "-fno-defer-pop"
+Always pop the arguments to each function call as soon as that function
+returns.  For machines that must pop arguments after a function call,
+the compiler normally lets arguments accumulate on the stack for several
+function calls and pops them all at once.
+.Sp
+Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fforward\-propagate\fR" 4
+.IX Item "-fforward-propagate"
+Perform a forward propagation pass on \s-1RTL.\s0  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.
+.Sp
+This option is enabled by default at optimization levels \fB\-O\fR,
+\&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
+.IX Item "-ffp-contract=style"
+\&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
+\&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
+such as forming of fused multiply-add operations if the target has
+native support for them.
+\&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
+if allowed by the language standard.  This is currently not implemented
+and treated equal to \fB\-ffp\-contract=off\fR.
+.Sp
+The default is \fB\-ffp\-contract=fast\fR.
+.IP "\fB\-fomit\-frame\-pointer\fR" 4
+.IX Item "-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.
+.Sp
+On some targets this flag has no effect because the standard calling sequence
+always uses a frame pointer, so it cannot be omitted.
+.Sp
+Note that \fB\-fno\-omit\-frame\-pointer\fR doesn't guarantee the frame pointer
+is used in all functions.  Several targets always omit the frame pointer in
+leaf functions.
+.Sp
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-foptimize\-sibling\-calls\fR" 4
+.IX Item "-foptimize-sibling-calls"
+Optimize sibling and tail recursive calls.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-foptimize\-strlen\fR" 4
+.IX Item "-foptimize-strlen"
+Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
+\&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
+their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-fno\-inline\fR" 4
+.IX Item "-fno-inline"
+Do not expand any functions inline apart from those marked with
+the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
+optimizing.
+.Sp
+Single functions can be exempted from inlining by marking them
+with the \f(CW\*(C`noinline\*(C'\fR attribute.
+.IP "\fB\-finline\-small\-functions\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-findirect\-inlining\fR" 4
+.IX Item "-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 \fB\-finline\-functions\fR
+or \fB\-finline\-small\-functions\fR options.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-finline\-functions\fR" 4
+.IX Item "-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.
+.Sp
+If all calls to a given function are integrated, and the function is
+declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
+assembler code in its own right.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-finline\-functions\-called\-once\fR" 4
+.IX Item "-finline-functions-called-once"
+Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
+caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
+function is integrated, then the function is not output as assembler code
+in its own right.
+.Sp
+Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
+.IP "\fB\-fearly\-inlining\fR" 4
+.IX Item "-fearly-inlining"
+Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
+smaller than the function call overhead early before doing
+\&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
+makes profiling significantly cheaper and usually inlining faster on programs
+having large chains of nested wrapper functions.
+.Sp
+Enabled by default.
+.IP "\fB\-fipa\-sra\fR" 4
+.IX Item "-fipa-sra"
+Perform interprocedural scalar replacement of aggregates, removal of
+unused parameters and replacement of parameters passed by reference
+by parameters passed by value.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
+.IP "\fB\-finline\-limit=\fR\fIn\fR" 4
+.IX Item "-finline-limit=n"
+By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
+allows coarse control of this limit.  \fIn\fR is the size of functions that
+can be inlined in number of pseudo instructions.
+.Sp
+Inlining is actually controlled by a number of parameters, which may be
+specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
+The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
+as follows:
+.RS 4
+.IP "\fBmax-inline-insns-single\fR" 4
+.IX Item "max-inline-insns-single"
+is set to \fIn\fR/2.
+.IP "\fBmax-inline-insns-auto\fR" 4
+.IX Item "max-inline-insns-auto"
+is set to \fIn\fR/2.
+.RE
+.RS 4
+.Sp
+See below for a documentation of the individual
+parameters controlling inlining and for the defaults of these parameters.
+.Sp
+\&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
+in default behavior.
+.Sp
+\&\fINote:\fR 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.
+.RE
+.IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
+.IX Item "-fno-keep-inline-dllexport"
+This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
+which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
+attribute or declspec.
+.IP "\fB\-fkeep\-inline\-functions\fR" 4
+.IX Item "-fkeep-inline-functions"
+In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
+into the object file, even if the function has been inlined into all
+of its callers.  This switch does not affect functions using the
+\&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU C90.\s0  In \*(C+, emit any and all
+inline functions into the object file.
+.IP "\fB\-fkeep\-static\-functions\fR" 4
+.IX Item "-fkeep-static-functions"
+Emit \f(CW\*(C`static\*(C'\fR functions into the object file, even if the function
+is never used.
+.IP "\fB\-fkeep\-static\-consts\fR" 4
+.IX Item "-fkeep-static-consts"
+Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
+on, even if the variables aren't referenced.
+.Sp
+\&\s-1GCC\s0 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 \fB\-fno\-keep\-static\-consts\fR option.
+.IP "\fB\-fmerge\-constants\fR" 4
+.IX Item "-fmerge-constants"
+Attempt to merge identical constants (string constants and floating-point
+constants) across compilation units.
+.Sp
+This option is the default for optimized compilation if the assembler and
+linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
+behavior.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fmerge\-all\-constants\fR" 4
+.IX Item "-fmerge-all-constants"
+Attempt to merge identical constants and identical variables.
+.Sp
+This option implies \fB\-fmerge\-constants\fR.  In addition to
+\&\fB\-fmerge\-constants\fR 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.
+.IP "\fB\-fmodulo\-sched\fR" 4
+.IX Item "-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.
+.IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
+.IX Item "-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
+\&\fB\-fmodulo\-sched\fR enabled.
+.IP "\fB\-fno\-branch\-count\-reg\fR" 4
+.IX Item "-fno-branch-count-reg"
+Avoid running a pass scanning for opportunities to use \*(L"decrement and
+branch\*(R" instructions on a count register instead of generating sequences
+of instructions 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,
+\&\s-1IA\-64\s0 and S/390.  Note that the \fB\-fno\-branch\-count\-reg\fR option
+doesn't remove the decrement and branch instructions from the generated
+instruction stream introduced by other optimization passes.
+.Sp
+Enabled by default at \fB\-O1\fR and higher.
+.Sp
+The default is \fB\-fbranch\-count\-reg\fR.
+.IP "\fB\-fno\-function\-cse\fR" 4
+.IX Item "-fno-function-cse"
+Do not put function addresses in registers; make each instruction that
+calls a constant function contain the function's address explicitly.
+.Sp
+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.
+.Sp
+The default is \fB\-ffunction\-cse\fR
+.IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
+.IX Item "-fno-zero-initialized-in-bss"
+If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
+are initialized to zero into \s-1BSS.\s0  This can save space in the resulting
+code.
+.Sp
+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.
+.Sp
+The default is \fB\-fzero\-initialized\-in\-bss\fR.
+.IP "\fB\-fthread\-jumps\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fsplit\-wide\-types\fR" 4
+.IX Item "-fsplit-wide-types"
+When using a type that occupies multiple registers, such as \f(CW\*(C`long
+long\*(C'\fR 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.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
+\&\fB\-Os\fR.
+.IP "\fB\-fcse\-follow\-jumps\fR" 4
+.IX Item "-fcse-follow-jumps"
+In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
+when the target of the jump is not reached by any other path.  For
+example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
+\&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 follows the jump when the condition
+tested is false.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fcse\-skip\-blocks\fR" 4
+.IX Item "-fcse-skip-blocks"
+This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
+follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
+encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
+\&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
+body of the \f(CW\*(C`if\*(C'\fR.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-frerun\-cse\-after\-loop\fR" 4
+.IX Item "-frerun-cse-after-loop"
+Re-run common subexpression elimination after loop optimizations are
+performed.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fgcse\fR" 4
+.IX Item "-fgcse"
+Perform a global common subexpression elimination pass.
+This pass also performs global constant and copy propagation.
+.Sp
+\&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
+extension, you may get better run-time performance if you disable
+the global common subexpression elimination pass by adding
+\&\fB\-fno\-gcse\fR to the command line.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fgcse\-lm\fR" 4
+.IX Item "-fgcse-lm"
+When \fB\-fgcse\-lm\fR 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.
+.Sp
+Enabled by default when \fB\-fgcse\fR is enabled.
+.IP "\fB\-fgcse\-sm\fR" 4
+.IX Item "-fgcse-sm"
+When \fB\-fgcse\-sm\fR 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 \fB\-fgcse\-lm\fR,
+loops containing a load/store sequence can be changed to a load before
+the loop and a store after the loop.
+.Sp
+Not enabled at any optimization level.
+.IP "\fB\-fgcse\-las\fR" 4
+.IX Item "-fgcse-las"
+When \fB\-fgcse\-las\fR 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).
+.Sp
+Not enabled at any optimization level.
+.IP "\fB\-fgcse\-after\-reload\fR" 4
+.IX Item "-fgcse-after-reload"
+When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
+pass is performed after reload.  The purpose of this pass is to clean up
+redundant spilling.
+.IP "\fB\-faggressive\-loop\-optimizations\fR" 4
+.IX Item "-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.
+.IP "\fB\-funconstrained\-commons\fR" 4
+.IX Item "-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.
+.IP "\fB\-fcrossjumping\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fauto\-inc\-dec\fR" 4
+.IX Item "-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 \fB\-O\fR and
+higher on architectures that support this.
+.IP "\fB\-fdce\fR" 4
+.IX Item "-fdce"
+Perform dead code elimination (\s-1DCE\s0) on \s-1RTL.\s0
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fdse\fR" 4
+.IX Item "-fdse"
+Perform dead store elimination (\s-1DSE\s0) on \s-1RTL.\s0
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fif\-conversion\fR" 4
+.IX Item "-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 \fB\-fif\-conversion2\fR.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fif\-conversion2\fR" 4
+.IX Item "-fif-conversion2"
+Use conditional execution (where available) to transform conditional jumps into
+branch-less equivalents.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fdeclone\-ctor\-dtor\fR" 4
+.IX Item "-fdeclone-ctor-dtor"
+The \*(C+ \s-1ABI\s0 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.
+.Sp
+Enabled by \fB\-Os\fR.
+.IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
+.IX Item "-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 \s-1GCC\s0 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.
+.Sp
+Note however that in some environments this assumption is not true.
+Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
+for programs that depend on that behavior.
+.Sp
+This option is enabled by default on most targets.  On Nios \s-1II ELF,\s0 it
+defaults to off.  On \s-1AVR, CR16,\s0 and \s-1MSP430,\s0 this option is completely disabled.
+.Sp
+Passes that use the dataflow information
+are enabled independently at different optimization levels.
+.IP "\fB\-fdevirtualize\fR" 4
+.IX Item "-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 (\fB\-findirect\-inlining\fR) and interprocedural constant
+propagation (\fB\-fipa\-cp\fR).
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fdevirtualize\-speculatively\fR" 4
+.IX Item "-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.
+.IP "\fB\-fdevirtualize\-at\-ltrans\fR" 4
+.IX Item "-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.
+.IP "\fB\-fexpensive\-optimizations\fR" 4
+.IX Item "-fexpensive-optimizations"
+Perform a number of minor optimizations that are relatively expensive.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-free\fR" 4
+.IX Item "-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.
+.Sp
+Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
+\&\fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-lifetime\-dse\fR" 4
+.IX Item "-fno-lifetime-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 \fB\-flifetime\-dse=1\fR.  The default behavior can be
+explicitly selected with \fB\-flifetime\-dse=2\fR.
+\&\fB\-flifetime\-dse=0\fR is equivalent to \fB\-fno\-lifetime\-dse\fR.
+.IP "\fB\-flive\-range\-shrinkage\fR" 4
+.IX Item "-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.
+.IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
+.IX Item "-fira-algorithm=algorithm"
+Use the specified coloring algorithm for the integrated register
+allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
+specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, 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.
+.IP "\fB\-fira\-region=\fR\fIregion\fR" 4
+.IX Item "-fira-region=region"
+Use specified regions for the integrated register allocator.  The
+\&\fIregion\fR argument should be one of the following:
+.RS 4
+.IP "\fBall\fR" 4
+.IX 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.
+.IP "\fBmixed\fR" 4
+.IX 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
+(\fB\-O\fR, \fB\-O2\fR, ...).
+.IP "\fBone\fR" 4
+.IX Item "one"
+Use all functions as a single region.  
+This typically results in the smallest code size, and is enabled by default for
+\&\fB\-Os\fR or \fB\-O0\fR.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fira\-hoist\-pressure\fR" 4
+.IX Item "-fira-hoist-pressure"
+Use \s-1IRA\s0 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.
+.Sp
+This option is enabled at level \fB\-Os\fR for all targets.
+.IP "\fB\-fira\-loop\-pressure\fR" 4
+.IX Item "-fira-loop-pressure"
+Use \s-1IRA\s0 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.
+.Sp
+This option is enabled at level \fB\-O3\fR for some targets.
+.IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
+.IX Item "-fno-ira-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.
+.IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
+.IX Item "-fno-ira-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.
+.IP "\fB\-flra\-remat\fR" 4
+.IX Item "-flra-remat"
+Enable CFG-sensitive rematerialization in \s-1LRA.\s0  Instead of loading
+values of spilled pseudos, \s-1LRA\s0 tries to rematerialize (recalculate)
+values if it is profitable.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fdelayed\-branch\fR" 4
+.IX Item "-fdelayed-branch"
+If supported for the target machine, attempt to reorder instructions
+to exploit instruction slots available after delayed branch
+instructions.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fschedule\-insns\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-fschedule\-insns2\fR" 4
+.IX Item "-fschedule-insns2"
+Similar to \fB\-fschedule\-insns\fR, 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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-sched\-interblock\fR" 4
+.IX Item "-fno-sched-interblock"
+Don't schedule instructions across basic blocks.  This is normally
+enabled by default when scheduling before register allocation, i.e.
+with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fno\-sched\-spec\fR" 4
+.IX Item "-fno-sched-spec"
+Don't allow speculative motion of non-load instructions.  This is normally
+enabled by default when scheduling before register allocation, i.e.
+with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-pressure\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR or at
+\&\fB\-O2\fR 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.
+.IP "\fB\-fsched\-spec\-load\fR" 4
+.IX Item "-fsched-spec-load"
+Allow speculative motion of some load instructions.  This only makes
+sense when scheduling before register allocation, i.e. with
+\&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
+.IX Item "-fsched-spec-load-dangerous"
+Allow speculative motion of more load instructions.  This only makes
+sense when scheduling before register allocation, i.e. with
+\&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-stalled\-insns\fR" 4
+.IX Item "-fsched-stalled-insns"
+.PD 0
+.IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
+.IX Item "-fsched-stalled-insns=n"
+.PD
+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.
+\&\fB\-fno\-sched\-stalled\-insns\fR means that no insns are moved
+prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
+on how many queued insns can be moved prematurely.
+\&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
+\&\fB\-fsched\-stalled\-insns=1\fR.
+.IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
+.IX Item "-fsched-stalled-insns-dep"
+.PD 0
+.IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
+.IX Item "-fsched-stalled-insns-dep=n"
+.PD
+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 \fB\-fsched\-stalled\-insns\fR is used.
+\&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
+\&\fB\-fsched\-stalled\-insns\-dep=0\fR.
+\&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
+\&\fB\-fsched\-stalled\-insns\-dep=1\fR.
+.IP "\fB\-fsched2\-use\-superblocks\fR" 4
+.IX Item "-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 \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
+results from the algorithm.
+.Sp
+This only makes sense when scheduling after register allocation, i.e. with
+\&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-group\-heuristic\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR
+or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR
+or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
+or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-rank\-heuristic\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
+at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
+at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
+.IX Item "-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 \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
+at \fB\-O2\fR or higher.
+.IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
+.IX Item "-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.
+.IP "\fB\-fselective\-scheduling\fR" 4
+.IX Item "-fselective-scheduling"
+Schedule instructions using selective scheduling algorithm.  Selective
+scheduling runs instead of the first scheduler pass.
+.IP "\fB\-fselective\-scheduling2\fR" 4
+.IX Item "-fselective-scheduling2"
+Schedule instructions using selective scheduling algorithm.  Selective
+scheduling runs instead of the second scheduler pass.
+.IP "\fB\-fsel\-sched\-pipelining\fR" 4
+.IX Item "-fsel-sched-pipelining"
+Enable software pipelining of innermost loops during selective scheduling.
+This option has no effect unless one of \fB\-fselective\-scheduling\fR or
+\&\fB\-fselective\-scheduling2\fR is turned on.
+.IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
+.IX Item "-fsel-sched-pipelining-outer-loops"
+When pipelining loops during selective scheduling, also pipeline outer loops.
+This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
+.IP "\fB\-fsemantic\-interposition\fR" 4
+.IX Item "-fsemantic-interposition"
+Some object formats, like \s-1ELF,\s0 allow interposing of symbols by the 
+dynamic linker.
+This means that for symbols exported from the \s-1DSO,\s0 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 \fB\-fno\-semantic\-interposition\fR 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.
+.IP "\fB\-fshrink\-wrap\fR" 4
+.IX Item "-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
+\&\fB\-O\fR and higher.
+.IP "\fB\-fshrink\-wrap\-separate\fR" 4
+.IX Item "-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 \fB\-fshrink\-wrap\fR
+is also turned on and the target supports this.
+.IP "\fB\-fcaller\-saves\fR" 4
+.IX Item "-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.
+.Sp
+This option is always enabled by default on certain machines, usually
+those which have no call-preserved registers to use instead.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fcombine\-stack\-adjustments\fR" 4
+.IX Item "-fcombine-stack-adjustments"
+Tracks stack adjustments (pushes and pops) and stack memory references
+and then tries to find ways to combine them.
+.Sp
+Enabled by default at \fB\-O1\fR and higher.
+.IP "\fB\-fipa\-ra\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, however the option
+is disabled if generated code will be instrumented for profiling
+(\fB\-p\fR, or \fB\-pg\fR) or if callee's register usage cannot be known
+exactly (this happens on targets that do not expose prologues
+and epilogues in \s-1RTL\s0).
+.IP "\fB\-fconserve\-stack\fR" 4
+.IX Item "-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 \fBlarge-stack-frame\fR parameter to 100
+and the \fBlarge-stack-frame-growth\fR parameter to 400.
+.IP "\fB\-ftree\-reassoc\fR" 4
+.IX Item "-ftree-reassoc"
+Perform reassociation on trees.  This flag is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-fcode\-hoisting\fR" 4
+.IX Item "-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 \fB\-O2\fR and higher.
+.IP "\fB\-ftree\-pre\fR" 4
+.IX Item "-ftree-pre"
+Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
+enabled by default at \fB\-O2\fR and \fB\-O3\fR.
+.IP "\fB\-ftree\-partial\-pre\fR" 4
+.IX Item "-ftree-partial-pre"
+Make partial redundancy elimination (\s-1PRE\s0) more aggressive.  This flag is
+enabled by default at \fB\-O3\fR.
+.IP "\fB\-ftree\-forwprop\fR" 4
+.IX Item "-ftree-forwprop"
+Perform forward propagation on trees.  This flag is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-fre\fR" 4
+.IX Item "-ftree-fre"
+Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
+between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
+that are computed on all paths leading to the redundant computation.
+This analysis is faster than \s-1PRE,\s0 though it exposes fewer redundancies.
+This flag is enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-phiprop\fR" 4
+.IX Item "-ftree-phiprop"
+Perform hoisting of loads from conditional pointers on trees.  This
+pass is enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fhoist\-adjacent\-loads\fR" 4
+.IX Item "-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 \fB\-O2\fR and higher.
+.IP "\fB\-ftree\-copy\-prop\fR" 4
+.IX Item "-ftree-copy-prop"
+Perform copy propagation on trees.  This pass eliminates unnecessary
+copy operations.  This flag is enabled by default at \fB\-O\fR and
+higher.
+.IP "\fB\-fipa\-pure\-const\fR" 4
+.IX Item "-fipa-pure-const"
+Discover which functions are pure or constant.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fipa\-reference\fR" 4
+.IX Item "-fipa-reference"
+Discover which static variables do not escape the
+compilation unit.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fipa\-pta\fR" 4
+.IX Item "-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.
+.IP "\fB\-fipa\-profile\fR" 4
+.IX Item "-fipa-profile"
+Perform interprocedural profile propagation.  The functions called only from
+cold functions are marked as cold. Also functions executed once (such as
+\&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, 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 \fB\-O\fR and higher.
+.IP "\fB\-fipa\-cp\fR" 4
+.IX Item "-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 \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
+.IP "\fB\-fipa\-cp\-clone\fR" 4
+.IX Item "-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 \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
+This flag is enabled by default at \fB\-O3\fR.
+.IP "\fB\-fipa\-bit\-cp\fR" 4
+.IX Item "-fipa-bit-cp"
+When enabled, perform interprocedural bitwise constant
+propagation. This flag is enabled by default at \fB\-O2\fR. It
+requires that \fB\-fipa\-cp\fR is enabled.
+.IP "\fB\-fipa\-vrp\fR" 4
+.IX Item "-fipa-vrp"
+When enabled, perform interprocedural propagation of value
+ranges. This flag is enabled by default at \fB\-O2\fR. It requires
+that \fB\-fipa\-cp\fR is enabled.
+.IP "\fB\-fipa\-icf\fR" 4
+.IX Item "-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.
+.Sp
+Nevertheless the behavior is similar to Gold Linker \s-1ICF\s0 optimization, \s-1GCC ICF\s0
+works on different levels and thus the optimizations are not same \- there are
+equivalences that are found only by \s-1GCC\s0 and equivalences found only by Gold.
+.Sp
+This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
+.IP "\fB\-fisolate\-erroneous\-paths\-dereference\fR" 4
+.IX Item "-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 \fB\-O2\fR and higher and depends on
+\&\fB\-fdelete\-null\-pointer\-checks\fR also being enabled.
+.IP "\fB\-fisolate\-erroneous\-paths\-attribute\fR" 4
+.IX Item "-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 \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
+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 \fB\-O2\fR in the future.
+.IP "\fB\-ftree\-sink\fR" 4
+.IX Item "-ftree-sink"
+Perform forward store motion on trees.  This flag is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-bit\-ccp\fR" 4
+.IX Item "-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 \fB\-O\fR and higher.  It requires that \fB\-ftree\-ccp\fR is enabled.
+.IP "\fB\-ftree\-ccp\fR" 4
+.IX Item "-ftree-ccp"
+Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
+pass only operates on local scalar variables and is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-fssa\-backprop\fR" 4
+.IX Item "-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 \fB\-O\fR and higher.
+.IP "\fB\-fssa\-phiopt\fR" 4
+.IX Item "-fssa-phiopt"
+Perform pattern matching on \s-1SSA PHI\s0 nodes to optimize conditional
+code.  This pass is enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-switch\-conversion\fR" 4
+.IX Item "-ftree-switch-conversion"
+Perform conversion of simple initializations in a switch to
+initializations from a scalar array.  This flag is enabled by default
+at \fB\-O2\fR and higher.
+.IP "\fB\-ftree\-tail\-merge\fR" 4
+.IX Item "-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 \fB\-O2\fR and higher.  The compilation time
+in this pass can
+be limited using \fBmax-tail-merge-comparisons\fR parameter and
+\&\fBmax-tail-merge-iterations\fR parameter.
+.IP "\fB\-ftree\-dce\fR" 4
+.IX Item "-ftree-dce"
+Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
+default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
+.IX Item "-ftree-builtin-call-dce"
+Perform conditional dead code elimination (\s-1DCE\s0) for calls to built-in functions
+that may set \f(CW\*(C`errno\*(C'\fR but are otherwise free of side effects.  This flag is
+enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
+specified.
+.IP "\fB\-ftree\-dominator\-opts\fR" 4
+.IX Item "-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 \fB\-O\fR and higher.
+.IP "\fB\-ftree\-dse\fR" 4
+.IX Item "-ftree-dse"
+Perform dead store elimination (\s-1DSE\s0) 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 \fB\-O\fR and higher.
+.IP "\fB\-ftree\-ch\fR" 4
+.IX Item "-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 \fB\-O\fR and higher.  It is not enabled
+for \fB\-Os\fR, since it usually increases code size.
+.IP "\fB\-ftree\-loop\-optimize\fR" 4
+.IX Item "-ftree-loop-optimize"
+Perform loop optimizations on trees.  This flag is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-loop\-linear\fR" 4
+.IX Item "-ftree-loop-linear"
+.PD 0
+.IP "\fB\-floop\-strip\-mine\fR" 4
+.IX Item "-floop-strip-mine"
+.IP "\fB\-floop\-block\fR" 4
+.IX Item "-floop-block"
+.PD
+Perform loop nest optimizations.  Same as
+\&\fB\-floop\-nest\-optimize\fR.  To use this code transformation, \s-1GCC\s0 has
+to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
+transformation infrastructure.
+.IP "\fB\-fgraphite\-identity\fR" 4
+.IX Item "-fgraphite-identity"
+Enable the identity transformation for graphite.  For every SCoP we generate
+the polyhedral representation and transform it back to gimple.  Using
+\&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
+\&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
+are also performed by the code generator isl, like index splitting and
+dead code elimination in loops.
+.IP "\fB\-floop\-nest\-optimize\fR" 4
+.IX Item "-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.
+.IP "\fB\-floop\-parallelize\-all\fR" 4
+.IX Item "-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.
+.IP "\fB\-ftree\-coalesce\-vars\fR" 4
+.IX Item "-ftree-coalesce-vars"
+While transforming the program out of the \s-1SSA\s0 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
+\&\fB\-fno\-var\-tracking\-assignments\fR.  In the negated form, this flag
+prevents \s-1SSA\s0 coalescing of user variables.  This option is enabled by
+default if optimization is enabled, and it does very little otherwise.
+.IP "\fB\-ftree\-loop\-if\-convert\fR" 4
+.IX Item "-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.
+.IP "\fB\-ftree\-loop\-distribution\fR" 4
+.IX Item "-ftree-loop-distribution"
+Perform loop distribution.  This flag can improve cache performance on
+big loop bodies and allow further loop optimizations, like
+parallelization or vectorization, to take place.  For example, the loop
+.Sp
+.Vb 4
+\&        DO I = 1, N
+\&          A(I) = B(I) + C
+\&          D(I) = E(I) * F
+\&        ENDDO
+.Ve
+.Sp
+is transformed to
+.Sp
+.Vb 6
+\&        DO I = 1, N
+\&           A(I) = B(I) + C
+\&        ENDDO
+\&        DO I = 1, N
+\&           D(I) = E(I) * F
+\&        ENDDO
+.Ve
+.IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
+.IX Item "-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 \fB\-O3\fR.
+.Sp
+This pass distributes the initialization loops and generates a call to
+memset zero.  For example, the loop
+.Sp
+.Vb 4
+\&        DO I = 1, N
+\&          A(I) = 0
+\&          B(I) = A(I) + I
+\&        ENDDO
+.Ve
+.Sp
+is transformed to
+.Sp
+.Vb 6
+\&        DO I = 1, N
+\&           A(I) = 0
+\&        ENDDO
+\&        DO I = 1, N
+\&           B(I) = A(I) + I
+\&        ENDDO
+.Ve
+.Sp
+and the initialization loop is transformed into a call to memset zero.
+.IP "\fB\-floop\-interchange\fR" 4
+.IX Item "-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
+.Sp
+.Vb 4
+\&        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];
+.Ve
+.Sp
+is transformed to
+.Sp
+.Vb 4
+\&        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];
+.Ve
+.IP "\fB\-ftree\-loop\-im\fR" 4
+.IX Item "-ftree-loop-im"
+Perform loop invariant motion on trees.  This pass moves only invariants that
+are hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
+nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR 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.
+.IP "\fB\-ftree\-loop\-ivcanon\fR" 4
+.IX Item "-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.
+.IP "\fB\-fivopts\fR" 4
+.IX Item "-fivopts"
+Perform induction variable optimizations (strength reduction, induction
+variable merging and induction variable elimination) on trees.
+.IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
+.IX Item "-ftree-parallelize-loops=n"
+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 \fB\-pthread\fR, and thus is only supported on targets
+that have support for \fB\-pthread\fR.
+.IP "\fB\-ftree\-pta\fR" 4
+.IX Item "-ftree-pta"
+Perform function-local points-to analysis on trees.  This flag is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-sra\fR" 4
+.IX Item "-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 \fB\-O\fR and higher.
+.IP "\fB\-fstore\-merging\fR" 4
+.IX Item "-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 \fB\-O2\fR and higher as well as \fB\-Os\fR.
+.IP "\fB\-ftree\-ter\fR" 4
+.IX Item "-ftree-ter"
+Perform temporary expression replacement during the \s-1SSA\-\s0>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 \s-1RTL\s0 generation.  This is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-slsr\fR" 4
+.IX Item "-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 \fB\-O\fR and
+higher.
+.IP "\fB\-ftree\-vectorize\fR" 4
+.IX Item "-ftree-vectorize"
+Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
+and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
+.IP "\fB\-ftree\-loop\-vectorize\fR" 4
+.IX Item "-ftree-loop-vectorize"
+Perform loop vectorization on trees. This flag is enabled by default at
+\&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
+.IP "\fB\-ftree\-slp\-vectorize\fR" 4
+.IX Item "-ftree-slp-vectorize"
+Perform basic block vectorization on trees. This flag is enabled by default at
+\&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
+.IP "\fB\-fvect\-cost\-model=\fR\fImodel\fR" 4
+.IX Item "-fvect-cost-model=model"
+Alter the cost model used for vectorization.  The \fImodel\fR argument
+should be one of \fBunlimited\fR, \fBdynamic\fR or \fBcheap\fR.
+With the \fBunlimited\fR model the vectorized code-path is assumed
+to be profitable while with the \fBdynamic\fR 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 \fBcheap\fR 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 \fBdynamic\fR model.
+The default cost model depends on other optimization flags and is
+either \fBdynamic\fR or \fBcheap\fR.
+.IP "\fB\-fsimd\-cost\-model=\fR\fImodel\fR" 4
+.IX Item "-fsimd-cost-model=model"
+Alter the cost model used for vectorization of loops marked with the OpenMP
+simd directive.  The \fImodel\fR argument should be one of
+\&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
+have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
+default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
+.IP "\fB\-ftree\-vrp\fR" 4
+.IX Item "-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 \fB\-O2\fR and higher.  Null pointer check
+elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
+enabled.
+.IP "\fB\-fsplit\-paths\fR" 4
+.IX Item "-fsplit-paths"
+Split paths leading to loop backedges.  This can improve dead code
+elimination and common subexpression elimination.  This is enabled by
+default at \fB\-O2\fR and above.
+.IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
+.IX Item "-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.
+.Sp
+A combination of \fB\-fweb\fR and \s-1CSE\s0 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 \s-1CSE\s0 pass.
+.Sp
+This optimization is enabled by default.
+.IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
+.IX Item "-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.
+.IP "\fB\-fpartial\-inlining\fR" 4
+.IX Item "-fpartial-inlining"
+Inline parts of functions.  This option has any effect only
+when inlining itself is turned on by the \fB\-finline\-functions\fR
+or \fB\-finline\-small\-functions\fR options.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fpredictive\-commoning\fR" 4
+.IX Item "-fpredictive-commoning"
+Perform predictive commoning optimization, i.e., reusing computations
+(especially memory loads and stores) performed in previous
+iterations of loops.
+.Sp
+This option is enabled at level \fB\-O3\fR.
+.IP "\fB\-fprefetch\-loop\-arrays\fR" 4
+.IX Item "-fprefetch-loop-arrays"
+If supported by the target machine, generate instructions to prefetch
+memory to improve the performance of loops that access large arrays.
+.Sp
+This option may generate better or worse code; results are highly
+dependent on the structure of loops within the source code.
+.Sp
+Disabled at level \fB\-Os\fR.
+.IP "\fB\-fno\-printf\-return\-value\fR" 4
+.IX Item "-fno-printf-return-value"
+Do not substitute constants for known return value of formatted output
+functions such as \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`snprintf\*(C'\fR, \f(CW\*(C`vsprintf\*(C'\fR, and
+\&\f(CW\*(C`vsnprintf\*(C'\fR (but not \f(CW\*(C`printf\*(C'\fR of \f(CW\*(C`fprintf\*(C'\fR).  This
+transformation allows \s-1GCC\s0 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
+\&\fB\-fprintf\-return\-value\fR is in effect, both the branch and the
+body of the \f(CW\*(C`if\*(C'\fR statement (but not the call to \f(CW\*(C`snprint\*(C'\fR)
+can be optimized away when \f(CW\*(C`i\*(C'\fR is a 32\-bit or smaller integer
+because the return value is guaranteed to be at most 8.
+.Sp
+.Vb 3
+\&        char buf[9];
+\&        if (snprintf (buf, "%08x", i) >= sizeof buf)
+\&          ...
+.Ve
+.Sp
+The \fB\-fprintf\-return\-value\fR option relies on other optimizations
+and yields best results with \fB\-O2\fR and above.  It works in tandem
+with the \fB\-Wformat\-overflow\fR and \fB\-Wformat\-truncation\fR
+options.  The \fB\-fprintf\-return\-value\fR option is enabled by default.
+.IP "\fB\-fno\-peephole\fR" 4
+.IX Item "-fno-peephole"
+.PD 0
+.IP "\fB\-fno\-peephole2\fR" 4
+.IX Item "-fno-peephole2"
+.PD
+Disable any machine-specific peephole optimizations.  The difference
+between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
+are implemented in the compiler; some targets use one, some use the
+other, a few use both.
+.Sp
+\&\fB\-fpeephole\fR is enabled by default.
+\&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-guess\-branch\-probability\fR" 4
+.IX Item "-fno-guess-branch-probability"
+Do not guess branch probabilities using heuristics.
+.Sp
+\&\s-1GCC\s0 uses heuristics to guess branch probabilities if they are
+not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
+heuristics are based on the control flow graph.  If some branch probabilities
+are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
+used to guess branch probabilities for the rest of the control flow graph,
+taking the \f(CW\*(C`_\|_builtin_expect\*(C'\fR info into account.  The interactions
+between the heuristics and \f(CW\*(C`_\|_builtin_expect\*(C'\fR can be complex, and in
+some cases, it may be useful to disable the heuristics so that the effects
+of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
+.Sp
+The default is \fB\-fguess\-branch\-probability\fR at levels
+\&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-freorder\-blocks\fR" 4
+.IX Item "-freorder-blocks"
+Reorder basic blocks in the compiled function in order to reduce number of
+taken branches and improve code locality.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR" 4
+.IX Item "-freorder-blocks-algorithm=algorithm"
+Use the specified algorithm for basic block reordering.  The
+\&\fIalgorithm\fR argument can be \fBsimple\fR, which does not increase
+code size (except sometimes due to secondary effects like alignment),
+or \fBstc\fR, the \*(L"software trace cache\*(R" algorithm, which tries to
+put all often executed code together, minimizing the number of branches
+executed by making extra copies of code.
+.Sp
+The default is \fBsimple\fR at levels \fB\-O\fR, \fB\-Os\fR, and
+\&\fBstc\fR at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
+.IX Item "-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 \fI.o\fR files, to improve
+paging and cache locality performance.
+.Sp
+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 \fB\-fsplit\-stack\fR is used this option is not
+enabled by default (to avoid linker errors), but may be enabled
+explicitly (if using a working linker).
+.Sp
+Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-freorder\-functions\fR" 4
+.IX Item "-freorder-functions"
+Reorder functions in the object file in order to
+improve code locality.  This is implemented by using special
+subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
+\&\f(CW\*(C`.text.unlikely\*(C'\fR 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.
+.Sp
+Also profile feedback must be available to make this option effective.  See
+\&\fB\-fprofile\-arcs\fR for details.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fstrict\-aliasing\fR" 4
+.IX Item "-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 \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
+\&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
+type.
+.Sp
+Pay special attention to code like this:
+.Sp
+.Vb 4
+\&        union a_union {
+\&          int i;
+\&          double d;
+\&        };
+\&        
+\&        int f() {
+\&          union a_union t;
+\&          t.d = 3.0;
+\&          return t.i;
+\&        }
+.Ve
+.Sp
+The practice of reading from a different union member than the one most
+recently written to (called \*(L"type-punning\*(R") is common.  Even with
+\&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
+is accessed through the union type.  So, the code above works as
+expected.    However, this code might not:
+.Sp
+.Vb 7
+\&        int f() {
+\&          union a_union t;
+\&          int* ip;
+\&          t.d = 3.0;
+\&          ip = &t.i;
+\&          return *ip;
+\&        }
+.Ve
+.Sp
+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.:
+.Sp
+.Vb 4
+\&        int f() {
+\&          double d = 3.0;
+\&          return ((union a_union *) &d)\->i;
+\&        }
+.Ve
+.Sp
+The \fB\-fstrict\-aliasing\fR option is enabled at levels
+\&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-falign\-functions\fR" 4
+.IX Item "-falign-functions"
+.PD 0
+.IP "\fB\-falign\-functions=\fR\fIn\fR" 4
+.IX Item "-falign-functions=n"
+.PD
+Align the start of functions to the next power-of-two greater than
+\&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
+\&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
+boundary, but \fB\-falign\-functions=24\fR aligns to the next
+32\-byte boundary only if this can be done by skipping 23 bytes or less.
+.Sp
+\&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
+equivalent and mean that functions are not aligned.
+.Sp
+Some assemblers only support this flag when \fIn\fR is a power of two;
+in that case, it is rounded up.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-flimit\-function\-alignment\fR" 4
+.IX 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 \fB\-falign\-functions\fR, but not to
+skip more bytes than the size of the function.
+.IP "\fB\-falign\-labels\fR" 4
+.IX Item "-falign-labels"
+.PD 0
+.IP "\fB\-falign\-labels=\fR\fIn\fR" 4
+.IX Item "-falign-labels=n"
+.PD
+Align all branch targets to a power-of-two boundary, skipping up to
+\&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
+make code slower, because it must insert dummy operations for when the
+branch target is reached in the usual flow of the code.
+.Sp
+\&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
+equivalent and mean that labels are not aligned.
+.Sp
+If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
+are greater than this value, then their values are used instead.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default
+which is very likely to be \fB1\fR, meaning no alignment.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-falign\-loops\fR" 4
+.IX Item "-falign-loops"
+.PD 0
+.IP "\fB\-falign\-loops=\fR\fIn\fR" 4
+.IX Item "-falign-loops=n"
+.PD
+Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
+like \fB\-falign\-functions\fR.  If the loops are
+executed many times, this makes up for any execution of the dummy
+operations.
+.Sp
+\&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
+equivalent and mean that loops are not aligned.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-falign\-jumps\fR" 4
+.IX Item "-falign-jumps"
+.PD 0
+.IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
+.IX Item "-falign-jumps=n"
+.PD
+Align branch targets to a power-of-two boundary, for branch targets
+where the targets can only be reached by jumping, skipping up to \fIn\fR
+bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
+need be executed.
+.Sp
+\&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
+equivalent and mean that loops are not aligned.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-funit\-at\-a\-time\fR" 4
+.IX Item "-funit-at-a-time"
+This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
+has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
+\&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
+.Sp
+Enabled by default.
+.IP "\fB\-fno\-toplevel\-reorder\fR" 4
+.IX Item "-fno-toplevel-reorder"
+Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
+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.
+.Sp
+Enabled at level \fB\-O0\fR.  When disabled explicitly, it also implies
+\&\fB\-fno\-section\-anchors\fR, which is otherwise enabled at \fB\-O0\fR on some
+targets.
+.IP "\fB\-fweb\fR" 4
+.IX Item "-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 \s-1CSE,\s0 loop optimizer and trivial dead code remover.  It can,
+however, make debugging impossible, since variables no longer stay in a
+\&\*(L"home register\*(R".
+.Sp
+Enabled by default with \fB\-funroll\-loops\fR.
+.IP "\fB\-fwhole\-program\fR" 4
+.IX Item "-fwhole-program"
+Assume that the current compilation unit represents the whole program being
+compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
+and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
+and in effect are optimized more aggressively by interprocedural optimizers.
+.Sp
+This option should not be used in combination with \fB\-flto\fR.
+Instead relying on a linker plugin should provide safer and more precise
+information.
+.IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
+.IX Item "-flto[=n]"
+This option runs the standard link-time optimizer.  When invoked
+with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
+representations) and writes it to special \s-1ELF\s0 sections in the object
+file.  When the object files are linked together, all the function
+bodies are read from these \s-1ELF\s0 sections and instantiated as if they
+had been part of the same translation unit.
+.Sp
+To use the link-time optimizer, \fB\-flto\fR 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:
+.Sp
+.Vb 3
+\&        gcc \-c \-O2 \-flto foo.c
+\&        gcc \-c \-O2 \-flto bar.c
+\&        gcc \-o myprog \-flto \-O2 foo.o bar.o
+.Ve
+.Sp
+The first two invocations to \s-1GCC\s0 save a bytecode representation
+of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
+\&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
+\&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
+internal image, and compiles the result as usual.  Since both
+\&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
+causes all the interprocedural analyses and optimizations in \s-1GCC\s0 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
+\&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
+.Sp
+Another (simpler) way to enable link-time optimization is:
+.Sp
+.Vb 1
+\&        gcc \-o myprog \-flto \-O2 foo.c bar.c
+.Ve
+.Sp
+The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
+merges them together into a single \s-1GIMPLE\s0 representation and optimizes
+them as usual to produce \fImyprog\fR.
+.Sp
+The only important thing to keep in mind is that to enable link-time
+optimizations you need to use the \s-1GCC\s0 driver to perform the link step.
+\&\s-1GCC\s0 then automatically performs link-time optimization if any of the
+objects involved were compiled with the \fB\-flto\fR command-line option.  
+You generally
+should specify the optimization options to be used for link-time
+optimization though \s-1GCC\s0 tries to be clever at guessing an
+optimization level to use from the options used at compile time
+if you fail to specify one at link time.  You can always override
+the automatic decision to do link-time optimization
+by passing \fB\-fno\-lto\fR to the link command.
+.Sp
+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 \fB\-fuse\-linker\-plugin\fR) passes information
+to the compiler about used and externally visible symbols.  When
+the linker plugin is not available, \fB\-fwhole\-program\fR should be
+used to allow the compiler to make these assumptions, which leads
+to more aggressive optimization decisions.
+.Sp
+When \fB\-fuse\-linker\-plugin\fR is not enabled, when a file is
+compiled with \fB\-flto\fR, the generated object file is larger than
+a regular object file because it contains \s-1GIMPLE\s0 bytecodes and the usual
+final code (see \fB\-ffat\-lto\-objects\fR.  This means that
+object files with \s-1LTO\s0 information can be linked as normal object
+files; if \fB\-fno\-lto\fR is passed to the linker, no
+interprocedural optimizations are applied.  Note that when
+\&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile stage is faster
+but you cannot perform a regular, non-LTO link on them.
+.Sp
+Additionally, the optimization flags used to compile individual files
+are not necessarily related to those used at link time.  For instance,
+.Sp
+.Vb 3
+\&        gcc \-c \-O0 \-ffat\-lto\-objects \-flto foo.c
+\&        gcc \-c \-O0 \-ffat\-lto\-objects \-flto bar.c
+\&        gcc \-o myprog \-O3 foo.o bar.o
+.Ve
+.Sp
+This produces individual object files with unoptimized assembler
+code, but the resulting binary \fImyprog\fR is optimized at
+\&\fB\-O3\fR.  If, instead, the final binary is generated with
+\&\fB\-fno\-lto\fR, then \fImyprog\fR is not optimized.
+.Sp
+When producing the final binary, \s-1GCC\s0 only
+applies link-time optimizations to those files that contain bytecode.
+Therefore, you can mix and match object files and libraries with
+\&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
+which files to optimize in \s-1LTO\s0 mode and which files to link without
+further processing.
+.Sp
+There are some code generation flags preserved by \s-1GCC\s0 when
+generating bytecodes, as they need to be used during the final link
+stage.  Generally options specified at link time override those
+specified at compile time.
+.Sp
+If you do not specify an optimization level option \fB\-O\fR at
+link time, then \s-1GCC\s0 uses the highest optimization level 
+used when compiling the object files.
+.Sp
+Currently, the following options and their settings are taken from
+the first object file that explicitly specifies them: 
+\&\fB\-fPIC\fR, \fB\-fpic\fR, \fB\-fpie\fR, \fB\-fcommon\fR,
+\&\fB\-fexceptions\fR, \fB\-fnon\-call\-exceptions\fR, \fB\-fgnu\-tm\fR
+and all the \fB\-m\fR target flags.
+.Sp
+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 \fB\-freg\-struct\-return\fR
+and \fB\-fpcc\-struct\-return\fR.
+.Sp
+Other options such as \fB\-ffp\-contract\fR, \fB\-fno\-strict\-overflow\fR,
+\&\fB\-fwrapv\fR, \fB\-fno\-trapv\fR or \fB\-fno\-strict\-aliasing\fR
+are passed through to the link stage and merged conservatively for
+conflicting translation units.  Specifically
+\&\fB\-fno\-strict\-overflow\fR, \fB\-fwrapv\fR and \fB\-fno\-trapv\fR take
+precedence; and for example \fB\-ffp\-contract=off\fR takes precedence
+over \fB\-ffp\-contract=fast\fR.  You can override them at link time.
+.Sp
+If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
+types in separate translation units to be linked together (undefined
+behavior according to \s-1ISO C99 6.2.7\s0), a non-fatal diagnostic may be
+issued.  The behavior is still undefined at run time.  Similar
+diagnostics may be raised for other languages.
+.Sp
+Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
+optimizations on files written in different languages:
+.Sp
+.Vb 4
+\&        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
+.Ve
+.Sp
+Notice that the final link is done with \fBg++\fR to get the \*(C+
+runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
+runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
+should use the same link command options as when mixing languages in a
+regular (non-LTO) compilation.
+.Sp
+If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
+\&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
+are using a linker with plugin support.  To create static libraries suitable
+for \s-1LTO,\s0 use \fBgcc-ar\fR and \fBgcc-ranlib\fR instead of \fBar\fR
+and \fBranlib\fR; 
+to show the symbols of object files with \s-1GIMPLE\s0 bytecode, use
+\&\fBgcc-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
+and \fBnm\fR have been compiled with plugin support.  At link time, use the the
+flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
+the \s-1LTO\s0 optimization process:
+.Sp
+.Vb 1
+\&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
+.Ve
+.Sp
+With the linker plugin enabled, the linker extracts the needed
+\&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
+to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
+.Sp
+If you are not using a linker with plugin support and/or do not
+enable the linker plugin, then the objects inside \fIlibfoo.a\fR
+are extracted and linked as usual, but they do not participate
+in the \s-1LTO\s0 optimization process.  In order to make a static library suitable
+for both \s-1LTO\s0 optimization and usual linkage, compile its object files with
+\&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
+.Sp
+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 \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
+the interprocedural optimizers to use more aggressive assumptions which may
+lead to improved optimization opportunities.
+Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
+active (see \fB\-fuse\-linker\-plugin\fR).
+.Sp
+The current implementation of \s-1LTO\s0 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
+\&\s-1GCC\s0 do not work with an older or newer version of \s-1GCC.\s0
+.Sp
+Link-time optimization does not work well with generation of debugging
+information on systems other than those using a combination of \s-1ELF\s0 and
+\&\s-1DWARF.\s0
+.Sp
+If you specify the optional \fIn\fR, the optimization and code
+generation done at link time is executed in parallel using \fIn\fR
+parallel jobs by utilizing an installed \fBmake\fR program.  The
+environment variable \fB\s-1MAKE\s0\fR may be used to override the program
+used.  The default value for \fIn\fR is 1.
+.Sp
+You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
+job server mode to determine the number of parallel jobs. This
+is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
+You must prepend a \fB+\fR to the command recipe in the parent Makefile
+for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
+\&\s-1GNU\s0 make.
+.IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
+.IX Item "-flto-partition=alg"
+Specify the partitioning algorithm used by the link-time optimizer.
+The value is either \fB1to1\fR to specify a partitioning mirroring
+the original source files or \fBbalanced\fR to specify partitioning
+into equally sized chunks (whenever possible) or \fBmax\fR to create
+new partition for every symbol where possible.  Specifying \fBnone\fR
+as an algorithm disables partitioning and streaming completely. 
+The default value is \fBbalanced\fR. While \fB1to1\fR can be used
+as an workaround for various code ordering issues, the \fBmax\fR
+partitioning is intended for internal testing only.
+The value \fBone\fR specifies that exactly one partition should be
+used while the value \fBnone\fR bypasses partitioning and executes
+the link-time optimization step directly from the \s-1WPA\s0 phase.
+.IP "\fB\-flto\-odr\-type\-merging\fR" 4
+.IX Item "-flto-odr-type-merging"
+Enable streaming of mangled types names of \*(C+ types and their unification
+at link time.  This increases size of \s-1LTO\s0 object files, but enables
+diagnostics about One Definition Rule violations.
+.IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
+.IX Item "-flto-compression-level=n"
+This option specifies the level of compression used for intermediate
+language written to \s-1LTO\s0 object files, and is only meaningful in
+conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  Valid
+values are 0 (no compression) to 9 (maximum compression).  Values
+outside this range are clamped to either 0 or 9.  If the option is not
+given, a default balanced compression setting is used.
+.IP "\fB\-fuse\-linker\-plugin\fR" 4
+.IX Item "-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 \s-1GNU\s0 ld 2.21 or newer.
+.Sp
+This option enables the extraction of object files with \s-1GIMPLE\s0 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 \fB\-fwhole\-program\fR.
+See \fB\-flto\fR for a description of the effect of this flag and how to
+use it.
+.Sp
+This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
+and \s-1GCC\s0 was configured for use with
+a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
+.IP "\fB\-ffat\-lto\-objects\fR" 4
+.IX Item "-ffat-lto-objects"
+Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
+and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
+linking. This option is effective only when compiling with \fB\-flto\fR
+and is ignored at link time.
+.Sp
+\&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO,\s0 but
+requires the complete toolchain to be aware of \s-1LTO.\s0 It requires a linker with
+linker plugin support for basic functionality.  Additionally,
+\&\fBnm\fR, \fBar\fR and \fBranlib\fR
+need to support linker plugins to allow a full-featured build environment
+(capable of building static libraries etc).  \s-1GCC\s0 provides the \fBgcc-ar\fR,
+\&\fBgcc-nm\fR, \fBgcc-ranlib\fR wrappers to pass the right options
+to these tools. With non fat \s-1LTO\s0 makefiles need to be modified to use them.
+.Sp
+Note that modern binutils provide plugin auto-load mechanism.
+Installing the linker plugin into \fI\f(CI$libdir\fI/bfd\-plugins\fR has the same
+effect as usage of the command wrappers (\fBgcc-ar\fR, \fBgcc-nm\fR and
+\&\fBgcc-ranlib\fR).
+.Sp
+The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
+support.
+.IP "\fB\-fcompare\-elim\fR" 4
+.IX Item "-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.
+.Sp
+This pass only applies to certain targets that cannot explicitly represent
+the comparison operation before register allocation is complete.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fcprop\-registers\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fprofile\-correction\fR" 4
+.IX Item "-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,
+\&\s-1GCC\s0 uses heuristics to correct or smooth out such inconsistencies. By
+default, \s-1GCC\s0 emits an error message when an inconsistent profile is detected.
+.IP "\fB\-fprofile\-use\fR" 4
+.IX Item "-fprofile-use"
+.PD 0
+.IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
+.IX Item "-fprofile-use=path"
+.PD
+Enable profile feedback-directed optimizations, 
+and the following optimizations
+which are generally profitable only with profile feedback available:
+\&\fB\-fbranch\-probabilities\fR, \fB\-fvpt\fR,
+\&\fB\-funroll\-loops\fR, \fB\-fpeel\-loops\fR, \fB\-ftracer\fR, 
+\&\fB\-ftree\-vectorize\fR, and \fBftree-loop-distribute-patterns\fR.
+.Sp
+Before you can use this option, you must first generate profiling information.
+.Sp
+By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
+match the source code.  This error can be turned into a warning by using
+\&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
+code.
+.Sp
+If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
+the profile feedback data files. See \fB\-fprofile\-dir\fR.
+.IP "\fB\-fauto\-profile\fR" 4
+.IX Item "-fauto-profile"
+.PD 0
+.IP "\fB\-fauto\-profile=\fR\fIpath\fR" 4
+.IX Item "-fauto-profile=path"
+.PD
+Enable sampling-based feedback-directed optimizations, 
+and the following optimizations
+which are generally profitable only with profile feedback available:
+\&\fB\-fbranch\-probabilities\fR, \fB\-fvpt\fR,
+\&\fB\-funroll\-loops\fR, \fB\-fpeel\-loops\fR, \fB\-ftracer\fR, 
+\&\fB\-ftree\-vectorize\fR,
+\&\fB\-finline\-functions\fR, \fB\-fipa\-cp\fR, \fB\-fipa\-cp\-clone\fR,
+\&\fB\-fpredictive\-commoning\fR, \fB\-funswitch\-loops\fR,
+\&\fB\-fgcse\-after\-reload\fR, and \fB\-ftree\-loop\-distribute\-patterns\fR.
+.Sp
+\&\fIpath\fR is the name of a file containing AutoFDO profile information.
+If omitted, it defaults to \fIfbdata.afdo\fR in the current directory.
+.Sp
+Producing an AutoFDO profile data file requires running your program
+with the \fBperf\fR utility on a supported GNU/Linux target system.
+For more information, see <\fBhttps://perf.wiki.kernel.org/\fR>.
+.Sp
+E.g.
+.Sp
+.Vb 2
+\&        perf record \-e br_inst_retired:near_taken \-b \-o perf.data \e
+\&            \-\- your_program
+.Ve
+.Sp
+Then use the \fBcreate_gcov\fR tool to convert the raw profile data
+to a format that can be used by \s-1GCC.\s0  You must also supply the 
+unstripped binary for your program to this tool.  
+See <\fBhttps://github.com/google/autofdo\fR>.
+.Sp
+E.g.
+.Sp
+.Vb 2
+\&        create_gcov \-\-binary=your_program.unstripped \-\-profile=perf.data \e
+\&            \-\-gcov=profile.afdo
+.Ve
+.PP
+The following options control compiler behavior regarding floating-point 
+arithmetic.  These options trade off between speed and
+correctness.  All must be specifically enabled.
+.IP "\fB\-ffloat\-store\fR" 4
+.IX Item "-ffloat-store"
+Do not store floating-point variables in registers, and inhibit other
+options that might change whether a floating-point value is taken from a
+register or memory.
+.Sp
+This option prevents undesirable excess precision on machines such as
+the 68000 where the floating registers (of the 68881) keep more
+precision than a \f(CW\*(C`double\*(C'\fR 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 \s-1IEEE\s0 floating
+point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
+them to store all pertinent intermediate computations into variables.
+.IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
+.IX Item "-fexcess-precision=style"
+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 \s-1IEEE\s0 standard and interchange floating-point types.  By
+default, \fB\-fexcess\-precision=fast\fR is in effect; this means that
+operations may be carried out in a wider precision than the types specified
+in the source if that would result in faster code, and it is unpredictable
+when rounding to the types specified in the source code takes place.
+When compiling C, if \fB\-fexcess\-precision=standard\fR is specified then
+excess precision follows the rules specified in \s-1ISO C99\s0; in particular,
+both casts and assignments cause values to be rounded to their
+semantic types (whereas \fB\-ffloat\-store\fR only affects
+assignments).  This option is enabled by default for C if a strict
+conformance option such as \fB\-std=c99\fR is used.
+\&\fB\-ffast\-math\fR enables \fB\-fexcess\-precision=fast\fR by default
+regardless of whether a strict conformance option is used.
+.Sp
+\&\fB\-fexcess\-precision=standard\fR is not implemented for languages
+other than C.  On the x86, it has no effect if \fB\-mfpmath=sse\fR
+or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
+semantics apply without excess precision, and in the latter, rounding
+is unpredictable.
+.IP "\fB\-ffast\-math\fR" 4
+.IX Item "-ffast-math"
+Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
+\&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
+\&\fB\-fno\-signaling\-nans\fR, \fB\-fcx\-limited\-range\fR and
+\&\fB\-fexcess\-precision=fast\fR.
+.Sp
+This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
+.Sp
+This option is not turned on by any \fB\-O\fR option besides
+\&\fB\-Ofast\fR since it can result in incorrect output for programs
+that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
+for math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+.IP "\fB\-fno\-math\-errno\fR" 4
+.IX Item "-fno-math-errno"
+Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
+with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
+\&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
+for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
+.Sp
+This option is not turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+.Sp
+The default is \fB\-fmath\-errno\fR.
+.Sp
+On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
+therefore no reason for the compiler to consider the possibility that
+it might, and \fB\-fno\-math\-errno\fR is the default.
+.IP "\fB\-funsafe\-math\-optimizations\fR" 4
+.IX Item "-funsafe-math-optimizations"
+Allow optimizations for floating-point arithmetic that (a) assume
+that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
+\&\s-1ANSI\s0 standards.  When used at link time, it may include libraries
+or startup files that change the default \s-1FPU\s0 control word or other
+similar optimizations.
+.Sp
+This option is not turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
+\&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
+.Sp
+The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
+.IP "\fB\-fassociative\-math\fR" 4
+.IX Item "-fassociative-math"
+Allow re-association of operands in series of floating-point operations.
+This violates the \s-1ISO C\s0 and \*(C+ language standard by possibly changing
+computation result.  \s-1NOTE:\s0 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
+\&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
+and thus may not be used when ordered comparisons are required.
+This option requires that both \fB\-fno\-signed\-zeros\fR and
+\&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
+much sense with \fB\-frounding\-math\fR. For Fortran the option
+is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
+\&\fB\-fno\-trapping\-math\fR are in effect.
+.Sp
+The default is \fB\-fno\-associative\-math\fR.
+.IP "\fB\-freciprocal\-math\fR" 4
+.IX Item "-freciprocal-math"
+Allow the reciprocal of a value to be used instead of dividing by
+the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
+can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR, which is useful if \f(CW\*(C`(1/y)\*(C'\fR
+is subject to common subexpression elimination.  Note that this loses
+precision and increases the number of flops operating on the value.
+.Sp
+The default is \fB\-fno\-reciprocal\-math\fR.
+.IP "\fB\-ffinite\-math\-only\fR" 4
+.IX Item "-ffinite-math-only"
+Allow optimizations for floating-point arithmetic that assume
+that arguments and results are not NaNs or +\-Infs.
+.Sp
+This option is not turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+.Sp
+The default is \fB\-fno\-finite\-math\-only\fR.
+.IP "\fB\-fno\-signed\-zeros\fR" 4
+.IX Item "-fno-signed-zeros"
+Allow optimizations for floating-point arithmetic that ignore the
+signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
+distinct +0.0 and \-0.0 values, which then prohibits simplification
+of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
+This option implies that the sign of a zero result isn't significant.
+.Sp
+The default is \fB\-fsigned\-zeros\fR.
+.IP "\fB\-fno\-trapping\-math\fR" 4
+.IX Item "-fno-trapping-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 \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
+allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
+.Sp
+This option should never be turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions.
+.Sp
+The default is \fB\-ftrapping\-math\fR.
+.IP "\fB\-frounding\-math\fR" 4
+.IX Item "-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 \s-1FP\s0 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.
+.Sp
+The default is \fB\-fno\-rounding\-math\fR.
+.Sp
+This option is experimental and does not currently guarantee to
+disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
+Future versions of \s-1GCC\s0 may provide finer control of this setting
+using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
+will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
+.IP "\fB\-fsignaling\-nans\fR" 4
+.IX Item "-fsignaling-nans"
+Compile code assuming that \s-1IEEE\s0 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 \fB\-ftrapping\-math\fR.
+.Sp
+This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
+be defined.
+.Sp
+The default is \fB\-fno\-signaling\-nans\fR.
+.Sp
+This option is experimental and does not currently guarantee to
+disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
+.IP "\fB\-fno\-fp\-int\-builtin\-inexact\fR" 4
+.IX Item "-fno-fp-int-builtin-inexact"
+Do not allow the built-in functions \f(CW\*(C`ceil\*(C'\fR, \f(CW\*(C`floor\*(C'\fR,
+\&\f(CW\*(C`round\*(C'\fR and \f(CW\*(C`trunc\*(C'\fR, and their \f(CW\*(C`float\*(C'\fR and \f(CW\*(C`long
+double\*(C'\fR variants, to generate code that raises the \*(L"inexact\*(R"
+floating-point exception for noninteger arguments.  \s-1ISO C99\s0 and C11
+allow these functions to raise the \*(L"inexact\*(R" exception, but \s-1ISO/IEC
+TS 18661\-1:2014,\s0 the C bindings to \s-1IEEE 754\-2008,\s0 does not allow these
+functions to do so.
+.Sp
+The default is \fB\-ffp\-int\-builtin\-inexact\fR, allowing the
+exception to be raised.  This option does nothing unless
+\&\fB\-ftrapping\-math\fR is in effect.
+.Sp
+Even if \fB\-fno\-fp\-int\-builtin\-inexact\fR is used, if the functions
+generate a call to a library function then the \*(L"inexact\*(R" exception
+may be raised if the library implementation does not follow \s-1TS 18661.\s0
+.IP "\fB\-fsingle\-precision\-constant\fR" 4
+.IX Item "-fsingle-precision-constant"
+Treat floating-point constants as single precision instead of
+implicitly converting them to double-precision constants.
+.IP "\fB\-fcx\-limited\-range\fR" 4
+.IX Item "-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 \f(CW\*(C`NaN
++ I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
+default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
+\&\fB\-ffast\-math\fR.
+.Sp
+This option controls the default setting of the \s-1ISO C99\s0
+\&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
+all languages.
+.IP "\fB\-fcx\-fortran\-rules\fR" 4
+.IX Item "-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 \f(CW\*(C`NaN
++ I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
+.Sp
+The default is \fB\-fno\-cx\-fortran\-rules\fR.
+.PP
+The following options control optimizations that may improve
+performance, but are not enabled by any \fB\-O\fR options.  This
+section includes experimental options that may produce broken code.
+.IP "\fB\-fbranch\-probabilities\fR" 4
+.IX Item "-fbranch-probabilities"
+After running a program compiled with \fB\-fprofile\-arcs\fR,
+you can compile it a second time using
+\&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
+the number of times each branch was taken.  When a program
+compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
+counts to a file called \fI\fIsourcename\fI.gcda\fR 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.
+.Sp
+With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
+\&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
+These can be used to improve optimization.  Currently, they are only
+used in one place: in \fIreorg.c\fR, instead of guessing which path a
+branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
+exactly determine which path is taken more often.
+.IP "\fB\-fprofile\-values\fR" 4
+.IX Item "-fprofile-values"
+If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
+data about values of expressions in the program is gathered.
+.Sp
+With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
+from profiling values of expressions for usage in optimizations.
+.Sp
+Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
+.IP "\fB\-fprofile\-reorder\-functions\fR" 4
+.IX Item "-fprofile-reorder-functions"
+Function reordering based on profile instrumentation collects
+first time of execution of a function and orders these functions
+in ascending order.
+.Sp
+Enabled with \fB\-fprofile\-use\fR.
+.IP "\fB\-fvpt\fR" 4
+.IX Item "-fvpt"
+If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
+to add code to gather information about values of expressions.
+.Sp
+With \fB\-fbranch\-probabilities\fR, 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.
+.IP "\fB\-frename\-registers\fR" 4
+.IX Item "-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 \*(L"home register\*(R".
+.Sp
+Enabled by default with \fB\-funroll\-loops\fR.
+.IP "\fB\-fschedule\-fusion\fR" 4
+.IX Item "-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.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-ftracer\fR" 4
+.IX Item "-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.
+.Sp
+Enabled with \fB\-fprofile\-use\fR.
+.IP "\fB\-funroll\-loops\fR" 4
+.IX Item "-funroll-loops"
+Unroll loops whose number of iterations can be determined at compile time or
+upon entry to the loop.  \fB\-funroll\-loops\fR implies
+\&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
+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.
+.Sp
+Enabled with \fB\-fprofile\-use\fR.
+.IP "\fB\-funroll\-all\-loops\fR" 4
+.IX Item "-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.
+\&\fB\-funroll\-all\-loops\fR implies the same options as
+\&\fB\-funroll\-loops\fR.
+.IP "\fB\-fpeel\-loops\fR" 4
+.IX Item "-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).
+.Sp
+Enabled with \fB\-O3\fR and/or \fB\-fprofile\-use\fR.
+.IP "\fB\-fmove\-loop\-invariants\fR" 4
+.IX Item "-fmove-loop-invariants"
+Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
+at level \fB\-O1\fR
+.IP "\fB\-fsplit\-loops\fR" 4
+.IX Item "-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.
+.IP "\fB\-funswitch\-loops\fR" 4
+.IX Item "-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).
+.IP "\fB\-floop\-unroll\-and\-jam\fR" 4
+.IX Item "-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.
+.IP "\fB\-ffunction\-sections\fR" 4
+.IX Item "-ffunction-sections"
+.PD 0
+.IP "\fB\-fdata\-sections\fR" 4
+.IX Item "-fdata-sections"
+.PD
+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.
+.Sp
+Use these options on systems where the linker can perform optimizations to
+improve locality of reference in the instruction space.  Most systems using the
+\&\s-1ELF\s0 object format have linkers with such optimizations.  On \s-1AIX,\s0 the linker
+rearranges sections (CSECTs) based on the call graph.  The performance impact
+varies.
+.Sp
+Together with a linker garbage collection (linker \fB\-\-gc\-sections\fR
+option) these options may lead to smaller statically-linked executables (after
+stripping).
+.Sp
+On \s-1ELF/DWARF\s0 systems these options do not degenerate the quality of the debug
+information.  There could be issues with other object files/debug info formats.
+.Sp
+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.
+.IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
+.IX Item "-fbranch-target-load-optimize"
+Perform branch target register load optimization before prologue / epilogue
+threading.
+The use of target registers can typically be exposed only during reload,
+thus hoisting loads out of loops and doing inter-block scheduling needs
+a separate optimization pass.
+.IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
+.IX Item "-fbranch-target-load-optimize2"
+Perform branch target register load optimization after prologue / epilogue
+threading.
+.IP "\fB\-fbtr\-bb\-exclusive\fR" 4
+.IX Item "-fbtr-bb-exclusive"
+When performing branch target register load optimization, don't reuse
+branch target registers within any basic block.
+.IP "\fB\-fstdarg\-opt\fR" 4
+.IX Item "-fstdarg-opt"
+Optimize the prologue of variadic argument functions with respect to usage of
+those arguments.
+.IP "\fB\-fsection\-anchors\fR" 4
+.IX Item "-fsection-anchors"
+Try to reduce the number of symbolic address calculations by using
+shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
+can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
+targets.
+.Sp
+For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
+.Sp
+.Vb 2
+\&        static int a, b, c;
+\&        int foo (void) { return a + b + c; }
+.Ve
+.Sp
+usually calculates the addresses of all three variables, but if you
+compile it with \fB\-fsection\-anchors\fR, it accesses the variables
+from a common anchor point instead.  The effect is similar to the
+following pseudocode (which isn't valid C):
+.Sp
+.Vb 5
+\&        int foo (void)
+\&        {
+\&          register int *xr = &x;
+\&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
+\&        }
+.Ve
+.Sp
+Not all targets support this option.
+.IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
+.IX Item "--param name=value"
+In some places, \s-1GCC\s0 uses various constants to control the amount of
+optimization that is done.  For example, \s-1GCC\s0 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
+\&\fB\-\-param\fR option.
+.Sp
+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.
+.Sp
+In each case, the \fIvalue\fR is an integer.  The allowable choices for
+\&\fIname\fR are:
+.RS 4
+.IP "\fBpredictable-branch-outcome\fR" 4
+.IX 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. The default is 10.
+.IP "\fBmax-rtl-if-conversion-insns\fR" 4
+.IX Item "max-rtl-if-conversion-insns"
+\&\s-1RTL\s0 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 default is 10, though the compiler will
+also use other heuristics to decide whether if-conversion is likely to be
+profitable.
+.IP "\fBmax-rtl-if-conversion-predictable-cost\fR" 4
+.IX Item "max-rtl-if-conversion-predictable-cost"
+.PD 0
+.IP "\fBmax-rtl-if-conversion-unpredictable-cost\fR" 4
+.IX Item "max-rtl-if-conversion-unpredictable-cost"
+.PD
+\&\s-1RTL\s0 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 \s-1GCC\s0 internal seq_cost metric.  The compiler will try to
+provide a reasonable default for this parameter using the \s-1BRANCH_COST\s0
+target macro.
+.IP "\fBmax-crossjump-edges\fR" 4
+.IX Item "max-crossjump-edges"
+The maximum number of incoming edges to consider for cross-jumping.
+The algorithm used by \fB\-fcrossjumping\fR is 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.
+.IP "\fBmin-crossjump-insns\fR" 4
+.IX 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.  The default value is 5.
+.IP "\fBmax-grow-copy-bb-insns\fR" 4
+.IX 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.
+The default value is 8.
+.IP "\fBmax-goto-duplication-insns\fR" 4
+.IX Item "max-goto-duplication-insns"
+The maximum number of instructions to duplicate to a block that jumps
+to a computed goto.  To avoid O(N^2) behavior in a number of
+passes, \s-1GCC\s0 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.  The default value is 8.
+.IP "\fBmax-delay-slot-insn-search\fR" 4
+.IX 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.
+.IP "\fBmax-delay-slot-live-search\fR" 4
+.IX 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.
+.IP "\fBmax-gcse-memory\fR" 4
+.IX Item "max-gcse-memory"
+The approximate maximum amount of memory 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.
+.IP "\fBmax-gcse-insertion-ratio\fR" 4
+.IX Item "max-gcse-insertion-ratio"
+If the ratio of expression insertions to deletions is larger than this value
+for any expression, then \s-1RTL PRE\s0 inserts or removes the expression and thus
+leaves partially redundant computations in the instruction stream.  The default value is 20.
+.IP "\fBmax-pending-list-length\fR" 4
+.IX 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.
+.IP "\fBmax-modulo-backtrack-attempts\fR" 4
+.IX 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.
+.IP "\fBmax-inline-insns-single\fR" 4
+.IX Item "max-inline-insns-single"
+Several parameters control the tree inliner used in \s-1GCC.\s0
+This number sets the maximum number of instructions (counted in \s-1GCC\s0'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+).
+The default value is 400.
+.IP "\fBmax-inline-insns-auto\fR" 4
+.IX Item "max-inline-insns-auto"
+When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
+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.
+The default value is 30.
+.IP "\fBinline-min-speedup\fR" 4
+.IX 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
+\&\fB\-\-param max-inline-insns-single\fR and \fB\-\-param
+max-inline-insns-auto\fR.
+The default value is 15.
+.IP "\fBlarge-function-insns\fR" 4
+.IX Item "large-function-insns"
+The limit specifying really large functions.  For functions larger than this
+limit after inlining, inlining is constrained by
+\&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
+to avoid extreme compilation time caused by non-linear algorithms used by the
+back end.
+The default value is 2700.
+.IP "\fBlarge-function-growth\fR" 4
+.IX Item "large-function-growth"
+Specifies maximal growth of large function caused by inlining in percents.
+The default value is 100 which limits large function growth to 2.0 times
+the original size.
+.IP "\fBlarge-unit-insns\fR" 4
+.IX Item "large-unit-insns"
+The limit specifying large translation unit.  Growth caused by inlining of
+units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
+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\e% 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 \fB\-\-param large-unit-insns\fR
+before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000.
+.IP "\fBinline-unit-growth\fR" 4
+.IX Item "inline-unit-growth"
+Specifies maximal overall growth of the compilation unit caused by inlining.
+The default value is 20 which 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.
+.IP "\fBipcp-unit-growth\fR" 4
+.IX Item "ipcp-unit-growth"
+Specifies maximal overall growth of the compilation unit caused by
+interprocedural constant propagation.  The default value is 10 which limits
+unit growth to 1.1 times the original size.
+.IP "\fBlarge-stack-frame\fR" 4
+.IX Item "large-stack-frame"
+The limit specifying large stack frames.  While inlining the algorithm is trying
+to not grow past this limit too much.  The default value is 256 bytes.
+.IP "\fBlarge-stack-frame-growth\fR" 4
+.IX Item "large-stack-frame-growth"
+Specifies maximal growth of large stack frames caused by inlining in percents.
+The default value is 1000 which limits large stack frame growth to 11 times
+the original size.
+.IP "\fBmax-inline-insns-recursive\fR" 4
+.IX Item "max-inline-insns-recursive"
+.PD 0
+.IP "\fBmax-inline-insns-recursive-auto\fR" 4
+.IX Item "max-inline-insns-recursive-auto"
+.PD
+Specifies the maximum number of instructions an out-of-line copy of a
+self-recursive inline
+function can grow into by performing recursive inlining.
+.Sp
+\&\fB\-\-param max-inline-insns-recursive\fR applies to functions
+declared inline.
+For functions not declared inline, recursive inlining
+happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
+enabled; \fB\-\-param max-inline-insns-recursive-auto\fR applies instead.  The
+default value is 450.
+.IP "\fBmax-inline-recursive-depth\fR" 4
+.IX Item "max-inline-recursive-depth"
+.PD 0
+.IP "\fBmax-inline-recursive-depth-auto\fR" 4
+.IX Item "max-inline-recursive-depth-auto"
+.PD
+Specifies the maximum recursion depth used for recursive inlining.
+.Sp
+\&\fB\-\-param max-inline-recursive-depth\fR applies to functions
+declared inline.  For functions not declared inline, recursive inlining
+happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
+enabled; \fB\-\-param max-inline-recursive-depth-auto\fR applies instead.  The
+default value is 8.
+.IP "\fBmin-inline-recursive-probability\fR" 4
+.IX 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.
+.Sp
+When profile feedback is available (see \fB\-fprofile\-generate\fR) 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).
+The default value is 10.
+.IP "\fBearly-inlining-insns\fR" 4
+.IX 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.
+The default value is 14.
+.IP "\fBmax-early-inliner-iterations\fR" 4
+.IX 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.
+.IP "\fBcomdat-sharing-probability\fR" 4
+.IX Item "comdat-sharing-probability"
+Probability (in percent) that \*(C+ inline function with comdat visibility
+are shared across multiple compilation units.  The default value is 20.
+.IP "\fBprofile-func-internal-id\fR" 4
+.IX 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.
+The default value is 0.
+.IP "\fBmin-vect-loop-bound\fR" 4
+.IX Item "min-vect-loop-bound"
+The minimum number of ite