1GCC(1)                                GNU                               GCC(1)
2
3
4

NAME

6       gcc - GNU project C and C++ compiler
7

SYNOPSIS

9       gcc [-c|-S|-E] [-std=standard]
10           [-g] [-pg] [-Olevel]
11           [-Wwarn...] [-Wpedantic]
12           [-Idir...] [-Ldir...]
13           [-Dmacro[=defn]...] [-Umacro]
14           [-foption...] [-mmachine-option...]
15           [-o outfile] [@file] infile...
16
17       Only the most useful options are listed here; see below for the
18       remainder.  g++ accepts mostly the same options as gcc.
19

DESCRIPTION

21       When you invoke GCC, it normally does preprocessing, compilation,
22       assembly and linking.  The "overall options" allow you to stop this
23       process at an intermediate stage.  For example, the -c option says not
24       to run the linker.  Then the output consists of object files output by
25       the assembler.
26
27       Other options are passed on to one or more stages of processing.  Some
28       options control the preprocessor and others the compiler itself.  Yet
29       other options control the assembler and linker; most of these are not
30       documented here, since you rarely need to use any of them.
31
32       Most of the command-line options that you can use with GCC are useful
33       for C programs; when an option is only useful with another language
34       (usually C++), the explanation says so explicitly.  If the description
35       for a particular option does not mention a source language, you can use
36       that option with all supported languages.
37
38       The usual way to run GCC is to run the executable called gcc, or
39       machine-gcc when cross-compiling, or machine-gcc-version to run a
40       specific version of GCC.  When you compile C++ programs, you should
41       invoke GCC as g++ instead.
42
43       The gcc program accepts options and file names as operands.  Many
44       options have multi-letter names; therefore multiple single-letter
45       options may not be grouped: -dv is very different from -d -v.
46
47       You can mix options and other arguments.  For the most part, the order
48       you use doesn't matter.  Order does matter when you use several options
49       of the same kind; for example, if you specify -L more than once, the
50       directories are searched in the order specified.  Also, the placement
51       of the -l option is significant.
52
53       Many options have long names starting with -f or with -W---for example,
54       -fmove-loop-invariants, -Wformat and so on.  Most of these have both
55       positive and negative forms; the negative form of -ffoo is -fno-foo.
56       This manual documents only one of these two forms, whichever one is not
57       the default.
58
59       Some options take one or more arguments typically separated either by a
60       space or by the equals sign (=) from the option name.  Unless
61       documented otherwise, an argument can be either numeric or a string.
62       Numeric arguments must typically be small unsigned decimal or
63       hexadecimal integers.  Hexadecimal arguments must begin with the 0x
64       prefix.  Arguments to options that specify a size threshold of some
65       sort may be arbitrarily large decimal or hexadecimal integers followed
66       by a byte size suffix designating a multiple of bytes such as "kB" and
67       "KiB" for kilobyte and kibibyte, respectively, "MB" and "MiB" for
68       megabyte and mebibyte, "GB" and "GiB" for gigabyte and gigibyte, and so
69       on.  Such arguments are designated by byte-size in the following text.
70       Refer to the NIST, IEC, and other relevant national and international
71       standards for the full listing and explanation of the binary and
72       decimal byte size prefixes.
73

OPTIONS

75   Option Summary
76       Here is a summary of all the options, grouped by type.  Explanations
77       are in the following sections.
78
79       Overall Options
80           -c  -S  -E  -o file -dumpbase dumpbase  -dumpbase-ext auxdropsuf
81           -dumpdir dumppfx  -x language -v  -###  --help[=class[,...]]
82           --target-help  --version -pass-exit-codes  -pipe  -specs=file
83           -wrapper @file  -ffile-prefix-map=old=new  -fcanon-prefix-map
84           -fplugin=file  -fplugin-arg-name=arg -fdump-ada-spec[-slim]
85           -fada-spec-parent=unit  -fdump-go-spec=file
86
87       C Language Options
88           -ansi  -std=standard  -aux-info filename -fno-asm -fno-builtin
89           -fno-builtin-function  -fcond-mismatch -ffreestanding  -fgimple
90           -fgnu-tm  -fgnu89-inline  -fhosted -flax-vector-conversions
91           -fms-extensions -foffload=arg  -foffload-options=arg -fopenacc
92           -fopenacc-dim=geom -fopenmp  -fopenmp-simd
93           -fopenmp-target-simd-clone[=device-type]
94           -fpermitted-flt-eval-methods=standard -fplan9-extensions
95           -fsigned-bitfields  -funsigned-bitfields -fsigned-char
96           -funsigned-char -fstrict-flex-arrays[=n] -fsso-struct=endianness
97
98       C++ Language Options
99           -fabi-version=n  -fno-access-control -faligned-new=n
100           -fargs-in-order=n  -fchar8_t  -fcheck-new -fconstexpr-depth=n
101           -fconstexpr-cache-depth=n -fconstexpr-loop-limit=n
102           -fconstexpr-ops-limit=n -fno-elide-constructors
103           -fno-enforce-eh-specs -fno-gnu-keywords -fno-implicit-templates
104           -fno-implicit-inline-templates -fno-implement-inlines
105           -fmodule-header[=kind] -fmodule-only -fmodules-ts
106           -fmodule-implicit-inline -fno-module-lazy
107           -fmodule-mapper=specification -fmodule-version-ignore
108           -fms-extensions -fnew-inheriting-ctors -fnew-ttp-matching
109           -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
110           -fno-optional-diags  -fpermissive -fno-pretty-templates -fno-rtti
111           -fsized-deallocation -ftemplate-backtrace-limit=n
112           -ftemplate-depth=n -fno-threadsafe-statics  -fuse-cxa-atexit
113           -fno-weak  -nostdinc++ -fvisibility-inlines-hidden
114           -fvisibility-ms-compat -fext-numeric-literals
115           -flang-info-include-translate[=header]
116           -flang-info-include-translate-not -flang-info-module-cmi[=module]
117           -stdlib=libstdc++,libc++ -Wabi-tag  -Wcatch-value  -Wcatch-value=n
118           -Wno-class-conversion  -Wclass-memaccess -Wcomma-subscript
119           -Wconditionally-supported -Wno-conversion-null
120           -Wctad-maybe-unsupported -Wctor-dtor-privacy  -Wdangling-reference
121           -Wno-delete-incomplete -Wdelete-non-virtual-dtor
122           -Wno-deprecated-array-compare -Wdeprecated-copy
123           -Wdeprecated-copy-dtor -Wno-deprecated-enum-enum-conversion
124           -Wno-deprecated-enum-float-conversion -Weffc++  -Wno-exceptions
125           -Wextra-semi  -Wno-inaccessible-base -Wno-inherited-variadic-ctor
126           -Wno-init-list-lifetime -Winvalid-constexpr
127           -Winvalid-imported-macros -Wno-invalid-offsetof
128           -Wno-literal-suffix -Wmismatched-new-delete -Wmismatched-tags
129           -Wmultiple-inheritance  -Wnamespaces  -Wnarrowing -Wnoexcept
130           -Wnoexcept-type  -Wnon-virtual-dtor -Wpessimizing-move
131           -Wno-placement-new  -Wplacement-new=n -Wrange-loop-construct
132           -Wredundant-move -Wredundant-tags -Wreorder  -Wregister
133           -Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates
134           -Wno-non-template-friend  -Wold-style-cast -Woverloaded-virtual
135           -Wno-pmf-conversions -Wself-move -Wsign-promo -Wsized-deallocation
136           -Wsuggest-final-methods -Wsuggest-final-types  -Wsuggest-override
137           -Wno-terminate  -Wuseless-cast  -Wno-vexing-parse
138           -Wvirtual-inheritance -Wno-virtual-move-assign  -Wvolatile
139           -Wzero-as-null-pointer-constant
140
141       Objective-C and Objective-C++ Language Options
142           -fconstant-string-class=class-name -fgnu-runtime  -fnext-runtime
143           -fno-nil-receivers -fobjc-abi-version=n -fobjc-call-cxx-cdtors
144           -fobjc-direct-dispatch -fobjc-exceptions -fobjc-gc -fobjc-nilcheck
145           -fobjc-std=objc1 -fno-local-ivars
146           -fivar-visibility=[public|protected|private|package]
147           -freplace-objc-classes -fzero-link -gen-decls -Wassign-intercept
148           -Wno-property-assign-default -Wno-protocol -Wobjc-root-class
149           -Wselector -Wstrict-selector-match -Wundeclared-selector
150
151       Diagnostic Message Formatting Options
152           -fmessage-length=n -fdiagnostics-plain-output
153           -fdiagnostics-show-location=[once|every-line]
154           -fdiagnostics-color=[auto|never|always]
155           -fdiagnostics-urls=[auto|never|always]
156           -fdiagnostics-format=[text|sarif-stderr|sarif-file|json|json-
157           stderr|json-file] -fno-diagnostics-show-option
158           -fno-diagnostics-show-caret -fno-diagnostics-show-labels
159           -fno-diagnostics-show-line-numbers -fno-diagnostics-show-cwe
160           -fno-diagnostics-show-rule -fdiagnostics-minimum-margin-width=width
161           -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch
162           -fdiagnostics-show-template-tree  -fno-elide-type
163           -fdiagnostics-path-format=[none|separate-events|inline-events]
164           -fdiagnostics-show-path-depths -fno-show-column
165           -fdiagnostics-column-unit=[display|byte]
166           -fdiagnostics-column-origin=origin
167           -fdiagnostics-escape-format=[unicode|bytes]
168
169       Warning Options
170           -fsyntax-only  -fmax-errors=n  -Wpedantic -pedantic-errors -w
171           -Wextra  -Wall  -Wabi=n -Waddress  -Wno-address-of-packed-member
172           -Waggregate-return -Walloc-size-larger-than=byte-size  -Walloc-zero
173           -Walloca  -Walloca-larger-than=byte-size
174           -Wno-aggressive-loop-optimizations -Warith-conversion
175           -Warray-bounds  -Warray-bounds=n  -Warray-compare -Wno-attributes
176           -Wattribute-alias=n -Wno-attribute-alias -Wno-attribute-warning
177           -Wbidi-chars=[none|unpaired|any|ucn] -Wbool-compare
178           -Wbool-operation -Wno-builtin-declaration-mismatch
179           -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat
180           -Wc11-c2x-compat -Wc++-compat  -Wc++11-compat  -Wc++14-compat
181           -Wc++17-compat -Wc++20-compat -Wno-c++11-extensions
182           -Wno-c++14-extensions -Wno-c++17-extensions -Wno-c++20-extensions
183           -Wno-c++23-extensions -Wcast-align  -Wcast-align=strict
184           -Wcast-function-type  -Wcast-qual -Wchar-subscripts -Wclobbered
185           -Wcomment -Wno-complain-wrong-lang -Wconversion
186           -Wno-coverage-mismatch  -Wno-cpp -Wdangling-else
187           -Wdangling-pointer  -Wdangling-pointer=n -Wdate-time
188           -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init
189           -Wdisabled-optimization -Wno-discarded-array-qualifiers
190           -Wno-discarded-qualifiers -Wno-div-by-zero  -Wdouble-promotion
191           -Wduplicated-branches  -Wduplicated-cond -Wempty-body
192           -Wno-endif-labels  -Wenum-compare  -Wenum-conversion
193           -Wenum-int-mismatch -Werror  -Werror=*  -Wexpansion-to-defined
194           -Wfatal-errors -Wfloat-conversion  -Wfloat-equal  -Wformat
195           -Wformat=2 -Wno-format-contains-nul  -Wno-format-extra-args
196           -Wformat-nonliteral  -Wformat-overflow=n -Wformat-security
197           -Wformat-signedness  -Wformat-truncation=n -Wformat-y2k
198           -Wframe-address -Wframe-larger-than=byte-size
199           -Wno-free-nonheap-object -Wno-if-not-aligned
200           -Wno-ignored-attributes -Wignored-qualifiers
201           -Wno-incompatible-pointer-types -Wimplicit  -Wimplicit-fallthrough
202           -Wimplicit-fallthrough=n -Wno-implicit-function-declaration
203           -Wno-implicit-int -Winfinite-recursion -Winit-self  -Winline
204           -Wno-int-conversion  -Wint-in-bool-context -Wno-int-to-pointer-cast
205           -Wno-invalid-memory-model -Winvalid-pch  -Winvalid-utf8
206           -Wno-unicode  -Wjump-misses-init -Wlarger-than=byte-size
207           -Wlogical-not-parentheses  -Wlogical-op -Wlong-long
208           -Wno-lto-type-mismatch -Wmain  -Wmaybe-uninitialized
209           -Wmemset-elt-size  -Wmemset-transposed-args
210           -Wmisleading-indentation  -Wmissing-attributes  -Wmissing-braces
211           -Wmissing-field-initializers  -Wmissing-format-attribute
212           -Wmissing-include-dirs  -Wmissing-noreturn  -Wno-missing-profile
213           -Wno-multichar  -Wmultistatement-macros  -Wnonnull
214           -Wnonnull-compare -Wnormalized=[none|id|nfc|nfkc]
215           -Wnull-dereference  -Wno-odr -Wopenacc-parallelism -Wopenmp-simd
216           -Wno-overflow  -Woverlength-strings
217           -Wno-override-init-side-effects -Wpacked
218           -Wno-packed-bitfield-compat  -Wpacked-not-aligned  -Wpadded
219           -Wparentheses  -Wno-pedantic-ms-format -Wpointer-arith
220           -Wno-pointer-compare  -Wno-pointer-to-int-cast -Wno-pragmas
221           -Wno-prio-ctor-dtor  -Wredundant-decls -Wrestrict
222           -Wno-return-local-addr  -Wreturn-type -Wno-scalar-storage-order
223           -Wsequence-point -Wshadow  -Wshadow=global  -Wshadow=local
224           -Wshadow=compatible-local -Wno-shadow-ivar
225           -Wno-shift-count-negative  -Wno-shift-count-overflow
226           -Wshift-negative-value -Wno-shift-overflow  -Wshift-overflow=n
227           -Wsign-compare  -Wsign-conversion -Wno-sizeof-array-argument
228           -Wsizeof-array-div -Wsizeof-pointer-div  -Wsizeof-pointer-memaccess
229           -Wstack-protector  -Wstack-usage=byte-size  -Wstrict-aliasing
230           -Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=n
231           -Wstring-compare -Wno-stringop-overflow -Wno-stringop-overread
232           -Wno-stringop-truncation -Wstrict-flex-arrays
233           -Wsuggest-attribute=[pure|const|noreturn|format|malloc] -Wswitch
234           -Wno-switch-bool  -Wswitch-default  -Wswitch-enum
235           -Wno-switch-outside-range  -Wno-switch-unreachable  -Wsync-nand
236           -Wsystem-headers  -Wtautological-compare  -Wtrampolines
237           -Wtrigraphs -Wtrivial-auto-var-init -Wtsan -Wtype-limits  -Wundef
238           -Wuninitialized  -Wunknown-pragmas -Wunsuffixed-float-constants
239           -Wunused -Wunused-but-set-parameter  -Wunused-but-set-variable
240           -Wunused-const-variable  -Wunused-const-variable=n
241           -Wunused-function  -Wunused-label  -Wunused-local-typedefs
242           -Wunused-macros -Wunused-parameter  -Wno-unused-result
243           -Wunused-value  -Wunused-variable -Wno-varargs  -Wvariadic-macros
244           -Wvector-operation-performance -Wvla  -Wvla-larger-than=byte-size
245           -Wno-vla-larger-than -Wvolatile-register-var  -Wwrite-strings
246           -Wxor-used-as-pow -Wzero-length-bounds
247
248       Static Analyzer Options
249           -fanalyzer -fanalyzer-call-summaries -fanalyzer-checker=name
250           -fno-analyzer-feasibility -fanalyzer-fine-grained
251           -fno-analyzer-state-merge -fno-analyzer-state-purge
252           -fno-analyzer-suppress-followups -fanalyzer-transitivity
253           -fno-analyzer-undo-inlining -fanalyzer-verbose-edges
254           -fanalyzer-verbose-state-changes -fanalyzer-verbosity=level
255           -fdump-analyzer -fdump-analyzer-callgraph
256           -fdump-analyzer-exploded-graph -fdump-analyzer-exploded-nodes
257           -fdump-analyzer-exploded-nodes-2 -fdump-analyzer-exploded-nodes-3
258           -fdump-analyzer-exploded-paths -fdump-analyzer-feasibility
259           -fdump-analyzer-json -fdump-analyzer-state-purge
260           -fdump-analyzer-stderr -fdump-analyzer-supergraph
261           -fdump-analyzer-untracked -Wno-analyzer-double-fclose
262           -Wno-analyzer-double-free
263           -Wno-analyzer-exposure-through-output-file
264           -Wno-analyzer-exposure-through-uninit-copy
265           -Wno-analyzer-fd-access-mode-mismatch -Wno-analyzer-fd-double-close
266           -Wno-analyzer-fd-leak -Wno-analyzer-fd-phase-mismatch
267           -Wno-analyzer-fd-type-mismatch -Wno-analyzer-fd-use-after-close
268           -Wno-analyzer-fd-use-without-check -Wno-analyzer-file-leak
269           -Wno-analyzer-free-of-non-heap
270           -Wno-analyzer-imprecise-fp-arithmetic
271           -Wno-analyzer-infinite-recursion -Wno-analyzer-jump-through-null
272           -Wno-analyzer-malloc-leak -Wno-analyzer-mismatching-deallocation
273           -Wno-analyzer-null-argument -Wno-analyzer-null-dereference
274           -Wno-analyzer-out-of-bounds -Wno-analyzer-possible-null-argument
275           -Wno-analyzer-possible-null-dereference
276           -Wno-analyzer-putenv-of-auto-var -Wno-analyzer-shift-count-negative
277           -Wno-analyzer-shift-count-overflow
278           -Wno-analyzer-stale-setjmp-buffer
279           -Wno-analyzer-tainted-allocation-size
280           -Wno-analyzer-tainted-assertion -Wno-analyzer-tainted-array-index
281           -Wno-analyzer-tainted-divisor -Wno-analyzer-tainted-offset
282           -Wno-analyzer-tainted-size -Wanalyzer-too-complex
283           -Wno-analyzer-unsafe-call-within-signal-handler
284           -Wno-analyzer-use-after-free
285           -Wno-analyzer-use-of-pointer-in-stale-stack-frame
286           -Wno-analyzer-use-of-uninitialized-value
287           -Wno-analyzer-va-arg-type-mismatch -Wno-analyzer-va-list-exhausted
288           -Wno-analyzer-va-list-leak -Wno-analyzer-va-list-use-after-va-end
289           -Wno-analyzer-write-to-const -Wno-analyzer-write-to-string-literal
290
291       C and Objective-C-only Warning Options
292           -Wbad-function-cast  -Wmissing-declarations
293           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
294           -Wold-style-declaration  -Wold-style-definition -Wstrict-prototypes
295           -Wtraditional  -Wtraditional-conversion
296           -Wdeclaration-after-statement  -Wpointer-sign
297
298       Debugging Options
299           -g  -glevel  -gdwarf  -gdwarf-version -gbtf -gctf  -gctflevel -ggdb
300           -grecord-gcc-switches  -gno-record-gcc-switches -gstrict-dwarf
301           -gno-strict-dwarf -gas-loc-support  -gno-as-loc-support
302           -gas-locview-support  -gno-as-locview-support -gcolumn-info
303           -gno-column-info  -gdwarf32  -gdwarf64 -gstatement-frontiers
304           -gno-statement-frontiers -gvariable-location-views
305           -gno-variable-location-views -ginternal-reset-location-views
306           -gno-internal-reset-location-views -ginline-points
307           -gno-inline-points -gvms -gz[=type] -gsplit-dwarf  -gdescribe-dies
308           -gno-describe-dies -fdebug-prefix-map=old=new
309           -fdebug-types-section -fno-eliminate-unused-debug-types
310           -femit-struct-debug-baseonly  -femit-struct-debug-reduced
311           -femit-struct-debug-detailed[=spec-list]
312           -fno-eliminate-unused-debug-symbols  -femit-class-debug-always
313           -fno-merge-debug-strings  -fno-dwarf2-cfi-asm -fvar-tracking
314           -fvar-tracking-assignments
315
316       Optimization Options
317           -faggressive-loop-optimizations -falign-functions[=n[:m:[n2[:m2]]]]
318           -falign-jumps[=n[:m:[n2[:m2]]]] -falign-labels[=n[:m:[n2[:m2]]]]
319           -falign-loops[=n[:m:[n2[:m2]]]] -fno-allocation-dce
320           -fallow-store-data-races -fassociative-math  -fauto-profile
321           -fauto-profile[=path] -fauto-inc-dec  -fbranch-probabilities
322           -fcaller-saves -fcombine-stack-adjustments  -fconserve-stack
323           -fcompare-elim  -fcprop-registers  -fcrossjumping
324           -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules
325           -fcx-limited-range -fdata-sections  -fdce  -fdelayed-branch
326           -fdelete-null-pointer-checks  -fdevirtualize
327           -fdevirtualize-speculatively -fdevirtualize-at-ltrans  -fdse
328           -fearly-inlining  -fipa-sra  -fexpensive-optimizations
329           -ffat-lto-objects -ffast-math  -ffinite-math-only  -ffloat-store
330           -fexcess-precision=style -ffinite-loops -fforward-propagate
331           -ffp-contract=style  -ffunction-sections -fgcse
332           -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity
333           -fgcse-sm  -fhoist-adjacent-loads  -fif-conversion -fif-conversion2
334           -findirect-inlining -finline-functions
335           -finline-functions-called-once  -finline-limit=n
336           -finline-small-functions -fipa-modref -fipa-cp  -fipa-cp-clone
337           -fipa-bit-cp  -fipa-vrp  -fipa-pta  -fipa-profile  -fipa-pure-const
338           -fipa-reference  -fipa-reference-addressable -fipa-stack-alignment
339           -fipa-icf  -fira-algorithm=algorithm -flive-patching=level
340           -fira-region=region  -fira-hoist-pressure -fira-loop-pressure
341           -fno-ira-share-save-slots -fno-ira-share-spill-slots
342           -fisolate-erroneous-paths-dereference
343           -fisolate-erroneous-paths-attribute -fivopts
344           -fkeep-inline-functions  -fkeep-static-functions
345           -fkeep-static-consts  -flimit-function-alignment
346           -flive-range-shrinkage -floop-block  -floop-interchange
347           -floop-strip-mine -floop-unroll-and-jam  -floop-nest-optimize
348           -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
349           -flto-partition=alg  -fmerge-all-constants -fmerge-constants
350           -fmodulo-sched  -fmodulo-sched-allow-regmoves
351           -fmove-loop-invariants  -fmove-loop-stores  -fno-branch-count-reg
352           -fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse
353           -fno-guess-branch-probability  -fno-inline  -fno-math-errno
354           -fno-peephole -fno-peephole2  -fno-printf-return-value
355           -fno-sched-interblock -fno-sched-spec  -fno-signed-zeros
356           -fno-toplevel-reorder  -fno-trapping-math
357           -fno-zero-initialized-in-bss -fomit-frame-pointer
358           -foptimize-sibling-calls -fpartial-inlining  -fpeel-loops
359           -fpredictive-commoning -fprefetch-loop-arrays -fprofile-correction
360           -fprofile-use  -fprofile-use=path -fprofile-partial-training
361           -fprofile-values -fprofile-reorder-functions -freciprocal-math
362           -free  -frename-registers  -freorder-blocks
363           -freorder-blocks-algorithm=algorithm -freorder-blocks-and-partition
364           -freorder-functions -frerun-cse-after-loop
365           -freschedule-modulo-scheduled-loops -frounding-math
366           -fsave-optimization-record -fsched2-use-superblocks
367           -fsched-pressure -fsched-spec-load  -fsched-spec-load-dangerous
368           -fsched-stalled-insns-dep[=n]  -fsched-stalled-insns[=n]
369           -fsched-group-heuristic  -fsched-critical-path-heuristic
370           -fsched-spec-insn-heuristic  -fsched-rank-heuristic
371           -fsched-last-insn-heuristic  -fsched-dep-count-heuristic
372           -fschedule-fusion -fschedule-insns  -fschedule-insns2
373           -fsection-anchors -fselective-scheduling  -fselective-scheduling2
374           -fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops
375           -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
376           -fsignaling-nans -fsingle-precision-constant
377           -fsplit-ivs-in-unroller  -fsplit-loops -fsplit-paths
378           -fsplit-wide-types  -fsplit-wide-types-early  -fssa-backprop
379           -fssa-phiopt -fstdarg-opt  -fstore-merging  -fstrict-aliasing
380           -fipa-strict-aliasing -fthread-jumps  -ftracer  -ftree-bit-ccp
381           -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch -ftree-coalesce-vars
382           -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts -ftree-dse
383           -ftree-forwprop  -ftree-fre  -fcode-hoisting -ftree-loop-if-convert
384           -ftree-loop-im -ftree-phiprop  -ftree-loop-distribution
385           -ftree-loop-distribute-patterns -ftree-loop-ivcanon
386           -ftree-loop-linear  -ftree-loop-optimize -ftree-loop-vectorize
387           -ftree-parallelize-loops=n  -ftree-pre  -ftree-partial-pre
388           -ftree-pta -ftree-reassoc  -ftree-scev-cprop  -ftree-sink
389           -ftree-slsr  -ftree-sra -ftree-switch-conversion  -ftree-tail-merge
390           -ftree-ter  -ftree-vectorize  -ftree-vrp  -ftrivial-auto-var-init
391           -funconstrained-commons -funit-at-a-time  -funroll-all-loops
392           -funroll-loops -funsafe-math-optimizations  -funswitch-loops
393           -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model
394           -fvpt -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin
395           -fzero-call-used-regs --param name=value -O  -O0  -O1  -O2  -O3
396           -Os  -Ofast  -Og  -Oz
397
398       Program Instrumentation Options
399           -p  -pg  -fprofile-arcs  --coverage  -ftest-coverage
400           -fprofile-abs-path -fprofile-dir=path  -fprofile-generate
401           -fprofile-generate=path -fprofile-info-section
402           -fprofile-info-section=name -fprofile-note=path
403           -fprofile-prefix-path=path -fprofile-update=method
404           -fprofile-filter-files=regex -fprofile-exclude-files=regex
405           -fprofile-reproducible=[multithreaded|parallel-runs|serial]
406           -fsanitize=style  -fsanitize-recover  -fsanitize-recover=style
407           -fsanitize-trap   -fsanitize-trap=style -fasan-shadow-offset=number
408           -fsanitize-sections=s1,s2,...  -fsanitize-undefined-trap-on-error
409           -fbounds-check -fcf-protection=[full|branch|return|none|check]
410           -fharden-compares -fharden-conditional-branches -fstack-protector
411           -fstack-protector-all  -fstack-protector-strong
412           -fstack-protector-explicit  -fstack-check
413           -fstack-limit-register=reg  -fstack-limit-symbol=sym
414           -fno-stack-limit  -fsplit-stack -fvtable-verify=[std|preinit|none]
415           -fvtv-counts  -fvtv-debug -finstrument-functions
416           -finstrument-functions-once
417           -finstrument-functions-exclude-function-list=sym,sym,...
418           -finstrument-functions-exclude-file-list=file,file,...
419           -fprofile-prefix-map=old=new
420
421       Preprocessor Options
422           -Aquestion=answer -A-question[=answer] -C  -CC  -Dmacro[=defn] -dD
423           -dI  -dM  -dN  -dU -fdebug-cpp  -fdirectives-only
424           -fdollars-in-identifiers -fexec-charset=charset
425           -fextended-identifiers -finput-charset=charset
426           -flarge-source-files -fmacro-prefix-map=old=new
427           -fmax-include-depth=depth -fno-canonical-system-headers  -fpch-deps
428           -fpch-preprocess -fpreprocessed  -ftabstop=width
429           -ftrack-macro-expansion -fwide-exec-charset=charset
430           -fworking-directory -H  -imacros file  -include file -M  -MD  -MF
431           -MG  -MM  -MMD  -MP  -MQ  -MT -Mno-modules -no-integrated-cpp  -P
432           -pthread  -remap -traditional  -traditional-cpp  -trigraphs -Umacro
433           -undef -Wp,option  -Xpreprocessor option
434
435       Assembler Options
436           -Wa,option  -Xassembler option
437
438       Linker Options
439           object-file-name  -fuse-ld=linker  -llibrary -nostartfiles
440           -nodefaultlibs  -nolibc  -nostdlib  -nostdlib++ -e entry
441           --entry=entry -pie  -pthread  -r  -rdynamic -s  -static
442           -static-pie  -static-libgcc  -static-libstdc++ -static-libasan
443           -static-libtsan  -static-liblsan  -static-libubsan -shared
444           -shared-libgcc  -symbolic -T script  -Wl,option  -Xlinker option -u
445           symbol  -z keyword
446
447       Directory Options
448           -Bprefix  -Idir  -I- -idirafter dir -imacros file  -imultilib dir
449           -iplugindir=dir  -iprefix file -iquote dir  -isysroot dir  -isystem
450           dir -iwithprefix dir  -iwithprefixbefore dir -Ldir
451           -no-canonical-prefixes  --no-sysroot-suffix -nostdinc  -nostdinc++
452           --sysroot=dir
453
454       Code Generation Options
455           -fcall-saved-reg  -fcall-used-reg -ffixed-reg  -fexceptions
456           -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
457           -fasynchronous-unwind-tables -fno-gnu-unique
458           -finhibit-size-directive  -fcommon  -fno-ident -fpcc-struct-return
459           -fpic  -fPIC  -fpie  -fPIE  -fno-plt -fno-jump-tables
460           -fno-bit-tests -frecord-gcc-switches -freg-struct-return
461           -fshort-enums  -fshort-wchar -fverbose-asm  -fpack-struct[=n]
462           -fleading-underscore  -ftls-model=model -fstack-reuse=reuse_level
463           -ftrampolines  -ftrapv  -fwrapv
464           -fvisibility=[default|internal|hidden|protected]
465           -fstrict-volatile-bitfields  -fsync-libcalls
466
467       Developer Options
468           -dletters  -dumpspecs  -dumpmachine  -dumpversion -dumpfullversion
469           -fcallgraph-info[=su,da] -fchecking  -fchecking=n -fdbg-cnt-list
470           -fdbg-cnt=counter-value-list -fdisable-ipa-pass_name
471           -fdisable-rtl-pass_name -fdisable-rtl-pass-name=range-list
472           -fdisable-tree-pass_name -fdisable-tree-pass-name=range-list
473           -fdump-debug  -fdump-earlydebug -fdump-noaddr  -fdump-unnumbered
474           -fdump-unnumbered-links -fdump-final-insns[=file] -fdump-ipa-all
475           -fdump-ipa-cgraph  -fdump-ipa-inline -fdump-lang-all
476           -fdump-lang-switch -fdump-lang-switch-options
477           -fdump-lang-switch-options=filename -fdump-passes -fdump-rtl-pass
478           -fdump-rtl-pass=filename -fdump-statistics -fdump-tree-all
479           -fdump-tree-switch -fdump-tree-switch-options
480           -fdump-tree-switch-options=filename -fcompare-debug[=opts]
481           -fcompare-debug-second -fenable-kind-pass -fenable-kind-pass=range-
482           list -fira-verbose=n -flto-report  -flto-report-wpa
483           -fmem-report-wpa -fmem-report  -fpre-ipa-mem-report
484           -fpost-ipa-mem-report -fopt-info  -fopt-info-options[=file]
485           -fmultiflags  -fprofile-report -frandom-seed=string
486           -fsched-verbose=n -fsel-sched-verbose  -fsel-sched-dump-cfg
487           -fsel-sched-pipelining-verbose -fstats  -fstack-usage
488           -ftime-report  -ftime-report-details
489           -fvar-tracking-assignments-toggle  -gtoggle
490           -print-file-name=library  -print-libgcc-file-name
491           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
492           -print-prog-name=program  -print-search-dirs  -Q -print-sysroot
493           -print-sysroot-headers-suffix -save-temps  -save-temps=cwd
494           -save-temps=obj  -time[=file]
495
496       Machine-Dependent Options
497           AArch64 Options -mabi=name  -mbig-endian  -mlittle-endian
498           -mgeneral-regs-only -mcmodel=tiny  -mcmodel=small  -mcmodel=large
499           -mstrict-align  -mno-strict-align -momit-leaf-frame-pointer
500           -mtls-dialect=desc  -mtls-dialect=traditional -mtls-size=size
501           -mfix-cortex-a53-835769  -mfix-cortex-a53-843419
502           -mlow-precision-recip-sqrt  -mlow-precision-sqrt
503           -mlow-precision-div -mpc-relative-literal-loads
504           -msign-return-address=scope -mbranch-protection=none|standard|pac-
505           ret[+leaf +b-key]|bti -mharden-sls=opts -march=name  -mcpu=name
506           -mtune=name -moverride=string  -mverbose-cost-dump
507           -mstack-protector-guard=guard -mstack-protector-guard-reg=sysreg
508           -mstack-protector-guard-offset=offset -mtrack-speculation
509           -moutline-atomics
510
511           Adapteva Epiphany Options -mhalf-reg-file  -mprefer-short-insn-regs
512           -mbranch-cost=num  -mcmove  -mnops=num  -msoft-cmpsf -msplit-lohi
513           -mpost-inc  -mpost-modify  -mstack-offset=num -mround-nearest
514           -mlong-calls  -mshort-calls  -msmall16 -mfp-mode=mode
515           -mvect-double  -max-vect-align=num -msplit-vecmove-early
516           -m1reg-reg
517
518           AMD GCN Options -march=gpu -mtune=gpu -mstack-size=bytes
519
520           ARC Options -mbarrel-shifter  -mjli-always -mcpu=cpu  -mA6
521           -mARC600  -mA7  -mARC700 -mdpfp  -mdpfp-compact  -mdpfp-fast
522           -mno-dpfp-lrsr -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic -mnorm
523           -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
524           -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc
525           -mswape -mtelephony  -mxy  -misize  -mannotate-align  -marclinux
526           -marclinux_prof -mlong-calls  -mmedium-calls  -msdata
527           -mirq-ctrl-saved -mrgf-banked-regs  -mlpc-width=width  -G num
528           -mvolatile-cache  -mtp-regno=regno -malign-call  -mauto-modify-reg
529           -mbbit-peephole  -mno-brcc -mcase-vector-pcrel  -mcompact-casesi
530           -mno-cond-exec  -mearly-cbranchsi -mexpand-adddi  -mindexed-loads
531           -mlra  -mlra-priority-none -mlra-priority-compact
532           -mlra-priority-noncompact  -mmillicode -mmixed-code  -mq-class
533           -mRcq  -mRcw  -msize-level=level -mtune=cpu  -mmultcost=num
534           -mcode-density-frame -munalign-prob-threshold=probability
535           -mmpy-option=multo -mdiv-rem  -mcode-density  -mll64  -mfpu=fpu
536           -mrf16  -mbranch-index
537
538           ARM Options -mapcs-frame  -mno-apcs-frame -mabi=name
539           -mapcs-stack-check  -mno-apcs-stack-check -mapcs-reentrant
540           -mno-apcs-reentrant -mgeneral-regs-only -msched-prolog
541           -mno-sched-prolog -mlittle-endian  -mbig-endian -mbe8  -mbe32
542           -mfloat-abi=name -mfp16-format=name -mthumb-interwork
543           -mno-thumb-interwork -mcpu=name  -march=name  -mfpu=name
544           -mtune=name  -mprint-tune-info -mstructure-size-boundary=n
545           -mabort-on-noreturn -mlong-calls  -mno-long-calls -msingle-pic-base
546           -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport
547           -mpoke-function-name -mthumb  -marm  -mflip-thumb -mtpcs-frame
548           -mtpcs-leaf-frame -mcaller-super-interworking
549           -mcallee-super-interworking -mtp=name  -mtls-dialect=dialect
550           -mword-relocations -mfix-cortex-m3-ldrd
551           -mfix-cortex-a57-aes-1742098 -mfix-cortex-a72-aes-1655431
552           -munaligned-access -mneon-for-64bits -mslow-flash-data
553           -masm-syntax-unified -mrestrict-it -mverbose-cost-dump -mpure-code
554           -mcmse -mfix-cmse-cve-2021-35465 -mstack-protector-guard=guard
555           -mstack-protector-guard-offset=offset -mfdpic
556           -mbranch-protection=none|standard|pac-ret[+leaf] [+bti]|bti[+pac-
557           ret[+leaf]]
558
559           AVR Options -mmcu=mcu  -mabsdata  -maccumulate-args
560           -mbranch-cost=cost -mcall-prologues  -mgas-isr-prologues  -mint8
561           -mdouble=bits -mlong-double=bits -mn_flash=size  -mno-interrupts
562           -mmain-is-OS_task  -mrelax  -mrmw  -mstrict-X  -mtiny-stack
563           -mfract-convert-truncate -mshort-calls  -nodevicelib
564           -nodevicespecs -Waddr-space-convert  -Wmisspelled-isr
565
566           Blackfin Options -mcpu=cpu[-sirevision] -msim
567           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
568           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly
569           -mno-csync-anomaly -mlow-64k  -mno-low64k  -mstack-check-l1
570           -mid-shared-library -mno-id-shared-library  -mshared-library-id=n
571           -mleaf-id-shared-library  -mno-leaf-id-shared-library -msep-data
572           -mno-sep-data  -mlong-calls  -mno-long-calls -mfast-fp
573           -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram -micplb
574
575           C6X Options -mbig-endian  -mlittle-endian  -march=cpu -msim
576           -msdata=sdata-type
577
578           CRIS Options -mcpu=cpu  -march=cpu -mtune=cpu -mmax-stack-frame=n
579           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
580           -mstack-align  -mdata-align  -mconst-align -m32-bit  -m16-bit
581           -m8-bit  -mno-prologue-epilogue -melf  -maout  -sim  -sim2
582           -mmul-bug-workaround  -mno-mul-bug-workaround
583
584           C-SKY Options -march=arch  -mcpu=cpu -mbig-endian  -EB
585           -mlittle-endian  -EL -mhard-float  -msoft-float  -mfpu=fpu
586           -mdouble-float  -mfdivdu -mfloat-abi=name -melrw  -mistack  -mmp
587           -mcp  -mcache  -msecurity  -mtrust -mdsp  -medsp  -mvdsp -mdiv
588           -msmart  -mhigh-registers  -manchor -mpushpop  -mmultiple-stld
589           -mconstpool  -mstack-size  -mccrt -mbranch-cost=n  -mcse-cc
590           -msched-prolog -msim
591
592           Darwin Options -all_load  -allowable_client  -arch
593           -arch_errors_fatal -arch_only  -bind_at_load  -bundle
594           -bundle_loader -client_name  -compatibility_version
595           -current_version -dead_strip -dependency-file  -dylib_file
596           -dylinker_install_name -dynamic  -dynamiclib
597           -exported_symbols_list -filelist  -flat_namespace
598           -force_cpusubtype_ALL -force_flat_namespace
599           -headerpad_max_install_names -iframework -image_base  -init
600           -install_name  -keep_private_externs -multi_module
601           -multiply_defined  -multiply_defined_unused -noall_load
602           -no_dead_strip_inits_and_terms -nofixprebinding  -nomultidefs
603           -noprebind  -noseglinkedit -pagezero_size  -prebind
604           -prebind_all_twolevel_modules -private_bundle  -read_only_relocs
605           -sectalign -sectobjectsymbols  -whyload  -seg1addr -sectcreate
606           -sectobjectsymbols  -sectorder -segaddr  -segs_read_only_addr
607           -segs_read_write_addr -seg_addr_table  -seg_addr_table_filename
608           -seglinkedit -segprot  -segs_read_only_addr  -segs_read_write_addr
609           -single_module  -static  -sub_library  -sub_umbrella
610           -twolevel_namespace  -umbrella  -undefined -unexported_symbols_list
611           -weak_reference_mismatches -whatsloaded  -F  -gused  -gfull
612           -mmacosx-version-min=version -mkernel  -mone-byte-bool
613
614           DEC Alpha Options -mno-fp-regs  -msoft-float -mieee
615           -mieee-with-inexact  -mieee-conformant -mfp-trap-mode=mode
616           -mfp-rounding-mode=mode -mtrap-precision=mode  -mbuild-constants
617           -mcpu=cpu-type  -mtune=cpu-type -mbwx  -mmax  -mfix  -mcix
618           -mfloat-vax  -mfloat-ieee -mexplicit-relocs  -msmall-data
619           -mlarge-data -msmall-text  -mlarge-text -mmemory-latency=time
620
621           eBPF Options -mbig-endian -mlittle-endian -mkernel=version
622           -mframe-limit=bytes -mxbpf -mco-re -mno-co-re -mjmpext -mjmp32
623           -malu32 -mcpu=version
624
625           FR30 Options -msmall-model  -mno-lsim
626
627           FT32 Options -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
628
629           FRV Options -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float
630           -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble
631           -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic
632           -minline-plt  -mgprel-ro  -multilib-library-pic -mlinked-fp
633           -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack
634           -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
635           -moptimize-membar  -mno-optimize-membar -mscc  -mno-scc
636           -mcond-exec  -mno-cond-exec -mvliw-branch  -mno-vliw-branch
637           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
638           -mno-nested-cond-exec  -mtomcat-stats -mTLS  -mtls -mcpu=cpu
639
640           GNU/Linux Options -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
641           -tno-android-cc  -tno-android-ld
642
643           H8/300 Options -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32
644           -malign-300
645
646           HPPA Options -march=architecture-type -matomic-libcalls
647           -mbig-switch -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
648           -mordered  -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
649           -mfixed-range=register-range -mcoherent-ldcw -mjump-in-delay
650           -mlinker-opt  -mlong-calls -mlong-load-store  -mno-atomic-libcalls
651           -mno-disable-fpregs -mno-disable-indexing  -mno-fast-indirect-calls
652           -mno-gas -mno-jump-in-delay  -mno-long-load-store
653           -mno-portable-runtime  -mno-soft-float -mno-space-regs
654           -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0
655           -mportable-runtime -mschedule=cpu-type  -mspace-regs  -msoft-mult
656           -msio  -mwsio -munix=unix-std  -nolibdld  -static  -threads
657
658           IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld
659           -mno-pic -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
660           -mconstant-gp  -mauto-pic  -mfused-madd
661           -minline-float-divide-min-latency
662           -minline-float-divide-max-throughput -mno-inline-float-divide
663           -minline-int-divide-min-latency -minline-int-divide-max-throughput
664           -mno-inline-int-divide -minline-sqrt-min-latency
665           -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm
666           -mearly-stop-bits -mfixed-range=register-range  -mtls-size=tls-size
667           -mtune=cpu-type  -milp32  -mlp64 -msched-br-data-spec
668           -msched-ar-data-spec  -msched-control-spec -msched-br-in-data-spec
669           -msched-ar-in-data-spec  -msched-in-control-spec -msched-spec-ldc
670           -msched-spec-control-ldc -msched-prefer-non-data-spec-insns
671           -msched-prefer-non-control-spec-insns
672           -msched-stop-bits-after-every-cycle
673           -msched-count-spec-in-critical-path
674           -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
675           -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=max-
676           insns
677
678           LM32 Options -mbarrel-shift-enabled  -mdivide-enabled
679           -mmultiply-enabled -msign-extend-enabled  -muser-enabled
680
681           LoongArch Options -march=cpu-type  -mtune=cpu-type -mabi=base-abi-
682           type -mfpu=fpu-type -msoft-float -msingle-float -mdouble-float
683           -mbranch-cost=n  -mcheck-zero-division -mno-check-zero-division
684           -mcond-move-int  -mno-cond-move-int -mcond-move-float
685           -mno-cond-move-float -memcpy  -mno-memcpy -mstrict-align
686           -mno-strict-align -mmax-inline-memcpy-size=n -mexplicit-relocs
687           -mno-explicit-relocs -mdirect-extern-access
688           -mno-direct-extern-access -mcmodel=code-model
689
690           M32R/D Options -m32r2  -m32rx  -m32r -mdebug -malign-loops
691           -mno-align-loops -missue-rate=number -mbranch-cost=number
692           -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
693           -mflush-func=name -mno-flush-trap  -mflush-trap=number -G num
694
695           M32C Options -mcpu=cpu  -msim  -memregs=number
696
697           M680x0 Options -march=arch  -mcpu=cpu  -mtune=tune -m68000  -m68020
698           -m68020-40  -m68020-60  -m68030  -m68040 -m68060  -mcpu32  -m5200
699           -m5206e  -m528x  -m5307  -m5407 -mcfv4e  -mbitfield  -mno-bitfield
700           -mc68000  -mc68020 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div
701           -mshort -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
702           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
703           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
704           -mxgot  -mno-xgot  -mlong-jump-table-offsets
705
706           MCore Options -mhardlit  -mno-hardlit  -mdiv  -mno-div
707           -mrelax-immediates -mno-relax-immediates  -mwide-bitfields
708           -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions
709           -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
710           -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340
711           -mstack-increment
712
713           MicroBlaze Options -msoft-float  -mhard-float  -msmall-divides
714           -mcpu=cpu -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
715           -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
716           -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
717           -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-app-model
718           -mpic-data-is-text-relative
719
720           MIPS Options -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2
721           -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 -mips32r6
722           -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 -mips16
723           -mno-mips16  -mflip-mips16 -minterlink-compressed
724           -mno-interlink-compressed -minterlink-mips16  -mno-interlink-mips16
725           -mabi=abi  -mabicalls  -mno-abicalls -mshared  -mno-shared  -mplt
726           -mno-plt  -mxgot  -mno-xgot -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64
727           -mhard-float  -msoft-float -mno-float  -msingle-float
728           -mdouble-float -modd-spreg  -mno-odd-spreg -mabs=mode
729           -mnan=encoding -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 -mmcu
730           -mmno-mcu -meva  -mno-eva -mvirt  -mno-virt -mxpa  -mno-xpa -mcrc
731           -mno-crc -mginv  -mno-ginv -mmicromips  -mno-micromips -mmsa
732           -mno-msa -mloongson-mmi  -mno-loongson-mmi -mloongson-ext
733           -mno-loongson-ext -mloongson-ext2  -mno-loongson-ext2 -mfpu=fpu-
734           type -msmartmips  -mno-smartmips -mpaired-single
735           -mno-paired-single  -mdmx  -mno-mdmx -mips3d  -mno-mips3d  -mmt
736           -mno-mt  -mllsc  -mno-llsc -mlong64  -mlong32  -msym32  -mno-sym32
737           -Gnum  -mlocal-sdata  -mno-local-sdata -mextern-sdata
738           -mno-extern-sdata  -mgpopt  -mno-gopt -membedded-data
739           -mno-embedded-data -muninit-const-in-rodata
740           -mno-uninit-const-in-rodata -mcode-readable=setting
741           -msplit-addresses  -mno-split-addresses -mexplicit-relocs
742           -mno-explicit-relocs -mcheck-zero-division
743           -mno-check-zero-division -mdivide-traps  -mdivide-breaks
744           -mload-store-pairs  -mno-load-store-pairs -munaligned-access
745           -mno-unaligned-access -mmemcpy  -mno-memcpy  -mlong-calls
746           -mno-long-calls -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd
747           -mno-fused-madd  -nocpp -mfix-24k  -mno-fix-24k -mfix-r4000
748           -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 -mfix-r5900
749           -mno-fix-r5900 -mfix-r10000  -mno-fix-r10000  -mfix-rm7000
750           -mno-fix-rm7000 -mfix-vr4120  -mno-fix-vr4120 -mfix-vr4130
751           -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 -mflush-func=func
752           -mno-flush-func -mbranch-cost=num  -mbranch-likely
753           -mno-branch-likely -mcompact-branches=policy -mfp-exceptions
754           -mno-fp-exceptions -mvr4130-align  -mno-vr4130-align  -msynci
755           -mno-synci -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4
756           -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
757           -mframe-header-opt  -mno-frame-header-opt
758
759           MMIX Options -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon
760           -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv
761           -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict
762           -mbase-addresses -mno-base-addresses  -msingle-exit
763           -mno-single-exit
764
765           MN10300 Options -mmult-bug  -mno-mult-bug -mno-am33  -mam33
766           -mam33-2  -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 -mno-crt0
767           -mrelax  -mliw  -msetlb
768
769           Moxie Options -meb  -mel  -mmul.x  -mno-crt0
770
771           MSP430 Options -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall
772           -mrelax -mwarn-mcu -mcode-region=  -mdata-region= -msilicon-errata=
773           -msilicon-errata-warn= -mhwmult=  -minrt  -mtiny-printf
774           -mmax-inline-shift=
775
776           NDS32 Options -mbig-endian  -mlittle-endian -mreduced-regs
777           -mfull-regs -mcmov  -mno-cmov -mext-perf  -mno-ext-perf -mext-perf2
778           -mno-ext-perf2 -mext-string  -mno-ext-string -mv3push  -mno-v3push
779           -m16bit  -mno-16bit -misr-vector-size=num -mcache-block-size=num
780           -march=arch -mcmodel=code-model -mctor-dtor  -mrelax
781
782           Nios II Options -G num  -mgpopt=option  -mgpopt  -mno-gpopt
783           -mgprel-sec=regexp  -mr0rel-sec=regexp -mel  -meb -mno-bypass-cache
784           -mbypass-cache -mno-cache-volatile  -mcache-volatile
785           -mno-fast-sw-div  -mfast-sw-div -mhw-mul  -mno-hw-mul  -mhw-mulx
786           -mno-hw-mulx  -mno-hw-div  -mhw-div -mcustom-insn=N
787           -mno-custom-insn -mcustom-fpu-cfg=name -mhal  -msmallc
788           -msys-crt0=name  -msys-lib=name -march=arch  -mbmx  -mno-bmx  -mcdx
789           -mno-cdx
790
791           Nvidia PTX Options -m64  -mmainkernel  -moptimize
792
793           OpenRISC Options -mboard=name  -mnewlib  -mhard-mul  -mhard-div
794           -msoft-mul  -msoft-div -msoft-float  -mhard-float  -mdouble-float
795           -munordered-float -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
796           -mcmodel=code-model
797
798           PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45
799           -m10 -mint32  -mno-int16  -mint16  -mno-int32 -msplit  -munix-asm
800           -mdec-asm  -mgnu-asm  -mlra
801
802           PowerPC Options See RS/6000 and PowerPC Options.
803
804           PRU Options -mmcu=mcu  -minrt  -mno-relax  -mloop -mabi=variant
805
806           RISC-V Options -mbranch-cost=N-instruction -mplt  -mno-plt
807           -mabi=ABI-string -mfdiv  -mno-fdiv -mdiv  -mno-div -misa-spec=ISA-
808           spec-string -march=ISA-string -mtune=processor-string
809           -mpreferred-stack-boundary=num -msmall-data-limit=N-bytes
810           -msave-restore  -mno-save-restore -mshorten-memrefs
811           -mno-shorten-memrefs -mstrict-align  -mno-strict-align
812           -mcmodel=medlow  -mcmodel=medany -mexplicit-relocs
813           -mno-explicit-relocs -mrelax  -mno-relax -mriscv-attribute
814           -mno-riscv-attribute -malign-data=type -mbig-endian
815           -mlittle-endian -mstack-protector-guard=guard
816           -mstack-protector-guard-reg=reg
817           -mstack-protector-guard-offset=offset -mcsr-check -mno-csr-check
818           -minline-atomics  -mno-inline-atomics
819
820           RL78 Options -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
821           -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
822           -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
823
824           RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
825           -mcmodel=code-model -mpowerpc64 -maltivec  -mno-altivec
826           -mpowerpc-gpopt  -mno-powerpc-gpopt -mpowerpc-gfxopt
827           -mno-powerpc-gfxopt -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb
828           -mpopcntd  -mno-popcntd -mfprnd  -mno-fprnd -mcmpb  -mno-cmpb
829           -mhard-dfp  -mno-hard-dfp -mfull-toc   -mminimal-toc
830           -mno-fp-in-toc  -mno-sum-in-toc -m64  -m32  -mxl-compat
831           -mno-xl-compat  -mpe -malign-power  -malign-natural -msoft-float
832           -mhard-float  -mmultiple  -mno-multiple -mupdate  -mno-update
833           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
834           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
835           -mstrict-align  -mno-strict-align  -mrelocatable -mno-relocatable
836           -mrelocatable-lib  -mno-relocatable-lib -mtoc  -mno-toc  -mlittle
837           -mlittle-endian  -mbig  -mbig-endian -mdynamic-no-pic  -mswdiv
838           -msingle-pic-base -mprioritize-restricted-insns=priority
839           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
840           -mcall-aixdesc  -mcall-eabi  -mcall-freebsd -mcall-linux
841           -mcall-netbsd  -mcall-openbsd -mcall-sysv  -mcall-sysv-eabi
842           -mcall-sysv-noeabi -mtraceback=traceback_type -maix-struct-return
843           -msvr4-struct-return -mabi=abi-type  -msecure-plt  -mbss-plt
844           -mlongcall  -mno-longcall  -mpltseq  -mno-pltseq
845           -mblock-move-inline-limit=num -mblock-compare-inline-limit=num
846           -mblock-compare-inline-loop-limit=num -mno-block-ops-unaligned-vsx
847           -mstring-compare-inline-limit=num -misel  -mno-isel -mvrsave
848           -mno-vrsave -mmulhw  -mno-mulhw -mdlmzb  -mno-dlmzb -mprototype
849           -mno-prototype -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
850           -msdata=opt  -mreadonly-in-sdata  -mvxworks  -G num -mrecip
851           -mrecip=opt  -mno-recip  -mrecip-precision -mno-recip-precision
852           -mveclibabi=type  -mfriz  -mno-friz -mpointers-to-nested-functions
853           -mno-pointers-to-nested-functions -msave-toc-indirect
854           -mno-save-toc-indirect -mpower8-fusion  -mno-mpower8-fusion
855           -mpower8-vector  -mno-power8-vector -mcrypto  -mno-crypto  -mhtm
856           -mno-htm -mquad-memory  -mno-quad-memory -mquad-memory-atomic
857           -mno-quad-memory-atomic -mcompat-align-parm  -mno-compat-align-parm
858           -mfloat128  -mno-float128  -mfloat128-hardware
859           -mno-float128-hardware -mgnu-attribute  -mno-gnu-attribute
860           -mstack-protector-guard=guard -mstack-protector-guard-reg=reg
861           -mstack-protector-guard-offset=offset -mprefixed -mno-prefixed
862           -mpcrel -mno-pcrel -mmma -mno-mmma -mrop-protect -mno-rop-protect
863           -mprivileged -mno-privileged
864
865           RX Options -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu -mcpu=
866           -mbig-endian-data  -mlittle-endian-data -msmall-data -msim
867           -mno-sim -mas100-syntax  -mno-as100-syntax -mrelax
868           -mmax-constant-size= -mint-register= -mpid -mallow-string-insns
869           -mno-allow-string-insns -mjsr -mno-warn-multiple-fast-interrupts
870           -msave-acc-in-interrupts
871
872           S/390 and zSeries Options -mtune=cpu-type  -march=cpu-type
873           -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
874           -mlong-double-64  -mlong-double-128 -mbackchain  -mno-backchain
875           -mpacked-stack  -mno-packed-stack -msmall-exec  -mno-small-exec
876           -mmvcle  -mno-mvcle -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
877           -mhtm  -mvx  -mzvector -mtpf-trace  -mno-tpf-trace
878           -mtpf-trace-skip  -mno-tpf-trace-skip -mfused-madd  -mno-fused-madd
879           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard
880           -mhotpatch=halfwords,halfwords
881
882           SH Options -m1  -m2  -m2e -m2a-nofpu  -m2a-single-only  -m2a-single
883           -m2a -m3  -m3e -m4-nofpu  -m4-single-only  -m4-single  -m4
884           -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al -mb  -ml
885           -mdalign  -mrelax -mbigtable  -mfmovd  -mrenesas  -mno-renesas
886           -mnomacsave -mieee  -mno-ieee  -mbitops  -misize
887           -minline-ic_invalidate  -mpadstruct -mprefergot  -musermode
888           -multcost=number  -mdiv=strategy -mdivsi3_libfunc=name
889           -mfixed-range=register-range -maccumulate-outgoing-args
890           -matomic-model=atomic-model -mbranch-cost=num  -mzdcbranch
891           -mno-zdcbranch -mcbranch-force-delay-slot -mfused-madd
892           -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
893           -mpretend-cmove  -mtas
894
895           Solaris 2 Options -mclear-hwcap  -mno-clear-hwcap  -mimpure-text
896           -mno-impure-text -pthreads
897
898           SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
899           -mmemory-model=mem-model -m32  -m64  -mapp-regs  -mno-app-regs
900           -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat -mfpu
901           -mno-fpu  -mhard-float  -msoft-float -mhard-quad-float
902           -msoft-quad-float -mstack-bias  -mno-stack-bias -mstd-struct-return
903           -mno-std-struct-return -munaligned-doubles  -mno-unaligned-doubles
904           -muser-mode  -mno-user-mode -mv8plus  -mno-v8plus  -mvis  -mno-vis
905           -mvis2  -mno-vis2  -mvis3  -mno-vis3 -mvis4  -mno-vis4  -mvis4b
906           -mno-vis4b -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld
907           -mno-fsmuld -mpopc  -mno-popc  -msubxc  -mno-subxc -mfix-at697f
908           -mfix-ut699  -mfix-ut700  -mfix-gr712rc -mlra  -mno-lra
909
910           System V Options -Qy  -Qn  -YP,paths  -Ym,dir
911
912           V850 Options -mlong-calls  -mno-long-calls  -mep  -mno-ep
913           -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n
914           -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt
915           -mno-disable-callt -mv850e2v3  -mv850e2  -mv850e1  -mv850es -mv850e
916           -mv850  -mv850e3v5 -mloop -mrelax -mlong-jumps -msoft-float
917           -mhard-float -mgcc-abi -mrh850-abi -mbig-switch
918
919           VAX Options -mg  -mgnu  -munix  -mlra
920
921           Visium Options -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float
922           -msoft-float -mcpu=cpu-type  -mtune=cpu-type  -msv-mode
923           -muser-mode
924
925           VMS Options -mvms-return-codes  -mdebug-main=prefix  -mmalloc64
926           -mpointer-size=size
927
928           VxWorks Options -mrtp  -non-static  -Bstatic  -Bdynamic -Xbind-lazy
929           -Xbind-now
930
931           x86 Options -mtune=cpu-type  -march=cpu-type -mtune-ctrl=feature-
932           list  -mdump-tune-features  -mno-default -mfpmath=unit
933           -masm=dialect  -mno-fancy-math-387 -mno-fp-ret-in-387  -m80387
934           -mhard-float  -msoft-float -mno-wide-multiply  -mrtd
935           -malign-double -mpreferred-stack-boundary=num
936           -mincoming-stack-boundary=num -mcld  -mcx16  -msahf  -mmovbe
937           -mcrc32 -mmwait -mrecip  -mrecip=opt -mvzeroupper  -mprefer-avx128
938           -mprefer-vector-width=opt -mmove-max=bits -mstore-max=bits -mmmx
939           -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx
940           -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl
941           -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes
942           -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd
943           -mptwrite  -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves
944           -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4
945           -mxop -madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm
946           -mhle  -mlwp -mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes
947           -mwaitpkg -mshstk -mmanual-endbr -mcet-switch -mforce-indirect-call
948           -mavx512vbmi2 -mavx512bf16 -menqcmd -mvpclmulqdq  -mavx512bitalg
949           -mmovdiri  -mmovdir64b  -mavx512vpopcntdq -mavx5124fmaps
950           -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid -mrdseed  -msgx
951           -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile  -mamx-int8
952           -mamx-bf16 -muintr -mhreset -mavxvnni -mavx512fp16 -mavxifma
953           -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi
954           -mraoint -mamx-complex -mcldemote  -mms-bitfields
955           -mno-align-stringops  -minline-all-stringops
956           -minline-stringops-dynamically  -mstringop-strategy=alg -mkl
957           -mwidekl -mmemcpy-strategy=strategy  -mmemset-strategy=strategy
958           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
959           -m96bit-long-double  -mlong-double-64  -mlong-double-80
960           -mlong-double-128 -mregparm=num  -msseregparm -mveclibabi=type
961           -mvect8-ret-in-mem -mpc32  -mpc64  -mpc80  -mdaz-ftz -mstackrealign
962           -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
963           -mcmodel=code-model  -mabi=name  -maddress-mode=mode -m32  -m64
964           -mx32  -m16  -miamcu  -mlarge-data-threshold=num -msse2avx
965           -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
966           -minstrument-return=type -mfentry-name=name -mfentry-section=name
967           -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
968           -malign-data=type  -mstack-protector-guard=guard
969           -mstack-protector-guard-reg=reg
970           -mstack-protector-guard-offset=offset
971           -mstack-protector-guard-symbol=symbol -mgeneral-regs-only
972           -mcall-ms2sysv-xlogues -mrelax-cmpxchg-loop
973           -mindirect-branch=choice  -mfunction-return=choice
974           -mindirect-branch-register -mharden-sls=choice
975           -mindirect-branch-cs-prefix -mneeded -mno-direct-extern-access
976           -munroll-only-small-loops -mlam=choice
977
978           x86 Windows Options -mconsole  -mcygwin  -mno-cygwin  -mdll
979           -mnop-fun-dllimport  -mthread -municode  -mwin32  -mwindows
980           -fno-set-stack-executable
981
982           Xstormy16 Options -msim
983
984           Xtensa Options -mconst16  -mno-const16 -mfused-madd
985           -mno-fused-madd -mforce-no-pic -mserialize-volatile
986           -mno-serialize-volatile -mtext-section-literals
987           -mno-text-section-literals -mauto-litpools  -mno-auto-litpools
988           -mtarget-align  -mno-target-align -mlongcalls  -mno-longcalls
989           -mabi=abi-type -mextra-l32r-costs=cycles
990
991           zSeries Options See S/390 and zSeries Options.
992
993   Options Controlling the Kind of Output
994       Compilation can involve up to four stages: preprocessing, compilation
995       proper, assembly and linking, always in that order.  GCC is capable of
996       preprocessing and compiling several files either into several assembler
997       input files, or into one assembler input file; then each assembler
998       input file produces an object file, and linking combines all the object
999       files (those newly compiled, and those specified as input) into an
1000       executable file.
1001
1002       For any given input file, the file name suffix determines what kind of
1003       compilation is done:
1004
1005       file.c
1006           C source code that must be preprocessed.
1007
1008       file.i
1009           C source code that should not be preprocessed.
1010
1011       file.ii
1012           C++ source code that should not be preprocessed.
1013
1014       file.m
1015           Objective-C source code.  Note that you must link with the libobjc
1016           library to make an Objective-C program work.
1017
1018       file.mi
1019           Objective-C source code that should not be preprocessed.
1020
1021       file.mm
1022       file.M
1023           Objective-C++ source code.  Note that you must link with the
1024           libobjc library to make an Objective-C++ program work.  Note that
1025           .M refers to a literal capital M.
1026
1027       file.mii
1028           Objective-C++ source code that should not be preprocessed.
1029
1030       file.h
1031           C, C++, Objective-C or Objective-C++ header file to be turned into
1032           a precompiled header (default), or C, C++ header file to be turned
1033           into an Ada spec (via the -fdump-ada-spec switch).
1034
1035       file.cc
1036       file.cp
1037       file.cxx
1038       file.cpp
1039       file.CPP
1040       file.c++
1041       file.C
1042           C++ source code that must be preprocessed.  Note that in .cxx, the
1043           last two letters must both be literally x.  Likewise, .C refers to
1044           a literal capital C.
1045
1046       file.mm
1047       file.M
1048           Objective-C++ source code that must be preprocessed.
1049
1050       file.mii
1051           Objective-C++ source code that should not be preprocessed.
1052
1053       file.hh
1054       file.H
1055       file.hp
1056       file.hxx
1057       file.hpp
1058       file.HPP
1059       file.h++
1060       file.tcc
1061           C++ header file to be turned into a precompiled header or Ada spec.
1062
1063       file.f
1064       file.for
1065       file.ftn
1066           Fixed form Fortran source code that should not be preprocessed.
1067
1068       file.F
1069       file.FOR
1070       file.fpp
1071       file.FPP
1072       file.FTN
1073           Fixed form Fortran source code that must be preprocessed (with the
1074           traditional preprocessor).
1075
1076       file.f90
1077       file.f95
1078       file.f03
1079       file.f08
1080           Free form Fortran source code that should not be preprocessed.
1081
1082       file.F90
1083       file.F95
1084       file.F03
1085       file.F08
1086           Free form Fortran source code that must be preprocessed (with the
1087           traditional preprocessor).
1088
1089       file.go
1090           Go source code.
1091
1092       file.d
1093           D source code.
1094
1095       file.di
1096           D interface file.
1097
1098       file.dd
1099           D documentation code (Ddoc).
1100
1101       file.ads
1102           Ada source code file that contains a library unit declaration (a
1103           declaration of a package, subprogram, or generic, or a generic
1104           instantiation), or a library unit renaming declaration (a package,
1105           generic, or subprogram renaming declaration).  Such files are also
1106           called specs.
1107
1108       file.adb
1109           Ada source code file containing a library unit body (a subprogram
1110           or package body).  Such files are also called bodies.
1111
1112       file.s
1113           Assembler code.
1114
1115       file.S
1116       file.sx
1117           Assembler code that must be preprocessed.
1118
1119       other
1120           An object file to be fed straight into linking.  Any file name with
1121           no recognized suffix is treated this way.
1122
1123       You can specify the input language explicitly with the -x option:
1124
1125       -x language
1126           Specify explicitly the language for the following input files
1127           (rather than letting the compiler choose a default based on the
1128           file name suffix).  This option applies to all following input
1129           files until the next -x option.  Possible values for language are:
1130
1131                   c  c-header  cpp-output
1132                   c++  c++-header  c++-system-header c++-user-header c++-cpp-output
1133                   objective-c  objective-c-header  objective-c-cpp-output
1134                   objective-c++ objective-c++-header objective-c++-cpp-output
1135                   assembler  assembler-with-cpp
1136                   ada
1137                   d
1138                   f77  f77-cpp-input f95  f95-cpp-input
1139                   go
1140
1141       -x none
1142           Turn off any specification of a language, so that subsequent files
1143           are handled according to their file name suffixes (as they are if
1144           -x has not been used at all).
1145
1146       If you only want some of the stages of compilation, you can use -x (or
1147       filename suffixes) to tell gcc where to start, and one of the options
1148       -c, -S, or -E to say where gcc is to stop.  Note that some combinations
1149       (for example, -x cpp-output -E) instruct gcc to do nothing at all.
1150
1151       -c  Compile or assemble the source files, but do not link.  The linking
1152           stage simply is not done.  The ultimate output is in the form of an
1153           object file for each source file.
1154
1155           By default, the object file name for a source file is made by
1156           replacing the suffix .c, .i, .s, etc., with .o.
1157
1158           Unrecognized input files, not requiring compilation or assembly,
1159           are ignored.
1160
1161       -S  Stop after the stage of compilation proper; do not assemble.  The
1162           output is in the form of an assembler code file for each non-
1163           assembler input file specified.
1164
1165           By default, the assembler file name for a source file is made by
1166           replacing the suffix .c, .i, etc., with .s.
1167
1168           Input files that don't require compilation are ignored.
1169
1170       -E  Stop after the preprocessing stage; do not run the compiler proper.
1171           The output is in the form of preprocessed source code, which is
1172           sent to the standard output.
1173
1174           Input files that don't require preprocessing are ignored.
1175
1176       -o file
1177           Place the primary output in file file.  This applies to whatever
1178           sort of output is being produced, whether it be an executable file,
1179           an object file, an assembler file or preprocessed C code.
1180
1181           If -o is not specified, the default is to put an executable file in
1182           a.out, the object file for source.suffix in source.o, its assembler
1183           file in source.s, a precompiled header file in source.suffix.gch,
1184           and all preprocessed C source on standard output.
1185
1186           Though -o names only the primary output, it also affects the naming
1187           of auxiliary and dump outputs.  See the examples below.  Unless
1188           overridden, both auxiliary outputs and dump outputs are placed in
1189           the same directory as the primary output.  In auxiliary outputs,
1190           the suffix of the input file is replaced with that of the auxiliary
1191           output file type; in dump outputs, the suffix of the dump file is
1192           appended to the input file suffix.  In compilation commands, the
1193           base name of both auxiliary and dump outputs is that of the primary
1194           output; in compile and link commands, the primary output name,
1195           minus the executable suffix, is combined with the input file name.
1196           If both share the same base name, disregarding the suffix, the
1197           result of the combination is that base name, otherwise, they are
1198           concatenated, separated by a dash.
1199
1200                   gcc -c foo.c ...
1201
1202           will use foo.o as the primary output, and place aux outputs and
1203           dumps next to it, e.g., aux file foo.dwo for -gsplit-dwarf, and
1204           dump file foo.c.???r.final for -fdump-rtl-final.
1205
1206           If a non-linker output file is explicitly specified, aux and dump
1207           files by default take the same base name:
1208
1209                   gcc -c foo.c -o dir/foobar.o ...
1210
1211           will name aux outputs dir/foobar.* and dump outputs dir/foobar.c.*.
1212
1213           A linker output will instead prefix aux and dump outputs:
1214
1215                   gcc foo.c bar.c -o dir/foobar ...
1216
1217           will generally name aux outputs dir/foobar-foo.* and
1218           dir/foobar-bar.*, and dump outputs dir/foobar-foo.c.* and
1219           dir/foobar-bar.c.*.
1220
1221           The one exception to the above is when the executable shares the
1222           base name with the single input:
1223
1224                   gcc foo.c -o dir/foo ...
1225
1226           in which case aux outputs are named dir/foo.* and dump outputs
1227           named dir/foo.c.*.
1228
1229           The location and the names of auxiliary and dump outputs can be
1230           adjusted by the options -dumpbase, -dumpbase-ext, -dumpdir,
1231           -save-temps=cwd, and -save-temps=obj.
1232
1233       -dumpbase dumpbase
1234           This option sets the base name for auxiliary and dump output files.
1235           It does not affect the name of the primary output file.
1236           Intermediate outputs, when preserved, are not regarded as primary
1237           outputs, but as auxiliary outputs:
1238
1239                   gcc -save-temps -S foo.c
1240
1241           saves the (no longer) temporary preprocessed file in foo.i, and
1242           then compiles to the (implied) output file foo.s, whereas:
1243
1244                   gcc -save-temps -dumpbase save-foo -c foo.c
1245
1246           preprocesses to in save-foo.i, compiles to save-foo.s (now an
1247           intermediate, thus auxiliary output), and then assembles to the
1248           (implied) output file foo.o.
1249
1250           Absent this option, dump and aux files take their names from the
1251           input file, or from the (non-linker) output file, if one is
1252           explicitly specified: dump output files (e.g. those requested by
1253           -fdump-* options) with the input name suffix, and aux output files
1254           (those requested by other non-dump options, e.g. "-save-temps",
1255           "-gsplit-dwarf", "-fcallgraph-info") without it.
1256
1257           Similar suffix differentiation of dump and aux outputs can be
1258           attained for explicitly-given -dumpbase basename.suf by also
1259           specifying -dumpbase-ext .suf.
1260
1261           If dumpbase is explicitly specified with any directory component,
1262           any dumppfx specification (e.g. -dumpdir or -save-temps=*) is
1263           ignored, and instead of appending to it, dumpbase fully overrides
1264           it:
1265
1266                   gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \
1267                     -dumpdir pfx- -save-temps=cwd ...
1268
1269           creates auxiliary and dump outputs named alt/foo.*, disregarding
1270           dir/ in -o, the ./ prefix implied by -save-temps=cwd, and pfx- in
1271           -dumpdir.
1272
1273           When -dumpbase is specified in a command that compiles multiple
1274           inputs, or that compiles and then links, it may be combined with
1275           dumppfx, as specified under -dumpdir.  Then, each input file is
1276           compiled using the combined dumppfx, and default values for
1277           dumpbase and auxdropsuf are computed for each input file:
1278
1279                   gcc foo.c bar.c -c -dumpbase main ...
1280
1281           creates foo.o and bar.o as primary outputs, and avoids overwriting
1282           the auxiliary and dump outputs by using the dumpbase as a prefix,
1283           creating auxiliary and dump outputs named main-foo.*  and
1284           main-bar.*.
1285
1286           An empty string specified as dumpbase avoids the influence of the
1287           output basename in the naming of auxiliary and dump outputs during
1288           compilation, computing default values :
1289
1290                   gcc -c foo.c -o dir/foobar.o -dumpbase " ...
1291
1292           will name aux outputs dir/foo.* and dump outputs dir/foo.c.*.  Note
1293           how their basenames are taken from the input name, but the
1294           directory still defaults to that of the output.
1295
1296           The empty-string dumpbase does not prevent the use of the output
1297           basename for outputs during linking:
1298
1299                   gcc foo.c bar.c -o dir/foobar -dumpbase " -flto ...
1300
1301           The compilation of the source files will name auxiliary outputs
1302           dir/foo.* and dir/bar.*, and dump outputs dir/foo.c.* and
1303           dir/bar.c.*.  LTO recompilation during linking will use dir/foobar.
1304           as the prefix for dumps and auxiliary files.
1305
1306       -dumpbase-ext auxdropsuf
1307           When forming the name of an auxiliary (but not a dump) output file,
1308           drop trailing auxdropsuf from dumpbase before appending any
1309           suffixes.  If not specified, this option defaults to the suffix of
1310           a default dumpbase, i.e., the suffix of the input file when
1311           -dumpbase is not present in the command line, or dumpbase is
1312           combined with dumppfx.
1313
1314                   gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
1315
1316           creates dir/foo.o as the main output, and generates auxiliary
1317           outputs in dir/x-foo.*, taking the location of the primary output,
1318           and dropping the .c suffix from the dumpbase.  Dump outputs retain
1319           the suffix: dir/x-foo.c.*.
1320
1321           This option is disregarded if it does not match the suffix of a
1322           specified dumpbase, except as an alternative to the executable
1323           suffix when appending the linker output base name to dumppfx, as
1324           specified below:
1325
1326                   gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
1327
1328           creates main.out as the primary output, and avoids overwriting the
1329           auxiliary and dump outputs by using the executable name minus
1330           auxdropsuf as a prefix, creating auxiliary outputs named main-foo.*
1331           and main-bar.* and dump outputs named main-foo.c.* and
1332           main-bar.c.*.
1333
1334       -dumpdir dumppfx
1335           When forming the name of an auxiliary or dump output file, use
1336           dumppfx as a prefix:
1337
1338                   gcc -dumpdir pfx- -c foo.c ...
1339
1340           creates foo.o as the primary output, and auxiliary outputs named
1341           pfx-foo.*, combining the given dumppfx with the default dumpbase
1342           derived from the default primary output, derived in turn from the
1343           input name.  Dump outputs also take the input name suffix:
1344           pfx-foo.c.*.
1345
1346           If dumppfx is to be used as a directory name, it must end with a
1347           directory separator:
1348
1349                   gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
1350
1351           creates obj/bar.o as the primary output, and auxiliary outputs
1352           named dir/bar.*, combining the given dumppfx with the default
1353           dumpbase derived from the primary output name.  Dump outputs also
1354           take the input name suffix: dir/bar.c.*.
1355
1356           It defaults to the location of the output file, unless the output
1357           file is a special file like "/dev/null". Options -save-temps=cwd
1358           and -save-temps=obj override this default, just like an explicit
1359           -dumpdir option.  In case multiple such options are given, the last
1360           one prevails:
1361
1362                   gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
1363
1364           outputs foo.o, with auxiliary outputs named foo.* because
1365           -save-temps=* overrides the dumppfx given by the earlier -dumpdir
1366           option.  It does not matter that =obj is the default for
1367           -save-temps, nor that the output directory is implicitly the
1368           current directory.  Dump outputs are named foo.c.*.
1369
1370           When compiling from multiple input files, if -dumpbase is
1371           specified, dumpbase, minus a auxdropsuf suffix, and a dash are
1372           appended to (or override, if containing any directory components)
1373           an explicit or defaulted dumppfx, so that each of the multiple
1374           compilations gets differently-named aux and dump outputs.
1375
1376                   gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
1377
1378           outputs auxiliary dumps to dir/pfx-main-foo.* and
1379           dir/pfx-main-bar.*, appending dumpbase- to dumppfx.  Dump outputs
1380           retain the input file suffix: dir/pfx-main-foo.c.*  and
1381           dir/pfx-main-bar.c.*, respectively.  Contrast with the single-input
1382           compilation:
1383
1384                   gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
1385
1386           that, applying -dumpbase to a single source, does not compute and
1387           append a separate dumpbase per input file.  Its auxiliary and dump
1388           outputs go in dir/pfx-main.*.
1389
1390           When compiling and then linking from multiple input files, a
1391           defaulted or explicitly specified dumppfx also undergoes the
1392           dumpbase- transformation above (e.g. the compilation of foo.c and
1393           bar.c above, but without -c).  If neither -dumpdir nor -dumpbase
1394           are given, the linker output base name, minus auxdropsuf, if
1395           specified, or the executable suffix otherwise, plus a dash is
1396           appended to the default dumppfx instead.  Note, however, that
1397           unlike earlier cases of linking:
1398
1399                   gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
1400
1401           does not append the output name main to dumppfx, because -dumpdir
1402           is explicitly specified.  The goal is that the explicitly-specified
1403           dumppfx may contain the specified output name as part of the
1404           prefix, if desired; only an explicitly-specified -dumpbase would be
1405           combined with it, in order to avoid simply discarding a meaningful
1406           option.
1407
1408           When compiling and then linking from a single input file, the
1409           linker output base name will only be appended to the default
1410           dumppfx as above if it does not share the base name with the single
1411           input file name.  This has been covered in single-input linking
1412           cases above, but not with an explicit -dumpdir that inhibits the
1413           combination, even if overridden by -save-temps=*:
1414
1415                   gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
1416
1417           Auxiliary outputs are named foo.*, and dump outputs foo.c.*, in the
1418           current working directory as ultimately requested by
1419           -save-temps=cwd.
1420
1421           Summing it all up for an intuitive though slightly imprecise data
1422           flow: the primary output name is broken into a directory part and a
1423           basename part; dumppfx is set to the former, unless overridden by
1424           -dumpdir or -save-temps=*, and dumpbase is set to the latter,
1425           unless overriden by -dumpbase.  If there are multiple inputs or
1426           linking, this dumpbase may be combined with dumppfx and taken from
1427           each input file.  Auxiliary output names for each input are formed
1428           by combining dumppfx, dumpbase minus suffix, and the auxiliary
1429           output suffix; dump output names are only different in that the
1430           suffix from dumpbase is retained.
1431
1432           When it comes to auxiliary and dump outputs created during LTO
1433           recompilation, a combination of dumppfx and dumpbase, as given or
1434           as derived from the linker output name but not from inputs, even in
1435           cases in which this combination would not otherwise be used as
1436           such, is passed down with a trailing period replacing the compiler-
1437           added dash, if any, as a -dumpdir option to lto-wrapper; being
1438           involved in linking, this program does not normally get any
1439           -dumpbase and -dumpbase-ext, and it ignores them.
1440
1441           When running sub-compilers, lto-wrapper appends LTO stage names to
1442           the received dumppfx, ensures it contains a directory component so
1443           that it overrides any -dumpdir, and passes that as -dumpbase to
1444           sub-compilers.
1445
1446       -v  Print (on standard error output) the commands executed to run the
1447           stages of compilation.  Also print the version number of the
1448           compiler driver program and of the preprocessor and the compiler
1449           proper.
1450
1451       -###
1452           Like -v except the commands are not executed and arguments are
1453           quoted unless they contain only alphanumeric characters or "./-_".
1454           This is useful for shell scripts to capture the driver-generated
1455           command lines.
1456
1457       --help
1458           Print (on the standard output) a description of the command-line
1459           options understood by gcc.  If the -v option is also specified then
1460           --help is also passed on to the various processes invoked by gcc,
1461           so that they can display the command-line options they accept.  If
1462           the -Wextra option has also been specified (prior to the --help
1463           option), then command-line options that have no documentation
1464           associated with them are also displayed.
1465
1466       --target-help
1467           Print (on the standard output) a description of target-specific
1468           command-line options for each tool.  For some targets extra target-
1469           specific information may also be printed.
1470
1471       --help={class|[^]qualifier}[,...]
1472           Print (on the standard output) a description of the command-line
1473           options understood by the compiler that fit into all specified
1474           classes and qualifiers.  These are the supported classes:
1475
1476           optimizers
1477               Display all of the optimization options supported by the
1478               compiler.
1479
1480           warnings
1481               Display all of the options controlling warning messages
1482               produced by the compiler.
1483
1484           target
1485               Display target-specific options.  Unlike the --target-help
1486               option however, target-specific options of the linker and
1487               assembler are not displayed.  This is because those tools do
1488               not currently support the extended --help= syntax.
1489
1490           params
1491               Display the values recognized by the --param option.
1492
1493           language
1494               Display the options supported for language, where language is
1495               the name of one of the languages supported in this version of
1496               GCC.  If an option is supported by all languages, one needs to
1497               select common class.
1498
1499           common
1500               Display the options that are common to all languages.
1501
1502           These are the supported qualifiers:
1503
1504           undocumented
1505               Display only those options that are undocumented.
1506
1507           joined
1508               Display options taking an argument that appears after an equal
1509               sign in the same continuous piece of text, such as:
1510               --help=target.
1511
1512           separate
1513               Display options taking an argument that appears as a separate
1514               word following the original option, such as: -o output-file.
1515
1516           Thus for example to display all the undocumented target-specific
1517           switches supported by the compiler, use:
1518
1519                   --help=target,undocumented
1520
1521           The sense of a qualifier can be inverted by prefixing it with the ^
1522           character, so for example to display all binary warning options
1523           (i.e., ones that are either on or off and that do not take an
1524           argument) that have a description, use:
1525
1526                   --help=warnings,^joined,^undocumented
1527
1528           The argument to --help= should not consist solely of inverted
1529           qualifiers.
1530
1531           Combining several classes is possible, although this usually
1532           restricts the output so much that there is nothing to display.  One
1533           case where it does work, however, is when one of the classes is
1534           target.  For example, to display all the target-specific
1535           optimization options, use:
1536
1537                   --help=target,optimizers
1538
1539           The --help= option can be repeated on the command line.  Each
1540           successive use displays its requested class of options, skipping
1541           those that have already been displayed.  If --help is also
1542           specified anywhere on the command line then this takes precedence
1543           over any --help= option.
1544
1545           If the -Q option appears on the command line before the --help=
1546           option, then the descriptive text displayed by --help= is changed.
1547           Instead of describing the displayed options, an indication is given
1548           as to whether the option is enabled, disabled or set to a specific
1549           value (assuming that the compiler knows this at the point where the
1550           --help= option is used).
1551
1552           Here is a truncated example from the ARM port of gcc:
1553
1554                     % gcc -Q -mabi=2 --help=target -c
1555                     The following options are target specific:
1556                     -mabi=                                2
1557                     -mabort-on-noreturn                   [disabled]
1558                     -mapcs                                [disabled]
1559
1560           The output is sensitive to the effects of previous command-line
1561           options, so for example it is possible to find out which
1562           optimizations are enabled at -O2 by using:
1563
1564                   -Q -O2 --help=optimizers
1565
1566           Alternatively you can discover which binary optimizations are
1567           enabled by -O3 by using:
1568
1569                   gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1570                   gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1571                   diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1572
1573       --version
1574           Display the version number and copyrights of the invoked GCC.
1575
1576       -pass-exit-codes
1577           Normally the gcc program exits with the code of 1 if any phase of
1578           the compiler returns a non-success return code.  If you specify
1579           -pass-exit-codes, the gcc program instead returns with the
1580           numerically highest error produced by any phase returning an error
1581           indication.  The C, C++, and Fortran front ends return 4 if an
1582           internal compiler error is encountered.
1583
1584       -pipe
1585           Use pipes rather than temporary files for communication between the
1586           various stages of compilation.  This fails to work on some systems
1587           where the assembler is unable to read from a pipe; but the GNU
1588           assembler has no trouble.
1589
1590       -specs=file
1591           Process file after the compiler reads in the standard specs file,
1592           in order to override the defaults which the gcc driver program uses
1593           when determining what switches to pass to cc1, cc1plus, as, ld,
1594           etc.  More than one -specs=file can be specified on the command
1595           line, and they are processed in order, from left to right.
1596
1597       -wrapper
1598           Invoke all subcommands under a wrapper program.  The name of the
1599           wrapper program and its parameters are passed as a comma separated
1600           list.
1601
1602                   gcc -c t.c -wrapper gdb,--args
1603
1604           This invokes all subprograms of gcc under gdb --args, thus the
1605           invocation of cc1 is gdb --args cc1 ....
1606
1607       -ffile-prefix-map=old=new
1608           When compiling files residing in directory old, record any
1609           references to them in the result of the compilation as if the files
1610           resided in directory new instead.  Specifying this option is
1611           equivalent to specifying all the individual -f*-prefix-map options.
1612           This can be used to make reproducible builds that are location
1613           independent.  Directories referenced by directives are not affected
1614           by these options.  See also -fmacro-prefix-map, -fdebug-prefix-map,
1615           -fprofile-prefix-map and -fcanon-prefix-map.
1616
1617       -fcanon-prefix-map
1618           For the -f*-prefix-map options normally comparison of old prefix
1619           against the filename that would be normally referenced in the
1620           result of the compilation is done using textual comparison of the
1621           prefixes, or ignoring character case for case insensitive
1622           filesystems and considering slashes and backslashes as equal on DOS
1623           based filesystems.  The -fcanon-prefix-map causes such comparisons
1624           to be done on canonicalized paths of old and the referenced
1625           filename.
1626
1627       -fplugin=name.so
1628           Load the plugin code in file name.so, assumed to be a shared object
1629           to be dlopen'd by the compiler.  The base name of the shared object
1630           file is used to identify the plugin for the purposes of argument
1631           parsing (See -fplugin-arg-name-key=value below).  Each plugin
1632           should define the callback functions specified in the Plugins API.
1633
1634       -fplugin-arg-name-key=value
1635           Define an argument called key with a value of value for the plugin
1636           called name.
1637
1638       -fdump-ada-spec[-slim]
1639           For C and C++ source and include files, generate corresponding Ada
1640           specs.
1641
1642       -fada-spec-parent=unit
1643           In conjunction with -fdump-ada-spec[-slim] above, generate Ada
1644           specs as child units of parent unit.
1645
1646       -fdump-go-spec=file
1647           For input files in any language, generate corresponding Go
1648           declarations in file.  This generates Go "const", "type", "var",
1649           and "func" declarations which may be a useful way to start writing
1650           a Go interface to code written in some other language.
1651
1652       @file
1653           Read command-line options from file.  The options read are inserted
1654           in place of the original @file option.  If file does not exist, or
1655           cannot be read, then the option will be treated literally, and not
1656           removed.
1657
1658           Options in file are separated by whitespace.  A whitespace
1659           character may be included in an option by surrounding the entire
1660           option in either single or double quotes.  Any character (including
1661           a backslash) may be included by prefixing the character to be
1662           included with a backslash.  The file may itself contain additional
1663           @file options; any such options will be processed recursively.
1664
1665   Compiling C++ Programs
1666       C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
1667       .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
1668       (for shared template code) .tcc; and preprocessed C++ files use the
1669       suffix .ii.  GCC recognizes files with these names and compiles them as
1670       C++ programs even if you call the compiler the same way as for
1671       compiling C programs (usually with the name gcc).
1672
1673       However, the use of gcc does not add the C++ library.  g++ is a program
1674       that calls GCC and automatically specifies linking against the C++
1675       library.  It treats .c, .h and .i files as C++ source files instead of
1676       C source files unless -x is used.  This program is also useful when
1677       precompiling a C header file with a .h extension for use in C++
1678       compilations.  On many systems, g++ is also installed with the name
1679       c++.
1680
1681       When you compile C++ programs, you may specify many of the same
1682       command-line options that you use for compiling programs in any
1683       language; or command-line options meaningful for C and related
1684       languages; or options that are meaningful only for C++ programs.
1685
1686   Options Controlling C Dialect
1687       The following options control the dialect of C (or languages derived
1688       from C, such as C++, Objective-C and Objective-C++) that the compiler
1689       accepts:
1690
1691       -ansi
1692           In C mode, this is equivalent to -std=c90. In C++ mode, it is
1693           equivalent to -std=c++98.
1694
1695           This turns off certain features of GCC that are incompatible with
1696           ISO C90 (when compiling C code), or of standard C++ (when compiling
1697           C++ code), such as the "asm" and "typeof" keywords, and predefined
1698           macros such as "unix" and "vax" that identify the type of system
1699           you are using.  It also enables the undesirable and rarely used ISO
1700           trigraph feature.  For the C compiler, it disables recognition of
1701           C++ style // comments as well as the "inline" keyword.
1702
1703           The alternate keywords "__asm__", "__extension__", "__inline__" and
1704           "__typeof__" continue to work despite -ansi.  You would not want to
1705           use them in an ISO C program, of course, but it is useful to put
1706           them in header files that might be included in compilations done
1707           with -ansi.  Alternate predefined macros such as "__unix__" and
1708           "__vax__" are also available, with or without -ansi.
1709
1710           The -ansi option does not cause non-ISO programs to be rejected
1711           gratuitously.  For that, -Wpedantic is required in addition to
1712           -ansi.
1713
1714           The macro "__STRICT_ANSI__" is predefined when the -ansi option is
1715           used.  Some header files may notice this macro and refrain from
1716           declaring certain functions or defining certain macros that the ISO
1717           standard doesn't call for; this is to avoid interfering with any
1718           programs that might use these names for other things.
1719
1720           Functions that are normally built in but do not have semantics
1721           defined by ISO C (such as "alloca" and "ffs") are not built-in
1722           functions when -ansi is used.
1723
1724       -std=
1725           Determine the language standard.   This option is currently only
1726           supported when compiling C or C++.
1727
1728           The compiler can accept several base standards, such as c90 or
1729           c++98, and GNU dialects of those standards, such as gnu90 or
1730           gnu++98.  When a base standard is specified, the compiler accepts
1731           all programs following that standard plus those using GNU
1732           extensions that do not contradict it.  For example, -std=c90 turns
1733           off certain features of GCC that are incompatible with ISO C90,
1734           such as the "asm" and "typeof" keywords, but not other GNU
1735           extensions that do not have a meaning in ISO C90, such as omitting
1736           the middle term of a "?:" expression. On the other hand, when a GNU
1737           dialect of a standard is specified, all features supported by the
1738           compiler are enabled, even when those features change the meaning
1739           of the base standard.  As a result, some strict-conforming programs
1740           may be rejected.  The particular standard is used by -Wpedantic to
1741           identify which features are GNU extensions given that version of
1742           the standard. For example -std=gnu90 -Wpedantic warns about C++
1743           style // comments, while -std=gnu99 -Wpedantic does not.
1744
1745           A value for this option must be provided; possible values are
1746
1747           c90
1748           c89
1749           iso9899:1990
1750               Support all ISO C90 programs (certain GNU extensions that
1751               conflict with ISO C90 are disabled). Same as -ansi for C code.
1752
1753           iso9899:199409
1754               ISO C90 as modified in amendment 1.
1755
1756           c99
1757           c9x
1758           iso9899:1999
1759           iso9899:199x
1760               ISO C99.  This standard is substantially completely supported,
1761               modulo bugs and floating-point issues (mainly but not entirely
1762               relating to optional C99 features from Annexes F and G).  See
1763               <https://gcc.gnu.org/c99status.html> for more information.  The
1764               names c9x and iso9899:199x are deprecated.
1765
1766           c11
1767           c1x
1768           iso9899:2011
1769               ISO C11, the 2011 revision of the ISO C standard.  This
1770               standard is substantially completely supported, modulo bugs,
1771               floating-point issues (mainly but not entirely relating to
1772               optional C11 features from Annexes F and G) and the optional
1773               Annexes K (Bounds-checking interfaces) and L (Analyzability).
1774               The name c1x is deprecated.
1775
1776           c17
1777           c18
1778           iso9899:2017
1779           iso9899:2018
1780               ISO C17, the 2017 revision of the ISO C standard (published in
1781               2018).  This standard is same as C11 except for corrections of
1782               defects (all of which are also applied with -std=c11) and a new
1783               value of "__STDC_VERSION__", and so is supported to the same
1784               extent as C11.
1785
1786           c2x The next version of the ISO C standard, still under
1787               development.  The support for this version is experimental and
1788               incomplete.
1789
1790           gnu90
1791           gnu89
1792               GNU dialect of ISO C90 (including some C99 features).
1793
1794           gnu99
1795           gnu9x
1796               GNU dialect of ISO C99.  The name gnu9x is deprecated.
1797
1798           gnu11
1799           gnu1x
1800               GNU dialect of ISO C11.  The name gnu1x is deprecated.
1801
1802           gnu17
1803           gnu18
1804               GNU dialect of ISO C17.  This is the default for C code.
1805
1806           gnu2x
1807               The next version of the ISO C standard, still under
1808               development, plus GNU extensions.  The support for this version
1809               is experimental and incomplete.
1810
1811           c++98
1812           c++03
1813               The 1998 ISO C++ standard plus the 2003 technical corrigendum
1814               and some additional defect reports. Same as -ansi for C++ code.
1815
1816           gnu++98
1817           gnu++03
1818               GNU dialect of -std=c++98.
1819
1820           c++11
1821           c++0x
1822               The 2011 ISO C++ standard plus amendments.  The name c++0x is
1823               deprecated.
1824
1825           gnu++11
1826           gnu++0x
1827               GNU dialect of -std=c++11.  The name gnu++0x is deprecated.
1828
1829           c++14
1830           c++1y
1831               The 2014 ISO C++ standard plus amendments.  The name c++1y is
1832               deprecated.
1833
1834           gnu++14
1835           gnu++1y
1836               GNU dialect of -std=c++14.  The name gnu++1y is deprecated.
1837
1838           c++17
1839           c++1z
1840               The 2017 ISO C++ standard plus amendments.  The name c++1z is
1841               deprecated.
1842
1843           gnu++17
1844           gnu++1z
1845               GNU dialect of -std=c++17.  This is the default for C++ code.
1846               The name gnu++1z is deprecated.
1847
1848           c++20
1849           c++2a
1850               The 2020 ISO C++ standard plus amendments.  Support is
1851               experimental, and could change in incompatible ways in future
1852               releases.  The name c++2a is deprecated.
1853
1854           gnu++20
1855           gnu++2a
1856               GNU dialect of -std=c++20.  Support is experimental, and could
1857               change in incompatible ways in future releases.  The name
1858               gnu++2a is deprecated.
1859
1860           c++2b
1861           c++23
1862               The next revision of the ISO C++ standard, planned for 2023.
1863               Support is highly experimental, and will almost certainly
1864               change in incompatible ways in future releases.
1865
1866           gnu++2b
1867           gnu++23
1868               GNU dialect of -std=c++2b.  Support is highly experimental, and
1869               will almost certainly change in incompatible ways in future
1870               releases.
1871
1872       -aux-info filename
1873           Output to the given filename prototyped declarations for all
1874           functions declared and/or defined in a translation unit, including
1875           those in header files.  This option is silently ignored in any
1876           language other than C.
1877
1878           Besides declarations, the file indicates, in comments, the origin
1879           of each declaration (source file and line), whether the declaration
1880           was implicit, prototyped or unprototyped (I, N for new or O for
1881           old, respectively, in the first character after the line number and
1882           the colon), and whether it came from a declaration or a definition
1883           (C or F, respectively, in the following character).  In the case of
1884           function definitions, a K&R-style list of arguments followed by
1885           their declarations is also provided, inside comments, after the
1886           declaration.
1887
1888       -fno-asm
1889           Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1890           code can use these words as identifiers.  You can use the keywords
1891           "__asm__", "__inline__" and "__typeof__" instead.  In C, -ansi
1892           implies -fno-asm.
1893
1894           In C++, "inline" is a standard keyword and is not affected by this
1895           switch.  You may want to use the -fno-gnu-keywords flag instead,
1896           which disables "typeof" but not "asm" and "inline".  In C99 mode
1897           (-std=c99 or -std=gnu99), this switch only affects the "asm" and
1898           "typeof" keywords, since "inline" is a standard keyword in ISO C99.
1899           In C2X mode (-std=c2x or -std=gnu2x), this switch only affects the
1900           "asm" keyword, since "typeof" is a standard keyword in ISO C2X.
1901
1902       -fno-builtin
1903       -fno-builtin-function
1904           Don't recognize built-in functions that do not begin with
1905           __builtin_ as prefix.
1906
1907           GCC normally generates special code to handle certain built-in
1908           functions more efficiently; for instance, calls to "alloca" may
1909           become single instructions which adjust the stack directly, and
1910           calls to "memcpy" may become inline copy loops.  The resulting code
1911           is often both smaller and faster, but since the function calls no
1912           longer appear as such, you cannot set a breakpoint on those calls,
1913           nor can you change the behavior of the functions by linking with a
1914           different library.  In addition, when a function is recognized as a
1915           built-in function, GCC may use information about that function to
1916           warn about problems with calls to that function, or to generate
1917           more efficient code, even if the resulting code still contains
1918           calls to that function.  For example, warnings are given with
1919           -Wformat for bad calls to "printf" when "printf" is built in and
1920           "strlen" is known not to modify global memory.
1921
1922           With the -fno-builtin-function option only the built-in function
1923           function is disabled.  function must not begin with __builtin_.  If
1924           a function is named that is not built-in in this version of GCC,
1925           this option is ignored.  There is no corresponding
1926           -fbuiltin-function option; if you wish to enable built-in functions
1927           selectively when using -fno-builtin or -ffreestanding, you may
1928           define macros such as:
1929
1930                   #define abs(n)          __builtin_abs ((n))
1931                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1932
1933       -fcond-mismatch
1934           Allow conditional expressions with mismatched types in the second
1935           and third arguments.  The value of such an expression is void.
1936           This option is not supported for C++.
1937
1938       -ffreestanding
1939           Assert that compilation targets a freestanding environment.  This
1940           implies -fno-builtin.  A freestanding environment is one in which
1941           the standard library may not exist, and program startup may not
1942           necessarily be at "main".  The most obvious example is an OS
1943           kernel.  This is equivalent to -fno-hosted.
1944
1945       -fgimple
1946           Enable parsing of function definitions marked with "__GIMPLE".
1947           This is an experimental feature that allows unit testing of GIMPLE
1948           passes.
1949
1950       -fgnu-tm
1951           When the option -fgnu-tm is specified, the compiler generates code
1952           for the Linux variant of Intel's current Transactional Memory ABI
1953           specification document (Revision 1.1, May 6 2009).  This is an
1954           experimental feature whose interface may change in future versions
1955           of GCC, as the official specification changes.  Please note that
1956           not all architectures are supported for this feature.
1957
1958           For more information on GCC's support for transactional memory,
1959
1960           Note that the transactional memory feature is not supported with
1961           non-call exceptions (-fnon-call-exceptions).
1962
1963       -fgnu89-inline
1964           The option -fgnu89-inline tells GCC to use the traditional GNU
1965           semantics for "inline" functions when in C99 mode.
1966
1967           Using this option is roughly equivalent to adding the "gnu_inline"
1968           function attribute to all inline functions.
1969
1970           The option -fno-gnu89-inline explicitly tells GCC to use the C99
1971           semantics for "inline" when in C99 or gnu99 mode (i.e., it
1972           specifies the default behavior).  This option is not supported in
1973           -std=c90 or -std=gnu90 mode.
1974
1975           The preprocessor macros "__GNUC_GNU_INLINE__" and
1976           "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1977           effect for "inline" functions.
1978
1979       -fhosted
1980           Assert that compilation targets a hosted environment.  This implies
1981           -fbuiltin.  A hosted environment is one in which the entire
1982           standard library is available, and in which "main" has a return
1983           type of "int".  Examples are nearly everything except a kernel.
1984           This is equivalent to -fno-freestanding.
1985
1986       -flax-vector-conversions
1987           Allow implicit conversions between vectors with differing numbers
1988           of elements and/or incompatible element types.  This option should
1989           not be used for new code.
1990
1991       -fms-extensions
1992           Accept some non-standard constructs used in Microsoft header files.
1993
1994           In C++ code, this allows member names in structures to be similar
1995           to previous types declarations.
1996
1997                   typedef int UOW;
1998                   struct ABC {
1999                     UOW UOW;
2000                   };
2001
2002           Some cases of unnamed fields in structures and unions are only
2003           accepted with this option.
2004
2005           Note that this option is off for all targets except for x86 targets
2006           using ms-abi.
2007
2008       -foffload=disable
2009       -foffload=default
2010       -foffload=target-list
2011           Specify for which OpenMP and OpenACC offload targets code should be
2012           generated.  The default behavior, equivalent to -foffload=default,
2013           is to generate code for all supported offload targets.  The
2014           -foffload=disable form generates code only for the host fallback,
2015           while -foffload=target-list generates code only for the specified
2016           comma-separated list of offload targets.
2017
2018           Offload targets are specified in GCC's internal target-triplet
2019           format. You can run the compiler with -v to show the list of
2020           configured offload targets under "OFFLOAD_TARGET_NAMES".
2021
2022       -foffload-options=options
2023       -foffload-options=target-triplet-list=options
2024           With -foffload-options=options, GCC passes the specified options to
2025           the compilers for all enabled offloading targets.  You can specify
2026           options that apply only to a specific target or targets by using
2027           the -foffload-options=target-list=options form.  The target-list is
2028           a comma-separated list in the same format as for the -foffload=
2029           option.
2030
2031           Typical command lines are
2032
2033                   -foffload-options=-lgfortran -foffload-options=-lm
2034                   -foffload-options="-lgfortran -lm" -foffload-options=nvptx-none=-latomic
2035                   -foffload-options=amdgcn-amdhsa=-march=gfx906 -foffload-options=-lm
2036
2037       -fopenacc
2038           Enable handling of OpenACC directives "#pragma acc" in C/C++ and
2039           "!$acc" in Fortran.  When -fopenacc is specified, the compiler
2040           generates accelerated code according to the OpenACC Application
2041           Programming Interface v2.6 <https://www.openacc.org>.  This option
2042           implies -pthread, and thus is only supported on targets that have
2043           support for -pthread.
2044
2045       -fopenacc-dim=geom
2046           Specify default compute dimensions for parallel offload regions
2047           that do not explicitly specify.  The geom value is a triple of
2048           ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
2049           size can be omitted, to use a target-specific default value.
2050
2051       -fopenmp
2052           Enable handling of OpenMP directives "#pragma omp" in C/C++,
2053           "[[omp::directive(...)]]" and "[[omp::sequence(...)]]" in C++ and
2054           "!$omp" in Fortran.  When -fopenmp is specified, the compiler
2055           generates parallel code according to the OpenMP Application Program
2056           Interface v4.5 <https://www.openmp.org>.  This option implies
2057           -pthread, and thus is only supported on targets that have support
2058           for -pthread. -fopenmp implies -fopenmp-simd.
2059
2060       -fopenmp-simd
2061           Enable handling of OpenMP's "simd", "declare simd", "declare
2062           reduction", "assume", "ordered", "scan", "loop" directives and
2063           combined or composite directives with "simd" as constituent with
2064           "#pragma omp" in C/C++, "[[omp::directive(...)]]" and
2065           "[[omp::sequence(...)]]" in C++ and "!$omp" in Fortran.  Other
2066           OpenMP directives are ignored.
2067
2068       -fopenmp-target-simd-clone
2069       -fopenmp-target-simd-clone=device-type
2070           In addition to generating SIMD clones for functions marked with the
2071           "declare simd" directive, GCC also generates clones for functions
2072           marked with the OpenMP "declare target" directive that are suitable
2073           for vectorization when this option is in effect.  The device-type
2074           may be one of "none", "host", "nohost", and "any", which correspond
2075           to keywords for the "device_type" clause of the "declare target"
2076           directive; clones are generated for the intersection of devices
2077           specified.  -fopenmp-target-simd-clone is equivalent to
2078           -fopenmp-target-simd-clone=any and -fno-openmp-target-simd-clone is
2079           equivalent to -fopenmp-target-simd-clone=none.
2080
2081           At -O2 and higher (but not -Os or -Og) this optimization defaults
2082           to -fopenmp-target-simd-clone=nohost; otherwise it is disabled by
2083           default.
2084
2085       -fpermitted-flt-eval-methods=style
2086           ISO/IEC TS 18661-3 defines new permissible values for
2087           "FLT_EVAL_METHOD" that indicate that operations and constants with
2088           a semantic type that is an interchange or extended format should be
2089           evaluated to the precision and range of that type.  These new
2090           values are a superset of those permitted under C99/C11, which does
2091           not specify the meaning of other positive values of
2092           "FLT_EVAL_METHOD".  As such, code conforming to C11 may not have
2093           been written expecting the possibility of the new values.
2094
2095           -fpermitted-flt-eval-methods specifies whether the compiler should
2096           allow only the values of "FLT_EVAL_METHOD" specified in C99/C11, or
2097           the extended set of values specified in ISO/IEC TS 18661-3.
2098
2099           style is either "c11" or "ts-18661-3" as appropriate.
2100
2101           The default when in a standards compliant mode (-std=c11 or
2102           similar) is -fpermitted-flt-eval-methods=c11.  The default when in
2103           a GNU dialect (-std=gnu11 or similar) is
2104           -fpermitted-flt-eval-methods=ts-18661-3.
2105
2106       -fplan9-extensions
2107           Accept some non-standard constructs used in Plan 9 code.
2108
2109           This enables -fms-extensions, permits passing pointers to
2110           structures with anonymous fields to functions that expect pointers
2111           to elements of the type of the field, and permits referring to
2112           anonymous fields declared using a typedef.    This is only
2113           supported for C, not C++.
2114
2115       -fsigned-bitfields
2116       -funsigned-bitfields
2117       -fno-signed-bitfields
2118       -fno-unsigned-bitfields
2119           These options control whether a bit-field is signed or unsigned,
2120           when the declaration does not use either "signed" or "unsigned".
2121           By default, such a bit-field is signed, because this is consistent:
2122           the basic integer types such as "int" are signed types.
2123
2124       -fsigned-char
2125           Let the type "char" be signed, like "signed char".
2126
2127           Note that this is equivalent to -fno-unsigned-char, which is the
2128           negative form of -funsigned-char.  Likewise, the option
2129           -fno-signed-char is equivalent to -funsigned-char.
2130
2131       -funsigned-char
2132           Let the type "char" be unsigned, like "unsigned char".
2133
2134           Each kind of machine has a default for what "char" should be.  It
2135           is either like "unsigned char" by default or like "signed char" by
2136           default.
2137
2138           Ideally, a portable program should always use "signed char" or
2139           "unsigned char" when it depends on the signedness of an object.
2140           But many programs have been written to use plain "char" and expect
2141           it to be signed, or expect it to be unsigned, depending on the
2142           machines they were written for.  This option, and its inverse, let
2143           you make such a program work with the opposite default.
2144
2145           The type "char" is always a distinct type from each of "signed
2146           char" or "unsigned char", even though its behavior is always just
2147           like one of those two.
2148
2149       -fstrict-flex-arrays
2150           Control when to treat the trailing array of a structure as a
2151           flexible array member for the purpose of accessing the elements of
2152           such an array.  The positive form is equivalent to
2153           -fstrict-flex-arrays=3, which is the strictest.  A trailing array
2154           is treated as a flexible array member only when it is declared as a
2155           flexible array member per C99 standard onwards.  The negative form
2156           is equivalent to -fstrict-flex-arrays=0, which is the least strict.
2157           All trailing arrays of structures are treated as flexible array
2158           members.
2159
2160       -fstrict-flex-arrays=level
2161           Control when to treat the trailing array of a structure as a
2162           flexible array member for the purpose of accessing the elements of
2163           such an array.  The value of level controls the level of
2164           strictness.
2165
2166           The possible values of level are the same as for the
2167           "strict_flex_array" attribute.
2168
2169           You can control this behavior for a specific trailing array field
2170           of a structure by using the variable attribute "strict_flex_array"
2171           attribute.
2172
2173       -fsso-struct=endianness
2174           Set the default scalar storage order of structures and unions to
2175           the specified endianness.  The accepted values are big-endian,
2176           little-endian and native for the native endianness of the target
2177           (the default).  This option is not supported for C++.
2178
2179           Warning: the -fsso-struct switch causes GCC to generate code that
2180           is not binary compatible with code generated without it if the
2181           specified endianness is not the native endianness of the target.
2182
2183   Options Controlling C++ Dialect
2184       This section describes the command-line options that are only
2185       meaningful for C++ programs.  You can also use most of the GNU compiler
2186       options regardless of what language your program is in.  For example,
2187       you might compile a file firstClass.C like this:
2188
2189               g++ -g -fstrict-enums -O -c firstClass.C
2190
2191       In this example, only -fstrict-enums is an option meant only for C++
2192       programs; you can use the other options with any language supported by
2193       GCC.
2194
2195       Some options for compiling C programs, such as -std, are also relevant
2196       for C++ programs.
2197
2198       Here is a list of options that are only for compiling C++ programs:
2199
2200       -fabi-version=n
2201           Use version n of the C++ ABI.  The default is version 0.
2202
2203           Version 0 refers to the version conforming most closely to the C++
2204           ABI specification.  Therefore, the ABI obtained using version 0
2205           will change in different versions of G++ as ABI bugs are fixed.
2206
2207           Version 1 is the version of the C++ ABI that first appeared in G++
2208           3.2.
2209
2210           Version 2 is the version of the C++ ABI that first appeared in G++
2211           3.4, and was the default through G++ 4.9.
2212
2213           Version 3 corrects an error in mangling a constant address as a
2214           template argument.
2215
2216           Version 4, which first appeared in G++ 4.5, implements a standard
2217           mangling for vector types.
2218
2219           Version 5, which first appeared in G++ 4.6, corrects the mangling
2220           of attribute const/volatile on function pointer types, decltype of
2221           a plain decl, and use of a function parameter in the declaration of
2222           another parameter.
2223
2224           Version 6, which first appeared in G++ 4.7, corrects the promotion
2225           behavior of C++11 scoped enums and the mangling of template
2226           argument packs, const/static_cast, prefix ++ and --, and a class
2227           scope function used as a template argument.
2228
2229           Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2230           as a builtin type and corrects the mangling of lambdas in default
2231           argument scope.
2232
2233           Version 8, which first appeared in G++ 4.9, corrects the
2234           substitution behavior of function types with function-cv-
2235           qualifiers.
2236
2237           Version 9, which first appeared in G++ 5.2, corrects the alignment
2238           of "nullptr_t".
2239
2240           Version 10, which first appeared in G++ 6.1, adds mangling of
2241           attributes that affect type identity, such as ia32 calling
2242           convention attributes (e.g. stdcall).
2243
2244           Version 11, which first appeared in G++ 7, corrects the mangling of
2245           sizeof... expressions and operator names.  For multiple entities
2246           with the same name within a function, that are declared in
2247           different scopes, the mangling now changes starting with the
2248           twelfth occurrence.  It also implies -fnew-inheriting-ctors.
2249
2250           Version 12, which first appeared in G++ 8, corrects the calling
2251           conventions for empty classes on the x86_64 target and for classes
2252           with only deleted copy/move constructors.  It accidentally changes
2253           the calling convention for classes with a deleted copy constructor
2254           and a trivial move constructor.
2255
2256           Version 13, which first appeared in G++ 8.2, fixes the accidental
2257           change in version 12.
2258
2259           Version 14, which first appeared in G++ 10, corrects the mangling
2260           of the nullptr expression.
2261
2262           Version 15, which first appeared in G++ 10.3, corrects G++ 10 ABI
2263           tag regression.
2264
2265           Version 16, which first appeared in G++ 11, changes the mangling of
2266           "__alignof__" to be distinct from that of "alignof", and dependent
2267           operator names.
2268
2269           Version 17, which first appeared in G++ 12, fixes layout of classes
2270           that inherit from aggregate classes with default member
2271           initializers in C++14 and up.
2272
2273           Version 18, which first appeard in G++ 13, fixes manglings of
2274           lambdas that have additional context.
2275
2276           See also -Wabi.
2277
2278       -fabi-compat-version=n
2279           On targets that support strong aliases, G++ works around mangling
2280           changes by creating an alias with the correct mangled name when
2281           defining a symbol with an incorrect mangled name.  This switch
2282           specifies which ABI version to use for the alias.
2283
2284           With -fabi-version=0 (the default), this defaults to 13 (GCC 8.2
2285           compatibility).  If another ABI version is explicitly selected,
2286           this defaults to 0.  For compatibility with GCC versions 3.2
2287           through 4.9, use -fabi-compat-version=2.
2288
2289           If this option is not provided but -Wabi=n is, that version is used
2290           for compatibility aliases.  If this option is provided along with
2291           -Wabi (without the version), the version from this option is used
2292           for the warning.
2293
2294       -fno-access-control
2295           Turn off all access checking.  This switch is mainly useful for
2296           working around bugs in the access control code.
2297
2298       -faligned-new
2299           Enable support for C++17 "new" of types that require more alignment
2300           than "void* ::operator new(std::size_t)" provides.  A numeric
2301           argument such as "-faligned-new=32" can be used to specify how much
2302           alignment (in bytes) is provided by that function, but few users
2303           will need to override the default of alignof(std::max_align_t).
2304
2305           This flag is enabled by default for -std=c++17.
2306
2307       -fchar8_t
2308       -fno-char8_t
2309           Enable support for "char8_t" as adopted for C++20.  This includes
2310           the addition of a new "char8_t" fundamental type, changes to the
2311           types of UTF-8 string and character literals, new signatures for
2312           user-defined literals, associated standard library updates, and new
2313           "__cpp_char8_t" and "__cpp_lib_char8_t" feature test macros.
2314
2315           This option enables functions to be overloaded for ordinary and
2316           UTF-8 strings:
2317
2318                   int f(const char *);    // #1
2319                   int f(const char8_t *); // #2
2320                   int v1 = f("text");     // Calls #1
2321                   int v2 = f(u8"text");   // Calls #2
2322
2323           and introduces new signatures for user-defined literals:
2324
2325                   int operator""_udl1(char8_t);
2326                   int v3 = u8'x'_udl1;
2327                   int operator""_udl2(const char8_t*, std::size_t);
2328                   int v4 = u8"text"_udl2;
2329                   template<typename T, T...> int operator""_udl3();
2330                   int v5 = u8"text"_udl3;
2331
2332           The change to the types of UTF-8 string and character literals
2333           introduces incompatibilities with ISO C++11 and later standards.
2334           For example, the following code is well-formed under ISO C++11, but
2335           is ill-formed when -fchar8_t is specified.
2336
2337                   const char *cp = u8"xx";// error: invalid conversion from
2338                                           //        `const char8_t*' to `const char*'
2339                   int f(const char*);
2340                   auto v = f(u8"xx");     // error: invalid conversion from
2341                                           //        `const char8_t*' to `const char*'
2342                   std::string s{u8"xx"};  // error: no matching function for call to
2343                                           //        `std::basic_string<char>::basic_string()'
2344                   using namespace std::literals;
2345                   s = u8"xx"s;            // error: conversion from
2346                                           //        `basic_string<char8_t>' to non-scalar
2347                                           //        type `basic_string<char>' requested
2348
2349       -fcheck-new
2350           Check that the pointer returned by "operator new" is non-null
2351           before attempting to modify the storage allocated.  This check is
2352           normally unnecessary because the C++ standard specifies that
2353           "operator new" only returns 0 if it is declared throw(), in which
2354           case the compiler always checks the return value even without this
2355           option.  In all other cases, when "operator new" has a non-empty
2356           exception specification, memory exhaustion is signalled by throwing
2357           "std::bad_alloc".  See also new (nothrow).
2358
2359       -fconcepts
2360       -fconcepts-ts
2361           Enable support for the C++ Concepts feature for constraining
2362           template arguments.  With -std=c++20 and above, Concepts are part
2363           of the language standard, so -fconcepts defaults to on.
2364
2365           Some constructs that were allowed by the earlier C++ Extensions for
2366           Concepts Technical Specification, ISO 19217 (2015), but didn't make
2367           it into the standard, can additionally be enabled by -fconcepts-ts.
2368
2369       -fconstexpr-depth=n
2370           Set the maximum nested evaluation depth for C++11 constexpr
2371           functions to n.  A limit is needed to detect endless recursion
2372           during constant expression evaluation.  The minimum specified by
2373           the standard is 512.
2374
2375       -fconstexpr-cache-depth=n
2376           Set the maximum level of nested evaluation depth for C++11
2377           constexpr functions that will be cached to n.  This is a heuristic
2378           that trades off compilation speed (when the cache avoids repeated
2379           calculations) against memory consumption (when the cache grows very
2380           large from highly recursive evaluations).  The default is 8.  Very
2381           few users are likely to want to adjust it, but if your code does
2382           heavy constexpr calculations you might want to experiment to find
2383           which value works best for you.
2384
2385       -fconstexpr-fp-except
2386           Annex F of the C standard specifies that IEC559 floating point
2387           exceptions encountered at compile time should not stop compilation.
2388           C++ compilers have historically not followed this guidance, instead
2389           treating floating point division by zero as non-constant even
2390           though it has a well defined value.  This flag tells the compiler
2391           to give Annex F priority over other rules saying that a particular
2392           operation is undefined.
2393
2394                   constexpr float inf = 1./0.; // OK with -fconstexpr-fp-except
2395
2396       -fconstexpr-loop-limit=n
2397           Set the maximum number of iterations for a loop in C++14 constexpr
2398           functions to n.  A limit is needed to detect infinite loops during
2399           constant expression evaluation.  The default is 262144 (1<<18).
2400
2401       -fconstexpr-ops-limit=n
2402           Set the maximum number of operations during a single constexpr
2403           evaluation.  Even when number of iterations of a single loop is
2404           limited with the above limit, if there are several nested loops and
2405           each of them has many iterations but still smaller than the above
2406           limit, or if in a body of some loop or even outside of a loop too
2407           many expressions need to be evaluated, the resulting constexpr
2408           evaluation might take too long.  The default is 33554432 (1<<25).
2409
2410       -fcontracts
2411           Enable experimental support for the C++ Contracts feature, as
2412           briefly added to and then removed from the C++20 working paper
2413           (N4820).  The implementation also includes proposed enhancements
2414           from papers P1290, P1332, and P1429.  This functionality is
2415           intended mostly for those interested in experimentation towards
2416           refining the feature to get it into shape for a future C++
2417           standard.
2418
2419           On violation of a checked contract, the violation handler is
2420           called.  Users can replace the violation handler by defining
2421
2422                   void
2423                   handle_contract_violation (const std::experimental::contract_violation&);
2424
2425           There are different sets of additional flags that can be used
2426           together to specify which contracts will be checked and how, for
2427           N4820 contracts, P1332 contracts, or P1429 contracts; these sets
2428           cannot be used together.
2429
2430           -fcontract-mode=[on|off]
2431               Control whether any contracts have any semantics at all.
2432               Defaults to on.
2433
2434           -fcontract-assumption-mode=[on|off]
2435               [N4820] Control whether contracts with level axiom should have
2436               the assume semantic.  Defaults to on.
2437
2438           -fcontract-build-level=[off|default|audit]
2439               [N4820] Specify which level of contracts to generate checks
2440               for.  Defaults to default.
2441
2442           -fcontract-continuation-mode=[on|off]
2443               [N4820] Control whether to allow the program to continue
2444               executing after a contract violation.  That is, do checked
2445               contracts have the maybe semantic described below rather than
2446               the never semantic.  Defaults to off.
2447
2448           -fcontract-role=<name>:<default>,<audit>,<axiom>
2449               [P1332] Specify the concrete semantics for each contract level
2450               of a particular contract role.
2451
2452           -fcontract-semantic=[default|audit|axiom]:<semantic>
2453               [P1429] Specify the concrete semantic for a particular contract
2454               level.
2455
2456           -fcontract-strict-declarations=[on|off]
2457               Control whether to reject adding contracts to a function after
2458               its first declaration.  Defaults to off.
2459
2460           The possible concrete semantics for that can be specified with
2461           -fcontract-role or -fcontract-semantic are:
2462
2463           "ignore"
2464               This contract has no effect.
2465
2466           "assume"
2467               This contract is treated like C++23 "[[assume]]".
2468
2469           "check_never_continue"
2470           "never"
2471           "abort"
2472               This contract is checked.  If it fails, the violation handler
2473               is called.  If the handler returns, "std::terminate" is called.
2474
2475           "check_maybe_continue"
2476           "maybe"
2477               This contract is checked.  If it fails, the violation handler
2478               is called.  If the handler returns, execution continues
2479               normally.
2480
2481       -fcoroutines
2482           Enable support for the C++ coroutines extension (experimental).
2483
2484       -fno-elide-constructors
2485           The C++ standard allows an implementation to omit creating a
2486           temporary that is only used to initialize another object of the
2487           same type.  Specifying this option disables that optimization, and
2488           forces G++ to call the copy constructor in all cases.  This option
2489           also causes G++ to call trivial member functions which otherwise
2490           would be expanded inline.
2491
2492           In C++17, the compiler is required to omit these temporaries, but
2493           this option still affects trivial member functions.
2494
2495       -fno-enforce-eh-specs
2496           Don't generate code to check for violation of exception
2497           specifications at run time.  This option violates the C++ standard,
2498           but may be useful for reducing code size in production builds, much
2499           like defining "NDEBUG".  This does not give user code permission to
2500           throw exceptions in violation of the exception specifications; the
2501           compiler still optimizes based on the specifications, so throwing
2502           an unexpected exception results in undefined behavior at run time.
2503
2504       -fextern-tls-init
2505       -fno-extern-tls-init
2506           The C++11 and OpenMP standards allow "thread_local" and
2507           "threadprivate" variables to have dynamic (runtime) initialization.
2508           To support this, any use of such a variable goes through a wrapper
2509           function that performs any necessary initialization.  When the use
2510           and definition of the variable are in the same translation unit,
2511           this overhead can be optimized away, but when the use is in a
2512           different translation unit there is significant overhead even if
2513           the variable doesn't actually need dynamic initialization.  If the
2514           programmer can be sure that no use of the variable in a non-
2515           defining TU needs to trigger dynamic initialization (either because
2516           the variable is statically initialized, or a use of the variable in
2517           the defining TU will be executed before any uses in another TU),
2518           they can avoid this overhead with the -fno-extern-tls-init option.
2519
2520           On targets that support symbol aliases, the default is
2521           -fextern-tls-init.  On targets that do not support symbol aliases,
2522           the default is -fno-extern-tls-init.
2523
2524       -ffold-simple-inlines
2525       -fno-fold-simple-inlines
2526           Permit the C++ frontend to fold calls to "std::move",
2527           "std::forward", "std::addressof" and "std::as_const".  In contrast
2528           to inlining, this means no debug information will be generated for
2529           such calls.  Since these functions are rarely interesting to debug,
2530           this flag is enabled by default unless -fno-inline is active.
2531
2532       -fno-gnu-keywords
2533           Do not recognize "typeof" as a keyword, so that code can use this
2534           word as an identifier.  You can use the keyword "__typeof__"
2535           instead.  This option is implied by the strict ISO C++ dialects:
2536           -ansi, -std=c++98, -std=c++11, etc.
2537
2538       -fimplicit-constexpr
2539           Make inline functions implicitly constexpr, if they satisfy the
2540           requirements for a constexpr function.  This option can be used in
2541           C++14 mode or later.  This can result in initialization changing
2542           from dynamic to static and other optimizations.
2543
2544       -fno-implicit-templates
2545           Never emit code for non-inline templates that are instantiated
2546           implicitly (i.e. by use); only emit code for explicit
2547           instantiations.  If you use this option, you must take care to
2548           structure your code to include all the necessary explicit
2549           instantiations to avoid getting undefined symbols at link time.
2550
2551       -fno-implicit-inline-templates
2552           Don't emit code for implicit instantiations of inline templates,
2553           either.  The default is to handle inlines differently so that
2554           compiles with and without optimization need the same set of
2555           explicit instantiations.
2556
2557       -fno-implement-inlines
2558           To save space, do not emit out-of-line copies of inline functions
2559           controlled by "#pragma implementation".  This causes linker errors
2560           if these functions are not inlined everywhere they are called.
2561
2562       -fmodules-ts
2563       -fno-modules-ts
2564           Enable support for C++20 modules.  The -fno-modules-ts is usually
2565           not needed, as that is the default.  Even though this is a C++20
2566           feature, it is not currently implicitly enabled by selecting that
2567           standard version.
2568
2569       -fmodule-header
2570       -fmodule-header=user
2571       -fmodule-header=system
2572           Compile a header file to create an importable header unit.
2573
2574       -fmodule-implicit-inline
2575           Member functions defined in their class definitions are not
2576           implicitly inline for modular code.  This is different to
2577           traditional C++ behavior, for good reasons.  However, it may result
2578           in a difficulty during code porting.  This option makes such
2579           function definitions implicitly inline.  It does however generate
2580           an ABI incompatibility, so you must use it everywhere or nowhere.
2581           (Such definitions outside of a named module remain implicitly
2582           inline, regardless.)
2583
2584       -fno-module-lazy
2585           Disable lazy module importing and module mapper creation.
2586
2587       -fmodule-mapper=[hostname]:port[?ident]
2588       -fmodule-mapper=|program[?ident] args...
2589       -fmodule-mapper==socket[?ident]
2590       -fmodule-mapper=<>[inout][?ident]
2591       -fmodule-mapper=<in>out[?ident]
2592       -fmodule-mapper=file[?ident]
2593           An oracle to query for module name to filename mappings.  If
2594           unspecified the CXX_MODULE_MAPPER environment variable is used, and
2595           if that is unset, an in-process default is provided.
2596
2597       -fmodule-only
2598           Only emit the Compiled Module Interface, inhibiting any object
2599           file.
2600
2601       -fms-extensions
2602           Disable Wpedantic warnings about constructs used in MFC, such as
2603           implicit int and getting a pointer to member function via non-
2604           standard syntax.
2605
2606       -fnew-inheriting-ctors
2607           Enable the P0136 adjustment to the semantics of C++11 constructor
2608           inheritance.  This is part of C++17 but also considered to be a
2609           Defect Report against C++11 and C++14.  This flag is enabled by
2610           default unless -fabi-version=10 or lower is specified.
2611
2612       -fnew-ttp-matching
2613           Enable the P0522 resolution to Core issue 150, template template
2614           parameters and default arguments: this allows a template with
2615           default template arguments as an argument for a template template
2616           parameter with fewer template parameters.  This flag is enabled by
2617           default for -std=c++17.
2618
2619       -fno-nonansi-builtins
2620           Disable built-in declarations of functions that are not mandated by
2621           ANSI/ISO C.  These include "ffs", "alloca", "_exit", "index",
2622           "bzero", "conjf", and other related functions.
2623
2624       -fnothrow-opt
2625           Treat a throw() exception specification as if it were a "noexcept"
2626           specification to reduce or eliminate the text size overhead
2627           relative to a function with no exception specification.  If the
2628           function has local variables of types with non-trivial destructors,
2629           the exception specification actually makes the function smaller
2630           because the EH cleanups for those variables can be optimized away.
2631           The semantic effect is that an exception thrown out of a function
2632           with such an exception specification results in a call to
2633           "terminate" rather than "unexpected".
2634
2635       -fno-operator-names
2636           Do not treat the operator name keywords "and", "bitand", "bitor",
2637           "compl", "not", "or" and "xor" as synonyms as keywords.
2638
2639       -fno-optional-diags
2640           Disable diagnostics that the standard says a compiler does not need
2641           to issue.  Currently, the only such diagnostic issued by G++ is the
2642           one for a name having multiple meanings within a class.
2643
2644       -fpermissive
2645           Downgrade some diagnostics about nonconformant code from errors to
2646           warnings.  Thus, using -fpermissive allows some nonconforming code
2647           to compile.
2648
2649       -fno-pretty-templates
2650           When an error message refers to a specialization of a function
2651           template, the compiler normally prints the signature of the
2652           template followed by the template arguments and any typedefs or
2653           typenames in the signature (e.g. "void f(T) [with T = int]" rather
2654           than "void f(int)") so that it's clear which template is involved.
2655           When an error message refers to a specialization of a class
2656           template, the compiler omits any template arguments that match the
2657           default template arguments for that template.  If either of these
2658           behaviors make it harder to understand the error message rather
2659           than easier, you can use -fno-pretty-templates to disable them.
2660
2661       -fno-rtti
2662           Disable generation of information about every class with virtual
2663           functions for use by the C++ run-time type identification features
2664           ("dynamic_cast" and "typeid").  If you don't use those parts of the
2665           language, you can save some space by using this flag.  Note that
2666           exception handling uses the same information, but G++ generates it
2667           as needed. The "dynamic_cast" operator can still be used for casts
2668           that do not require run-time type information, i.e. casts to "void
2669           *" or to unambiguous base classes.
2670
2671           Mixing code compiled with -frtti with that compiled with -fno-rtti
2672           may not work.  For example, programs may fail to link if a class
2673           compiled with -fno-rtti is used as a base for a class compiled with
2674           -frtti.
2675
2676       -fsized-deallocation
2677           Enable the built-in global declarations
2678
2679                   void operator delete (void *, std::size_t) noexcept;
2680                   void operator delete[] (void *, std::size_t) noexcept;
2681
2682           as introduced in C++14.  This is useful for user-defined
2683           replacement deallocation functions that, for example, use the size
2684           of the object to make deallocation faster.  Enabled by default
2685           under -std=c++14 and above.  The flag -Wsized-deallocation warns
2686           about places that might want to add a definition.
2687
2688       -fstrict-enums
2689           Allow the compiler to optimize using the assumption that a value of
2690           enumerated type can only be one of the values of the enumeration
2691           (as defined in the C++ standard; basically, a value that can be
2692           represented in the minimum number of bits needed to represent all
2693           the enumerators).  This assumption may not be valid if the program
2694           uses a cast to convert an arbitrary integer value to the enumerated
2695           type.
2696
2697       -fstrong-eval-order
2698           Evaluate member access, array subscripting, and shift expressions
2699           in left-to-right order, and evaluate assignment in right-to-left
2700           order, as adopted for C++17.  Enabled by default with -std=c++17.
2701           -fstrong-eval-order=some enables just the ordering of member access
2702           and shift expressions, and is the default without -std=c++17.
2703
2704       -ftemplate-backtrace-limit=n
2705           Set the maximum number of template instantiation notes for a single
2706           warning or error to n.  The default value is 10.
2707
2708       -ftemplate-depth=n
2709           Set the maximum instantiation depth for template classes to n.  A
2710           limit on the template instantiation depth is needed to detect
2711           endless recursions during template class instantiation.  ANSI/ISO
2712           C++ conforming programs must not rely on a maximum depth greater
2713           than 17 (changed to 1024 in C++11).  The default value is 900, as
2714           the compiler can run out of stack space before hitting 1024 in some
2715           situations.
2716
2717       -fno-threadsafe-statics
2718           Do not emit the extra code to use the routines specified in the C++
2719           ABI for thread-safe initialization of local statics.  You can use
2720           this option to reduce code size slightly in code that doesn't need
2721           to be thread-safe.
2722
2723       -fuse-cxa-atexit
2724           Register destructors for objects with static storage duration with
2725           the "__cxa_atexit" function rather than the "atexit" function.
2726           This option is required for fully standards-compliant handling of
2727           static destructors, but only works if your C library supports
2728           "__cxa_atexit".
2729
2730       -fno-use-cxa-get-exception-ptr
2731           Don't use the "__cxa_get_exception_ptr" runtime routine.  This
2732           causes "std::uncaught_exception" to be incorrect, but is necessary
2733           if the runtime routine is not available.
2734
2735       -fvisibility-inlines-hidden
2736           This switch declares that the user does not attempt to compare
2737           pointers to inline functions or methods where the addresses of the
2738           two functions are taken in different shared objects.
2739
2740           The effect of this is that GCC may, effectively, mark inline
2741           methods with "__attribute__ ((visibility ("hidden")))" so that they
2742           do not appear in the export table of a DSO and do not require a PLT
2743           indirection when used within the DSO.  Enabling this option can
2744           have a dramatic effect on load and link times of a DSO as it
2745           massively reduces the size of the dynamic export table when the
2746           library makes heavy use of templates.
2747
2748           The behavior of this switch is not quite the same as marking the
2749           methods as hidden directly, because it does not affect static
2750           variables local to the function or cause the compiler to deduce
2751           that the function is defined in only one shared object.
2752
2753           You may mark a method as having a visibility explicitly to negate
2754           the effect of the switch for that method.  For example, if you do
2755           want to compare pointers to a particular inline method, you might
2756           mark it as having default visibility.  Marking the enclosing class
2757           with explicit visibility has no effect.
2758
2759           Explicitly instantiated inline methods are unaffected by this
2760           option as their linkage might otherwise cross a shared library
2761           boundary.
2762
2763       -fvisibility-ms-compat
2764           This flag attempts to use visibility settings to make GCC's C++
2765           linkage model compatible with that of Microsoft Visual Studio.
2766
2767           The flag makes these changes to GCC's linkage model:
2768
2769           1.  It sets the default visibility to "hidden", like
2770               -fvisibility=hidden.
2771
2772           2.  Types, but not their members, are not hidden by default.
2773
2774           3.  The One Definition Rule is relaxed for types without explicit
2775               visibility specifications that are defined in more than one
2776               shared object: those declarations are permitted if they are
2777               permitted when this option is not used.
2778
2779           In new code it is better to use -fvisibility=hidden and export
2780           those classes that are intended to be externally visible.
2781           Unfortunately it is possible for code to rely, perhaps
2782           accidentally, on the Visual Studio behavior.
2783
2784           Among the consequences of these changes are that static data
2785           members of the same type with the same name but defined in
2786           different shared objects are different, so changing one does not
2787           change the other; and that pointers to function members defined in
2788           different shared objects may not compare equal.  When this flag is
2789           given, it is a violation of the ODR to define types with the same
2790           name differently.
2791
2792       -fno-weak
2793           Do not use weak symbol support, even if it is provided by the
2794           linker.  By default, G++ uses weak symbols if they are available.
2795           This option exists only for testing, and should not be used by end-
2796           users; it results in inferior code and has no benefits.  This
2797           option may be removed in a future release of G++.
2798
2799       -fext-numeric-literals (C++ and Objective-C++ only)
2800           Accept imaginary, fixed-point, or machine-defined literal number
2801           suffixes as GNU extensions.  When this option is turned off these
2802           suffixes are treated as C++11 user-defined literal numeric
2803           suffixes.  This is on by default for all pre-C++11 dialects and all
2804           GNU dialects: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14.
2805           This option is off by default for ISO C++11 onwards (-std=c++11,
2806           ...).
2807
2808       -nostdinc++
2809           Do not search for header files in the standard directories specific
2810           to C++, but do still search the other standard directories.  (This
2811           option is used when building the C++ library.)
2812
2813       -flang-info-include-translate
2814       -flang-info-include-translate-not
2815       -flang-info-include-translate=header
2816           Inform of include translation events.  The first will note accepted
2817           include translations, the second will note declined include
2818           translations.  The header form will inform of include translations
2819           relating to that specific header.  If header is of the form "user"
2820           or "<system>" it will be resolved to a specific user or system
2821           header using the include path.
2822
2823       -flang-info-module-cmi
2824       -flang-info-module-cmi=module
2825           Inform of Compiled Module Interface pathnames.  The first will note
2826           all read CMI pathnames.  The module form will not reading a
2827           specific module's CMI.  module may be a named module or a header-
2828           unit (the latter indicated by either being a pathname containing
2829           directory separators or enclosed in "<>" or "").
2830
2831       -stdlib=libstdc++,libc++
2832           When G++ is configured to support this option, it allows
2833           specification of alternate C++ runtime libraries.  Two options are
2834           available: libstdc++ (the default, native C++ runtime for G++) and
2835           libc++ which is the C++ runtime installed on some operating systems
2836           (e.g. Darwin versions from Darwin11 onwards).  The option switches
2837           G++ to use the headers from the specified library and to emit
2838           "-lstdc++" or "-lc++" respectively, when a C++ runtime is required
2839           for linking.
2840
2841       In addition, these warning options have meanings only for C++ programs:
2842
2843       -Wabi-tag (C++ and Objective-C++ only)
2844           Warn when a type with an ABI tag is used in a context that does not
2845           have that ABI tag.  See C++ Attributes for more information about
2846           ABI tags.
2847
2848       -Wcomma-subscript (C++ and Objective-C++ only)
2849           Warn about uses of a comma expression within a subscripting
2850           expression.  This usage was deprecated in C++20 and is going to be
2851           removed in C++23.  However, a comma expression wrapped in "( )" is
2852           not deprecated.  Example:
2853
2854                   void f(int *a, int b, int c) {
2855                       a[b,c];     // deprecated in C++20, invalid in C++23
2856                       a[(b,c)];   // OK
2857                   }
2858
2859           In C++23 it is valid to have comma separated expressions in a
2860           subscript when an overloaded subscript operator is found and
2861           supports the right number and types of arguments.  G++ will accept
2862           the formerly valid syntax for code that is not valid in C++23 but
2863           used to be valid but deprecated in C++20 with a pedantic warning
2864           that can be disabled with -Wno-comma-subscript.
2865
2866           Enabled by default with -std=c++20 unless -Wno-deprecated, and with
2867           -std=c++23 regardless of -Wno-deprecated.
2868
2869       -Wctad-maybe-unsupported (C++ and Objective-C++ only)
2870           Warn when performing class template argument deduction (CTAD) on a
2871           type with no explicitly written deduction guides.  This warning
2872           will point out cases where CTAD succeeded only because the compiler
2873           synthesized the implicit deduction guides, which might not be what
2874           the programmer intended.  Certain style guides allow CTAD only on
2875           types that specifically "opt-in"; i.e., on types that are designed
2876           to support CTAD.  This warning can be suppressed with the following
2877           pattern:
2878
2879                   struct allow_ctad_t; // any name works
2880                   template <typename T> struct S {
2881                     S(T) { }
2882                   };
2883                   // Guide with incomplete parameter type will never be considered.
2884                   S(allow_ctad_t) -> S<void>;
2885
2886       -Wctor-dtor-privacy (C++ and Objective-C++ only)
2887           Warn when a class seems unusable because all the constructors or
2888           destructors in that class are private, and it has neither friends
2889           nor public static member functions.  Also warn if there are no non-
2890           private methods, and there's at least one private member function
2891           that isn't a constructor or destructor.
2892
2893       -Wdangling-reference (C++ and Objective-C++ only)
2894           Warn when a reference is bound to a temporary whose lifetime has
2895           ended.  For example:
2896
2897                   int n = 1;
2898                   const int& r = std::max(n - 1, n + 1); // r is dangling
2899
2900           In the example above, two temporaries are created, one for each
2901           argument, and a reference to one of the temporaries is returned.
2902           However, both temporaries are destroyed at the end of the full
2903           expression, so the reference "r" is dangling.  This warning also
2904           detects dangling references in member initializer lists:
2905
2906                   const int& f(const int& i) { return i; }
2907                   struct S {
2908                     const int &r; // r is dangling
2909                     S() : r(f(10)) { }
2910                   };
2911
2912           Member functions are checked as well, but only their object
2913           argument:
2914
2915                   struct S {
2916                      const S& self () { return *this; }
2917                   };
2918                   const S& s = S().self(); // s is dangling
2919
2920           Certain functions are safe in this respect, for example
2921           "std::use_facet": they take and return a reference, but they don't
2922           return one of its arguments, which can fool the warning.  Such
2923           functions can be excluded from the warning by wrapping them in a
2924           "#pragma":
2925
2926                   #pragma GCC diagnostic push
2927                   #pragma GCC diagnostic ignored "-Wdangling-reference"
2928                   const T& foo (const T&) { ... }
2929                   #pragma GCC diagnostic pop
2930
2931           -Wdangling-reference also warns about code like
2932
2933                   auto p = std::minmax(1, 2);
2934
2935           where "std::minmax" returns "std::pair<const int&, const int&>",
2936           and both references dangle after the end of the full expression
2937           that contains the call to "std::minmax".
2938
2939           This warning is enabled by -Wextra.
2940
2941       -Wdelete-non-virtual-dtor (C++ and Objective-C++ only)
2942           Warn when "delete" is used to destroy an instance of a class that
2943           has virtual functions and non-virtual destructor. It is unsafe to
2944           delete an instance of a derived class through a pointer to a base
2945           class if the base class does not have a virtual destructor.  This
2946           warning is enabled by -Wall.
2947
2948       -Wdeprecated-copy (C++ and Objective-C++ only)
2949           Warn that the implicit declaration of a copy constructor or copy
2950           assignment operator is deprecated if the class has a user-provided
2951           copy constructor or copy assignment operator, in C++11 and up.
2952           This warning is enabled by -Wextra.  With -Wdeprecated-copy-dtor,
2953           also deprecate if the class has a user-provided destructor.
2954
2955       -Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)
2956           Disable the warning about the case when the usual arithmetic
2957           conversions are applied on operands where one is of enumeration
2958           type and the other is of a different enumeration type.  This
2959           conversion was deprecated in C++20.  For example:
2960
2961                   enum E1 { e };
2962                   enum E2 { f };
2963                   int k = f - e;
2964
2965           -Wdeprecated-enum-enum-conversion is enabled by default with
2966           -std=c++20.  In pre-C++20 dialects, this warning can be enabled by
2967           -Wenum-conversion.
2968
2969       -Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)
2970           Disable the warning about the case when the usual arithmetic
2971           conversions are applied on operands where one is of enumeration
2972           type and the other is of a floating-point type.  This conversion
2973           was deprecated in C++20.  For example:
2974
2975                   enum E1 { e };
2976                   enum E2 { f };
2977                   bool b = e <= 3.7;
2978
2979           -Wdeprecated-enum-float-conversion is enabled by default with
2980           -std=c++20.  In pre-C++20 dialects, this warning can be enabled by
2981           -Wenum-conversion.
2982
2983       -Wno-init-list-lifetime (C++ and Objective-C++ only)
2984           Do not warn about uses of "std::initializer_list" that are likely
2985           to result in dangling pointers.  Since the underlying array for an
2986           "initializer_list" is handled like a normal C++ temporary object,
2987           it is easy to inadvertently keep a pointer to the array past the
2988           end of the array's lifetime.  For example:
2989
2990           *   If a function returns a temporary "initializer_list", or a
2991               local "initializer_list" variable, the array's lifetime ends at
2992               the end of the return statement, so the value returned has a
2993               dangling pointer.
2994
2995           *   If a new-expression creates an "initializer_list", the array
2996               only lives until the end of the enclosing full-expression, so
2997               the "initializer_list" in the heap has a dangling pointer.
2998
2999           *   When an "initializer_list" variable is assigned from a brace-
3000               enclosed initializer list, the temporary array created for the
3001               right side of the assignment only lives until the end of the
3002               full-expression, so at the next statement the
3003               "initializer_list" variable has a dangling pointer.
3004
3005                       // li's initial underlying array lives as long as li
3006                       std::initializer_list<int> li = { 1,2,3 };
3007                       // assignment changes li to point to a temporary array
3008                       li = { 4, 5 };
3009                       // now the temporary is gone and li has a dangling pointer
3010                       int i = li.begin()[0] // undefined behavior
3011
3012           *   When a list constructor stores the "begin" pointer from the
3013               "initializer_list" argument, this doesn't extend the lifetime
3014               of the array, so if a class variable is constructed from a
3015               temporary "initializer_list", the pointer is left dangling by
3016               the end of the variable declaration statement.
3017
3018       -Winvalid-constexpr
3019           Warn when a function never produces a constant expression.  In
3020           C++20 and earlier, for every "constexpr" function and function
3021           template, there must be at least one set of function arguments in
3022           at least one instantiation such that an invocation of the function
3023           or constructor could be an evaluated subexpression of a core
3024           constant expression.  C++23 removed this restriction, so it's
3025           possible to have a function or a function template marked
3026           "constexpr" for which no invocation satisfies the requirements of a
3027           core constant expression.
3028
3029           This warning is enabled as a pedantic warning by default in C++20
3030           and earlier.  In C++23, -Winvalid-constexpr can be turned on, in
3031           which case it will be an ordinary warning.  For example:
3032
3033                   void f (int& i);
3034                   constexpr void
3035                   g (int& i)
3036                   {
3037                     // Warns by default in C++20, in C++23 only with -Winvalid-constexpr.
3038                     f(i);
3039                   }
3040
3041       -Winvalid-imported-macros
3042           Verify all imported macro definitions are valid at the end of
3043           compilation.  This is not enabled by default, as it requires
3044           additional processing to determine.  It may be useful when
3045           preparing sets of header-units to ensure consistent macros.
3046
3047       -Wno-literal-suffix (C++ and Objective-C++ only)
3048           Do not warn when a string or character literal is followed by a ud-
3049           suffix which does not begin with an underscore.  As a conforming
3050           extension, GCC treats such suffixes as separate preprocessing
3051           tokens in order to maintain backwards compatibility with code that
3052           uses formatting macros from "<inttypes.h>".  For example:
3053
3054                   #define __STDC_FORMAT_MACROS
3055                   #include <inttypes.h>
3056                   #include <stdio.h>
3057
3058                   int main() {
3059                     int64_t i64 = 123;
3060                     printf("My int64: %" PRId64"\n", i64);
3061                   }
3062
3063           In this case, "PRId64" is treated as a separate preprocessing
3064           token.
3065
3066           This option also controls warnings when a user-defined literal
3067           operator is declared with a literal suffix identifier that doesn't
3068           begin with an underscore. Literal suffix identifiers that don't
3069           begin with an underscore are reserved for future standardization.
3070
3071           These warnings are enabled by default.
3072
3073       -Wno-narrowing (C++ and Objective-C++ only)
3074           For C++11 and later standards, narrowing conversions are diagnosed
3075           by default, as required by the standard.  A narrowing conversion
3076           from a constant produces an error, and a narrowing conversion from
3077           a non-constant produces a warning, but -Wno-narrowing suppresses
3078           the diagnostic.  Note that this does not affect the meaning of
3079           well-formed code; narrowing conversions are still considered ill-
3080           formed in SFINAE contexts.
3081
3082           With -Wnarrowing in C++98, warn when a narrowing conversion
3083           prohibited by C++11 occurs within { }, e.g.
3084
3085                   int i = { 2.2 }; // error: narrowing from double to int
3086
3087           This flag is included in -Wall and -Wc++11-compat.
3088
3089       -Wnoexcept (C++ and Objective-C++ only)
3090           Warn when a noexcept-expression evaluates to false because of a
3091           call to a function that does not have a non-throwing exception
3092           specification (i.e. throw() or "noexcept") but is known by the
3093           compiler to never throw an exception.
3094
3095       -Wnoexcept-type (C++ and Objective-C++ only)
3096           Warn if the C++17 feature making "noexcept" part of a function type
3097           changes the mangled name of a symbol relative to C++14.  Enabled by
3098           -Wabi and -Wc++17-compat.
3099
3100           As an example:
3101
3102                   template <class T> void f(T t) { t(); };
3103                   void g() noexcept;
3104                   void h() { f(g); }
3105
3106           In C++14, "f" calls "f<void(*)()>", but in C++17 it calls
3107           "f<void(*)()noexcept>".
3108
3109       -Wclass-memaccess (C++ and Objective-C++ only)
3110           Warn when the destination of a call to a raw memory function such
3111           as "memset" or "memcpy" is an object of class type, and when
3112           writing into such an object might bypass the class non-trivial or
3113           deleted constructor or copy assignment, violate const-correctness
3114           or encapsulation, or corrupt virtual table pointers.  Modifying the
3115           representation of such objects may violate invariants maintained by
3116           member functions of the class.  For example, the call to "memset"
3117           below is undefined because it modifies a non-trivial class object
3118           and is, therefore, diagnosed.  The safe way to either initialize or
3119           clear the storage of objects of such types is by using the
3120           appropriate constructor or assignment operator, if one is
3121           available.
3122
3123                   std::string str = "abc";
3124                   memset (&str, 0, sizeof str);
3125
3126           The -Wclass-memaccess option is enabled by -Wall.  Explicitly
3127           casting the pointer to the class object to "void *" or to a type
3128           that can be safely accessed by the raw memory function suppresses
3129           the warning.
3130
3131       -Wnon-virtual-dtor (C++ and Objective-C++ only)
3132           Warn when a class has virtual functions and an accessible non-
3133           virtual destructor itself or in an accessible polymorphic base
3134           class, in which case it is possible but unsafe to delete an
3135           instance of a derived class through a pointer to the class itself
3136           or base class.  This warning is automatically enabled if -Weffc++
3137           is specified.  The -Wdelete-non-virtual-dtor option (enabled by
3138           -Wall) should be preferred because it warns about the unsafe cases
3139           without false positives.
3140
3141       -Wregister (C++ and Objective-C++ only)
3142           Warn on uses of the "register" storage class specifier, except when
3143           it is part of the GNU Explicit Register Variables extension.  The
3144           use of the "register" keyword as storage class specifier has been
3145           deprecated in C++11 and removed in C++17.  Enabled by default with
3146           -std=c++17.
3147
3148       -Wreorder (C++ and Objective-C++ only)
3149           Warn when the order of member initializers given in the code does
3150           not match the order in which they must be executed.  For instance:
3151
3152                   struct A {
3153                     int i;
3154                     int j;
3155                     A(): j (0), i (1) { }
3156                   };
3157
3158           The compiler rearranges the member initializers for "i" and "j" to
3159           match the declaration order of the members, emitting a warning to
3160           that effect.  This warning is enabled by -Wall.
3161
3162       -Wno-pessimizing-move (C++ and Objective-C++ only)
3163           This warning warns when a call to "std::move" prevents copy
3164           elision.  A typical scenario when copy elision can occur is when
3165           returning in a function with a class return type, when the
3166           expression being returned is the name of a non-volatile automatic
3167           object, and is not a function parameter, and has the same type as
3168           the function return type.
3169
3170                   struct T {
3171                   ...
3172                   };
3173                   T fn()
3174                   {
3175                     T t;
3176                     ...
3177                     return std::move (t);
3178                   }
3179
3180           But in this example, the "std::move" call prevents copy elision.
3181
3182           This warning is enabled by -Wall.
3183
3184       -Wno-redundant-move (C++ and Objective-C++ only)
3185           This warning warns about redundant calls to "std::move"; that is,
3186           when a move operation would have been performed even without the
3187           "std::move" call.  This happens because the compiler is forced to
3188           treat the object as if it were an rvalue in certain situations such
3189           as returning a local variable, where copy elision isn't applicable.
3190           Consider:
3191
3192                   struct T {
3193                   ...
3194                   };
3195                   T fn(T t)
3196                   {
3197                     ...
3198                     return std::move (t);
3199                   }
3200
3201           Here, the "std::move" call is redundant.  Because G++ implements
3202           Core Issue 1579, another example is:
3203
3204                   struct T { // convertible to U
3205                   ...
3206                   };
3207                   struct U {
3208                   ...
3209                   };
3210                   U fn()
3211                   {
3212                     T t;
3213                     ...
3214                     return std::move (t);
3215                   }
3216
3217           In this example, copy elision isn't applicable because the type of
3218           the expression being returned and the function return type differ,
3219           yet G++ treats the return value as if it were designated by an
3220           rvalue.
3221
3222           This warning is enabled by -Wextra.
3223
3224       -Wrange-loop-construct (C++ and Objective-C++ only)
3225           This warning warns when a C++ range-based for-loop is creating an
3226           unnecessary copy.  This can happen when the range declaration is
3227           not a reference, but probably should be.  For example:
3228
3229                   struct S { char arr[128]; };
3230                   void fn () {
3231                     S arr[5];
3232                     for (const auto x : arr) { ... }
3233                   }
3234
3235           It does not warn when the type being copied is a trivially-copyable
3236           type whose size is less than 64 bytes.
3237
3238           This warning also warns when a loop variable in a range-based for-
3239           loop is initialized with a value of a different type resulting in a
3240           copy.  For example:
3241
3242                   void fn() {
3243                     int arr[10];
3244                     for (const double &x : arr) { ... }
3245                   }
3246
3247           In the example above, in every iteration of the loop a temporary
3248           value of type "double" is created and destroyed, to which the
3249           reference "const double &" is bound.
3250
3251           This warning is enabled by -Wall.
3252
3253       -Wredundant-tags (C++ and Objective-C++ only)
3254           Warn about redundant class-key and enum-key in references to class
3255           types and enumerated types in contexts where the key can be
3256           eliminated without causing an ambiguity.  For example:
3257
3258                   struct foo;
3259                   struct foo *p;   // warn that keyword struct can be eliminated
3260
3261           On the other hand, in this example there is no warning:
3262
3263                   struct foo;
3264                   void foo ();   // "hides" struct foo
3265                   void bar (struct foo&);  // no warning, keyword struct is necessary
3266
3267       -Wno-subobject-linkage (C++ and Objective-C++ only)
3268           Do not warn if a class type has a base or a field whose type uses
3269           the anonymous namespace or depends on a type with no linkage.  If a
3270           type A depends on a type B with no or internal linkage, defining it
3271           in multiple translation units would be an ODR violation because the
3272           meaning of B is different in each translation unit.  If A only
3273           appears in a single translation unit, the best way to silence the
3274           warning is to give it internal linkage by putting it in an
3275           anonymous namespace as well.  The compiler doesn't give this
3276           warning for types defined in the main .C file, as those are
3277           unlikely to have multiple definitions.  -Wsubobject-linkage is
3278           enabled by default.
3279
3280       -Weffc++ (C++ and Objective-C++ only)
3281           Warn about violations of the following style guidelines from Scott
3282           Meyers' Effective C++ series of books:
3283
3284           *   Define a copy constructor and an assignment operator for
3285               classes with dynamically-allocated memory.
3286
3287           *   Prefer initialization to assignment in constructors.
3288
3289           *   Have "operator=" return a reference to *this.
3290
3291           *   Don't try to return a reference when you must return an object.
3292
3293           *   Distinguish between prefix and postfix forms of increment and
3294               decrement operators.
3295
3296           *   Never overload "&&", "||", or ",".
3297
3298           This option also enables -Wnon-virtual-dtor, which is also one of
3299           the effective C++ recommendations.  However, the check is extended
3300           to warn about the lack of virtual destructor in accessible non-
3301           polymorphic bases classes too.
3302
3303           When selecting this option, be aware that the standard library
3304           headers do not obey all of these guidelines; use grep -v to filter
3305           out those warnings.
3306
3307       -Wno-exceptions (C++ and Objective-C++ only)
3308           Disable the warning about the case when an exception handler is
3309           shadowed by another handler, which can point out a wrong ordering
3310           of exception handlers.
3311
3312       -Wstrict-null-sentinel (C++ and Objective-C++ only)
3313           Warn about the use of an uncasted "NULL" as sentinel.  When
3314           compiling only with GCC this is a valid sentinel, as "NULL" is
3315           defined to "__null".  Although it is a null pointer constant rather
3316           than a null pointer, it is guaranteed to be of the same size as a
3317           pointer.  But this use is not portable across different compilers.
3318
3319       -Wno-non-template-friend (C++ and Objective-C++ only)
3320           Disable warnings when non-template friend functions are declared
3321           within a template.  In very old versions of GCC that predate
3322           implementation of the ISO standard, declarations such as friend int
3323           foo(int), where the name of the friend is an unqualified-id, could
3324           be interpreted as a particular specialization of a template
3325           function; the warning exists to diagnose compatibility problems,
3326           and is enabled by default.
3327
3328       -Wold-style-cast (C++ and Objective-C++ only)
3329           Warn if an old-style (C-style) cast to a non-void type is used
3330           within a C++ program.  The new-style casts ("dynamic_cast",
3331           "static_cast", "reinterpret_cast", and "const_cast") are less
3332           vulnerable to unintended effects and much easier to search for.
3333
3334       -Woverloaded-virtual (C++ and Objective-C++ only)
3335       -Woverloaded-virtual=n
3336           Warn when a function declaration hides virtual functions from a
3337           base class.  For example, in:
3338
3339                   struct A {
3340                     virtual void f();
3341                   };
3342
3343                   struct B: public A {
3344                     void f(int); // does not override
3345                   };
3346
3347           the "A" class version of "f" is hidden in "B", and code like:
3348
3349                   B* b;
3350                   b->f();
3351
3352           fails to compile.
3353
3354           In cases where the different signatures are not an accident, the
3355           simplest solution is to add a using-declaration to the derived
3356           class to un-hide the base function, e.g. add "using A::f;" to "B".
3357
3358           The optional level suffix controls the behavior when all the
3359           declarations in the derived class override virtual functions in the
3360           base class, even if not all of the base functions are overridden:
3361
3362                   struct C {
3363                     virtual void f();
3364                     virtual void f(int);
3365                   };
3366
3367                   struct D: public C {
3368                     void f(int); // does override
3369                   }
3370
3371           This pattern is less likely to be a mistake; if D is only used
3372           virtually, the user might have decided that the base class
3373           semantics for some of the overloads are fine.
3374
3375           At level 1, this case does not warn; at level 2, it does.
3376           -Woverloaded-virtual by itself selects level 2.  Level 1 is
3377           included in -Wall.
3378
3379       -Wno-pmf-conversions (C++ and Objective-C++ only)
3380           Disable the diagnostic for converting a bound pointer to member
3381           function to a plain pointer.
3382
3383       -Wsign-promo (C++ and Objective-C++ only)
3384           Warn when overload resolution chooses a promotion from unsigned or
3385           enumerated type to a signed type, over a conversion to an unsigned
3386           type of the same size.  Previous versions of G++ tried to preserve
3387           unsignedness, but the standard mandates the current behavior.
3388
3389       -Wtemplates (C++ and Objective-C++ only)
3390           Warn when a primary template declaration is encountered.  Some
3391           coding rules disallow templates, and this may be used to enforce
3392           that rule.  The warning is inactive inside a system header file,
3393           such as the STL, so one can still use the STL.  One may also
3394           instantiate or specialize templates.
3395
3396       -Wmismatched-new-delete (C++ and Objective-C++ only)
3397           Warn for mismatches between calls to "operator new" or "operator
3398           delete" and the corresponding call to the allocation or
3399           deallocation function.  This includes invocations of C++ "operator
3400           delete" with pointers returned from either mismatched forms of
3401           "operator new", or from other functions that allocate objects for
3402           which the "operator delete" isn't a suitable deallocator, as well
3403           as calls to other deallocation functions with pointers returned
3404           from "operator new" for which the deallocation function isn't
3405           suitable.
3406
3407           For example, the "delete" expression in the function below is
3408           diagnosed because it doesn't match the array form of the "new"
3409           expression the pointer argument was returned from.  Similarly, the
3410           call to "free" is also diagnosed.
3411
3412                   void f ()
3413                   {
3414                     int *a = new int[n];
3415                     delete a;   // warning: mismatch in array forms of expressions
3416
3417                     char *p = new char[n];
3418                     free (p);   // warning: mismatch between new and free
3419                   }
3420
3421           The related option -Wmismatched-dealloc diagnoses mismatches
3422           involving allocation and deallocation functions other than
3423           "operator new" and "operator delete".
3424
3425           -Wmismatched-new-delete is included in -Wall.
3426
3427       -Wmismatched-tags (C++ and Objective-C++ only)
3428           Warn for declarations of structs, classes, and class templates and
3429           their specializations with a class-key that does not match either
3430           the definition or the first declaration if no definition is
3431           provided.
3432
3433           For example, the declaration of "struct Object" in the argument
3434           list of "draw" triggers the warning.  To avoid it, either remove
3435           the redundant class-key "struct" or replace it with "class" to
3436           match its definition.
3437
3438                   class Object {
3439                   public:
3440                     virtual ~Object () = 0;
3441                   };
3442                   void draw (struct Object*);
3443
3444           It is not wrong to declare a class with the class-key "struct" as
3445           the example above shows.  The -Wmismatched-tags option is intended
3446           to help achieve a consistent style of class declarations.  In code
3447           that is intended to be portable to Windows-based compilers the
3448           warning helps prevent unresolved references due to the difference
3449           in the mangling of symbols declared with different class-keys.  The
3450           option can be used either on its own or in conjunction with
3451           -Wredundant-tags.
3452
3453       -Wmultiple-inheritance (C++ and Objective-C++ only)
3454           Warn when a class is defined with multiple direct base classes.
3455           Some coding rules disallow multiple inheritance, and this may be
3456           used to enforce that rule.  The warning is inactive inside a system
3457           header file, such as the STL, so one can still use the STL.  One
3458           may also define classes that indirectly use multiple inheritance.
3459
3460       -Wvirtual-inheritance
3461           Warn when a class is defined with a virtual direct base class.
3462           Some coding rules disallow multiple inheritance, and this may be
3463           used to enforce that rule.  The warning is inactive inside a system
3464           header file, such as the STL, so one can still use the STL.  One
3465           may also define classes that indirectly use virtual inheritance.
3466
3467       -Wno-virtual-move-assign
3468           Suppress warnings about inheriting from a virtual base with a non-
3469           trivial C++11 move assignment operator.  This is dangerous because
3470           if the virtual base is reachable along more than one path, it is
3471           moved multiple times, which can mean both objects end up in the
3472           moved-from state.  If the move assignment operator is written to
3473           avoid moving from a moved-from object, this warning can be
3474           disabled.
3475
3476       -Wnamespaces
3477           Warn when a namespace definition is opened.  Some coding rules
3478           disallow namespaces, and this may be used to enforce that rule.
3479           The warning is inactive inside a system header file, such as the
3480           STL, so one can still use the STL.  One may also use using
3481           directives and qualified names.
3482
3483       -Wno-terminate (C++ and Objective-C++ only)
3484           Disable the warning about a throw-expression that will immediately
3485           result in a call to "terminate".
3486
3487       -Wno-vexing-parse (C++ and Objective-C++ only)
3488           Warn about the most vexing parse syntactic ambiguity.  This warns
3489           about the cases when a declaration looks like a variable
3490           definition, but the C++ language requires it to be interpreted as a
3491           function declaration.  For instance:
3492
3493                   void f(double a) {
3494                     int i();        // extern int i (void);
3495                     int n(int(a));  // extern int n (int);
3496                   }
3497
3498           Another example:
3499
3500                   struct S { S(int); };
3501                   void f(double a) {
3502                     S x(int(a));   // extern struct S x (int);
3503                     S y(int());    // extern struct S y (int (*) (void));
3504                     S z();         // extern struct S z (void);
3505                   }
3506
3507           The warning will suggest options how to deal with such an
3508           ambiguity; e.g., it can suggest removing the parentheses or using
3509           braces instead.
3510
3511           This warning is enabled by default.
3512
3513       -Wno-class-conversion (C++ and Objective-C++ only)
3514           Do not warn when a conversion function converts an object to the
3515           same type, to a base class of that type, or to void; such a
3516           conversion function will never be called.
3517
3518       -Wvolatile (C++ and Objective-C++ only)
3519           Warn about deprecated uses of the "volatile" qualifier.  This
3520           includes postfix and prefix "++" and "--" expressions of
3521           "volatile"-qualified types, using simple assignments where the left
3522           operand is a "volatile"-qualified non-class type for their value,
3523           compound assignments where the left operand is a
3524           "volatile"-qualified non-class type, "volatile"-qualified function
3525           return type, "volatile"-qualified parameter type, and structured
3526           bindings of a "volatile"-qualified type.  This usage was deprecated
3527           in C++20.
3528
3529           Enabled by default with -std=c++20.
3530
3531       -Wzero-as-null-pointer-constant (C++ and Objective-C++ only)
3532           Warn when a literal 0 is used as null pointer constant.  This can
3533           be useful to facilitate the conversion to "nullptr" in C++11.
3534
3535       -Waligned-new
3536           Warn about a new-expression of a type that requires greater
3537           alignment than the alignof(std::max_align_t) but uses an allocation
3538           function without an explicit alignment parameter. This option is
3539           enabled by -Wall.
3540
3541           Normally this only warns about global allocation functions, but
3542           -Waligned-new=all also warns about class member allocation
3543           functions.
3544
3545       -Wno-placement-new
3546       -Wplacement-new=n
3547           Warn about placement new expressions with undefined behavior, such
3548           as constructing an object in a buffer that is smaller than the type
3549           of the object.  For example, the placement new expression below is
3550           diagnosed because it attempts to construct an array of 64 integers
3551           in a buffer only 64 bytes large.
3552
3553                   char buf [64];
3554                   new (buf) int[64];
3555
3556           This warning is enabled by default.
3557
3558           -Wplacement-new=1
3559               This is the default warning level of -Wplacement-new.  At this
3560               level the warning is not issued for some strictly undefined
3561               constructs that GCC allows as extensions for compatibility with
3562               legacy code.  For example, the following "new" expression is
3563               not diagnosed at this level even though it has undefined
3564               behavior according to the C++ standard because it writes past
3565               the end of the one-element array.
3566
3567                       struct S { int n, a[1]; };
3568                       S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
3569                       new (s->a)int [32]();
3570
3571           -Wplacement-new=2
3572               At this level, in addition to diagnosing all the same
3573               constructs as at level 1, a diagnostic is also issued for
3574               placement new expressions that construct an object in the last
3575               member of structure whose type is an array of a single element
3576               and whose size is less than the size of the object being
3577               constructed.  While the previous example would be diagnosed,
3578               the following construct makes use of the flexible member array
3579               extension to avoid the warning at level 2.
3580
3581                       struct S { int n, a[]; };
3582                       S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
3583                       new (s->a)int [32]();
3584
3585       -Wcatch-value
3586       -Wcatch-value=n (C++ and Objective-C++ only)
3587           Warn about catch handlers that do not catch via reference.  With
3588           -Wcatch-value=1 (or -Wcatch-value for short) warn about polymorphic
3589           class types that are caught by value.  With -Wcatch-value=2 warn
3590           about all class types that are caught by value. With
3591           -Wcatch-value=3 warn about all types that are not caught by
3592           reference. -Wcatch-value is enabled by -Wall.
3593
3594       -Wconditionally-supported (C++ and Objective-C++ only)
3595           Warn for conditionally-supported (C++11 [intro.defs]) constructs.
3596
3597       -Wno-delete-incomplete (C++ and Objective-C++ only)
3598           Do not warn when deleting a pointer to incomplete type, which may
3599           cause undefined behavior at runtime.  This warning is enabled by
3600           default.
3601
3602       -Wextra-semi (C++, Objective-C++ only)
3603           Warn about redundant semicolons after in-class function
3604           definitions.
3605
3606       -Wno-inaccessible-base (C++, Objective-C++ only)
3607           This option controls warnings when a base class is inaccessible in
3608           a class derived from it due to ambiguity.  The warning is enabled
3609           by default.  Note that the warning for ambiguous virtual bases is
3610           enabled by the -Wextra option.
3611
3612                   struct A { int a; };
3613
3614                   struct B : A { };
3615
3616                   struct C : B, A { };
3617
3618       -Wno-inherited-variadic-ctor
3619           Suppress warnings about use of C++11 inheriting constructors when
3620           the base class inherited from has a C variadic constructor; the
3621           warning is on by default because the ellipsis is not inherited.
3622
3623       -Wno-invalid-offsetof (C++ and Objective-C++ only)
3624           Suppress warnings from applying the "offsetof" macro to a non-POD
3625           type.  According to the 2014 ISO C++ standard, applying "offsetof"
3626           to a non-standard-layout type is undefined.  In existing C++
3627           implementations, however, "offsetof" typically gives meaningful
3628           results.  This flag is for users who are aware that they are
3629           writing nonportable code and who have deliberately chosen to ignore
3630           the warning about it.
3631
3632           The restrictions on "offsetof" may be relaxed in a future version
3633           of the C++ standard.
3634
3635       -Wsized-deallocation (C++ and Objective-C++ only)
3636           Warn about a definition of an unsized deallocation function
3637
3638                   void operator delete (void *) noexcept;
3639                   void operator delete[] (void *) noexcept;
3640
3641           without a definition of the corresponding sized deallocation
3642           function
3643
3644                   void operator delete (void *, std::size_t) noexcept;
3645                   void operator delete[] (void *, std::size_t) noexcept;
3646
3647           or vice versa.  Enabled by -Wextra along with -fsized-deallocation.
3648
3649       -Wsuggest-final-types
3650           Warn about types with virtual methods where code quality would be
3651           improved if the type were declared with the C++11 "final"
3652           specifier, or, if possible, declared in an anonymous namespace.
3653           This allows GCC to more aggressively devirtualize the polymorphic
3654           calls. This warning is more effective with link-time optimization,
3655           where the information about the class hierarchy graph is more
3656           complete.
3657
3658       -Wsuggest-final-methods
3659           Warn about virtual methods where code quality would be improved if
3660           the method were declared with the C++11 "final" specifier, or, if
3661           possible, its type were declared in an anonymous namespace or with
3662           the "final" specifier.  This warning is more effective with link-
3663           time optimization, where the information about the class hierarchy
3664           graph is more complete. It is recommended to first consider
3665           suggestions of -Wsuggest-final-types and then rebuild with new
3666           annotations.
3667
3668       -Wsuggest-override
3669           Warn about overriding virtual functions that are not marked with
3670           the "override" keyword.
3671
3672       -Wuse-after-free
3673       -Wuse-after-free=n
3674           Warn about uses of pointers to dynamically allocated objects that
3675           have been rendered indeterminate by a call to a deallocation
3676           function.  The warning is enabled at all optimization levels but
3677           may yield different results with optimization than without.
3678
3679           -Wuse-after-free=1
3680               At level 1 the warning attempts to diagnose only unconditional
3681               uses of pointers made indeterminate by a deallocation call or a
3682               successful call to "realloc", regardless of whether or not the
3683               call resulted in an actual reallocatio of memory.  This
3684               includes double-"free" calls as well as uses in arithmetic and
3685               relational expressions.  Although undefined, uses of
3686               indeterminate pointers in equality (or inequality) expressions
3687               are not diagnosed at this level.
3688
3689           -Wuse-after-free=2
3690               At level 2, in addition to unconditional uses, the warning also
3691               diagnoses conditional uses of pointers made indeterminate by a
3692               deallocation call.  As at level 2, uses in equality (or
3693               inequality) expressions are not diagnosed.  For example, the
3694               second call to "free" in the following function is diagnosed at
3695               this level:
3696
3697                       struct A { int refcount; void *data; };
3698
3699                       void release (struct A *p)
3700                       {
3701                         int refcount = --p->refcount;
3702                         free (p);
3703                         if (refcount == 0)
3704                           free (p->data);   // warning: p may be used after free
3705                       }
3706
3707           -Wuse-after-free=3
3708               At level 3, the warning also diagnoses uses of indeterminate
3709               pointers in equality expressions.  All uses of indeterminate
3710               pointers are undefined but equality tests sometimes appear
3711               after calls to "realloc" as an attempt to determine whether the
3712               call resulted in relocating the object to a different address.
3713               They are diagnosed at a separate level to aid legacy code
3714               gradually transition to safe alternatives.  For example, the
3715               equality test in the function below is diagnosed at this level:
3716
3717                       void adjust_pointers (int**, int);
3718
3719                       void grow (int **p, int n)
3720                       {
3721                         int **q = (int**)realloc (p, n *= 2);
3722                         if (q == p)
3723                           return;
3724                         adjust_pointers ((int**)q, n);
3725                       }
3726
3727               To avoid the warning at this level, store offsets into
3728               allocated memory instead of pointers.  This approach obviates
3729               needing to adjust the stored pointers after reallocation.
3730
3731           -Wuse-after-free=2 is included in -Wall.
3732
3733       -Wuseless-cast (C++ and Objective-C++ only)
3734           Warn when an expression is cast to its own type.  This warning does
3735           not occur when a class object is converted to a non-reference type
3736           as that is a way to create a temporary:
3737
3738                   struct S { };
3739                   void g (S&&);
3740                   void f (S&& arg)
3741                   {
3742                     g (S(arg)); // make arg prvalue so that it can bind to S&&
3743                   }
3744
3745       -Wno-conversion-null (C++ and Objective-C++ only)
3746           Do not warn for conversions between "NULL" and non-pointer types.
3747           -Wconversion-null is enabled by default.
3748
3749   Options Controlling Objective-C and Objective-C++ Dialects
3750       (NOTE: This manual does not describe the Objective-C and Objective-C++
3751       languages themselves.
3752
3753       This section describes the command-line options that are only
3754       meaningful for Objective-C and Objective-C++ programs.  You can also
3755       use most of the language-independent GNU compiler options.  For
3756       example, you might compile a file some_class.m like this:
3757
3758               gcc -g -fgnu-runtime -O -c some_class.m
3759
3760       In this example, -fgnu-runtime is an option meant only for Objective-C
3761       and Objective-C++ programs; you can use the other options with any
3762       language supported by GCC.
3763
3764       Note that since Objective-C is an extension of the C language,
3765       Objective-C compilations may also use options specific to the C front-
3766       end (e.g., -Wtraditional).  Similarly, Objective-C++ compilations may
3767       use C++-specific options (e.g., -Wabi).
3768
3769       Here is a list of options that are only for compiling Objective-C and
3770       Objective-C++ programs:
3771
3772       -fconstant-string-class=class-name
3773           Use class-name as the name of the class to instantiate for each
3774           literal string specified with the syntax "@"..."".  The default
3775           class name is "NXConstantString" if the GNU runtime is being used,
3776           and "NSConstantString" if the NeXT runtime is being used (see
3777           below).  On Darwin (macOS, MacOS X) platforms, the
3778           -fconstant-cfstrings option, if also present, overrides the
3779           -fconstant-string-class setting and cause "@"..."" literals to be
3780           laid out as constant CoreFoundation strings.  Note that
3781           -fconstant-cfstrings is an alias for the target-specific
3782           -mconstant-cfstrings equivalent.
3783
3784       -fgnu-runtime
3785           Generate object code compatible with the standard GNU Objective-C
3786           runtime.  This is the default for most types of systems.
3787
3788       -fnext-runtime
3789           Generate output compatible with the NeXT runtime.  This is the
3790           default for NeXT-based systems, including Darwin and Mac OS X.  The
3791           macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
3792           is used.
3793
3794       -fno-nil-receivers
3795           Assume that all Objective-C message dispatches ("[receiver
3796           message:arg]") in this translation unit ensure that the receiver is
3797           not "nil".  This allows for more efficient entry points in the
3798           runtime to be used.  This option is only available in conjunction
3799           with the NeXT runtime and ABI version 0 or 1.
3800
3801       -fobjc-abi-version=n
3802           Use version n of the Objective-C ABI for the selected runtime.
3803           This option is currently supported only for the NeXT runtime.  In
3804           that case, Version 0 is the traditional (32-bit) ABI without
3805           support for properties and other Objective-C 2.0 additions.
3806           Version 1 is the traditional (32-bit) ABI with support for
3807           properties and other Objective-C 2.0 additions.  Version 2 is the
3808           modern (64-bit) ABI.  If nothing is specified, the default is
3809           Version 0 on 32-bit target machines, and Version 2 on 64-bit target
3810           machines.
3811
3812       -fobjc-call-cxx-cdtors
3813           For each Objective-C class, check if any of its instance variables
3814           is a C++ object with a non-trivial default constructor.  If so,
3815           synthesize a special "- (id) .cxx_construct" instance method which
3816           runs non-trivial default constructors on any such instance
3817           variables, in order, and then return "self".  Similarly, check if
3818           any instance variable is a C++ object with a non-trivial
3819           destructor, and if so, synthesize a special "- (void)
3820           .cxx_destruct" method which runs all such default destructors, in
3821           reverse order.
3822
3823           The "- (id) .cxx_construct" and "- (void) .cxx_destruct" methods
3824           thusly generated only operate on instance variables declared in the
3825           current Objective-C class, and not those inherited from
3826           superclasses.  It is the responsibility of the Objective-C runtime
3827           to invoke all such methods in an object's inheritance hierarchy.
3828           The "- (id) .cxx_construct" methods are invoked by the runtime
3829           immediately after a new object instance is allocated; the "- (void)
3830           .cxx_destruct" methods are invoked immediately before the runtime
3831           deallocates an object instance.
3832
3833           As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3834           later has support for invoking the "- (id) .cxx_construct" and "-
3835           (void) .cxx_destruct" methods.
3836
3837       -fobjc-direct-dispatch
3838           Allow fast jumps to the message dispatcher.  On Darwin this is
3839           accomplished via the comm page.
3840
3841       -fobjc-exceptions
3842           Enable syntactic support for structured exception handling in
3843           Objective-C, similar to what is offered by C++.  This option is
3844           required to use the Objective-C keywords @try, @throw, @catch,
3845           @finally and @synchronized.  This option is available with both the
3846           GNU runtime and the NeXT runtime (but not available in conjunction
3847           with the NeXT runtime on Mac OS X 10.2 and earlier).
3848
3849       -fobjc-gc
3850           Enable garbage collection (GC) in Objective-C and Objective-C++
3851           programs.  This option is only available with the NeXT runtime; the
3852           GNU runtime has a different garbage collection implementation that
3853           does not require special compiler flags.
3854
3855       -fobjc-nilcheck
3856           For the NeXT runtime with version 2 of the ABI, check for a nil
3857           receiver in method invocations before doing the actual method call.
3858           This is the default and can be disabled using -fno-objc-nilcheck.
3859           Class methods and super calls are never checked for nil in this way
3860           no matter what this flag is set to.  Currently this flag does
3861           nothing when the GNU runtime, or an older version of the NeXT
3862           runtime ABI, is used.
3863
3864       -fobjc-std=objc1
3865           Conform to the language syntax of Objective-C 1.0, the language
3866           recognized by GCC 4.0.  This only affects the Objective-C additions
3867           to the C/C++ language; it does not affect conformance to C/C++
3868           standards, which is controlled by the separate C/C++ dialect option
3869           flags.  When this option is used with the Objective-C or
3870           Objective-C++ compiler, any Objective-C syntax that is not
3871           recognized by GCC 4.0 is rejected.  This is useful if you need to
3872           make sure that your Objective-C code can be compiled with older
3873           versions of GCC.
3874
3875       -freplace-objc-classes
3876           Emit a special marker instructing ld(1) not to statically link in
3877           the resulting object file, and allow dyld(1) to load it in at run
3878           time instead.  This is used in conjunction with the Fix-and-
3879           Continue debugging mode, where the object file in question may be
3880           recompiled and dynamically reloaded in the course of program
3881           execution, without the need to restart the program itself.
3882           Currently, Fix-and-Continue functionality is only available in
3883           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3884
3885       -fzero-link
3886           When compiling for the NeXT runtime, the compiler ordinarily
3887           replaces calls to objc_getClass("...") (when the name of the class
3888           is known at compile time) with static class references that get
3889           initialized at load time, which improves run-time performance.
3890           Specifying the -fzero-link flag suppresses this behavior and causes
3891           calls to objc_getClass("...")  to be retained.  This is useful in
3892           Zero-Link debugging mode, since it allows for individual class
3893           implementations to be modified during program execution.  The GNU
3894           runtime currently always retains calls to objc_get_class("...")
3895           regardless of command-line options.
3896
3897       -fno-local-ivars
3898           By default instance variables in Objective-C can be accessed as if
3899           they were local variables from within the methods of the class
3900           they're declared in.  This can lead to shadowing between instance
3901           variables and other variables declared either locally inside a
3902           class method or globally with the same name.  Specifying the
3903           -fno-local-ivars flag disables this behavior thus avoiding variable
3904           shadowing issues.
3905
3906       -fivar-visibility=[public|protected|private|package]
3907           Set the default instance variable visibility to the specified
3908           option so that instance variables declared outside the scope of any
3909           access modifier directives default to the specified visibility.
3910
3911       -gen-decls
3912           Dump interface declarations for all classes seen in the source file
3913           to a file named sourcename.decl.
3914
3915       -Wassign-intercept (Objective-C and Objective-C++ only)
3916           Warn whenever an Objective-C assignment is being intercepted by the
3917           garbage collector.
3918
3919       -Wno-property-assign-default (Objective-C and Objective-C++ only)
3920           Do not warn if a property for an Objective-C object has no assign
3921           semantics specified.
3922
3923       -Wno-protocol (Objective-C and Objective-C++ only)
3924           If a class is declared to implement a protocol, a warning is issued
3925           for every method in the protocol that is not implemented by the
3926           class.  The default behavior is to issue a warning for every method
3927           not explicitly implemented in the class, even if a method
3928           implementation is inherited from the superclass.  If you use the
3929           -Wno-protocol option, then methods inherited from the superclass
3930           are considered to be implemented, and no warning is issued for
3931           them.
3932
3933       -Wobjc-root-class (Objective-C and Objective-C++ only)
3934           Warn if a class interface lacks a superclass. Most classes will
3935           inherit from "NSObject" (or "Object") for example.  When declaring
3936           classes intended to be root classes, the warning can be suppressed
3937           by marking their interfaces with
3938           "__attribute__((objc_root_class))".
3939
3940       -Wselector (Objective-C and Objective-C++ only)
3941           Warn if multiple methods of different types for the same selector
3942           are found during compilation.  The check is performed on the list
3943           of methods in the final stage of compilation.  Additionally, a
3944           check is performed for each selector appearing in a @selector(...)
3945           expression, and a corresponding method for that selector has been
3946           found during compilation.  Because these checks scan the method
3947           table only at the end of compilation, these warnings are not
3948           produced if the final stage of compilation is not reached, for
3949           example because an error is found during compilation, or because
3950           the -fsyntax-only option is being used.
3951
3952       -Wstrict-selector-match (Objective-C and Objective-C++ only)
3953           Warn if multiple methods with differing argument and/or return
3954           types are found for a given selector when attempting to send a
3955           message using this selector to a receiver of type "id" or "Class".
3956           When this flag is off (which is the default behavior), the compiler
3957           omits such warnings if any differences found are confined to types
3958           that share the same size and alignment.
3959
3960       -Wundeclared-selector (Objective-C and Objective-C++ only)
3961           Warn if a @selector(...) expression referring to an undeclared
3962           selector is found.  A selector is considered undeclared if no
3963           method with that name has been declared before the @selector(...)
3964           expression, either explicitly in an @interface or @protocol
3965           declaration, or implicitly in an @implementation section.  This
3966           option always performs its checks as soon as a @selector(...)
3967           expression is found, while -Wselector only performs its checks in
3968           the final stage of compilation.  This also enforces the coding
3969           style convention that methods and selectors must be declared before
3970           being used.
3971
3972       -print-objc-runtime-info
3973           Generate C header describing the largest structure that is passed
3974           by value, if any.
3975
3976   Options to Control Diagnostic Messages Formatting
3977       Traditionally, diagnostic messages have been formatted irrespective of
3978       the output device's aspect (e.g. its width, ...).  You can use the
3979       options described below to control the formatting algorithm for
3980       diagnostic messages, e.g. how many characters per line, how often
3981       source location information should be reported.  Note that some
3982       language front ends may not honor these options.
3983
3984       -fmessage-length=n
3985           Try to format error messages so that they fit on lines of about n
3986           characters.  If n is zero, then no line-wrapping is done; each
3987           error message appears on a single line.  This is the default for
3988           all front ends.
3989
3990           Note - this option also affects the display of the #error and
3991           #warning pre-processor directives, and the deprecated
3992           function/type/variable attribute.  It does not however affect the
3993           pragma GCC warning and pragma GCC error pragmas.
3994
3995       -fdiagnostics-plain-output
3996           This option requests that diagnostic output look as plain as
3997           possible, which may be useful when running dejagnu or other
3998           utilities that need to parse diagnostics output and prefer that it
3999           remain more stable over time.  -fdiagnostics-plain-output is
4000           currently equivalent to the following options:
4001           -fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers
4002           -fdiagnostics-color=never -fdiagnostics-urls=never
4003           -fdiagnostics-path-format=separate-events In the future, if GCC
4004           changes the default appearance of its diagnostics, the
4005           corresponding option to disable the new behavior will be added to
4006           this list.
4007
4008       -fdiagnostics-show-location=once
4009           Only meaningful in line-wrapping mode.  Instructs the diagnostic
4010           messages reporter to emit source location information once; that
4011           is, in case the message is too long to fit on a single physical
4012           line and has to be wrapped, the source location won't be emitted
4013           (as prefix) again, over and over, in subsequent continuation lines.
4014           This is the default behavior.
4015
4016       -fdiagnostics-show-location=every-line
4017           Only meaningful in line-wrapping mode.  Instructs the diagnostic
4018           messages reporter to emit the same source location information (as
4019           prefix) for physical lines that result from the process of breaking
4020           a message which is too long to fit on a single line.
4021
4022       -fdiagnostics-color[=WHEN]
4023       -fno-diagnostics-color
4024           Use color in diagnostics.  WHEN is never, always, or auto.  The
4025           default depends on how the compiler has been configured, it can be
4026           any of the above WHEN options or also never if GCC_COLORS
4027           environment variable isn't present in the environment, and auto
4028           otherwise.  auto makes GCC use color only when the standard error
4029           is a terminal, and when not executing in an emacs shell.  The forms
4030           -fdiagnostics-color and -fno-diagnostics-color are aliases for
4031           -fdiagnostics-color=always and -fdiagnostics-color=never,
4032           respectively.
4033
4034           The colors are defined by the environment variable GCC_COLORS.  Its
4035           value is a colon-separated list of capabilities and Select Graphic
4036           Rendition (SGR) substrings. SGR commands are interpreted by the
4037           terminal or terminal emulator.  (See the section in the
4038           documentation of your text terminal for permitted values and their
4039           meanings as character attributes.)  These substring values are
4040           integers in decimal representation and can be concatenated with
4041           semicolons.  Common values to concatenate include 1 for bold, 4 for
4042           underline, 5 for blink, 7 for inverse, 39 for default foreground
4043           color, 30 to 37 for foreground colors, 90 to 97 for 16-color mode
4044           foreground colors, 38;5;0 to 38;5;255 for 88-color and 256-color
4045           modes foreground colors, 49 for default background color, 40 to 47
4046           for background colors, 100 to 107 for 16-color mode background
4047           colors, and 48;5;0 to 48;5;255 for 88-color and 256-color modes
4048           background colors.
4049
4050           The default GCC_COLORS is
4051
4052                   error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
4053                   quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
4054                   diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
4055                   type-diff=01;32:fnname=01;32:targs=35
4056
4057           where 01;31 is bold red, 01;35 is bold magenta, 01;36 is bold cyan,
4058           32 is green, 34 is blue, 01 is bold, and 31 is red.  Setting
4059           GCC_COLORS to the empty string disables colors.  Supported
4060           capabilities are as follows.
4061
4062           "error="
4063               SGR substring for error: markers.
4064
4065           "warning="
4066               SGR substring for warning: markers.
4067
4068           "note="
4069               SGR substring for note: markers.
4070
4071           "path="
4072               SGR substring for colorizing paths of control-flow events as
4073               printed via -fdiagnostics-path-format=, such as the identifiers
4074               of individual events and lines indicating interprocedural calls
4075               and returns.
4076
4077           "range1="
4078               SGR substring for first additional range.
4079
4080           "range2="
4081               SGR substring for second additional range.
4082
4083           "locus="
4084               SGR substring for location information, file:line or
4085               file:line:column etc.
4086
4087           "quote="
4088               SGR substring for information printed within quotes.
4089
4090           "fnname="
4091               SGR substring for names of C++ functions.
4092
4093           "targs="
4094               SGR substring for C++ function template parameter bindings.
4095
4096           "fixit-insert="
4097               SGR substring for fix-it hints suggesting text to be inserted
4098               or replaced.
4099
4100           "fixit-delete="
4101               SGR substring for fix-it hints suggesting text to be deleted.
4102
4103           "diff-filename="
4104               SGR substring for filename headers within generated patches.
4105
4106           "diff-hunk="
4107               SGR substring for the starts of hunks within generated patches.
4108
4109           "diff-delete="
4110               SGR substring for deleted lines within generated patches.
4111
4112           "diff-insert="
4113               SGR substring for inserted lines within generated patches.
4114
4115           "type-diff="
4116               SGR substring for highlighting mismatching types within
4117               template arguments in the C++ frontend.
4118
4119       -fdiagnostics-urls[=WHEN]
4120           Use escape sequences to embed URLs in diagnostics.  For example,
4121           when -fdiagnostics-show-option emits text showing the command-line
4122           option controlling a diagnostic, embed a URL for documentation of
4123           that option.
4124
4125           WHEN is never, always, or auto.  auto makes GCC use URL escape
4126           sequences only when the standard error is a terminal, and when not
4127           executing in an emacs shell or any graphical terminal which is
4128           known to be incompatible with this feature, see below.
4129
4130           The default depends on how the compiler has been configured.  It
4131           can be any of the above WHEN options.
4132
4133           GCC can also be configured (via the
4134           --with-diagnostics-urls=auto-if-env configure-time option) so that
4135           the default is affected by environment variables.  Under such a
4136           configuration, GCC defaults to using auto if either GCC_URLS or
4137           TERM_URLS environment variables are present and non-empty in the
4138           environment of the compiler, or never if neither are.
4139
4140           However, even with -fdiagnostics-urls=always the behavior is
4141           dependent on those environment variables: If GCC_URLS is set to
4142           empty or no, do not embed URLs in diagnostics.  If set to st, URLs
4143           use ST escape sequences.  If set to bel, the default, URLs use BEL
4144           escape sequences.  Any other non-empty value enables the feature.
4145           If GCC_URLS is not set, use TERM_URLS as a fallback.  Note: ST is
4146           an ANSI escape sequence, string terminator ESC \, BEL is an ASCII
4147           character, CTRL-G that usually sounds like a beep.
4148
4149           At this time GCC tries to detect also a few terminals that are
4150           known to not implement the URL feature, and have bugs or at least
4151           had bugs in some versions that are still in use, where the URL
4152           escapes are likely to misbehave, i.e. print garbage on the screen.
4153           That list is currently xfce4-terminal, certain known to be buggy
4154           gnome-terminal versions, the linux console, and mingw.  This check
4155           can be skipped with the -fdiagnostics-urls=always.
4156
4157       -fno-diagnostics-show-option
4158           By default, each diagnostic emitted includes text indicating the
4159           command-line option that directly controls the diagnostic (if such
4160           an option is known to the diagnostic machinery).  Specifying the
4161           -fno-diagnostics-show-option flag suppresses that behavior.
4162
4163       -fno-diagnostics-show-caret
4164           By default, each diagnostic emitted includes the original source
4165           line and a caret ^ indicating the column.  This option suppresses
4166           this information.  The source line is truncated to n characters, if
4167           the -fmessage-length=n option is given.  When the output is done to
4168           the terminal, the width is limited to the width given by the
4169           COLUMNS environment variable or, if not set, to the terminal width.
4170
4171       -fno-diagnostics-show-labels
4172           By default, when printing source code (via
4173           -fdiagnostics-show-caret), diagnostics can label ranges of source
4174           code with pertinent information, such as the types of expressions:
4175
4176                       printf ("foo %s bar", long_i + long_j);
4177                                    ~^       ~~~~~~~~~~~~~~~
4178                                     |              |
4179                                     char *         long int
4180
4181           This option suppresses the printing of these labels (in the example
4182           above, the vertical bars and the "char *" and "long int" text).
4183
4184       -fno-diagnostics-show-cwe
4185           Diagnostic messages can optionally have an associated
4186            CWE ("https://cwe.mitre.org/index.html") identifier.  GCC itself
4187           only provides such metadata for some of the -fanalyzer diagnostics.
4188           GCC plugins may also provide diagnostics with such metadata.  By
4189           default, if this information is present, it will be printed with
4190           the diagnostic.  This option suppresses the printing of this
4191           metadata.
4192
4193       -fno-diagnostics-show-rules
4194           Diagnostic messages can optionally have rules associated with them,
4195           such as from a coding standard, or a specification.  GCC itself
4196           does not do this for any of its diagnostics, but plugins may do so.
4197           By default, if this information is present, it will be printed with
4198           the diagnostic.  This option suppresses the printing of this
4199           metadata.
4200
4201       -fno-diagnostics-show-line-numbers
4202           By default, when printing source code (via
4203           -fdiagnostics-show-caret), a left margin is printed, showing line
4204           numbers.  This option suppresses this left margin.
4205
4206       -fdiagnostics-minimum-margin-width=width
4207           This option controls the minimum width of the left margin printed
4208           by -fdiagnostics-show-line-numbers.  It defaults to 6.
4209
4210       -fdiagnostics-parseable-fixits
4211           Emit fix-it hints in a machine-parseable format, suitable for
4212           consumption by IDEs.  For each fix-it, a line will be printed after
4213           the relevant diagnostic, starting with the string "fix-it:".  For
4214           example:
4215
4216                   fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
4217
4218           The location is expressed as a half-open range, expressed as a
4219           count of bytes, starting at byte 1 for the initial column.  In the
4220           above example, bytes 3 through 20 of line 45 of "test.c" are to be
4221           replaced with the given string:
4222
4223                   00000000011111111112222222222
4224                   12345678901234567890123456789
4225                     gtk_widget_showall (dlg);
4226                     ^^^^^^^^^^^^^^^^^^
4227                     gtk_widget_show_all
4228
4229           The filename and replacement string escape backslash as "\\", tab
4230           as "\t", newline as "\n", double quotes as "\"", non-printable
4231           characters as octal (e.g. vertical tab as "\013").
4232
4233           An empty replacement string indicates that the given range is to be
4234           removed.  An empty range (e.g. "45:3-45:3") indicates that the
4235           string is to be inserted at the given position.
4236
4237       -fdiagnostics-generate-patch
4238           Print fix-it hints to stderr in unified diff format, after any
4239           diagnostics are printed.  For example:
4240
4241                   --- test.c
4242                   +++ test.c
4243                   @ -42,5 +42,5 @
4244
4245                    void show_cb(GtkDialog *dlg)
4246                    {
4247                   -  gtk_widget_showall(dlg);
4248                   +  gtk_widget_show_all(dlg);
4249                    }
4250
4251           The diff may or may not be colorized, following the same rules as
4252           for diagnostics (see -fdiagnostics-color).
4253
4254       -fdiagnostics-show-template-tree
4255           In the C++ frontend, when printing diagnostics showing mismatching
4256           template types, such as:
4257
4258                     could not convert 'std::map<int, std::vector<double> >()'
4259                       from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4260
4261           the -fdiagnostics-show-template-tree flag enables printing a tree-
4262           like structure showing the common and differing parts of the types,
4263           such as:
4264
4265                     map<
4266                       [...],
4267                       vector<
4268                         [double != float]>>
4269
4270           The parts that differ are highlighted with color ("double" and
4271           "float" in this case).
4272
4273       -fno-elide-type
4274           By default when the C++ frontend prints diagnostics showing
4275           mismatching template types, common parts of the types are printed
4276           as "[...]" to simplify the error message.  For example:
4277
4278                     could not convert 'std::map<int, std::vector<double> >()'
4279                       from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4280
4281           Specifying the -fno-elide-type flag suppresses that behavior.  This
4282           flag also affects the output of the
4283           -fdiagnostics-show-template-tree flag.
4284
4285       -fdiagnostics-path-format=KIND
4286           Specify how to print paths of control-flow events for diagnostics
4287           that have such a path associated with them.
4288
4289           KIND is none, separate-events, or inline-events, the default.
4290
4291           none means to not print diagnostic paths.
4292
4293           separate-events means to print a separate "note" diagnostic for
4294           each event within the diagnostic.  For example:
4295
4296                   test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
4297                   test.c:25:10: note: (1) when 'PyList_New' fails, returning NULL
4298                   test.c:27:3: note: (2) when 'i < count'
4299                   test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4300
4301           inline-events means to print the events "inline" within the source
4302           code.  This view attempts to consolidate the events into runs of
4303           sufficiently-close events, printing them as labelled ranges within
4304           the source.
4305
4306           For example, the same events as above might be printed as:
4307
4308                     'test': events 1-3
4309                       |
4310                       |   25 |   list = PyList_New(0);
4311                       |      |          ^~~~~~~~~~~~~
4312                       |      |          |
4313                       |      |          (1) when 'PyList_New' fails, returning NULL
4314                       |   26 |
4315                       |   27 |   for (i = 0; i < count; i++) {
4316                       |      |   ~~~
4317                       |      |   |
4318                       |      |   (2) when 'i < count'
4319                       |   28 |     item = PyLong_FromLong(random());
4320                       |   29 |     PyList_Append(list, item);
4321                       |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~
4322                       |      |     |
4323                       |      |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4324                       |
4325
4326           Interprocedural control flow is shown by grouping the events by
4327           stack frame, and using indentation to show how stack frames are
4328           nested, pushed, and popped.
4329
4330           For example:
4331
4332                     'test': events 1-2
4333                       |
4334                       |  133 | {
4335                       |      | ^
4336                       |      | |
4337                       |      | (1) entering 'test'
4338                       |  134 |   boxed_int *obj = make_boxed_int (i);
4339                       |      |                    ~~~~~~~~~~~~~~~~~~
4340                       |      |                    |
4341                       |      |                    (2) calling 'make_boxed_int'
4342                       |
4343                       +--> 'make_boxed_int': events 3-4
4344                              |
4345                              |  120 | {
4346                              |      | ^
4347                              |      | |
4348                              |      | (3) entering 'make_boxed_int'
4349                              |  121 |   boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int));
4350                              |      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4351                              |      |                                    |
4352                              |      |                                    (4) calling 'wrapped_malloc'
4353                              |
4354                              +--> 'wrapped_malloc': events 5-6
4355                                     |
4356                                     |    7 | {
4357                                     |      | ^
4358                                     |      | |
4359                                     |      | (5) entering 'wrapped_malloc'
4360                                     |    8 |   return malloc (size);
4361                                     |      |          ~~~~~~~~~~~~~
4362                                     |      |          |
4363                                     |      |          (6) calling 'malloc'
4364                                     |
4365                       <-------------+
4366                       |
4367                    'test': event 7
4368                       |
4369                       |  138 |   free_boxed_int (obj);
4370                       |      |   ^~~~~~~~~~~~~~~~~~~~
4371                       |      |   |
4372                       |      |   (7) calling 'free_boxed_int'
4373                       |
4374                   (etc)
4375
4376       -fdiagnostics-show-path-depths
4377           This option provides additional information when printing control-
4378           flow paths associated with a diagnostic.
4379
4380           If this is option is provided then the stack depth will be printed
4381           for each run of events within
4382           -fdiagnostics-path-format=inline-events.  If provided with
4383           -fdiagnostics-path-format=separate-events, then the stack depth and
4384           function declaration will be appended when printing each event.
4385
4386           This is intended for use by GCC developers and plugin developers
4387           when debugging diagnostics that report interprocedural control
4388           flow.
4389
4390       -fno-show-column
4391           Do not print column numbers in diagnostics.  This may be necessary
4392           if diagnostics are being scanned by a program that does not
4393           understand the column numbers, such as dejagnu.
4394
4395       -fdiagnostics-column-unit=UNIT
4396           Select the units for the column number.  This affects traditional
4397           diagnostics (in the absence of -fno-show-column), as well as JSON
4398           format diagnostics if requested.
4399
4400           The default UNIT, display, considers the number of display columns
4401           occupied by each character.  This may be larger than the number of
4402           bytes required to encode the character, in the case of tab
4403           characters, or it may be smaller, in the case of multibyte
4404           characters.  For example, the character "GREEK SMALL LETTER PI
4405           (U+03C0)" occupies one display column, and its UTF-8 encoding
4406           requires two bytes; the character "SLIGHTLY SMILING FACE (U+1F642)"
4407           occupies two display columns, and its UTF-8 encoding requires four
4408           bytes.
4409
4410           Setting UNIT to byte changes the column number to the raw byte
4411           count in all cases, as was traditionally output by GCC prior to
4412           version 11.1.0.
4413
4414       -fdiagnostics-column-origin=ORIGIN
4415           Select the origin for column numbers, i.e. the column number
4416           assigned to the first column.  The default value of 1 corresponds
4417           to traditional GCC behavior and to the GNU style guide.  Some
4418           utilities may perform better with an origin of 0; any non-negative
4419           value may be specified.
4420
4421       -fdiagnostics-escape-format=FORMAT
4422           When GCC prints pertinent source lines for a diagnostic it normally
4423           attempts to print the source bytes directly.  However, some
4424           diagnostics relate to encoding issues in the source file, such as
4425           malformed UTF-8, or issues with Unicode normalization.  These
4426           diagnostics are flagged so that GCC will escape bytes that are not
4427           printable ASCII when printing their pertinent source lines.
4428
4429           This option controls how such bytes should be escaped.
4430
4431           The default FORMAT, unicode displays Unicode characters that are
4432           not printable ASCII in the form <U+XXXX>, and bytes that do not
4433           correspond to a Unicode character validly-encoded in UTF-8-encoded
4434           will be displayed as hexadecimal in the form <XX>.
4435
4436           For example, a source line containing the string before followed by
4437           the Unicode character U+03C0 ("GREEK SMALL LETTER PI", with UTF-8
4438           encoding 0xCF 0x80) followed by the byte 0xBF (a stray UTF-8
4439           trailing byte), followed by the string after will be printed for
4440           such a diagnostic as:
4441
4442                    before<U+03C0><BF>after
4443
4444           Setting FORMAT to bytes will display all non-printable-ASCII bytes
4445           in the form <XX>, thus showing the underlying encoding of non-ASCII
4446           Unicode characters.  For the example above, the following will be
4447           printed:
4448
4449                    before<CF><80><BF>after
4450
4451       -fdiagnostics-format=FORMAT
4452           Select a different format for printing diagnostics.  FORMAT is
4453           text, sarif-stderr, sarif-file, json, json-stderr, or json-file.
4454
4455           The default is text.
4456
4457           The sarif-stderr and sarif-file formats both emit diagnostics in
4458           SARIF Version 2.1.0 format, either to stderr, or to a file named
4459           source.sarif, respectively.
4460
4461           The json format is a synonym for json-stderr.  The json-stderr and
4462           json-file formats are identical, apart from where the JSON is
4463           emitted to - with the former, the JSON is emitted to stderr,
4464           whereas with json-file it is written to source.gcc.json.
4465
4466           The emitted JSON consists of a top-level JSON array containing JSON
4467           objects representing the diagnostics.  The JSON is emitted as one
4468           line, without formatting; the examples below have been formatted
4469           for clarity.
4470
4471           Diagnostics can have child diagnostics.  For example, this error
4472           and note:
4473
4474                   misleading-indentation.c:15:3: warning: this 'if' clause does not
4475                     guard... [-Wmisleading-indentation]
4476                      15 |   if (flag)
4477                         |   ^~
4478                   misleading-indentation.c:17:5: note: ...this statement, but the latter
4479                     is misleadingly indented as if it were guarded by the 'if'
4480                      17 |     y = 2;
4481                         |     ^
4482
4483           might be printed in JSON form (after formatting) like this:
4484
4485                   [
4486                       {
4487                           "kind": "warning",
4488                           "locations": [
4489                               {
4490                                   "caret": {
4491                                       "display-column": 3,
4492                                       "byte-column": 3,
4493                                       "column": 3,
4494                                       "file": "misleading-indentation.c",
4495                                       "line": 15
4496                                   },
4497                                   "finish": {
4498                                       "display-column": 4,
4499                                       "byte-column": 4,
4500                                       "column": 4,
4501                                       "file": "misleading-indentation.c",
4502                                       "line": 15
4503                                   }
4504                               }
4505                           ],
4506                           "message": "this \u2018if\u2019 clause does not guard...",
4507                           "option": "-Wmisleading-indentation",
4508                           "option_url": "https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation",
4509                           "children": [
4510                               {
4511                                   "kind": "note",
4512                                   "locations": [
4513                                       {
4514                                           "caret": {
4515                                               "display-column": 5,
4516                                               "byte-column": 5,
4517                                               "column": 5,
4518                                               "file": "misleading-indentation.c",
4519                                               "line": 17
4520                                           }
4521                                       }
4522                                   ],
4523                                   "escape-source": false,
4524                                   "message": "...this statement, but the latter is ..."
4525                               }
4526                           ]
4527                           "escape-source": false,
4528                           "column-origin": 1,
4529                       }
4530                   ]
4531
4532           where the "note" is a child of the "warning".
4533
4534           A diagnostic has a "kind".  If this is "warning", then there is an
4535           "option" key describing the command-line option controlling the
4536           warning.
4537
4538           A diagnostic can contain zero or more locations.  Each location has
4539           an optional "label" string and up to three positions within it: a
4540           "caret" position and optional "start" and "finish" positions.  A
4541           position is described by a "file" name, a "line" number, and three
4542           numbers indicating a column position:
4543
4544           *   "display-column" counts display columns, accounting for tabs
4545               and multibyte characters.
4546
4547           *   "byte-column" counts raw bytes.
4548
4549           *   "column" is equal to one of the previous two, as dictated by
4550               the -fdiagnostics-column-unit option.
4551
4552           All three columns are relative to the origin specified by
4553           -fdiagnostics-column-origin, which is typically equal to 1 but may
4554           be set, for instance, to 0 for compatibility with other utilities
4555           that number columns from 0.  The column origin is recorded in the
4556           JSON output in the "column-origin" tag.  In the remaining examples
4557           below, the extra column number outputs have been omitted for
4558           brevity.
4559
4560           For example, this error:
4561
4562                   bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' {aka
4563                      'struct s'} and 'T' {aka 'struct t'})
4564                      64 |   return callee_4a () + callee_4b ();
4565                         |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
4566                         |          |              |
4567                         |          |              T {aka struct t}
4568                         |          S {aka struct s}
4569
4570           has three locations.  Its primary location is at the "+" token at
4571           column 23.  It has two secondary locations, describing the left and
4572           right-hand sides of the expression, which have labels.  It might be
4573           printed in JSON form as:
4574
4575                       {
4576                           "children": [],
4577                           "kind": "error",
4578                           "locations": [
4579                               {
4580                                   "caret": {
4581                                       "column": 23, "file": "bad-binary-ops.c", "line": 64
4582                                   }
4583                               },
4584                               {
4585                                   "caret": {
4586                                       "column": 10, "file": "bad-binary-ops.c", "line": 64
4587                                   },
4588                                   "finish": {
4589                                       "column": 21, "file": "bad-binary-ops.c", "line": 64
4590                                   },
4591                                   "label": "S {aka struct s}"
4592                               },
4593                               {
4594                                   "caret": {
4595                                       "column": 25, "file": "bad-binary-ops.c", "line": 64
4596                                   },
4597                                   "finish": {
4598                                       "column": 36, "file": "bad-binary-ops.c", "line": 64
4599                                   },
4600                                   "label": "T {aka struct t}"
4601                               }
4602                           ],
4603                           "escape-source": false,
4604                           "message": "invalid operands to binary + ..."
4605                       }
4606
4607           If a diagnostic contains fix-it hints, it has a "fixits" array,
4608           consisting of half-open intervals, similar to the output of
4609           -fdiagnostics-parseable-fixits.  For example, this diagnostic with
4610           a replacement fix-it hint:
4611
4612                   demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
4613                     mean 'color'?
4614                       8 |   return ptr->colour;
4615                         |               ^~~~~~
4616                         |               color
4617
4618           might be printed in JSON form as:
4619
4620                       {
4621                           "children": [],
4622                           "fixits": [
4623                               {
4624                                   "next": {
4625                                       "column": 21,
4626                                       "file": "demo.c",
4627                                       "line": 8
4628                                   },
4629                                   "start": {
4630                                       "column": 15,
4631                                       "file": "demo.c",
4632                                       "line": 8
4633                                   },
4634                                   "string": "color"
4635                               }
4636                           ],
4637                           "kind": "error",
4638                           "locations": [
4639                               {
4640                                   "caret": {
4641                                       "column": 15,
4642                                       "file": "demo.c",
4643                                       "line": 8
4644                                   },
4645                                   "finish": {
4646                                       "column": 20,
4647                                       "file": "demo.c",
4648                                       "line": 8
4649                                   }
4650                               }
4651                           ],
4652                           "escape-source": false,
4653                           "message": "\u2018struct s\u2019 has no member named ..."
4654                       }
4655
4656           where the fix-it hint suggests replacing the text from "start" up
4657           to but not including "next" with "string"'s value.  Deletions are
4658           expressed via an empty value for "string", insertions by having
4659           "start" equal "next".
4660
4661           If the diagnostic has a path of control-flow events associated with
4662           it, it has a "path" array of objects representing the events.  Each
4663           event object has a "description" string, a "location" object, along
4664           with a "function" string and a "depth" number for representing
4665           interprocedural paths.  The "function" represents the current
4666           function at that event, and the "depth" represents the stack depth
4667           relative to some baseline: the higher, the more frames are within
4668           the stack.
4669
4670           For example, the intraprocedural example shown for
4671           -fdiagnostics-path-format= might have this JSON for its path:
4672
4673                       "path": [
4674                           {
4675                               "depth": 0,
4676                               "description": "when 'PyList_New' fails, returning NULL",
4677                               "function": "test",
4678                               "location": {
4679                                   "column": 10,
4680                                   "file": "test.c",
4681                                   "line": 25
4682                               }
4683                           },
4684                           {
4685                               "depth": 0,
4686                               "description": "when 'i < count'",
4687                               "function": "test",
4688                               "location": {
4689                                   "column": 3,
4690                                   "file": "test.c",
4691                                   "line": 27
4692                               }
4693                           },
4694                           {
4695                               "depth": 0,
4696                               "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1",
4697                               "function": "test",
4698                               "location": {
4699                                   "column": 5,
4700                                   "file": "test.c",
4701                                   "line": 29
4702                               }
4703                           }
4704                       ]
4705
4706           Diagnostics have a boolean attribute "escape-source", hinting
4707           whether non-ASCII bytes should be escaped when printing the
4708           pertinent lines of source code ("true" for diagnostics involving
4709           source encoding issues).
4710
4711   Options to Request or Suppress Warnings
4712       Warnings are diagnostic messages that report constructions that are not
4713       inherently erroneous but that are risky or suggest there may have been
4714       an error.
4715
4716       The following language-independent options do not enable specific
4717       warnings but control the kinds of diagnostics produced by GCC.
4718
4719       -fsyntax-only
4720           Check the code for syntax errors, but don't do anything beyond
4721           that.
4722
4723       -fmax-errors=n
4724           Limits the maximum number of error messages to n, at which point
4725           GCC bails out rather than attempting to continue processing the
4726           source code.  If n is 0 (the default), there is no limit on the
4727           number of error messages produced.  If -Wfatal-errors is also
4728           specified, then -Wfatal-errors takes precedence over this option.
4729
4730       -w  Inhibit all warning messages.
4731
4732       -Werror
4733           Make all warnings into errors.
4734
4735       -Werror=
4736           Make the specified warning into an error.  The specifier for a
4737           warning is appended; for example -Werror=switch turns the warnings
4738           controlled by -Wswitch into errors.  This switch takes a negative
4739           form, to be used to negate -Werror for specific warnings; for
4740           example -Wno-error=switch makes -Wswitch warnings not be errors,
4741           even when -Werror is in effect.
4742
4743           The warning message for each controllable warning includes the
4744           option that controls the warning.  That option can then be used
4745           with -Werror= and -Wno-error= as described above.  (Printing of the
4746           option in the warning message can be disabled using the
4747           -fno-diagnostics-show-option flag.)
4748
4749           Note that specifying -Werror=foo automatically implies -Wfoo.
4750           However, -Wno-error=foo does not imply anything.
4751
4752       -Wfatal-errors
4753           This option causes the compiler to abort compilation on the first
4754           error occurred rather than trying to keep going and printing
4755           further error messages.
4756
4757       You can request many specific warnings with options beginning with -W,
4758       for example -Wimplicit to request warnings on implicit declarations.
4759       Each of these specific warning options also has a negative form
4760       beginning -Wno- to turn off warnings; for example, -Wno-implicit.  This
4761       manual lists only one of the two forms, whichever is not the default.
4762       For further language-specific options also refer to C++ Dialect Options
4763       and Objective-C and Objective-C++ Dialect Options.  Additional warnings
4764       can be produced by enabling the static analyzer;
4765
4766       Some options, such as -Wall and -Wextra, turn on other options, such as
4767       -Wunused, which may turn on further options, such as -Wunused-value.
4768       The combined effect of positive and negative forms is that more
4769       specific options have priority over less specific ones, independently
4770       of their position in the command-line. For options of the same
4771       specificity, the last one takes effect. Options enabled or disabled via
4772       pragmas take effect as if they appeared at the end of the command-line.
4773
4774       When an unrecognized warning option is requested (e.g.,
4775       -Wunknown-warning), GCC emits a diagnostic stating that the option is
4776       not recognized.  However, if the -Wno- form is used, the behavior is
4777       slightly different: no diagnostic is produced for -Wno-unknown-warning
4778       unless other diagnostics are being produced.  This allows the use of
4779       new -Wno- options with old compilers, but if something goes wrong, the
4780       compiler warns that an unrecognized option is present.
4781
4782       The effectiveness of some warnings depends on optimizations also being
4783       enabled. For example -Wsuggest-final-types is more effective with link-
4784       time optimization and some instances of other warnings may not be
4785       issued at all unless optimization is enabled.  While optimization in
4786       general improves the efficacy of control and data flow sensitive
4787       warnings, in some cases it may also cause false positives.
4788
4789       -Wpedantic
4790       -pedantic
4791           Issue all the warnings demanded by strict ISO C and ISO C++; reject
4792           all programs that use forbidden extensions, and some other programs
4793           that do not follow ISO C and ISO C++.  For ISO C, follows the
4794           version of the ISO C standard specified by any -std option used.
4795
4796           Valid ISO C and ISO C++ programs should compile properly with or
4797           without this option (though a rare few require -ansi or a -std
4798           option specifying the required version of ISO C).  However, without
4799           this option, certain GNU extensions and traditional C and C++
4800           features are supported as well.  With this option, they are
4801           rejected.
4802
4803           -Wpedantic does not cause warning messages for use of the alternate
4804           keywords whose names begin and end with __.  This alternate format
4805           can also be used to disable warnings for non-ISO __intN types, i.e.
4806           __intN__.  Pedantic warnings are also disabled in the expression
4807           that follows "__extension__".  However, only system header files
4808           should use these escape routes; application programs should avoid
4809           them.
4810
4811           Some users try to use -Wpedantic to check programs for strict ISO C
4812           conformance.  They soon find that it does not do quite what they
4813           want: it finds some non-ISO practices, but not all---only those for
4814           which ISO C requires a diagnostic, and some others for which
4815           diagnostics have been added.
4816
4817           A feature to report any failure to conform to ISO C might be useful
4818           in some instances, but would require considerable additional work
4819           and would be quite different from -Wpedantic.  We don't have plans
4820           to support such a feature in the near future.
4821
4822           Where the standard specified with -std represents a GNU extended
4823           dialect of C, such as gnu90 or gnu99, there is a corresponding base
4824           standard, the version of ISO C on which the GNU extended dialect is
4825           based.  Warnings from -Wpedantic are given where they are required
4826           by the base standard.  (It does not make sense for such warnings to
4827           be given only for features not in the specified GNU C dialect,
4828           since by definition the GNU dialects of C include all features the
4829           compiler supports with the given option, and there would be nothing
4830           to warn about.)
4831
4832       -pedantic-errors
4833           Give an error whenever the base standard (see -Wpedantic) requires
4834           a diagnostic, in some cases where there is undefined behavior at
4835           compile-time and in some other cases that do not prevent
4836           compilation of programs that are valid according to the standard.
4837           This is not equivalent to -Werror=pedantic, since there are errors
4838           enabled by this option and not enabled by the latter and vice
4839           versa.
4840
4841       -Wall
4842           This enables all the warnings about constructions that some users
4843           consider questionable, and that are easy to avoid (or modify to
4844           prevent the warning), even in conjunction with macros.  This also
4845           enables some language-specific warnings described in C++ Dialect
4846           Options and Objective-C and Objective-C++ Dialect Options.
4847
4848           -Wall turns on the following warning flags:
4849
4850           -Waddress -Warray-bounds=1 (only with -O2) -Warray-compare
4851           -Warray-parameter=2 (C and Objective-C only) -Wbool-compare
4852           -Wbool-operation -Wc++11-compat  -Wc++14-compat -Wcatch-value (C++
4853           and Objective-C++ only) -Wchar-subscripts -Wcomment
4854           -Wdangling-pointer=2 -Wduplicate-decl-specifier (C and Objective-C
4855           only) -Wenum-compare (in C/ObjC; this is on by default in C++)
4856           -Wenum-int-mismatch (C and Objective-C only) -Wformat
4857           -Wformat-overflow -Wformat-truncation -Wint-in-bool-context
4858           -Wimplicit (C and Objective-C only) -Wimplicit-int (C and
4859           Objective-C only) -Wimplicit-function-declaration (C and Objective-
4860           C only) -Winit-self (only for C++) -Wlogical-not-parentheses -Wmain
4861           (only for C/ObjC and unless -ffreestanding) -Wmaybe-uninitialized
4862           -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation
4863           (only for C/C++) -Wmismatched-dealloc -Wmismatched-new-delete (only
4864           for C/C++) -Wmissing-attributes -Wmissing-braces (only for C/ObjC)
4865           -Wmultistatement-macros -Wnarrowing (only for C++) -Wnonnull
4866           -Wnonnull-compare -Wopenmp-simd -Wparentheses -Wpessimizing-move
4867           (only for C++) -Wpointer-sign -Wrange-loop-construct (only for C++)
4868           -Wreorder -Wrestrict -Wreturn-type -Wself-move (only for C++)
4869           -Wsequence-point -Wsign-compare (only in C++) -Wsizeof-array-div
4870           -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wstrict-aliasing
4871           -Wstrict-overflow=1 -Wswitch -Wtautological-compare -Wtrigraphs
4872           -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label
4873           -Wunused-value -Wunused-variable -Wuse-after-free=2 -Wvla-parameter
4874           (C and Objective-C only) -Wvolatile-register-var
4875           -Wzero-length-bounds
4876
4877           Note that some warning flags are not implied by -Wall.  Some of
4878           them warn about constructions that users generally do not consider
4879           questionable, but which occasionally you might wish to check for;
4880           others warn about constructions that are necessary or hard to avoid
4881           in some cases, and there is no simple way to modify the code to
4882           suppress the warning. Some of them are enabled by -Wextra but many
4883           of them must be enabled individually.
4884
4885       -Wextra
4886           This enables some extra warning flags that are not enabled by
4887           -Wall. (This option used to be called -W.  The older name is still
4888           supported, but the newer name is more descriptive.)
4889
4890           -Wclobbered -Wcast-function-type -Wdangling-reference (C++ only)
4891           -Wdeprecated-copy (C++ only) -Wempty-body -Wenum-conversion (C
4892           only) -Wignored-qualifiers -Wimplicit-fallthrough=3
4893           -Wmissing-field-initializers -Wmissing-parameter-type (C only)
4894           -Wold-style-declaration (C only) -Woverride-init -Wsign-compare (C
4895           only) -Wstring-compare -Wredundant-move (only for C++)
4896           -Wtype-limits -Wuninitialized -Wshift-negative-value (in C++11 to
4897           C++17 and in C99 and newer) -Wunused-parameter (only with -Wunused
4898           or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)
4899
4900           The option -Wextra also prints warning messages for the following
4901           cases:
4902
4903           *   A pointer is compared against integer zero with "<", "<=", ">",
4904               or ">=".
4905
4906           *   (C++ only) An enumerator and a non-enumerator both appear in a
4907               conditional expression.
4908
4909           *   (C++ only) Ambiguous virtual bases.
4910
4911           *   (C++ only) Subscripting an array that has been declared
4912               "register".
4913
4914           *   (C++ only) Taking the address of a variable that has been
4915               declared "register".
4916
4917           *   (C++ only) A base class is not initialized in the copy
4918               constructor of a derived class.
4919
4920       -Wabi (C, Objective-C, C++ and Objective-C++ only)
4921           Warn about code affected by ABI changes.  This includes code that
4922           may not be compatible with the vendor-neutral C++ ABI as well as
4923           the psABI for the particular target.
4924
4925           Since G++ now defaults to updating the ABI with each major release,
4926           normally -Wabi warns only about C++ ABI compatibility problems if
4927           there is a check added later in a release series for an ABI issue
4928           discovered since the initial release.  -Wabi warns about more
4929           things if an older ABI version is selected (with -fabi-version=n).
4930
4931           -Wabi can also be used with an explicit version number to warn
4932           about C++ ABI compatibility with a particular -fabi-version level,
4933           e.g. -Wabi=2 to warn about changes relative to -fabi-version=2.
4934
4935           If an explicit version number is provided and -fabi-compat-version
4936           is not specified, the version number from this option is used for
4937           compatibility aliases.  If no explicit version number is provided
4938           with this option, but -fabi-compat-version is specified, that
4939           version number is used for C++ ABI warnings.
4940
4941           Although an effort has been made to warn about all such cases,
4942           there are probably some cases that are not warned about, even
4943           though G++ is generating incompatible code.  There may also be
4944           cases where warnings are emitted even though the code that is
4945           generated is compatible.
4946
4947           You should rewrite your code to avoid these warnings if you are
4948           concerned about the fact that code generated by G++ may not be
4949           binary compatible with code generated by other compilers.
4950
4951           Known incompatibilities in -fabi-version=2 (which was the default
4952           from GCC 3.4 to 4.9) include:
4953
4954           *   A template with a non-type template parameter of reference type
4955               was mangled incorrectly:
4956
4957                       extern int N;
4958                       template <int &> struct S {};
4959                       void n (S<N>) {2}
4960
4961               This was fixed in -fabi-version=3.
4962
4963           *   SIMD vector types declared using "__attribute ((vector_size))"
4964               were mangled in a non-standard way that does not allow for
4965               overloading of functions taking vectors of different sizes.
4966
4967               The mangling was changed in -fabi-version=4.
4968
4969           *   "__attribute ((const))" and "noreturn" were mangled as type
4970               qualifiers, and "decltype" of a plain declaration was folded
4971               away.
4972
4973               These mangling issues were fixed in -fabi-version=5.
4974
4975           *   Scoped enumerators passed as arguments to a variadic function
4976               are promoted like unscoped enumerators, causing "va_arg" to
4977               complain.  On most targets this does not actually affect the
4978               parameter passing ABI, as there is no way to pass an argument
4979               smaller than "int".
4980
4981               Also, the ABI changed the mangling of template argument packs,
4982               "const_cast", "static_cast", prefix increment/decrement, and a
4983               class scope function used as a template argument.
4984
4985               These issues were corrected in -fabi-version=6.
4986
4987           *   Lambdas in default argument scope were mangled incorrectly, and
4988               the ABI changed the mangling of "nullptr_t".
4989
4990               These issues were corrected in -fabi-version=7.
4991
4992           *   When mangling a function type with function-cv-qualifiers, the
4993               un-qualified function type was incorrectly treated as a
4994               substitution candidate.
4995
4996               This was fixed in -fabi-version=8, the default for GCC 5.1.
4997
4998           *   decltype(nullptr) incorrectly had an alignment of 1, leading to
4999               unaligned accesses.  Note that this did not affect the ABI of a
5000               function with a "nullptr_t" parameter, as parameters have a
5001               minimum alignment.
5002
5003               This was fixed in -fabi-version=9, the default for GCC 5.2.
5004
5005           *   Target-specific attributes that affect the identity of a type,
5006               such as ia32 calling conventions on a function type (stdcall,
5007               regparm, etc.), did not affect the mangled name, leading to
5008               name collisions when function pointers were used as template
5009               arguments.
5010
5011               This was fixed in -fabi-version=10, the default for GCC 6.1.
5012
5013           This option also enables warnings about psABI-related changes.  The
5014           known psABI changes at this point include:
5015
5016           *   For SysV/x86-64, unions with "long double" members are passed
5017               in memory as specified in psABI.  Prior to GCC 4.4, this was
5018               not the case.  For example:
5019
5020                       union U {
5021                         long double ld;
5022                         int i;
5023                       };
5024
5025               "union U" is now always passed in memory.
5026
5027       -Wno-changes-meaning (C++ and Objective-C++ only)
5028           C++ requires that unqualified uses of a name within a class have
5029           the same meaning in the complete scope of the class, so declaring
5030           the name after using it is ill-formed:
5031
5032                   struct A;
5033                   struct B1 { A a; typedef A A; }; // warning, 'A' changes meaning
5034                   struct B2 { A a; struct A { }; }; // error, 'A' changes meaning
5035
5036           By default, the B1 case is only a warning because the two
5037           declarations have the same type, while the B2 case is an error.
5038           Both diagnostics can be disabled with -Wno-changes-meaning.
5039           Alternately, the error case can be reduced to a warning with
5040           -Wno-error=changes-meaning or -fpermissive.
5041
5042           Both diagnostics are also suppressed by -fms-extensions.
5043
5044       -Wchar-subscripts
5045           Warn if an array subscript has type "char".  This is a common cause
5046           of error, as programmers often forget that this type is signed on
5047           some machines.  This warning is enabled by -Wall.
5048
5049       -Wno-coverage-mismatch
5050           Warn if feedback profiles do not match when using the -fprofile-use
5051           option.  If a source file is changed between compiling with
5052           -fprofile-generate and with -fprofile-use, the files with the
5053           profile feedback can fail to match the source file and GCC cannot
5054           use the profile feedback information.  By default, this warning is
5055           enabled and is treated as an error.  -Wno-coverage-mismatch can be
5056           used to disable the warning or -Wno-error=coverage-mismatch can be
5057           used to disable the error.  Disabling the error for this warning
5058           can result in poorly optimized code and is useful only in the case
5059           of very minor changes such as bug fixes to an existing code-base.
5060           Completely disabling the warning is not recommended.
5061
5062       -Wno-coverage-invalid-line-number
5063           Warn in case a function ends earlier than it begins due to an
5064           invalid linenum macros.  The warning is emitted only with
5065           --coverage enabled.
5066
5067           By default, this warning is enabled and is treated as an error.
5068           -Wno-coverage-invalid-line-number can be used to disable the
5069           warning or -Wno-error=coverage-invalid-line-number can be used to
5070           disable the error.
5071
5072       -Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)
5073           Suppress warning messages emitted by "#warning" directives.
5074
5075       -Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)
5076           Give a warning when a value of type "float" is implicitly promoted
5077           to "double".  CPUs with a 32-bit "single-precision" floating-point
5078           unit implement "float" in hardware, but emulate "double" in
5079           software.  On such a machine, doing computations using "double"
5080           values is much more expensive because of the overhead required for
5081           software emulation.
5082
5083           It is easy to accidentally do computations with "double" because
5084           floating-point literals are implicitly of type "double".  For
5085           example, in:
5086
5087                   float area(float radius)
5088                   {
5089                      return 3.14159 * radius * radius;
5090                   }
5091
5092           the compiler performs the entire computation with "double" because
5093           the floating-point literal is a "double".
5094
5095       -Wduplicate-decl-specifier (C and Objective-C only)
5096           Warn if a declaration has duplicate "const", "volatile", "restrict"
5097           or "_Atomic" specifier.  This warning is enabled by -Wall.
5098
5099       -Wformat
5100       -Wformat=n
5101           Check calls to "printf" and "scanf", etc., to make sure that the
5102           arguments supplied have types appropriate to the format string
5103           specified, and that the conversions specified in the format string
5104           make sense.  This includes standard functions, and others specified
5105           by format attributes, in the "printf", "scanf", "strftime" and
5106           "strfmon" (an X/Open extension, not in the C standard) families (or
5107           other target-specific families).  Which functions are checked
5108           without format attributes having been specified depends on the
5109           standard version selected, and such checks of functions without the
5110           attribute specified are disabled by -ffreestanding or -fno-builtin.
5111
5112           The formats are checked against the format features supported by
5113           GNU libc version 2.2.  These include all ISO C90 and C99 features,
5114           as well as features from the Single Unix Specification and some BSD
5115           and GNU extensions.  Other library implementations may not support
5116           all these features; GCC does not support warning about features
5117           that go beyond a particular library's limitations.  However, if
5118           -Wpedantic is used with -Wformat, warnings are given about format
5119           features not in the selected standard version (but not for
5120           "strfmon" formats, since those are not in any version of the C
5121           standard).
5122
5123           -Wformat=1
5124           -Wformat
5125               Option -Wformat is equivalent to -Wformat=1, and -Wno-format is
5126               equivalent to -Wformat=0.  Since -Wformat also checks for null
5127               format arguments for several functions, -Wformat also implies
5128               -Wnonnull.  Some aspects of this level of format checking can
5129               be disabled by the options: -Wno-format-contains-nul,
5130               -Wno-format-extra-args, and -Wno-format-zero-length.  -Wformat
5131               is enabled by -Wall.
5132
5133           -Wformat=2
5134               Enable -Wformat plus additional format checks.  Currently
5135               equivalent to -Wformat -Wformat-nonliteral -Wformat-security
5136               -Wformat-y2k.
5137
5138       -Wno-format-contains-nul
5139           If -Wformat is specified, do not warn about format strings that
5140           contain NUL bytes.
5141
5142       -Wno-format-extra-args
5143           If -Wformat is specified, do not warn about excess arguments to a
5144           "printf" or "scanf" format function.  The C standard specifies that
5145           such arguments are ignored.
5146
5147           Where the unused arguments lie between used arguments that are
5148           specified with $ operand number specifications, normally warnings
5149           are still given, since the implementation could not know what type
5150           to pass to "va_arg" to skip the unused arguments.  However, in the
5151           case of "scanf" formats, this option suppresses the warning if the
5152           unused arguments are all pointers, since the Single Unix
5153           Specification says that such unused arguments are allowed.
5154
5155       -Wformat-overflow
5156       -Wformat-overflow=level
5157           Warn about calls to formatted input/output functions such as
5158           "sprintf" and "vsprintf" that might overflow the destination
5159           buffer.  When the exact number of bytes written by a format
5160           directive cannot be determined at compile-time it is estimated
5161           based on heuristics that depend on the level argument and on
5162           optimization.  While enabling optimization will in most cases
5163           improve the accuracy of the warning, it may also result in false
5164           positives.
5165
5166           -Wformat-overflow
5167           -Wformat-overflow=1
5168               Level 1 of -Wformat-overflow enabled by -Wformat employs a
5169               conservative approach that warns only about calls that most
5170               likely overflow the buffer.  At this level, numeric arguments
5171               to format directives with unknown values are assumed to have
5172               the value of one, and strings of unknown length to be empty.
5173               Numeric arguments that are known to be bounded to a subrange of
5174               their type, or string arguments whose output is bounded either
5175               by their directive's precision or by a finite set of string
5176               literals, are assumed to take on the value within the range
5177               that results in the most bytes on output.  For example, the
5178               call to "sprintf" below is diagnosed because even with both a
5179               and b equal to zero, the terminating NUL character ('\0')
5180               appended by the function to the destination buffer will be
5181               written past its end.  Increasing the size of the buffer by a
5182               single byte is sufficient to avoid the warning, though it may
5183               not be sufficient to avoid the overflow.
5184
5185                       void f (int a, int b)
5186                       {
5187                         char buf [13];
5188                         sprintf (buf, "a = %i, b = %i\n", a, b);
5189                       }
5190
5191           -Wformat-overflow=2
5192               Level 2 warns also about calls that might overflow the
5193               destination buffer given an argument of sufficient length or
5194               magnitude.  At level 2, unknown numeric arguments are assumed
5195               to have the minimum representable value for signed types with a
5196               precision greater than 1, and the maximum representable value
5197               otherwise.  Unknown string arguments whose length cannot be
5198               assumed to be bounded either by the directive's precision, or
5199               by a finite set of string literals they may evaluate to, or the
5200               character array they may point to, are assumed to be 1
5201               character long.
5202
5203               At level 2, the call in the example above is again diagnosed,
5204               but this time because with a equal to a 32-bit "INT_MIN" the
5205               first %i directive will write some of its digits beyond the end
5206               of the destination buffer.  To make the call safe regardless of
5207               the values of the two variables, the size of the destination
5208               buffer must be increased to at least 34 bytes.  GCC includes
5209               the minimum size of the buffer in an informational note
5210               following the warning.
5211
5212               An alternative to increasing the size of the destination buffer
5213               is to constrain the range of formatted values.  The maximum
5214               length of string arguments can be bounded by specifying the
5215               precision in the format directive.  When numeric arguments of
5216               format directives can be assumed to be bounded by less than the
5217               precision of their type, choosing an appropriate length
5218               modifier to the format specifier will reduce the required
5219               buffer size.  For example, if a and b in the example above can
5220               be assumed to be within the precision of the "short int" type
5221               then using either the %hi format directive or casting the
5222               argument to "short" reduces the maximum required size of the
5223               buffer to 24 bytes.
5224
5225                       void f (int a, int b)
5226                       {
5227                         char buf [23];
5228                         sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
5229                       }
5230
5231       -Wno-format-zero-length
5232           If -Wformat is specified, do not warn about zero-length formats.
5233           The C standard specifies that zero-length formats are allowed.
5234
5235       -Wformat-nonliteral
5236           If -Wformat is specified, also warn if the format string is not a
5237           string literal and so cannot be checked, unless the format function
5238           takes its format arguments as a "va_list".
5239
5240       -Wformat-security
5241           If -Wformat is specified, also warn about uses of format functions
5242           that represent possible security problems.  At present, this warns
5243           about calls to "printf" and "scanf" functions where the format
5244           string is not a string literal and there are no format arguments,
5245           as in "printf (foo);".  This may be a security hole if the format
5246           string came from untrusted input and contains %n.  (This is
5247           currently a subset of what -Wformat-nonliteral warns about, but in
5248           future warnings may be added to -Wformat-security that are not
5249           included in -Wformat-nonliteral.)
5250
5251       -Wformat-signedness
5252           If -Wformat is specified, also warn if the format string requires
5253           an unsigned argument and the argument is signed and vice versa.
5254
5255       -Wformat-truncation
5256       -Wformat-truncation=level
5257           Warn about calls to formatted input/output functions such as
5258           "snprintf" and "vsnprintf" that might result in output truncation.
5259           When the exact number of bytes written by a format directive cannot
5260           be determined at compile-time it is estimated based on heuristics
5261           that depend on the level argument and on optimization.  While
5262           enabling optimization will in most cases improve the accuracy of
5263           the warning, it may also result in false positives.  Except as
5264           noted otherwise, the option uses the same logic -Wformat-overflow.
5265
5266           -Wformat-truncation
5267           -Wformat-truncation=1
5268               Level 1 of -Wformat-truncation enabled by -Wformat employs a
5269               conservative approach that warns only about calls to bounded
5270               functions whose return value is unused and that will most
5271               likely result in output truncation.
5272
5273           -Wformat-truncation=2
5274               Level 2 warns also about calls to bounded functions whose
5275               return value is used and that might result in truncation given
5276               an argument of sufficient length or magnitude.
5277
5278       -Wformat-y2k
5279           If -Wformat is specified, also warn about "strftime" formats that
5280           may yield only a two-digit year.
5281
5282       -Wnonnull
5283           Warn about passing a null pointer for arguments marked as requiring
5284           a non-null value by the "nonnull" function attribute.
5285
5286           -Wnonnull is included in -Wall and -Wformat.  It can be disabled
5287           with the -Wno-nonnull option.
5288
5289       -Wnonnull-compare
5290           Warn when comparing an argument marked with the "nonnull" function
5291           attribute against null inside the function.
5292
5293           -Wnonnull-compare is included in -Wall.  It can be disabled with
5294           the -Wno-nonnull-compare option.
5295
5296       -Wnull-dereference
5297           Warn if the compiler detects paths that trigger erroneous or
5298           undefined behavior due to dereferencing a null pointer.  This
5299           option is only active when -fdelete-null-pointer-checks is active,
5300           which is enabled by optimizations in most targets.  The precision
5301           of the warnings depends on the optimization options used.
5302
5303       -Winfinite-recursion
5304           Warn about infinitely recursive calls.  The warning is effective at
5305           all optimization levels but requires optimization in order to
5306           detect infinite recursion in calls between two or more functions.
5307           -Winfinite-recursion is included in -Wall.
5308
5309           Compare with -Wanalyzer-infinite-recursion which provides a similar
5310           diagnostic, but is implemented in a different way (as part of
5311           -fanalyzer).
5312
5313       -Winit-self (C, C++, Objective-C and Objective-C++ only)
5314           Warn about uninitialized variables that are initialized with
5315           themselves.  Note this option can only be used with the
5316           -Wuninitialized option.
5317
5318           For example, GCC warns about "i" being uninitialized in the
5319           following snippet only when -Winit-self has been specified:
5320
5321                   int f()
5322                   {
5323                     int i = i;
5324                     return i;
5325                   }
5326
5327           This warning is enabled by -Wall in C++.
5328
5329       -Wno-implicit-int (C and Objective-C only)
5330           This option controls warnings when a declaration does not specify a
5331           type.  This warning is enabled by default in C99 and later dialects
5332           of C, and also by -Wall.
5333
5334       -Wno-implicit-function-declaration (C and Objective-C only)
5335           This option controls warnings when a function is used before being
5336           declared.  This warning is enabled by default in C99 and later
5337           dialects of C, and also by -Wall.  The warning is made into an
5338           error by -pedantic-errors.
5339
5340       -Wimplicit (C and Objective-C only)
5341           Same as -Wimplicit-int and -Wimplicit-function-declaration.  This
5342           warning is enabled by -Wall.
5343
5344       -Wimplicit-fallthrough
5345           -Wimplicit-fallthrough is the same as -Wimplicit-fallthrough=3 and
5346           -Wno-implicit-fallthrough is the same as -Wimplicit-fallthrough=0.
5347
5348       -Wimplicit-fallthrough=n
5349           Warn when a switch case falls through.  For example:
5350
5351                   switch (cond)
5352                     {
5353                     case 1:
5354                       a = 1;
5355                       break;
5356                     case 2:
5357                       a = 2;
5358                     case 3:
5359                       a = 3;
5360                       break;
5361                     }
5362
5363           This warning does not warn when the last statement of a case cannot
5364           fall through, e.g. when there is a return statement or a call to
5365           function declared with the noreturn attribute.
5366           -Wimplicit-fallthrough= also takes into account control flow
5367           statements, such as ifs, and only warns when appropriate.  E.g.
5368
5369                   switch (cond)
5370                     {
5371                     case 1:
5372                       if (i > 3) {
5373                         bar (5);
5374                         break;
5375                       } else if (i < 1) {
5376                         bar (0);
5377                       } else
5378                         return;
5379                     default:
5380                       ...
5381                     }
5382
5383           Since there are occasions where a switch case fall through is
5384           desirable, GCC provides an attribute, "__attribute__
5385           ((fallthrough))", that is to be used along with a null statement to
5386           suppress this warning that would normally occur:
5387
5388                   switch (cond)
5389                     {
5390                     case 1:
5391                       bar (0);
5392                       __attribute__ ((fallthrough));
5393                     default:
5394                       ...
5395                     }
5396
5397           C++17 provides a standard way to suppress the
5398           -Wimplicit-fallthrough warning using "[[fallthrough]];" instead of
5399           the GNU attribute.  In C++11 or C++14 users can use
5400           "[[gnu::fallthrough]];", which is a GNU extension.  Instead of
5401           these attributes, it is also possible to add a fallthrough comment
5402           to silence the warning.  The whole body of the C or C++ style
5403           comment should match the given regular expressions listed below.
5404           The option argument n specifies what kind of comments are accepted:
5405
5406           *<-Wimplicit-fallthrough=0 disables the warning altogether.>
5407           *<-Wimplicit-fallthrough=1 matches ".*" regular>
5408               expression, any comment is used as fallthrough comment.
5409
5410           *<-Wimplicit-fallthrough=2 case insensitively matches>
5411               ".*falls?[ \t-]*thr(ough|u).*" regular expression.
5412
5413           *<-Wimplicit-fallthrough=3 case sensitively matches one of the>
5414               following regular expressions:
5415
5416               *<"-fallthrough">
5417               *<"@fallthrough@">
5418               *<"lint -fallthrough[ \t]*">
5419               *<"[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S |
5420               |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?">
5421               *<"[ \t.!]*(Else,? |Intentional(ly)? )?Fall((s |
5422               |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?">
5423               *<"[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s |
5424               |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?">
5425           *<-Wimplicit-fallthrough=4 case sensitively matches one of the>
5426               following regular expressions:
5427
5428               *<"-fallthrough">
5429               *<"@fallthrough@">
5430               *<"lint -fallthrough[ \t]*">
5431               *<"[ \t]*FALLTHR(OUGH|U)[ \t]*">
5432           *<-Wimplicit-fallthrough=5 doesn't recognize any comments as>
5433               fallthrough comments, only attributes disable the warning.
5434
5435           The comment needs to be followed after optional whitespace and
5436           other comments by "case" or "default" keywords or by a user label
5437           that precedes some "case" or "default" label.
5438
5439                   switch (cond)
5440                     {
5441                     case 1:
5442                       bar (0);
5443                       /* FALLTHRU */
5444                     default:
5445                       ...
5446                     }
5447
5448           The -Wimplicit-fallthrough=3 warning is enabled by -Wextra.
5449
5450       -Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)
5451           Control if warnings triggered by the "warn_if_not_aligned"
5452           attribute should be issued.  These warnings are enabled by default.
5453
5454       -Wignored-qualifiers (C and C++ only)
5455           Warn if the return type of a function has a type qualifier such as
5456           "const".  For ISO C such a type qualifier has no effect, since the
5457           value returned by a function is not an lvalue.  For C++, the
5458           warning is only emitted for scalar types or "void".  ISO C
5459           prohibits qualified "void" return types on function definitions, so
5460           such return types always receive a warning even without this
5461           option.
5462
5463           This warning is also enabled by -Wextra.
5464
5465       -Wno-ignored-attributes (C and C++ only)
5466           This option controls warnings when an attribute is ignored.  This
5467           is different from the -Wattributes option in that it warns whenever
5468           the compiler decides to drop an attribute, not that the attribute
5469           is either unknown, used in a wrong place, etc.  This warning is
5470           enabled by default.
5471
5472       -Wmain
5473           Warn if the type of "main" is suspicious.  "main" should be a
5474           function with external linkage, returning int, taking either zero
5475           arguments, two, or three arguments of appropriate types.  This
5476           warning is enabled by default in C++ and is enabled by either -Wall
5477           or -Wpedantic.
5478
5479       -Wmisleading-indentation (C and C++ only)
5480           Warn when the indentation of the code does not reflect the block
5481           structure.  Specifically, a warning is issued for "if", "else",
5482           "while", and "for" clauses with a guarded statement that does not
5483           use braces, followed by an unguarded statement with the same
5484           indentation.
5485
5486           In the following example, the call to "bar" is misleadingly
5487           indented as if it were guarded by the "if" conditional.
5488
5489                     if (some_condition ())
5490                       foo ();
5491                       bar ();  /* Gotcha: this is not guarded by the "if".  */
5492
5493           In the case of mixed tabs and spaces, the warning uses the
5494           -ftabstop= option to determine if the statements line up
5495           (defaulting to 8).
5496
5497           The warning is not issued for code involving multiline preprocessor
5498           logic such as the following example.
5499
5500                     if (flagA)
5501                       foo (0);
5502                   #if SOME_CONDITION_THAT_DOES_NOT_HOLD
5503                     if (flagB)
5504                   #endif
5505                       foo (1);
5506
5507           The warning is not issued after a "#line" directive, since this
5508           typically indicates autogenerated code, and no assumptions can be
5509           made about the layout of the file that the directive references.
5510
5511           This warning is enabled by -Wall in C and C++.
5512
5513       -Wmissing-attributes
5514           Warn when a declaration of a function is missing one or more
5515           attributes that a related function is declared with and whose
5516           absence may adversely affect the correctness or efficiency of
5517           generated code.  For example, the warning is issued for
5518           declarations of aliases that use attributes to specify less
5519           restrictive requirements than those of their targets.  This
5520           typically represents a potential optimization opportunity.  By
5521           contrast, the -Wattribute-alias=2 option controls warnings issued
5522           when the alias is more restrictive than the target, which could
5523           lead to incorrect code generation.  Attributes considered include
5524           "alloc_align", "alloc_size", "cold", "const", "hot", "leaf",
5525           "malloc", "nonnull", "noreturn", "nothrow", "pure",
5526           "returns_nonnull", and "returns_twice".
5527
5528           In C++, the warning is issued when an explicit specialization of a
5529           primary template declared with attribute "alloc_align",
5530           "alloc_size", "assume_aligned", "format", "format_arg", "malloc",
5531           or "nonnull" is declared without it.  Attributes "deprecated",
5532           "error", and "warning" suppress the warning..
5533
5534           You can use the "copy" attribute to apply the same set of
5535           attributes to a declaration as that on another declaration without
5536           explicitly enumerating the attributes. This attribute can be
5537           applied to declarations of functions, variables, or types.
5538
5539           -Wmissing-attributes is enabled by -Wall.
5540
5541           For example, since the declaration of the primary function template
5542           below makes use of both attribute "malloc" and "alloc_size" the
5543           declaration of the explicit specialization of the template is
5544           diagnosed because it is missing one of the attributes.
5545
5546                   template <class T>
5547                   T* __attribute__ ((malloc, alloc_size (1)))
5548                   allocate (size_t);
5549
5550                   template <>
5551                   void* __attribute__ ((malloc))   // missing alloc_size
5552                   allocate<void> (size_t);
5553
5554       -Wmissing-braces
5555           Warn if an aggregate or union initializer is not fully bracketed.
5556           In the following example, the initializer for "a" is not fully
5557           bracketed, but that for "b" is fully bracketed.
5558
5559                   int a[2][2] = { 0, 1, 2, 3 };
5560                   int b[2][2] = { { 0, 1 }, { 2, 3 } };
5561
5562           This warning is enabled by -Wall.
5563
5564       -Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran
5565       only)
5566           Warn if a user-supplied include directory does not exist. This
5567           option is disabled by default for C, C++, Objective-C and
5568           Objective-C++. For Fortran, it is partially enabled by default by
5569           warning for -I and -J, only.
5570
5571       -Wno-missing-profile
5572           This option controls warnings if feedback profiles are missing when
5573           using the -fprofile-use option.  This option diagnoses those cases
5574           where a new function or a new file is added between compiling with
5575           -fprofile-generate and with -fprofile-use, without regenerating the
5576           profiles.  In these cases, the profile feedback data files do not
5577           contain any profile feedback information for the newly added
5578           function or file respectively.  Also, in the case when profile
5579           count data (.gcda) files are removed, GCC cannot use any profile
5580           feedback information.  In all these cases, warnings are issued to
5581           inform you that a profile generation step is due.  Ignoring the
5582           warning can result in poorly optimized code.  -Wno-missing-profile
5583           can be used to disable the warning, but this is not recommended and
5584           should be done only when non-existent profile data is justified.
5585
5586       -Wmismatched-dealloc
5587           Warn for calls to deallocation functions with pointer arguments
5588           returned from from allocations functions for which the former isn't
5589           a suitable deallocator.  A pair of functions can be associated as
5590           matching allocators and deallocators by use of attribute "malloc".
5591           Unless disabled by the -fno-builtin option the standard functions
5592           "calloc", "malloc", "realloc", and "free", as well as the
5593           corresponding forms of C++ "operator new" and "operator delete" are
5594           implicitly associated as matching allocators and deallocators.  In
5595           the following example "mydealloc" is the deallocator for pointers
5596           returned from "myalloc".
5597
5598                   void mydealloc (void*);
5599
5600                   __attribute__ ((malloc (mydealloc, 1))) void*
5601                   myalloc (size_t);
5602
5603                   void f (void)
5604                   {
5605                     void *p = myalloc (32);
5606                     // ...use p...
5607                     free (p);   // warning: not a matching deallocator for myalloc
5608                     mydealloc (p);   // ok
5609                   }
5610
5611           In C++, the related option -Wmismatched-new-delete diagnoses
5612           mismatches involving either "operator new" or "operator delete".
5613
5614           Option -Wmismatched-dealloc is included in -Wall.
5615
5616       -Wmultistatement-macros
5617           Warn about unsafe multiple statement macros that appear to be
5618           guarded by a clause such as "if", "else", "for", "switch", or
5619           "while", in which only the first statement is actually guarded
5620           after the macro is expanded.
5621
5622           For example:
5623
5624                   #define DOIT x++; y++
5625                   if (c)
5626                     DOIT;
5627
5628           will increment "y" unconditionally, not just when "c" holds.  The
5629           can usually be fixed by wrapping the macro in a do-while loop:
5630
5631                   #define DOIT do { x++; y++; } while (0)
5632                   if (c)
5633                     DOIT;
5634
5635           This warning is enabled by -Wall in C and C++.
5636
5637       -Wparentheses
5638           Warn if parentheses are omitted in certain contexts, such as when
5639           there is an assignment in a context where a truth value is
5640           expected, or when operators are nested whose precedence people
5641           often get confused about.
5642
5643           Also warn if a comparison like "x<=y<=z" appears; this is
5644           equivalent to "(x<=y ? 1 : 0) <= z", which is a different
5645           interpretation from that of ordinary mathematical notation.
5646
5647           Also warn for dangerous uses of the GNU extension to "?:" with
5648           omitted middle operand. When the condition in the "?": operator is
5649           a boolean expression, the omitted value is always 1.  Often
5650           programmers expect it to be a value computed inside the conditional
5651           expression instead.
5652
5653           For C++ this also warns for some cases of unnecessary parentheses
5654           in declarations, which can indicate an attempt at a function call
5655           instead of a declaration:
5656
5657                   {
5658                     // Declares a local variable called mymutex.
5659                     std::unique_lock<std::mutex> (mymutex);
5660                     // User meant std::unique_lock<std::mutex> lock (mymutex);
5661                   }
5662
5663           This warning is enabled by -Wall.
5664
5665       -Wno-self-move (C++ and Objective-C++ only)
5666           This warning warns when a value is moved to itself with
5667           "std::move".  Such a "std::move" typically has no effect.
5668
5669                   struct T {
5670                   ...
5671                   };
5672                   void fn()
5673                   {
5674                     T t;
5675                     ...
5676                     t = std::move (t);
5677                   }
5678
5679           This warning is enabled by -Wall.
5680
5681       -Wsequence-point
5682           Warn about code that may have undefined semantics because of
5683           violations of sequence point rules in the C and C++ standards.
5684
5685           The C and C++ standards define the order in which expressions in a
5686           C/C++ program are evaluated in terms of sequence points, which
5687           represent a partial ordering between the execution of parts of the
5688           program: those executed before the sequence point, and those
5689           executed after it.  These occur after the evaluation of a full
5690           expression (one which is not part of a larger expression), after
5691           the evaluation of the first operand of a "&&", "||", "? :" or ","
5692           (comma) operator, before a function is called (but after the
5693           evaluation of its arguments and the expression denoting the called
5694           function), and in certain other places.  Other than as expressed by
5695           the sequence point rules, the order of evaluation of subexpressions
5696           of an expression is not specified.  All these rules describe only a
5697           partial order rather than a total order, since, for example, if two
5698           functions are called within one expression with no sequence point
5699           between them, the order in which the functions are called is not
5700           specified.  However, the standards committee have ruled that
5701           function calls do not overlap.
5702
5703           It is not specified when between sequence points modifications to
5704           the values of objects take effect.  Programs whose behavior depends
5705           on this have undefined behavior; the C and C++ standards specify
5706           that "Between the previous and next sequence point an object shall
5707           have its stored value modified at most once by the evaluation of an
5708           expression.  Furthermore, the prior value shall be read only to
5709           determine the value to be stored.".  If a program breaks these
5710           rules, the results on any particular implementation are entirely
5711           unpredictable.
5712
5713           Examples of code with undefined behavior are "a = a++;", "a[n] =
5714           b[n++]" and "a[i++] = i;".  Some more complicated cases are not
5715           diagnosed by this option, and it may give an occasional false
5716           positive result, but in general it has been found fairly effective
5717           at detecting this sort of problem in programs.
5718
5719           The C++17 standard will define the order of evaluation of operands
5720           in more cases: in particular it requires that the right-hand side
5721           of an assignment be evaluated before the left-hand side, so the
5722           above examples are no longer undefined.  But this option will still
5723           warn about them, to help people avoid writing code that is
5724           undefined in C and earlier revisions of C++.
5725
5726           The standard is worded confusingly, therefore there is some debate
5727           over the precise meaning of the sequence point rules in subtle
5728           cases.  Links to discussions of the problem, including proposed
5729           formal definitions, may be found on the GCC readings page, at
5730           <https://gcc.gnu.org/readings.html>.
5731
5732           This warning is enabled by -Wall for C and C++.
5733
5734       -Wno-return-local-addr
5735           Do not warn about returning a pointer (or in C++, a reference) to a
5736           variable that goes out of scope after the function returns.
5737
5738       -Wreturn-type
5739           Warn whenever a function is defined with a return type that
5740           defaults to "int".  Also warn about any "return" statement with no
5741           return value in a function whose return type is not "void" (falling
5742           off the end of the function body is considered returning without a
5743           value).
5744
5745           For C only, warn about a "return" statement with an expression in a
5746           function whose return type is "void", unless the expression type is
5747           also "void".  As a GNU extension, the latter case is accepted
5748           without a warning unless -Wpedantic is used.  Attempting to use the
5749           return value of a non-"void" function other than "main" that flows
5750           off the end by reaching the closing curly brace that terminates the
5751           function is undefined.
5752
5753           Unlike in C, in C++, flowing off the end of a non-"void" function
5754           other than "main" results in undefined behavior even when the value
5755           of the function is not used.
5756
5757           This warning is enabled by default in C++ and by -Wall otherwise.
5758
5759       -Wno-shift-count-negative
5760           Controls warnings if a shift count is negative.  This warning is
5761           enabled by default.
5762
5763       -Wno-shift-count-overflow
5764           Controls warnings if a shift count is greater than or equal to the
5765           bit width of the type.  This warning is enabled by default.
5766
5767       -Wshift-negative-value
5768           Warn if left shifting a negative value.  This warning is enabled by
5769           -Wextra in C99 (and newer) and C++11 to C++17 modes.
5770
5771       -Wno-shift-overflow
5772       -Wshift-overflow=n
5773           These options control warnings about left shift overflows.
5774
5775           -Wshift-overflow=1
5776               This is the warning level of -Wshift-overflow and is enabled by
5777               default in C99 and C++11 modes (and newer).  This warning level
5778               does not warn about left-shifting 1 into the sign bit.
5779               (However, in C, such an overflow is still rejected in contexts
5780               where an integer constant expression is required.)  No warning
5781               is emitted in C++20 mode (and newer), as signed left shifts
5782               always wrap.
5783
5784           -Wshift-overflow=2
5785               This warning level also warns about left-shifting 1 into the
5786               sign bit, unless C++14 mode (or newer) is active.
5787
5788       -Wswitch
5789           Warn whenever a "switch" statement has an index of enumerated type
5790           and lacks a "case" for one or more of the named codes of that
5791           enumeration.  (The presence of a "default" label prevents this
5792           warning.)  "case" labels outside the enumeration range also provoke
5793           warnings when this option is used (even if there is a "default"
5794           label).  This warning is enabled by -Wall.
5795
5796       -Wswitch-default
5797           Warn whenever a "switch" statement does not have a "default" case.
5798
5799       -Wswitch-enum
5800           Warn whenever a "switch" statement has an index of enumerated type
5801           and lacks a "case" for one or more of the named codes of that
5802           enumeration.  "case" labels outside the enumeration range also
5803           provoke warnings when this option is used.  The only difference
5804           between -Wswitch and this option is that this option gives a
5805           warning about an omitted enumeration code even if there is a
5806           "default" label.
5807
5808       -Wno-switch-bool
5809           Do not warn when a "switch" statement has an index of boolean type
5810           and the case values are outside the range of a boolean type.  It is
5811           possible to suppress this warning by casting the controlling
5812           expression to a type other than "bool".  For example:
5813
5814                   switch ((int) (a == 4))
5815                     {
5816                     ...
5817                     }
5818
5819           This warning is enabled by default for C and C++ programs.
5820
5821       -Wno-switch-outside-range
5822           This option controls warnings when a "switch" case has a value that
5823           is outside of its respective type range.  This warning is enabled
5824           by default for C and C++ programs.
5825
5826       -Wno-switch-unreachable
5827           Do not warn when a "switch" statement contains statements between
5828           the controlling expression and the first case label, which will
5829           never be executed.  For example:
5830
5831                   switch (cond)
5832                     {
5833                      i = 15;
5834                     ...
5835                      case 5:
5836                     ...
5837                     }
5838
5839           -Wswitch-unreachable does not warn if the statement between the
5840           controlling expression and the first case label is just a
5841           declaration:
5842
5843                   switch (cond)
5844                     {
5845                      int i;
5846                     ...
5847                      case 5:
5848                      i = 5;
5849                     ...
5850                     }
5851
5852           This warning is enabled by default for C and C++ programs.
5853
5854       -Wsync-nand (C and C++ only)
5855           Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
5856           built-in functions are used.  These functions changed semantics in
5857           GCC 4.4.
5858
5859       -Wtrivial-auto-var-init
5860           Warn when "-ftrivial-auto-var-init" cannot initialize the automatic
5861           variable.  A common situation is an automatic variable that is
5862           declared between the controlling expression and the first case
5863           label of a "switch" statement.
5864
5865       -Wunused-but-set-parameter
5866           Warn whenever a function parameter is assigned to, but otherwise
5867           unused (aside from its declaration).
5868
5869           To suppress this warning use the "unused" attribute.
5870
5871           This warning is also enabled by -Wunused together with -Wextra.
5872
5873       -Wunused-but-set-variable
5874           Warn whenever a local variable is assigned to, but otherwise unused
5875           (aside from its declaration).  This warning is enabled by -Wall.
5876
5877           To suppress this warning use the "unused" attribute.
5878
5879           This warning is also enabled by -Wunused, which is enabled by
5880           -Wall.
5881
5882       -Wunused-function
5883           Warn whenever a static function is declared but not defined or a
5884           non-inline static function is unused.  This warning is enabled by
5885           -Wall.
5886
5887       -Wunused-label
5888           Warn whenever a label is declared but not used.  This warning is
5889           enabled by -Wall.
5890
5891           To suppress this warning use the "unused" attribute.
5892
5893       -Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)
5894           Warn when a typedef locally defined in a function is not used.
5895           This warning is enabled by -Wall.
5896
5897       -Wunused-parameter
5898           Warn whenever a function parameter is unused aside from its
5899           declaration.
5900
5901           To suppress this warning use the "unused" attribute.
5902
5903       -Wno-unused-result
5904           Do not warn if a caller of a function marked with attribute
5905           "warn_unused_result" does not use its return value. The default is
5906           -Wunused-result.
5907
5908       -Wunused-variable
5909           Warn whenever a local or static variable is unused aside from its
5910           declaration. This option implies -Wunused-const-variable=1 for C,
5911           but not for C++. This warning is enabled by -Wall.
5912
5913           To suppress this warning use the "unused" attribute.
5914
5915       -Wunused-const-variable
5916       -Wunused-const-variable=n
5917           Warn whenever a constant static variable is unused aside from its
5918           declaration.  -Wunused-const-variable=1 is enabled by
5919           -Wunused-variable for C, but not for C++. In C this declares
5920           variable storage, but in C++ this is not an error since const
5921           variables take the place of "#define"s.
5922
5923           To suppress this warning use the "unused" attribute.
5924
5925           -Wunused-const-variable=1
5926               This is the warning level that is enabled by -Wunused-variable
5927               for C.  It warns only about unused static const variables
5928               defined in the main compilation unit, but not about static
5929               const variables declared in any header included.
5930
5931           -Wunused-const-variable=2
5932               This warning level also warns for unused constant static
5933               variables in headers (excluding system headers).  This is the
5934               warning level of -Wunused-const-variable and must be explicitly
5935               requested since in C++ this isn't an error and in C it might be
5936               harder to clean up all headers included.
5937
5938       -Wunused-value
5939           Warn whenever a statement computes a result that is explicitly not
5940           used. To suppress this warning cast the unused expression to
5941           "void". This includes an expression-statement or the left-hand side
5942           of a comma expression that contains no side effects. For example,
5943           an expression such as "x[i,j]" causes a warning, while
5944           "x[(void)i,j]" does not.
5945
5946           This warning is enabled by -Wall.
5947
5948       -Wunused
5949           All the above -Wunused options combined.
5950
5951           In order to get a warning about an unused function parameter, you
5952           must either specify -Wextra -Wunused (note that -Wall implies
5953           -Wunused), or separately specify -Wunused-parameter.
5954
5955       -Wuninitialized
5956           Warn if an object with automatic or allocated storage duration is
5957           used without having been initialized.  In C++, also warn if a non-
5958           static reference or non-static "const" member appears in a class
5959           without constructors.
5960
5961           In addition, passing a pointer (or in C++, a reference) to an
5962           uninitialized object to a "const"-qualified argument of a built-in
5963           function known to read the object is also diagnosed by this
5964           warning.  (-Wmaybe-uninitialized is issued for ordinary functions.)
5965
5966           If you want to warn about code that uses the uninitialized value of
5967           the variable in its own initializer, use the -Winit-self option.
5968
5969           These warnings occur for individual uninitialized elements of
5970           structure, union or array variables as well as for variables that
5971           are uninitialized as a whole.  They do not occur for variables or
5972           elements declared "volatile".  Because these warnings depend on
5973           optimization, the exact variables or elements for which there are
5974           warnings depend on the precise optimization options and version of
5975           GCC used.
5976
5977           Note that there may be no warning about a variable that is used
5978           only to compute a value that itself is never used, because such
5979           computations may be deleted by data flow analysis before the
5980           warnings are printed.
5981
5982           In C++, this warning also warns about using uninitialized objects
5983           in member-initializer-lists.  For example, GCC warns about "b"
5984           being uninitialized in the following snippet:
5985
5986                   struct A {
5987                     int a;
5988                     int b;
5989                     A() : a(b) { }
5990                   };
5991
5992       -Wno-invalid-memory-model
5993           This option controls warnings for invocations of __atomic Builtins,
5994           __sync Builtins, and the C11 atomic generic functions with a memory
5995           consistency argument that is either invalid for the operation or
5996           outside the range of values of the "memory_order" enumeration.  For
5997           example, since the "__atomic_store" and "__atomic_store_n" built-
5998           ins are only defined for the relaxed, release, and sequentially
5999           consistent memory orders the following code is diagnosed:
6000
6001                   void store (int *i)
6002                   {
6003                     __atomic_store_n (i, 0, memory_order_consume);
6004                   }
6005
6006           -Winvalid-memory-model is enabled by default.
6007
6008       -Wmaybe-uninitialized
6009           For an object with automatic or allocated storage duration, if
6010           there exists a path from the function entry to a use of the object
6011           that is initialized, but there exist some other paths for which the
6012           object is not initialized, the compiler emits a warning if it
6013           cannot prove the uninitialized paths are not executed at run time.
6014
6015           In addition, passing a pointer (or in C++, a reference) to an
6016           uninitialized object to a "const"-qualified function argument is
6017           also diagnosed by this warning.  (-Wuninitialized is issued for
6018           built-in functions known to read the object.)  Annotating the
6019           function with attribute "access (none)" indicates that the argument
6020           isn't used to access the object and avoids the warning.
6021
6022           These warnings are only possible in optimizing compilation, because
6023           otherwise GCC does not keep track of the state of variables.
6024
6025           These warnings are made optional because GCC may not be able to
6026           determine when the code is correct in spite of appearing to have an
6027           error.  Here is one example of how this can happen:
6028
6029                   {
6030                     int x;
6031                     switch (y)
6032                       {
6033                       case 1: x = 1;
6034                         break;
6035                       case 2: x = 4;
6036                         break;
6037                       case 3: x = 5;
6038                       }
6039                     foo (x);
6040                   }
6041
6042           If the value of "y" is always 1, 2 or 3, then "x" is always
6043           initialized, but GCC doesn't know this. To suppress the warning,
6044           you need to provide a default case with assert(0) or similar code.
6045
6046           This option also warns when a non-volatile automatic variable might
6047           be changed by a call to "longjmp".  The compiler sees only the
6048           calls to "setjmp".  It cannot know where "longjmp" will be called;
6049           in fact, a signal handler could call it at any point in the code.
6050           As a result, you may get a warning even when there is in fact no
6051           problem because "longjmp" cannot in fact be called at the place
6052           that would cause a problem.
6053
6054           Some spurious warnings can be avoided if you declare all the
6055           functions you use that never return as "noreturn".
6056
6057           This warning is enabled by -Wall or -Wextra.
6058
6059       -Wunknown-pragmas
6060           Warn when a "#pragma" directive is encountered that is not
6061           understood by GCC.  If this command-line option is used, warnings
6062           are even issued for unknown pragmas in system header files.  This
6063           is not the case if the warnings are only enabled by the -Wall
6064           command-line option.
6065
6066       -Wno-pragmas
6067           Do not warn about misuses of pragmas, such as incorrect parameters,
6068           invalid syntax, or conflicts between pragmas.  See also
6069           -Wunknown-pragmas.
6070
6071       -Wno-prio-ctor-dtor
6072           Do not warn if a priority from 0 to 100 is used for constructor or
6073           destructor.  The use of constructor and destructor attributes allow
6074           you to assign a priority to the constructor/destructor to control
6075           its order of execution before "main" is called or after it returns.
6076           The priority values must be greater than 100 as the compiler
6077           reserves priority values between 0--100 for the implementation.
6078
6079       -Wstrict-aliasing
6080           This option is only active when -fstrict-aliasing is active.  It
6081           warns about code that might break the strict aliasing rules that
6082           the compiler is using for optimization.  The warning does not catch
6083           all cases, but does attempt to catch the more common pitfalls.  It
6084           is included in -Wall.  It is equivalent to -Wstrict-aliasing=3
6085
6086       -Wstrict-aliasing=n
6087           This option is only active when -fstrict-aliasing is active.  It
6088           warns about code that might break the strict aliasing rules that
6089           the compiler is using for optimization.  Higher levels correspond
6090           to higher accuracy (fewer false positives).  Higher levels also
6091           correspond to more effort, similar to the way -O works.
6092           -Wstrict-aliasing is equivalent to -Wstrict-aliasing=3.
6093
6094           Level 1: Most aggressive, quick, least accurate.  Possibly useful
6095           when higher levels do not warn but -fstrict-aliasing still breaks
6096           the code, as it has very few false negatives.  However, it has many
6097           false positives.  Warns for all pointer conversions between
6098           possibly incompatible types, even if never dereferenced.  Runs in
6099           the front end only.
6100
6101           Level 2: Aggressive, quick, not too precise.  May still have many
6102           false positives (not as many as level 1 though), and few false
6103           negatives (but possibly more than level 1).  Unlike level 1, it
6104           only warns when an address is taken.  Warns about incomplete types.
6105           Runs in the front end only.
6106
6107           Level 3 (default for -Wstrict-aliasing): Should have very few false
6108           positives and few false negatives.  Slightly slower than levels 1
6109           or 2 when optimization is enabled.  Takes care of the common
6110           pun+dereference pattern in the front end: "*(int*)&some_float".  If
6111           optimization is enabled, it also runs in the back end, where it
6112           deals with multiple statement cases using flow-sensitive points-to
6113           information.  Only warns when the converted pointer is
6114           dereferenced.  Does not warn about incomplete types.
6115
6116       -Wstrict-overflow
6117       -Wstrict-overflow=n
6118           This option is only active when signed overflow is undefined.  It
6119           warns about cases where the compiler optimizes based on the
6120           assumption that signed overflow does not occur.  Note that it does
6121           not warn about all cases where the code might overflow: it only
6122           warns about cases where the compiler implements some optimization.
6123           Thus this warning depends on the optimization level.
6124
6125           An optimization that assumes that signed overflow does not occur is
6126           perfectly safe if the values of the variables involved are such
6127           that overflow never does, in fact, occur.  Therefore this warning
6128           can easily give a false positive: a warning about code that is not
6129           actually a problem.  To help focus on important issues, several
6130           warning levels are defined.  No warnings are issued for the use of
6131           undefined signed overflow when estimating how many iterations a
6132           loop requires, in particular when determining whether a loop will
6133           be executed at all.
6134
6135           -Wstrict-overflow=1
6136               Warn about cases that are both questionable and easy to avoid.
6137               For example the compiler simplifies "x + 1 > x" to 1.  This
6138               level of -Wstrict-overflow is enabled by -Wall; higher levels
6139               are not, and must be explicitly requested.
6140
6141           -Wstrict-overflow=2
6142               Also warn about other cases where a comparison is simplified to
6143               a constant.  For example: "abs (x) >= 0".  This can only be
6144               simplified when signed integer overflow is undefined, because
6145               "abs (INT_MIN)" overflows to "INT_MIN", which is less than
6146               zero.  -Wstrict-overflow (with no level) is the same as
6147               -Wstrict-overflow=2.
6148
6149           -Wstrict-overflow=3
6150               Also warn about other cases where a comparison is simplified.
6151               For example: "x + 1 > 1" is simplified to "x > 0".
6152
6153           -Wstrict-overflow=4
6154               Also warn about other simplifications not covered by the above
6155               cases.  For example: "(x * 10) / 5" is simplified to "x * 2".
6156
6157           -Wstrict-overflow=5
6158               Also warn about cases where the compiler reduces the magnitude
6159               of a constant involved in a comparison.  For example: "x + 2 >
6160               y" is simplified to "x + 1 >= y".  This is reported only at the
6161               highest warning level because this simplification applies to
6162               many comparisons, so this warning level gives a very large
6163               number of false positives.
6164
6165       -Wstring-compare
6166           Warn for calls to "strcmp" and "strncmp" whose result is determined
6167           to be either zero or non-zero in tests for such equality owing to
6168           the length of one argument being greater than the size of the array
6169           the other argument is stored in (or the bound in the case of
6170           "strncmp").  Such calls could be mistakes.  For example, the call
6171           to "strcmp" below is diagnosed because its result is necessarily
6172           non-zero irrespective of the contents of the array "a".
6173
6174                   extern char a[4];
6175                   void f (char *d)
6176                   {
6177                     strcpy (d, "string");
6178                     ...
6179                     if (0 == strcmp (a, d))   // cannot be true
6180                       puts ("a and d are the same");
6181                   }
6182
6183           -Wstring-compare is enabled by -Wextra.
6184
6185       -Wno-stringop-overflow
6186       -Wstringop-overflow
6187       -Wstringop-overflow=type
6188           Warn for calls to string manipulation functions such as "memcpy"
6189           and "strcpy" that are determined to overflow the destination
6190           buffer.  The optional argument is one greater than the type of
6191           Object Size Checking to perform to determine the size of the
6192           destination.  The argument is meaningful only for functions that
6193           operate on character arrays but not for raw memory functions like
6194           "memcpy" which always make use of Object Size type-0.  The option
6195           also warns for calls that specify a size in excess of the largest
6196           possible object or at most "SIZE_MAX / 2" bytes.  The option
6197           produces the best results with optimization enabled but can detect
6198           a small subset of simple buffer overflows even without optimization
6199           in calls to the GCC built-in functions like "__builtin_memcpy" that
6200           correspond to the standard functions.  In any case, the option
6201           warns about just a subset of buffer overflows detected by the
6202           corresponding overflow checking built-ins.  For example, the option
6203           issues a warning for the "strcpy" call below because it copies at
6204           least 5 characters (the string "blue" including the terminating
6205           NUL) into the buffer of size 4.
6206
6207                   enum Color { blue, purple, yellow };
6208                   const char* f (enum Color clr)
6209                   {
6210                     static char buf [4];
6211                     const char *str;
6212                     switch (clr)
6213                       {
6214                         case blue: str = "blue"; break;
6215                         case purple: str = "purple"; break;
6216                         case yellow: str = "yellow"; break;
6217                       }
6218
6219                     return strcpy (buf, str);   // warning here
6220                   }
6221
6222           Option -Wstringop-overflow=2 is enabled by default.
6223
6224           -Wstringop-overflow
6225           -Wstringop-overflow=1
6226               The -Wstringop-overflow=1 option uses type-zero Object Size
6227               Checking to determine the sizes of destination objects.  At
6228               this setting the option does not warn for writes past the end
6229               of subobjects of larger objects accessed by pointers unless the
6230               size of the largest surrounding object is known.  When the
6231               destination may be one of several objects it is assumed to be
6232               the largest one of them.  On Linux systems, when optimization
6233               is enabled at this setting the option warns for the same code
6234               as when the "_FORTIFY_SOURCE" macro is defined to a non-zero
6235               value.
6236
6237           -Wstringop-overflow=2
6238               The -Wstringop-overflow=2 option uses type-one Object Size
6239               Checking to determine the sizes of destination objects.  At
6240               this setting the option warns about overflows when writing to
6241               members of the largest complete objects whose exact size is
6242               known.  However, it does not warn for excessive writes to the
6243               same members of unknown objects referenced by pointers since
6244               they may point to arrays containing unknown numbers of
6245               elements.  This is the default setting of the option.
6246
6247           -Wstringop-overflow=3
6248               The -Wstringop-overflow=3 option uses type-two Object Size
6249               Checking to determine the sizes of destination objects.  At
6250               this setting the option warns about overflowing the smallest
6251               object or data member.  This is the most restrictive setting of
6252               the option that may result in warnings for safe code.
6253
6254           -Wstringop-overflow=4
6255               The -Wstringop-overflow=4 option uses type-three Object Size
6256               Checking to determine the sizes of destination objects.  At
6257               this setting the option warns about overflowing any data
6258               members, and when the destination is one of several objects it
6259               uses the size of the largest of them to decide whether to issue
6260               a warning.  Similarly to -Wstringop-overflow=3 this setting of
6261               the option may result in warnings for benign code.
6262
6263       -Wno-stringop-overread
6264           Warn for calls to string manipulation functions such as "memchr",
6265           or "strcpy" that are determined to read past the end of the source
6266           sequence.
6267
6268           Option -Wstringop-overread is enabled by default.
6269
6270       -Wno-stringop-truncation
6271           Do not warn for calls to bounded string manipulation functions such
6272           as "strncat", "strncpy", and "stpncpy" that may either truncate the
6273           copied string or leave the destination unchanged.
6274
6275           In the following example, the call to "strncat" specifies a bound
6276           that is less than the length of the source string.  As a result,
6277           the copy of the source will be truncated and so the call is
6278           diagnosed.  To avoid the warning use "bufsize - strlen (buf) - 1)"
6279           as the bound.
6280
6281                   void append (char *buf, size_t bufsize)
6282                   {
6283                     strncat (buf, ".txt", 3);
6284                   }
6285
6286           As another example, the following call to "strncpy" results in
6287           copying to "d" just the characters preceding the terminating NUL,
6288           without appending the NUL to the end.  Assuming the result of
6289           "strncpy" is necessarily a NUL-terminated string is a common
6290           mistake, and so the call is diagnosed.  To avoid the warning when
6291           the result is not expected to be NUL-terminated, call "memcpy"
6292           instead.
6293
6294                   void copy (char *d, const char *s)
6295                   {
6296                     strncpy (d, s, strlen (s));
6297                   }
6298
6299           In the following example, the call to "strncpy" specifies the size
6300           of the destination buffer as the bound.  If the length of the
6301           source string is equal to or greater than this size the result of
6302           the copy will not be NUL-terminated.  Therefore, the call is also
6303           diagnosed.  To avoid the warning, specify "sizeof buf - 1" as the
6304           bound and set the last element of the buffer to "NUL".
6305
6306                   void copy (const char *s)
6307                   {
6308                     char buf[80];
6309                     strncpy (buf, s, sizeof buf);
6310                     ...
6311                   }
6312
6313           In situations where a character array is intended to store a
6314           sequence of bytes with no terminating "NUL" such an array may be
6315           annotated with attribute "nonstring" to avoid this warning.  Such
6316           arrays, however, are not suitable arguments to functions that
6317           expect "NUL"-terminated strings.  To help detect accidental misuses
6318           of such arrays GCC issues warnings unless it can prove that the use
6319           is safe.
6320
6321       -Wstrict-flex-arrays
6322           Warn about inproper usages of flexible array members according to
6323           the level of the "strict_flex_array (level)" attribute attached to
6324           the trailing array field of a structure if it's available,
6325           otherwise according to the level of the option
6326           -fstrict-flex-arrays=level.
6327
6328           This option is effective only when level is bigger than 0.
6329           Otherwise, it will be ignored with a warning.
6330
6331           when level=1, warnings will be issued for a trailing array
6332           reference of a structure that have 2 or more elements if the
6333           trailing array is referenced as a flexible array member.
6334
6335           when level=2, in addition to level=1, additional warnings will be
6336           issued for a trailing one-element array reference of a structure if
6337           the array is referenced as a flexible array member.
6338
6339           when level=3, in addition to level=2, additional warnings will be
6340           issued for a trailing zero-length array reference of a structure if
6341           the array is referenced as a flexible array member.
6342
6343       -Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]
6344           Warn for cases where adding an attribute may be beneficial. The
6345           attributes currently supported are listed below.
6346
6347           -Wsuggest-attribute=pure
6348           -Wsuggest-attribute=const
6349           -Wsuggest-attribute=noreturn
6350           -Wmissing-noreturn
6351           -Wsuggest-attribute=malloc
6352               Warn about functions that might be candidates for attributes
6353               "pure", "const" or "noreturn" or "malloc". The compiler only
6354               warns for functions visible in other compilation units or (in
6355               the case of "pure" and "const") if it cannot prove that the
6356               function returns normally. A function returns normally if it
6357               doesn't contain an infinite loop or return abnormally by
6358               throwing, calling "abort" or trapping.  This analysis requires
6359               option -fipa-pure-const, which is enabled by default at -O and
6360               higher.  Higher optimization levels improve the accuracy of the
6361               analysis.
6362
6363           -Wsuggest-attribute=format
6364           -Wmissing-format-attribute
6365               Warn about function pointers that might be candidates for
6366               "format" attributes.  Note these are only possible candidates,
6367               not absolute ones.  GCC guesses that function pointers with
6368               "format" attributes that are used in assignment,
6369               initialization, parameter passing or return statements should
6370               have a corresponding "format" attribute in the resulting type.
6371               I.e. the left-hand side of the assignment or initialization,
6372               the type of the parameter variable, or the return type of the
6373               containing function respectively should also have a "format"
6374               attribute to avoid the warning.
6375
6376               GCC also warns about function definitions that might be
6377               candidates for "format" attributes.  Again, these are only
6378               possible candidates.  GCC guesses that "format" attributes
6379               might be appropriate for any function that calls a function
6380               like "vprintf" or "vscanf", but this might not always be the
6381               case, and some functions for which "format" attributes are
6382               appropriate may not be detected.
6383
6384           -Wsuggest-attribute=cold
6385               Warn about functions that might be candidates for "cold"
6386               attribute.  This is based on static detection and generally
6387               only warns about functions which always leads to a call to
6388               another "cold" function such as wrappers of C++ "throw" or
6389               fatal error reporting functions leading to "abort".
6390
6391       -Walloc-zero
6392           Warn about calls to allocation functions decorated with attribute
6393           "alloc_size" that specify zero bytes, including those to the built-
6394           in forms of the functions "aligned_alloc", "alloca", "calloc",
6395           "malloc", and "realloc".  Because the behavior of these functions
6396           when called with a zero size differs among implementations (and in
6397           the case of "realloc" has been deprecated) relying on it may result
6398           in subtle portability bugs and should be avoided.
6399
6400       -Walloc-size-larger-than=byte-size
6401           Warn about calls to functions decorated with attribute "alloc_size"
6402           that attempt to allocate objects larger than the specified number
6403           of bytes, or where the result of the size computation in an integer
6404           type with infinite precision would exceed the value of PTRDIFF_MAX
6405           on the target.  -Walloc-size-larger-than=PTRDIFF_MAX is enabled by
6406           default.  Warnings controlled by the option can be disabled either
6407           by specifying byte-size of SIZE_MAX or more or by
6408           -Wno-alloc-size-larger-than.
6409
6410       -Wno-alloc-size-larger-than
6411           Disable -Walloc-size-larger-than= warnings.  The option is
6412           equivalent to -Walloc-size-larger-than=SIZE_MAX or larger.
6413
6414       -Walloca
6415           This option warns on all uses of "alloca" in the source.
6416
6417       -Walloca-larger-than=byte-size
6418           This option warns on calls to "alloca" with an integer argument
6419           whose value is either zero, or that is not bounded by a controlling
6420           predicate that limits its value to at most byte-size.  It also
6421           warns for calls to "alloca" where the bound value is unknown.
6422           Arguments of non-integer types are considered unbounded even if
6423           they appear to be constrained to the expected range.
6424
6425           For example, a bounded case of "alloca" could be:
6426
6427                   void func (size_t n)
6428                   {
6429                     void *p;
6430                     if (n <= 1000)
6431                       p = alloca (n);
6432                     else
6433                       p = malloc (n);
6434                     f (p);
6435                   }
6436
6437           In the above example, passing "-Walloca-larger-than=1000" would not
6438           issue a warning because the call to "alloca" is known to be at most
6439           1000 bytes.  However, if "-Walloca-larger-than=500" were passed,
6440           the compiler would emit a warning.
6441
6442           Unbounded uses, on the other hand, are uses of "alloca" with no
6443           controlling predicate constraining its integer argument.  For
6444           example:
6445
6446                   void func ()
6447                   {
6448                     void *p = alloca (n);
6449                     f (p);
6450                   }
6451
6452           If "-Walloca-larger-than=500" were passed, the above would trigger
6453           a warning, but this time because of the lack of bounds checking.
6454
6455           Note, that even seemingly correct code involving signed integers
6456           could cause a warning:
6457
6458                   void func (signed int n)
6459                   {
6460                     if (n < 500)
6461                       {
6462                         p = alloca (n);
6463                         f (p);
6464                       }
6465                   }
6466
6467           In the above example, n could be negative, causing a larger than
6468           expected argument to be implicitly cast into the "alloca" call.
6469
6470           This option also warns when "alloca" is used in a loop.
6471
6472           -Walloca-larger-than=PTRDIFF_MAX is enabled by default but is
6473           usually only effective  when -ftree-vrp is active (default for -O2
6474           and above).
6475
6476           See also -Wvla-larger-than=byte-size.
6477
6478       -Wno-alloca-larger-than
6479           Disable -Walloca-larger-than= warnings.  The option is equivalent
6480           to -Walloca-larger-than=SIZE_MAX or larger.
6481
6482       -Warith-conversion
6483           Do warn about implicit conversions from arithmetic operations even
6484           when conversion of the operands to the same type cannot change
6485           their values.  This affects warnings from -Wconversion,
6486           -Wfloat-conversion, and -Wsign-conversion.
6487
6488                   void f (char c, int i)
6489                   {
6490                     c = c + i; // warns with B<-Wconversion>
6491                     c = c + 1; // only warns with B<-Warith-conversion>
6492                   }
6493
6494       -Warray-bounds
6495       -Warray-bounds=n
6496           Warn about out of bounds subscripts or offsets into arrays.  This
6497           warning is enabled by -Wall.  It is more effective when -ftree-vrp
6498           is active (the default for -O2 and above) but a subset of instances
6499           are issued even without optimization.
6500
6501           By default, the trailing array of a structure will be treated as a
6502           flexible array member by -Warray-bounds or -Warray-bounds=n if it
6503           is declared as either a flexible array member per C99 standard
6504           onwards ([]), a GCC zero-length array extension ([0]), or an one-
6505           element array ([1]). As a result, out of bounds subscripts or
6506           offsets into zero-length arrays or one-element arrays are not
6507           warned by default.
6508
6509           You can add the option -fstrict-flex-arrays or
6510           -fstrict-flex-arrays=level to control how this option treat
6511           trailing array of a structure as a flexible array member:
6512
6513           when level<=1, no change to the default behavior.
6514
6515           when level=2, additional warnings will be issued for out of bounds
6516           subscripts or offsets into one-element arrays;
6517
6518           when level=3, in addition to level=2, additional warnings will be
6519           issued for out of bounds subscripts or offsets into zero-length
6520           arrays.
6521
6522           -Warray-bounds=1
6523               This is the default warning level of -Warray-bounds and is
6524               enabled by -Wall; higher levels are not, and must be explicitly
6525               requested.
6526
6527           -Warray-bounds=2
6528               This warning level also warns about the intermediate results of
6529               pointer arithmetic that may yield out of bounds values. This
6530               warning level may give a larger number of false positives and
6531               is deactivated by default.
6532
6533       -Warray-compare
6534           Warn about equality and relational comparisons between two operands
6535           of array type.  This comparison was deprecated in C++20.  For
6536           example:
6537
6538                   int arr1[5];
6539                   int arr2[5];
6540                   bool same = arr1 == arr2;
6541
6542           -Warray-compare is enabled by -Wall.
6543
6544       -Warray-parameter
6545       -Warray-parameter=n
6546           Warn about redeclarations of functions involving arguments of array
6547           or pointer types of inconsistent kinds or forms, and enable the
6548           detection of out-of-bounds accesses to such parameters by warnings
6549           such as -Warray-bounds.
6550
6551           If the first function declaration uses the array form the bound
6552           specified in the array is assumed to be the minimum number of
6553           elements expected to be provided in calls to the function and the
6554           maximum number of elements accessed by it.  Failing to provide
6555           arguments of sufficient size or accessing more than the maximum
6556           number of elements may be diagnosed by warnings such as
6557           -Warray-bounds.  At level 1 the warning diagnoses inconsistencies
6558           involving array parameters declared using the "T[static N]" form.
6559
6560           For example, the warning triggers for the following redeclarations
6561           because the first one allows an array of any size to be passed to
6562           "f" while the second one with the keyword "static" specifies that
6563           the array argument must have at least four elements.
6564
6565                   void f (int[static 4]);
6566                   void f (int[]);           // warning (inconsistent array form)
6567
6568                   void g (void)
6569                   {
6570                     int *p = (int *)malloc (4);
6571                     f (p);                  // warning (array too small)
6572                     ...
6573                   }
6574
6575           At level 2 the warning also triggers for redeclarations involving
6576           any other inconsistency in array or pointer argument forms denoting
6577           array sizes.  Pointers and arrays of unspecified bound are
6578           considered equivalent and do not trigger a warning.
6579
6580                   void g (int*);
6581                   void g (int[]);     // no warning
6582                   void g (int[8]);    // warning (inconsistent array bound)
6583
6584           -Warray-parameter=2 is included in -Wall.  The -Wvla-parameter
6585           option triggers warnings for similar inconsistencies involving
6586           Variable Length Array arguments.
6587
6588       -Wattribute-alias=n
6589       -Wno-attribute-alias
6590           Warn about declarations using the "alias" and similar attributes
6591           whose target is incompatible with the type of the alias.
6592
6593           -Wattribute-alias=1
6594               The default warning level of the -Wattribute-alias option
6595               diagnoses incompatibilities between the type of the alias
6596               declaration and that of its target.  Such incompatibilities are
6597               typically indicative of bugs.
6598
6599           -Wattribute-alias=2
6600               At this level -Wattribute-alias also diagnoses cases where the
6601               attributes of the alias declaration are more restrictive than
6602               the attributes applied to its target.  These mismatches can
6603               potentially result in incorrect code generation.  In other
6604               cases they may be benign and could be resolved simply by adding
6605               the missing attribute to the target.  For comparison, see the
6606               -Wmissing-attributes option, which controls diagnostics when
6607               the alias declaration is less restrictive than the target,
6608               rather than more restrictive.
6609
6610               Attributes considered include "alloc_align", "alloc_size",
6611               "cold", "const", "hot", "leaf", "malloc", "nonnull",
6612               "noreturn", "nothrow", "pure", "returns_nonnull", and
6613               "returns_twice".
6614
6615           -Wattribute-alias is equivalent to -Wattribute-alias=1.  This is
6616           the default.  You can disable these warnings with either
6617           -Wno-attribute-alias or -Wattribute-alias=0.
6618
6619       -Wbidi-chars=[none|unpaired|any|ucn]
6620           Warn about possibly misleading UTF-8 bidirectional control
6621           characters in comments, string literals, character constants, and
6622           identifiers.  Such characters can change left-to-right writing
6623           direction into right-to-left (and vice versa), which can cause
6624           confusion between the logical order and visual order.  This may be
6625           dangerous; for instance, it may seem that a piece of code is not
6626           commented out, whereas it in fact is.
6627
6628           There are three levels of warning supported by GCC.  The default is
6629           -Wbidi-chars=unpaired, which warns about improperly terminated bidi
6630           contexts.  -Wbidi-chars=none turns the warning off.
6631           -Wbidi-chars=any warns about any use of bidirectional control
6632           characters.
6633
6634           By default, this warning does not warn about UCNs.  It is, however,
6635           possible to turn on such checking by using
6636           -Wbidi-chars=unpaired,ucn or -Wbidi-chars=any,ucn.  Using
6637           -Wbidi-chars=ucn is valid, and is equivalent to
6638           -Wbidi-chars=unpaired,ucn, if no previous -Wbidi-chars=any was
6639           specified.
6640
6641       -Wbool-compare
6642           Warn about boolean expression compared with an integer value
6643           different from "true"/"false".  For instance, the following
6644           comparison is always false:
6645
6646                   int n = 5;
6647                   ...
6648                   if ((n > 1) == 2) { ... }
6649
6650           This warning is enabled by -Wall.
6651
6652       -Wbool-operation
6653           Warn about suspicious operations on expressions of a boolean type.
6654           For instance, bitwise negation of a boolean is very likely a bug in
6655           the program.  For C, this warning also warns about incrementing or
6656           decrementing a boolean, which rarely makes sense.  (In C++,
6657           decrementing a boolean is always invalid.  Incrementing a boolean
6658           is invalid in C++17, and deprecated otherwise.)
6659
6660           This warning is enabled by -Wall.
6661
6662       -Wduplicated-branches
6663           Warn when an if-else has identical branches.  This warning detects
6664           cases like
6665
6666                   if (p != NULL)
6667                     return 0;
6668                   else
6669                     return 0;
6670
6671           It doesn't warn when both branches contain just a null statement.
6672           This warning also warn for conditional operators:
6673
6674                     int i = x ? *p : *p;
6675
6676       -Wduplicated-cond
6677           Warn about duplicated conditions in an if-else-if chain.  For
6678           instance, warn for the following code:
6679
6680                   if (p->q != NULL) { ... }
6681                   else if (p->q != NULL) { ... }
6682
6683       -Wframe-address
6684           Warn when the __builtin_frame_address or __builtin_return_address
6685           is called with an argument greater than 0.  Such calls may return
6686           indeterminate values or crash the program.  The warning is included
6687           in -Wall.
6688
6689       -Wno-discarded-qualifiers (C and Objective-C only)
6690           Do not warn if type qualifiers on pointers are being discarded.
6691           Typically, the compiler warns if a "const char *" variable is
6692           passed to a function that takes a "char *" parameter.  This option
6693           can be used to suppress such a warning.
6694
6695       -Wno-discarded-array-qualifiers (C and Objective-C only)
6696           Do not warn if type qualifiers on arrays which are pointer targets
6697           are being discarded.  Typically, the compiler warns if a "const int
6698           (*)[]" variable is passed to a function that takes a "int (*)[]"
6699           parameter.  This option can be used to suppress such a warning.
6700
6701       -Wno-incompatible-pointer-types (C and Objective-C only)
6702           Do not warn when there is a conversion between pointers that have
6703           incompatible types.  This warning is for cases not covered by
6704           -Wno-pointer-sign, which warns for pointer argument passing or
6705           assignment with different signedness.
6706
6707       -Wno-int-conversion (C and Objective-C only)
6708           Do not warn about incompatible integer to pointer and pointer to
6709           integer conversions.  This warning is about implicit conversions;
6710           for explicit conversions the warnings -Wno-int-to-pointer-cast and
6711           -Wno-pointer-to-int-cast may be used.
6712
6713       -Wzero-length-bounds
6714           Warn about accesses to elements of zero-length array members that
6715           might overlap other members of the same object.  Declaring interior
6716           zero-length arrays is discouraged because accesses to them are
6717           undefined.
6718
6719           For example, the first two stores in function "bad" are diagnosed
6720           because the array elements overlap the subsequent members "b" and
6721           "c".  The third store is diagnosed by -Warray-bounds because it is
6722           beyond the bounds of the enclosing object.
6723
6724                   struct X { int a[0]; int b, c; };
6725                   struct X x;
6726
6727                   void bad (void)
6728                   {
6729                     x.a[0] = 0;   // -Wzero-length-bounds
6730                     x.a[1] = 1;   // -Wzero-length-bounds
6731                     x.a[2] = 2;   // -Warray-bounds
6732                   }
6733
6734           Option -Wzero-length-bounds is enabled by -Warray-bounds.
6735
6736       -Wno-div-by-zero
6737           Do not warn about compile-time integer division by zero.  Floating-
6738           point division by zero is not warned about, as it can be a
6739           legitimate way of obtaining infinities and NaNs.
6740
6741       -Wsystem-headers
6742           Print warning messages for constructs found in system header files.
6743           Warnings from system headers are normally suppressed, on the
6744           assumption that they usually do not indicate real problems and
6745           would only make the compiler output harder to read.  Using this
6746           command-line option tells GCC to emit warnings from system headers
6747           as if they occurred in user code.  However, note that using -Wall
6748           in conjunction with this option does not warn about unknown pragmas
6749           in system headers---for that, -Wunknown-pragmas must also be used.
6750
6751       -Wtautological-compare
6752           Warn if a self-comparison always evaluates to true or false.  This
6753           warning detects various mistakes such as:
6754
6755                   int i = 1;
6756                   ...
6757                   if (i > i) { ... }
6758
6759           This warning also warns about bitwise comparisons that always
6760           evaluate to true or false, for instance:
6761
6762                   if ((a & 16) == 10) { ... }
6763
6764           will always be false.
6765
6766           This warning is enabled by -Wall.
6767
6768       -Wtrampolines
6769           Warn about trampolines generated for pointers to nested functions.
6770           A trampoline is a small piece of data or code that is created at
6771           run time on the stack when the address of a nested function is
6772           taken, and is used to call the nested function indirectly.  For
6773           some targets, it is made up of data only and thus requires no
6774           special treatment.  But, for most targets, it is made up of code
6775           and thus requires the stack to be made executable in order for the
6776           program to work properly.
6777
6778       -Wfloat-equal
6779           Warn if floating-point values are used in equality comparisons.
6780
6781           The idea behind this is that sometimes it is convenient (for the
6782           programmer) to consider floating-point values as approximations to
6783           infinitely precise real numbers.  If you are doing this, then you
6784           need to compute (by analyzing the code, or in some other way) the
6785           maximum or likely maximum error that the computation introduces,
6786           and allow for it when performing comparisons (and when producing
6787           output, but that's a different problem).  In particular, instead of
6788           testing for equality, you should check to see whether the two
6789           values have ranges that overlap; and this is done with the
6790           relational operators, so equality comparisons are probably
6791           mistaken.
6792
6793       -Wtraditional (C and Objective-C only)
6794           Warn about certain constructs that behave differently in
6795           traditional and ISO C.  Also warn about ISO C constructs that have
6796           no traditional C equivalent, and/or problematic constructs that
6797           should be avoided.
6798
6799           *   Macro parameters that appear within string literals in the
6800               macro body.  In traditional C macro replacement takes place
6801               within string literals, but in ISO C it does not.
6802
6803           *   In traditional C, some preprocessor directives did not exist.
6804               Traditional preprocessors only considered a line to be a
6805               directive if the # appeared in column 1 on the line.  Therefore
6806               -Wtraditional warns about directives that traditional C
6807               understands but ignores because the # does not appear as the
6808               first character on the line.  It also suggests you hide
6809               directives like "#pragma" not understood by traditional C by
6810               indenting them.  Some traditional implementations do not
6811               recognize "#elif", so this option suggests avoiding it
6812               altogether.
6813
6814           *   A function-like macro that appears without arguments.
6815
6816           *   The unary plus operator.
6817
6818           *   The U integer constant suffix, or the F or L floating-point
6819               constant suffixes.  (Traditional C does support the L suffix on
6820               integer constants.)  Note, these suffixes appear in macros
6821               defined in the system headers of most modern systems, e.g. the
6822               _MIN/_MAX macros in "<limits.h>".  Use of these macros in user
6823               code might normally lead to spurious warnings, however GCC's
6824               integrated preprocessor has enough context to avoid warning in
6825               these cases.
6826
6827           *   A function declared external in one block and then used after
6828               the end of the block.
6829
6830           *   A "switch" statement has an operand of type "long".
6831
6832           *   A non-"static" function declaration follows a "static" one.
6833               This construct is not accepted by some traditional C compilers.
6834
6835           *   The ISO type of an integer constant has a different width or
6836               signedness from its traditional type.  This warning is only
6837               issued if the base of the constant is ten.  I.e. hexadecimal or
6838               octal values, which typically represent bit patterns, are not
6839               warned about.
6840
6841           *   Usage of ISO string concatenation is detected.
6842
6843           *   Initialization of automatic aggregates.
6844
6845           *   Identifier conflicts with labels.  Traditional C lacks a
6846               separate namespace for labels.
6847
6848           *   Initialization of unions.  If the initializer is zero, the
6849               warning is omitted.  This is done under the assumption that the
6850               zero initializer in user code appears conditioned on e.g.
6851               "__STDC__" to avoid missing initializer warnings and relies on
6852               default initialization to zero in the traditional C case.
6853
6854           *   Conversions by prototypes between fixed/floating-point values
6855               and vice versa.  The absence of these prototypes when compiling
6856               with traditional C causes serious problems.  This is a subset
6857               of the possible conversion warnings; for the full set use
6858               -Wtraditional-conversion.
6859
6860           *   Use of ISO C style function definitions.  This warning
6861               intentionally is not issued for prototype declarations or
6862               variadic functions because these ISO C features appear in your
6863               code when using libiberty's traditional C compatibility macros,
6864               "PARAMS" and "VPARAMS".  This warning is also bypassed for
6865               nested functions because that feature is already a GCC
6866               extension and thus not relevant to traditional C compatibility.
6867
6868       -Wtraditional-conversion (C and Objective-C only)
6869           Warn if a prototype causes a type conversion that is different from
6870           what would happen to the same argument in the absence of a
6871           prototype.  This includes conversions of fixed point to floating
6872           and vice versa, and conversions changing the width or signedness of
6873           a fixed-point argument except when the same as the default
6874           promotion.
6875
6876       -Wdeclaration-after-statement (C and Objective-C only)
6877           Warn when a declaration is found after a statement in a block.
6878           This construct, known from C++, was introduced with ISO C99 and is
6879           by default allowed in GCC.  It is not supported by ISO C90.
6880
6881       -Wshadow
6882           Warn whenever a local variable or type declaration shadows another
6883           variable, parameter, type, class member (in C++), or instance
6884           variable (in Objective-C) or whenever a built-in function is
6885           shadowed.  Note that in C++, the compiler warns if a local variable
6886           shadows an explicit typedef, but not if it shadows a
6887           struct/class/enum.  If this warning is enabled, it includes also
6888           all instances of local shadowing.  This means that
6889           -Wno-shadow=local and -Wno-shadow=compatible-local are ignored when
6890           -Wshadow is used.  Same as -Wshadow=global.
6891
6892       -Wno-shadow-ivar (Objective-C only)
6893           Do not warn whenever a local variable shadows an instance variable
6894           in an Objective-C method.
6895
6896       -Wshadow=global
6897           Warn for any shadowing.  Same as -Wshadow.
6898
6899       -Wshadow=local
6900           Warn when a local variable shadows another local variable or
6901           parameter.
6902
6903       -Wshadow=compatible-local
6904           Warn when a local variable shadows another local variable or
6905           parameter whose type is compatible with that of the shadowing
6906           variable.  In C++, type compatibility here means the type of the
6907           shadowing variable can be converted to that of the shadowed
6908           variable.  The creation of this flag (in addition to
6909           -Wshadow=local) is based on the idea that when a local variable
6910           shadows another one of incompatible type, it is most likely
6911           intentional, not a bug or typo, as shown in the following example:
6912
6913                   for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
6914                   {
6915                     for (int i = 0; i < N; ++i)
6916                     {
6917                       ...
6918                     }
6919                     ...
6920                   }
6921
6922           Since the two variable "i" in the example above have incompatible
6923           types, enabling only -Wshadow=compatible-local does not emit a
6924           warning.  Because their types are incompatible, if a programmer
6925           accidentally uses one in place of the other, type checking is
6926           expected to catch that and emit an error or warning.  Use of this
6927           flag instead of -Wshadow=local can possibly reduce the number of
6928           warnings triggered by intentional shadowing.  Note that this also
6929           means that shadowing "const char *i" by "char *i" does not emit a
6930           warning.
6931
6932           This warning is also enabled by -Wshadow=local.
6933
6934       -Wlarger-than=byte-size
6935           Warn whenever an object is defined whose size exceeds byte-size.
6936           -Wlarger-than=PTRDIFF_MAX is enabled by default.  Warnings
6937           controlled by the option can be disabled either by specifying byte-
6938           size of SIZE_MAX or more or by -Wno-larger-than.
6939
6940           Also warn for calls to bounded functions such as "memchr" or
6941           "strnlen" that specify a bound greater than the largest possible
6942           object, which is PTRDIFF_MAX bytes by default.  These warnings can
6943           only be disabled by -Wno-larger-than.
6944
6945       -Wno-larger-than
6946           Disable -Wlarger-than= warnings.  The option is equivalent to
6947           -Wlarger-than=SIZE_MAX or larger.
6948
6949       -Wframe-larger-than=byte-size
6950           Warn if the size of a function frame exceeds byte-size.  The
6951           computation done to determine the stack frame size is approximate
6952           and not conservative.  The actual requirements may be somewhat
6953           greater than byte-size even if you do not get a warning.  In
6954           addition, any space allocated via "alloca", variable-length arrays,
6955           or related constructs is not included by the compiler when
6956           determining whether or not to issue a warning.
6957           -Wframe-larger-than=PTRDIFF_MAX is enabled by default.  Warnings
6958           controlled by the option can be disabled either by specifying byte-
6959           size of SIZE_MAX or more or by -Wno-frame-larger-than.
6960
6961       -Wno-frame-larger-than
6962           Disable -Wframe-larger-than= warnings.  The option is equivalent to
6963           -Wframe-larger-than=SIZE_MAX or larger.
6964
6965       -Wfree-nonheap-object
6966           Warn when attempting to deallocate an object that was either not
6967           allocated on the heap, or by using a pointer that was not returned
6968           from a prior call to the corresponding allocation function.  For
6969           example, because the call to "stpcpy" returns a pointer to the
6970           terminating nul character and not to the beginning of the object,
6971           the call to "free" below is diagnosed.
6972
6973                   void f (char *p)
6974                   {
6975                     p = stpcpy (p, "abc");
6976                     // ...
6977                     free (p);   // warning
6978                   }
6979
6980           -Wfree-nonheap-object is included in -Wall.
6981
6982       -Wstack-usage=byte-size
6983           Warn if the stack usage of a function might exceed byte-size.  The
6984           computation done to determine the stack usage is conservative.  Any
6985           space allocated via "alloca", variable-length arrays, or related
6986           constructs is included by the compiler when determining whether or
6987           not to issue a warning.
6988
6989           The message is in keeping with the output of -fstack-usage.
6990
6991           *   If the stack usage is fully static but exceeds the specified
6992               amount, it's:
6993
6994                         warning: stack usage is 1120 bytes
6995
6996           *   If the stack usage is (partly) dynamic but bounded, it's:
6997
6998                         warning: stack usage might be 1648 bytes
6999
7000           *   If the stack usage is (partly) dynamic and not bounded, it's:
7001
7002                         warning: stack usage might be unbounded
7003
7004           -Wstack-usage=PTRDIFF_MAX is enabled by default.  Warnings
7005           controlled by the option can be disabled either by specifying byte-
7006           size of SIZE_MAX or more or by -Wno-stack-usage.
7007
7008       -Wno-stack-usage
7009           Disable -Wstack-usage= warnings.  The option is equivalent to
7010           -Wstack-usage=SIZE_MAX or larger.
7011
7012       -Wunsafe-loop-optimizations
7013           Warn if the loop cannot be optimized because the compiler cannot
7014           assume anything on the bounds of the loop indices.  With
7015           -funsafe-loop-optimizations warn if the compiler makes such
7016           assumptions.
7017
7018       -Wno-pedantic-ms-format (MinGW targets only)
7019           When used in combination with -Wformat and -pedantic without GNU
7020           extensions, this option disables the warnings about non-ISO
7021           "printf" / "scanf" format width specifiers "I32", "I64", and "I"
7022           used on Windows targets, which depend on the MS runtime.
7023
7024       -Wpointer-arith
7025           Warn about anything that depends on the "size of" a function type
7026           or of "void".  GNU C assigns these types a size of 1, for
7027           convenience in calculations with "void *" pointers and pointers to
7028           functions.  In C++, warn also when an arithmetic operation involves
7029           "NULL".  This warning is also enabled by -Wpedantic.
7030
7031       -Wno-pointer-compare
7032           Do not warn if a pointer is compared with a zero character
7033           constant.  This usually means that the pointer was meant to be
7034           dereferenced.  For example:
7035
7036                   const char *p = foo ();
7037                   if (p == '\0')
7038                     return 42;
7039
7040           Note that the code above is invalid in C++11.
7041
7042           This warning is enabled by default.
7043
7044       -Wtsan
7045           Warn about unsupported features in ThreadSanitizer.
7046
7047           ThreadSanitizer does not support "std::atomic_thread_fence" and can
7048           report false positives.
7049
7050           This warning is enabled by default.
7051
7052       -Wtype-limits
7053           Warn if a comparison is always true or always false due to the
7054           limited range of the data type, but do not warn for constant
7055           expressions.  For example, warn if an unsigned variable is compared
7056           against zero with "<" or ">=".  This warning is also enabled by
7057           -Wextra.
7058
7059       -Wabsolute-value (C and Objective-C only)
7060           Warn for calls to standard functions that compute the absolute
7061           value of an argument when a more appropriate standard function is
7062           available.  For example, calling abs(3.14) triggers the warning
7063           because the appropriate function to call to compute the absolute
7064           value of a double argument is "fabs".  The option also triggers
7065           warnings when the argument in a call to such a function has an
7066           unsigned type.  This warning can be suppressed with an explicit
7067           type cast and it is also enabled by -Wextra.
7068
7069       -Wcomment
7070       -Wcomments
7071           Warn whenever a comment-start sequence /* appears in a /* comment,
7072           or whenever a backslash-newline appears in a // comment.  This
7073           warning is enabled by -Wall.
7074
7075       -Wtrigraphs
7076           Warn if any trigraphs are encountered that might change the meaning
7077           of the program.  Trigraphs within comments are not warned about,
7078           except those that would form escaped newlines.
7079
7080           This option is implied by -Wall.  If -Wall is not given, this
7081           option is still enabled unless trigraphs are enabled.  To get
7082           trigraph conversion without warnings, but get the other -Wall
7083           warnings, use -trigraphs -Wall -Wno-trigraphs.
7084
7085       -Wundef
7086           Warn if an undefined identifier is evaluated in an "#if" directive.
7087           Such identifiers are replaced with zero.
7088
7089       -Wexpansion-to-defined
7090           Warn whenever defined is encountered in the expansion of a macro
7091           (including the case where the macro is expanded by an #if
7092           directive).  Such usage is not portable.  This warning is also
7093           enabled by -Wpedantic and -Wextra.
7094
7095       -Wunused-macros
7096           Warn about macros defined in the main file that are unused.  A
7097           macro is used if it is expanded or tested for existence at least
7098           once.  The preprocessor also warns if the macro has not been used
7099           at the time it is redefined or undefined.
7100
7101           Built-in macros, macros defined on the command line, and macros
7102           defined in include files are not warned about.
7103
7104           Note: If a macro is actually used, but only used in skipped
7105           conditional blocks, then the preprocessor reports it as unused.  To
7106           avoid the warning in such a case, you might improve the scope of
7107           the macro's definition by, for example, moving it into the first
7108           skipped block.  Alternatively, you could provide a dummy use with
7109           something like:
7110
7111                   #if defined the_macro_causing_the_warning
7112                   #endif
7113
7114       -Wno-endif-labels
7115           Do not warn whenever an "#else" or an "#endif" are followed by
7116           text.  This sometimes happens in older programs with code of the
7117           form
7118
7119                   #if FOO
7120                   ...
7121                   #else FOO
7122                   ...
7123                   #endif FOO
7124
7125           The second and third "FOO" should be in comments.  This warning is
7126           on by default.
7127
7128       -Wbad-function-cast (C and Objective-C only)
7129           Warn when a function call is cast to a non-matching type.  For
7130           example, warn if a call to a function returning an integer type is
7131           cast to a pointer type.
7132
7133       -Wc90-c99-compat (C and Objective-C only)
7134           Warn about features not present in ISO C90, but present in ISO C99.
7135           For instance, warn about use of variable length arrays, "long long"
7136           type, "bool" type, compound literals, designated initializers, and
7137           so on.  This option is independent of the standards mode.  Warnings
7138           are disabled in the expression that follows "__extension__".
7139
7140       -Wc99-c11-compat (C and Objective-C only)
7141           Warn about features not present in ISO C99, but present in ISO C11.
7142           For instance, warn about use of anonymous structures and unions,
7143           "_Atomic" type qualifier, "_Thread_local" storage-class specifier,
7144           "_Alignas" specifier, "Alignof" operator, "_Generic" keyword, and
7145           so on.  This option is independent of the standards mode.  Warnings
7146           are disabled in the expression that follows "__extension__".
7147
7148       -Wc11-c2x-compat (C and Objective-C only)
7149           Warn about features not present in ISO C11, but present in ISO C2X.
7150           For instance, warn about omitting the string in "_Static_assert",
7151           use of [[]] syntax for attributes, use of decimal floating-point
7152           types, and so on.  This option is independent of the standards
7153           mode.  Warnings are disabled in the expression that follows
7154           "__extension__".
7155
7156       -Wc++-compat (C and Objective-C only)
7157           Warn about ISO C constructs that are outside of the common subset
7158           of ISO C and ISO C++, e.g. request for implicit conversion from
7159           "void *" to a pointer to non-"void" type.
7160
7161       -Wc++11-compat (C++ and Objective-C++ only)
7162           Warn about C++ constructs whose meaning differs between ISO C++
7163           1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
7164           keywords in ISO C++ 2011.  This warning turns on -Wnarrowing and is
7165           enabled by -Wall.
7166
7167       -Wc++14-compat (C++ and Objective-C++ only)
7168           Warn about C++ constructs whose meaning differs between ISO C++
7169           2011 and ISO C++ 2014.  This warning is enabled by -Wall.
7170
7171       -Wc++17-compat (C++ and Objective-C++ only)
7172           Warn about C++ constructs whose meaning differs between ISO C++
7173           2014 and ISO C++ 2017.  This warning is enabled by -Wall.
7174
7175       -Wc++20-compat (C++ and Objective-C++ only)
7176           Warn about C++ constructs whose meaning differs between ISO C++
7177           2017 and ISO C++ 2020.  This warning is enabled by -Wall.
7178
7179       -Wno-c++11-extensions (C++ and Objective-C++ only)
7180           Do not warn about C++11 constructs in code being compiled using an
7181           older C++ standard.  Even without this option, some C++11
7182           constructs will only be diagnosed if -Wpedantic is used.
7183
7184       -Wno-c++14-extensions (C++ and Objective-C++ only)
7185           Do not warn about C++14 constructs in code being compiled using an
7186           older C++ standard.  Even without this option, some C++14
7187           constructs will only be diagnosed if -Wpedantic is used.
7188
7189       -Wno-c++17-extensions (C++ and Objective-C++ only)
7190           Do not warn about C++17 constructs in code being compiled using an
7191           older C++ standard.  Even without this option, some C++17
7192           constructs will only be diagnosed if -Wpedantic is used.
7193
7194       -Wno-c++20-extensions (C++ and Objective-C++ only)
7195           Do not warn about C++20 constructs in code being compiled using an
7196           older C++ standard.  Even without this option, some C++20
7197           constructs will only be diagnosed if -Wpedantic is used.
7198
7199       -Wno-c++23-extensions (C++ and Objective-C++ only)
7200           Do not warn about C++23 constructs in code being compiled using an
7201           older C++ standard.  Even without this option, some C++23
7202           constructs will only be diagnosed if -Wpedantic is used.
7203
7204       -Wcast-qual
7205           Warn whenever a pointer is cast so as to remove a type qualifier
7206           from the target type.  For example, warn if a "const char *" is
7207           cast to an ordinary "char *".
7208
7209           Also warn when making a cast that introduces a type qualifier in an
7210           unsafe way.  For example, casting "char **" to "const char **" is
7211           unsafe, as in this example:
7212
7213                     /* p is char ** value.  */
7214                     const char **q = (const char **) p;
7215                     /* Assignment of readonly string to const char * is OK.  */
7216                     *q = "string";
7217                     /* Now char** pointer points to read-only memory.  */
7218                     **p = 'b';
7219
7220       -Wcast-align
7221           Warn whenever a pointer is cast such that the required alignment of
7222           the target is increased.  For example, warn if a "char *" is cast
7223           to an "int *" on machines where integers can only be accessed at
7224           two- or four-byte boundaries.
7225
7226       -Wcast-align=strict
7227           Warn whenever a pointer is cast such that the required alignment of
7228           the target is increased.  For example, warn if a "char *" is cast
7229           to an "int *" regardless of the target machine.
7230
7231       -Wcast-function-type
7232           Warn when a function pointer is cast to an incompatible function
7233           pointer.  In a cast involving function types with a variable
7234           argument list only the types of initial arguments that are provided
7235           are considered.  Any parameter of pointer-type matches any other
7236           pointer-type.  Any benign differences in integral types are
7237           ignored, like "int" vs. "long" on ILP32 targets.  Likewise type
7238           qualifiers are ignored.  The function type "void (*) (void)" is
7239           special and matches everything, which can be used to suppress this
7240           warning.  In a cast involving pointer to member types this warning
7241           warns whenever the type cast is changing the pointer to member
7242           type.  This warning is enabled by -Wextra.
7243
7244       -Wwrite-strings
7245           When compiling C, give string constants the type "const
7246           char[length]" so that copying the address of one into a non-"const"
7247           "char *" pointer produces a warning.  These warnings help you find
7248           at compile time code that can try to write into a string constant,
7249           but only if you have been very careful about using "const" in
7250           declarations and prototypes.  Otherwise, it is just a nuisance.
7251           This is why we did not make -Wall request these warnings.
7252
7253           When compiling C++, warn about the deprecated conversion from
7254           string literals to "char *".  This warning is enabled by default
7255           for C++ programs.
7256
7257       -Wclobbered
7258           Warn for variables that might be changed by "longjmp" or "vfork".
7259           This warning is also enabled by -Wextra.
7260
7261       -Wno-complain-wrong-lang
7262           By default, language front ends complain when a command-line option
7263           is valid, but not applicable to that front end.  This may be
7264           disabled with -Wno-complain-wrong-lang, which is mostly useful when
7265           invoking a single compiler driver for multiple source files written
7266           in different languages, for example:
7267
7268                   $ g++ -fno-rtti a.cc b.f90
7269
7270           The driver g++ invokes the C++ front end to compile a.cc and the
7271           Fortran front end to compile b.f90.  The latter front end diagnoses
7272           f951: Warning: command-line option '-fno-rtti' is valid for
7273           C++/D/ObjC++ but not for Fortran, which may be disabled with
7274           -Wno-complain-wrong-lang.
7275
7276       -Wconversion
7277           Warn for implicit conversions that may alter a value. This includes
7278           conversions between real and integer, like "abs (x)" when "x" is
7279           "double"; conversions between signed and unsigned, like "unsigned
7280           ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
7281           not warn for explicit casts like "abs ((int) x)" and "ui =
7282           (unsigned) -1", or if the value is not changed by the conversion
7283           like in "abs (2.0)".  Warnings about conversions between signed and
7284           unsigned integers can be disabled by using -Wno-sign-conversion.
7285
7286           For C++, also warn for confusing overload resolution for user-
7287           defined conversions; and conversions that never use a type
7288           conversion operator: conversions to "void", the same type, a base
7289           class or a reference to them. Warnings about conversions between
7290           signed and unsigned integers are disabled by default in C++ unless
7291           -Wsign-conversion is explicitly enabled.
7292
7293           Warnings about conversion from arithmetic on a small type back to
7294           that type are only given with -Warith-conversion.
7295
7296       -Wdangling-else
7297           Warn about constructions where there may be confusion to which "if"
7298           statement an "else" branch belongs.  Here is an example of such a
7299           case:
7300
7301                   {
7302                     if (a)
7303                       if (b)
7304                         foo ();
7305                     else
7306                       bar ();
7307                   }
7308
7309           In C/C++, every "else" branch belongs to the innermost possible
7310           "if" statement, which in this example is "if (b)".  This is often
7311           not what the programmer expected, as illustrated in the above
7312           example by indentation the programmer chose.  When there is the
7313           potential for this confusion, GCC issues a warning when this flag
7314           is specified.  To eliminate the warning, add explicit braces around
7315           the innermost "if" statement so there is no way the "else" can
7316           belong to the enclosing "if".  The resulting code looks like this:
7317
7318                   {
7319                     if (a)
7320                       {
7321                         if (b)
7322                           foo ();
7323                         else
7324                           bar ();
7325                       }
7326                   }
7327
7328           This warning is enabled by -Wparentheses.
7329
7330       -Wdangling-pointer
7331       -Wdangling-pointer=n
7332           Warn about uses of pointers (or C++ references) to objects with
7333           automatic storage duration after their lifetime has ended.  This
7334           includes local variables declared in nested blocks, compound
7335           literals and other unnamed temporary objects.  In addition, warn
7336           about storing the address of such objects in escaped pointers.  The
7337           warning is enabled at all optimization levels but may yield
7338           different results with optimization than without.
7339
7340           -Wdangling-pointer=1
7341               At level 1 the warning diagnoses only unconditional uses of
7342               dangling pointers.  For example
7343
7344                       int f (int c1, int c2, x)
7345                       {
7346                         char *p = strchr ((char[]){ c1, c2 }, c3);
7347                         // warning: dangling pointer to a compound literal
7348                         return p ? *p : 'x';
7349                       }
7350
7351               In the following function the store of the address of the local
7352               variable "x" in the escaped pointer *p also triggers the
7353               warning.
7354
7355                       void g (int **p)
7356                       {
7357                         int x = 7;
7358                         // warning: storing the address of a local variable in *p
7359                         *p = &x;
7360                       }
7361
7362           -Wdangling-pointer=2
7363               At level 2, in addition to unconditional uses the warning also
7364               diagnoses conditional uses of dangling pointers.
7365
7366               For example, because the array a in the following function is
7367               out of scope when the pointer s that was set to point is used,
7368               the warning triggers at this level.
7369
7370                       void f (char *s)
7371                       {
7372                         if (!s)
7373                           {
7374                             char a[12] = "tmpname";
7375                             s = a;
7376                           }
7377                         // warning: dangling pointer to a may be used
7378                         strcat (s, ".tmp");
7379                         ...
7380                       }
7381
7382           -Wdangling-pointer=2 is included in -Wall.
7383
7384       -Wdate-time
7385           Warn when macros "__TIME__", "__DATE__" or "__TIMESTAMP__" are
7386           encountered as they might prevent bit-wise-identical reproducible
7387           compilations.
7388
7389       -Wempty-body
7390           Warn if an empty body occurs in an "if", "else" or "do while"
7391           statement.  This warning is also enabled by -Wextra.
7392
7393       -Wno-endif-labels
7394           Do not warn about stray tokens after "#else" and "#endif".
7395
7396       -Wenum-compare
7397           Warn about a comparison between values of different enumerated
7398           types.  In C++ enumerated type mismatches in conditional
7399           expressions are also diagnosed and the warning is enabled by
7400           default.  In C this warning is enabled by -Wall.
7401
7402       -Wenum-conversion
7403           Warn when a value of enumerated type is implicitly converted to a
7404           different enumerated type.  This warning is enabled by -Wextra in
7405           C.
7406
7407       -Wenum-int-mismatch (C and Objective-C only)
7408           Warn about mismatches between an enumerated type and an integer
7409           type in declarations.  For example:
7410
7411                   enum E { l = -1, z = 0, g = 1 };
7412                   int foo(void);
7413                   enum E foo(void);
7414
7415           In C, an enumerated type is compatible with "char", a signed
7416           integer type, or an unsigned integer type.  However, since the
7417           choice of the underlying type of an enumerated type is
7418           implementation-defined, such mismatches may cause portability
7419           issues.  In C++, such mismatches are an error.  In C, this warning
7420           is enabled by -Wall and -Wc++-compat.
7421
7422       -Wjump-misses-init (C, Objective-C only)
7423           Warn if a "goto" statement or a "switch" statement jumps forward
7424           across the initialization of a variable, or jumps backward to a
7425           label after the variable has been initialized.  This only warns
7426           about variables that are initialized when they are declared.  This
7427           warning is only supported for C and Objective-C; in C++ this sort
7428           of branch is an error in any case.
7429
7430           -Wjump-misses-init is included in -Wc++-compat.  It can be disabled
7431           with the -Wno-jump-misses-init option.
7432
7433       -Wsign-compare
7434           Warn when a comparison between signed and unsigned values could
7435           produce an incorrect result when the signed value is converted to
7436           unsigned.  In C++, this warning is also enabled by -Wall.  In C, it
7437           is also enabled by -Wextra.
7438
7439       -Wsign-conversion
7440           Warn for implicit conversions that may change the sign of an
7441           integer value, like assigning a signed integer expression to an
7442           unsigned integer variable. An explicit cast silences the warning.
7443           In C, this option is enabled also by -Wconversion.
7444
7445       -Wfloat-conversion
7446           Warn for implicit conversions that reduce the precision of a real
7447           value.  This includes conversions from real to integer, and from
7448           higher precision real to lower precision real values.  This option
7449           is also enabled by -Wconversion.
7450
7451       -Wno-scalar-storage-order
7452           Do not warn on suspicious constructs involving reverse scalar
7453           storage order.
7454
7455       -Wsizeof-array-div
7456           Warn about divisions of two sizeof operators when the first one is
7457           applied to an array and the divisor does not equal the size of the
7458           array element.  In such a case, the computation will not yield the
7459           number of elements in the array, which is likely what the user
7460           intended.  This warning warns e.g. about
7461
7462                   int fn ()
7463                   {
7464                     int arr[10];
7465                     return sizeof (arr) / sizeof (short);
7466                   }
7467
7468           This warning is enabled by -Wall.
7469
7470       -Wsizeof-pointer-div
7471           Warn for suspicious divisions of two sizeof expressions that divide
7472           the pointer size by the element size, which is the usual way to
7473           compute the array size but won't work out correctly with pointers.
7474           This warning warns e.g. about "sizeof (ptr) / sizeof (ptr[0])" if
7475           "ptr" is not an array, but a pointer.  This warning is enabled by
7476           -Wall.
7477
7478       -Wsizeof-pointer-memaccess
7479           Warn for suspicious length parameters to certain string and memory
7480           built-in functions if the argument uses "sizeof".  This warning
7481           triggers for example for "memset (ptr, 0, sizeof (ptr));" if "ptr"
7482           is not an array, but a pointer, and suggests a possible fix, or
7483           about "memcpy (&foo, ptr, sizeof (&foo));".
7484           -Wsizeof-pointer-memaccess also warns about calls to bounded string
7485           copy functions like "strncat" or "strncpy" that specify as the
7486           bound a "sizeof" expression of the source array.  For example, in
7487           the following function the call to "strncat" specifies the size of
7488           the source string as the bound.  That is almost certainly a mistake
7489           and so the call is diagnosed.
7490
7491                   void make_file (const char *name)
7492                   {
7493                     char path[PATH_MAX];
7494                     strncpy (path, name, sizeof path - 1);
7495                     strncat (path, ".text", sizeof ".text");
7496                     ...
7497                   }
7498
7499           The -Wsizeof-pointer-memaccess option is enabled by -Wall.
7500
7501       -Wno-sizeof-array-argument
7502           Do not warn when the "sizeof" operator is applied to a parameter
7503           that is declared as an array in a function definition.  This
7504           warning is enabled by default for C and C++ programs.
7505
7506       -Wmemset-elt-size
7507           Warn for suspicious calls to the "memset" built-in function, if the
7508           first argument references an array, and the third argument is a
7509           number equal to the number of elements, but not equal to the size
7510           of the array in memory.  This indicates that the user has omitted a
7511           multiplication by the element size.  This warning is enabled by
7512           -Wall.
7513
7514       -Wmemset-transposed-args
7515           Warn for suspicious calls to the "memset" built-in function where
7516           the second argument is not zero and the third argument is zero.
7517           For example, the call "memset (buf, sizeof buf, 0)" is diagnosed
7518           because "memset (buf, 0, sizeof buf)" was meant instead.  The
7519           diagnostic is only emitted if the third argument is a literal zero.
7520           Otherwise, if it is an expression that is folded to zero, or a cast
7521           of zero to some type, it is far less likely that the arguments have
7522           been mistakenly transposed and no warning is emitted.  This warning
7523           is enabled by -Wall.
7524
7525       -Waddress
7526           Warn about suspicious uses of address expressions. These include
7527           comparing the address of a function or a declared object to the
7528           null pointer constant such as in
7529
7530                   void f (void);
7531                   void g (void)
7532                   {
7533                     if (!f)   // warning: expression evaluates to false
7534                       abort ();
7535                   }
7536
7537           comparisons of a pointer to a string literal, such as in
7538
7539                   void f (const char *x)
7540                   {
7541                     if (x == "abc")   // warning: expression evaluates to false
7542                       puts ("equal");
7543                   }
7544
7545           and tests of the results of pointer addition or subtraction for
7546           equality to null, such as in
7547
7548                   void f (const int *p, int i)
7549                   {
7550                     return p + i == NULL;
7551                   }
7552
7553           Such uses typically indicate a programmer error: the address of
7554           most functions and objects necessarily evaluates to true (the
7555           exception are weak symbols), so their use in a conditional might
7556           indicate missing parentheses in a function call or a missing
7557           dereference in an array expression.  The subset of the warning for
7558           object pointers can be suppressed by casting the pointer operand to
7559           an integer type such as "intptr_t" or "uintptr_t".  Comparisons
7560           against string literals result in unspecified behavior and are not
7561           portable, and suggest the intent was to call "strcmp".  The warning
7562           is suppressed if the suspicious expression is the result of macro
7563           expansion.  -Waddress warning is enabled by -Wall.
7564
7565       -Wno-address-of-packed-member
7566           Do not warn when the address of packed member of struct or union is
7567           taken, which usually results in an unaligned pointer value.  This
7568           is enabled by default.
7569
7570       -Wlogical-op
7571           Warn about suspicious uses of logical operators in expressions.
7572           This includes using logical operators in contexts where a bit-wise
7573           operator is likely to be expected.  Also warns when the operands of
7574           a logical operator are the same:
7575
7576                   extern int a;
7577                   if (a < 0 && a < 0) { ... }
7578
7579       -Wlogical-not-parentheses
7580           Warn about logical not used on the left hand side operand of a
7581           comparison.  This option does not warn if the right operand is
7582           considered to be a boolean expression.  Its purpose is to detect
7583           suspicious code like the following:
7584
7585                   int a;
7586                   ...
7587                   if (!a > 1) { ... }
7588
7589           It is possible to suppress the warning by wrapping the LHS into
7590           parentheses:
7591
7592                   if ((!a) > 1) { ... }
7593
7594           This warning is enabled by -Wall.
7595
7596       -Waggregate-return
7597           Warn if any functions that return structures or unions are defined
7598           or called.  (In languages where you can return an array, this also
7599           elicits a warning.)
7600
7601       -Wno-aggressive-loop-optimizations
7602           Warn if in a loop with constant number of iterations the compiler
7603           detects undefined behavior in some statement during one or more of
7604           the iterations.
7605
7606       -Wno-attributes
7607           Do not warn if an unexpected "__attribute__" is used, such as
7608           unrecognized attributes, function attributes applied to variables,
7609           etc.  This does not stop errors for incorrect use of supported
7610           attributes.
7611
7612           Additionally, using -Wno-attributes=, it is possible to suppress
7613           warnings about unknown scoped attributes (in C++11 and C2X).  For
7614           example, -Wno-attributes=vendor::attr disables warning about the
7615           following declaration:
7616
7617                   [[vendor::attr]] void f();
7618
7619           It is also possible to disable warning about all attributes in a
7620           namespace using -Wno-attributes=vendor:: which prevents warning
7621           about both of these declarations:
7622
7623                   [[vendor::safe]] void f();
7624                   [[vendor::unsafe]] void f2();
7625
7626           Note that -Wno-attributes= does not imply -Wno-attributes.
7627
7628       -Wno-builtin-declaration-mismatch
7629           Warn if a built-in function is declared with an incompatible
7630           signature or as a non-function, or when a built-in function
7631           declared with a type that does not include a prototype is called
7632           with arguments whose promoted types do not match those expected by
7633           the function.  When -Wextra is specified, also warn when a built-in
7634           function that takes arguments is declared without a prototype.  The
7635           -Wbuiltin-declaration-mismatch warning is enabled by default.  To
7636           avoid the warning include the appropriate header to bring the
7637           prototypes of built-in functions into scope.
7638
7639           For example, the call to "memset" below is diagnosed by the warning
7640           because the function expects a value of type "size_t" as its
7641           argument but the type of 32 is "int".  With -Wextra, the
7642           declaration of the function is diagnosed as well.
7643
7644                   extern void* memset ();
7645                   void f (void *d)
7646                   {
7647                     memset (d, '\0', 32);
7648                   }
7649
7650       -Wno-builtin-macro-redefined
7651           Do not warn if certain built-in macros are redefined.  This
7652           suppresses warnings for redefinition of "__TIMESTAMP__",
7653           "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
7654
7655       -Wstrict-prototypes (C and Objective-C only)
7656           Warn if a function is declared or defined without specifying the
7657           argument types.  (An old-style function definition is permitted
7658           without a warning if preceded by a declaration that specifies the
7659           argument types.)
7660
7661       -Wold-style-declaration (C and Objective-C only)
7662           Warn for obsolescent usages, according to the C Standard, in a
7663           declaration. For example, warn if storage-class specifiers like
7664           "static" are not the first things in a declaration.  This warning
7665           is also enabled by -Wextra.
7666
7667       -Wold-style-definition (C and Objective-C only)
7668           Warn if an old-style function definition is used.  A warning is
7669           given even if there is a previous prototype.  A definition using ()
7670           is not considered an old-style definition in C2X mode, because it
7671           is equivalent to (void) in that case, but is considered an old-
7672           style definition for older standards.
7673
7674       -Wmissing-parameter-type (C and Objective-C only)
7675           A function parameter is declared without a type specifier in
7676           K&R-style functions:
7677
7678                   void foo(bar) { }
7679
7680           This warning is also enabled by -Wextra.
7681
7682       -Wmissing-prototypes (C and Objective-C only)
7683           Warn if a global function is defined without a previous prototype
7684           declaration.  This warning is issued even if the definition itself
7685           provides a prototype.  Use this option to detect global functions
7686           that do not have a matching prototype declaration in a header file.
7687           This option is not valid for C++ because all function declarations
7688           provide prototypes and a non-matching declaration declares an
7689           overload rather than conflict with an earlier declaration.  Use
7690           -Wmissing-declarations to detect missing declarations in C++.
7691
7692       -Wmissing-declarations
7693           Warn if a global function is defined without a previous
7694           declaration.  Do so even if the definition itself provides a
7695           prototype.  Use this option to detect global functions that are not
7696           declared in header files.  In C, no warnings are issued for
7697           functions with previous non-prototype declarations; use
7698           -Wmissing-prototypes to detect missing prototypes.  In C++, no
7699           warnings are issued for function templates, or for inline
7700           functions, or for functions in anonymous namespaces.
7701
7702       -Wmissing-field-initializers
7703           Warn if a structure's initializer has some fields missing.  For
7704           example, the following code causes such a warning, because "x.h" is
7705           implicitly zero:
7706
7707                   struct s { int f, g, h; };
7708                   struct s x = { 3, 4 };
7709
7710           This option does not warn about designated initializers, so the
7711           following modification does not trigger a warning:
7712
7713                   struct s { int f, g, h; };
7714                   struct s x = { .f = 3, .g = 4 };
7715
7716           In C this option does not warn about the universal zero initializer
7717           { 0 }:
7718
7719                   struct s { int f, g, h; };
7720                   struct s x = { 0 };
7721
7722           Likewise, in C++ this option does not warn about the empty { }
7723           initializer, for example:
7724
7725                   struct s { int f, g, h; };
7726                   s x = { };
7727
7728           This warning is included in -Wextra.  To get other -Wextra warnings
7729           without this one, use -Wextra -Wno-missing-field-initializers.
7730
7731       -Wno-missing-requires
7732           By default, the compiler warns about a concept-id appearing as a
7733           C++20 simple-requirement:
7734
7735                   bool satisfied = requires { C<T> };
7736
7737           Here satisfied will be true if C<T> is a valid expression, which it
7738           is for all T.  Presumably the user meant to write
7739
7740                   bool satisfied = requires { requires C<T> };
7741
7742           so satisfied is only true if concept C is satisfied for type T.
7743
7744           This warning can be disabled with -Wno-missing-requires.
7745
7746       -Wno-missing-template-keyword
7747           The member access tokens ., -> and :: must be followed by the
7748           "template" keyword if the parent object is dependent and the member
7749           being named is a template.
7750
7751                   template <class X>
7752                   void DoStuff (X x)
7753                   {
7754                     x.template DoSomeOtherStuff<X>(); // Good.
7755                     x.DoMoreStuff<X>(); // Warning, x is dependent.
7756                   }
7757
7758           In rare cases it is possible to get false positives. To silence
7759           this, wrap the expression in parentheses. For example, the
7760           following is treated as a template, even where m and N are
7761           integers:
7762
7763                   void NotATemplate (my_class t)
7764                   {
7765                     int N = 5;
7766
7767                     bool test = t.m < N > (0); // Treated as a template.
7768                     test = (t.m < N) > (0); // Same meaning, but not treated as a template.
7769                   }
7770
7771           This warning can be disabled with -Wno-missing-template-keyword.
7772
7773       -Wno-multichar
7774           Do not warn if a multicharacter constant ('FOOF') is used.  Usually
7775           they indicate a typo in the user's code, as they have
7776           implementation-defined values, and should not be used in portable
7777           code.
7778
7779       -Wnormalized=[none|id|nfc|nfkc]
7780           In ISO C and ISO C++, two identifiers are different if they are
7781           different sequences of characters.  However, sometimes when
7782           characters outside the basic ASCII character set are used, you can
7783           have two different character sequences that look the same.  To
7784           avoid confusion, the ISO 10646 standard sets out some normalization
7785           rules which when applied ensure that two sequences that look the
7786           same are turned into the same sequence.  GCC can warn you if you
7787           are using identifiers that have not been normalized; this option
7788           controls that warning.
7789
7790           There are four levels of warning supported by GCC.  The default is
7791           -Wnormalized=nfc, which warns about any identifier that is not in
7792           the ISO 10646 "C" normalized form, NFC.  NFC is the recommended
7793           form for most uses.  It is equivalent to -Wnormalized.
7794
7795           Unfortunately, there are some characters allowed in identifiers by
7796           ISO C and ISO C++ that, when turned into NFC, are not allowed in
7797           identifiers.  That is, there's no way to use these symbols in
7798           portable ISO C or C++ and have all your identifiers in NFC.
7799           -Wnormalized=id suppresses the warning for these characters.  It is
7800           hoped that future versions of the standards involved will correct
7801           this, which is why this option is not the default.
7802
7803           You can switch the warning off for all characters by writing
7804           -Wnormalized=none or -Wno-normalized.  You should only do this if
7805           you are using some other normalization scheme (like "D"), because
7806           otherwise you can easily create bugs that are literally impossible
7807           to see.
7808
7809           Some characters in ISO 10646 have distinct meanings but look
7810           identical in some fonts or display methodologies, especially once
7811           formatting has been applied.  For instance "\u207F", "SUPERSCRIPT
7812           LATIN SMALL LETTER N", displays just like a regular "n" that has
7813           been placed in a superscript.  ISO 10646 defines the NFKC
7814           normalization scheme to convert all these into a standard form as
7815           well, and GCC warns if your code is not in NFKC if you use
7816           -Wnormalized=nfkc.  This warning is comparable to warning about
7817           every identifier that contains the letter O because it might be
7818           confused with the digit 0, and so is not the default, but may be
7819           useful as a local coding convention if the programming environment
7820           cannot be fixed to display these characters distinctly.
7821
7822       -Wno-attribute-warning
7823           Do not warn about usage of functions declared with "warning"
7824           attribute.  By default, this warning is enabled.
7825           -Wno-attribute-warning can be used to disable the warning or
7826           -Wno-error=attribute-warning can be used to disable the error when
7827           compiled with -Werror flag.
7828
7829       -Wno-deprecated
7830           Do not warn about usage of deprecated features.
7831
7832       -Wno-deprecated-declarations
7833           Do not warn about uses of functions, variables, and types marked as
7834           deprecated by using the "deprecated" attribute.
7835
7836       -Wno-overflow
7837           Do not warn about compile-time overflow in constant expressions.
7838
7839       -Wno-odr
7840           Warn about One Definition Rule violations during link-time
7841           optimization.  Enabled by default.
7842
7843       -Wopenacc-parallelism
7844           Warn about potentially suboptimal choices related to OpenACC
7845           parallelism.
7846
7847       -Wopenmp-simd
7848           Warn if the vectorizer cost model overrides the OpenMP simd
7849           directive set by user.  The -fsimd-cost-model=unlimited option can
7850           be used to relax the cost model.
7851
7852       -Woverride-init (C and Objective-C only)
7853           Warn if an initialized field without side effects is overridden
7854           when using designated initializers.
7855
7856           This warning is included in -Wextra.  To get other -Wextra warnings
7857           without this one, use -Wextra -Wno-override-init.
7858
7859       -Wno-override-init-side-effects (C and Objective-C only)
7860           Do not warn if an initialized field with side effects is overridden
7861           when using designated initializers.  This warning is enabled by
7862           default.
7863
7864       -Wpacked
7865           Warn if a structure is given the packed attribute, but the packed
7866           attribute has no effect on the layout or size of the structure.
7867           Such structures may be mis-aligned for little benefit.  For
7868           instance, in this code, the variable "f.x" in "struct bar" is
7869           misaligned even though "struct bar" does not itself have the packed
7870           attribute:
7871
7872                   struct foo {
7873                     int x;
7874                     char a, b, c, d;
7875                   } __attribute__((packed));
7876                   struct bar {
7877                     char z;
7878                     struct foo f;
7879                   };
7880
7881       -Wnopacked-bitfield-compat
7882           The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
7883           bit-fields of type "char".  This was fixed in GCC 4.4 but the
7884           change can lead to differences in the structure layout.  GCC
7885           informs you when the offset of such a field has changed in GCC 4.4.
7886           For example there is no longer a 4-bit padding between field "a"
7887           and "b" in this structure:
7888
7889                   struct foo
7890                   {
7891                     char a:4;
7892                     char b:8;
7893                   } __attribute__ ((packed));
7894
7895           This warning is enabled by default.  Use
7896           -Wno-packed-bitfield-compat to disable this warning.
7897
7898       -Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)
7899           Warn if a structure field with explicitly specified alignment in a
7900           packed struct or union is misaligned.  For example, a warning will
7901           be issued on "struct S", like, "warning: alignment 1 of 'struct S'
7902           is less than 8", in this code:
7903
7904                   struct __attribute__ ((aligned (8))) S8 { char a[8]; };
7905                   struct __attribute__ ((packed)) S {
7906                     struct S8 s8;
7907                   };
7908
7909           This warning is enabled by -Wall.
7910
7911       -Wpadded
7912           Warn if padding is included in a structure, either to align an
7913           element of the structure or to align the whole structure.
7914           Sometimes when this happens it is possible to rearrange the fields
7915           of the structure to reduce the padding and so make the structure
7916           smaller.
7917
7918       -Wredundant-decls
7919           Warn if anything is declared more than once in the same scope, even
7920           in cases where multiple declaration is valid and changes nothing.
7921
7922       -Wrestrict
7923           Warn when an object referenced by a "restrict"-qualified parameter
7924           (or, in C++, a "__restrict"-qualified parameter) is aliased by
7925           another argument, or when copies between such objects overlap.  For
7926           example, the call to the "strcpy" function below attempts to
7927           truncate the string by replacing its initial characters with the
7928           last four.  However, because the call writes the terminating NUL
7929           into "a[4]", the copies overlap and the call is diagnosed.
7930
7931                   void foo (void)
7932                   {
7933                     char a[] = "abcd1234";
7934                     strcpy (a, a + 4);
7935                     ...
7936                   }
7937
7938           The -Wrestrict option detects some instances of simple overlap even
7939           without optimization but works best at -O2 and above.  It is
7940           included in -Wall.
7941
7942       -Wnested-externs (C and Objective-C only)
7943           Warn if an "extern" declaration is encountered within a function.
7944
7945       -Winline
7946           Warn if a function that is declared as inline cannot be inlined.
7947           Even with this option, the compiler does not warn about failures to
7948           inline functions declared in system headers.
7949
7950           The compiler uses a variety of heuristics to determine whether or
7951           not to inline a function.  For example, the compiler takes into
7952           account the size of the function being inlined and the amount of
7953           inlining that has already been done in the current function.
7954           Therefore, seemingly insignificant changes in the source program
7955           can cause the warnings produced by -Winline to appear or disappear.
7956
7957       -Winterference-size
7958           Warn about use of C++17
7959           "std::hardware_destructive_interference_size" without specifying
7960           its value with --param destructive-interference-size.  Also warn
7961           about questionable values for that option.
7962
7963           This variable is intended to be used for controlling class layout,
7964           to avoid false sharing in concurrent code:
7965
7966                   struct independent_fields {
7967                     alignas(std::hardware_destructive_interference_size)
7968                       std::atomic<int> one;
7969                     alignas(std::hardware_destructive_interference_size)
7970                       std::atomic<int> two;
7971                   };
7972
7973           Here one and two are intended to be far enough apart that stores to
7974           one won't require accesses to the other to reload the cache line.
7975
7976           By default, --param destructive-interference-size and --param
7977           constructive-interference-size are set based on the current -mtune
7978           option, typically to the L1 cache line size for the particular
7979           target CPU, sometimes to a range if tuning for a generic target.
7980           So all translation units that depend on ABI compatibility for the
7981           use of these variables must be compiled with the same -mtune (or
7982           -mcpu).
7983
7984           If ABI stability is important, such as if the use is in a header
7985           for a library, you should probably not use the hardware
7986           interference size variables at all.  Alternatively, you can force a
7987           particular value with --param.
7988
7989           If you are confident that your use of the variable does not affect
7990           ABI outside a single build of your project, you can turn off the
7991           warning with -Wno-interference-size.
7992
7993       -Wint-in-bool-context
7994           Warn for suspicious use of integer values where boolean values are
7995           expected, such as conditional expressions (?:) using non-boolean
7996           integer constants in boolean context, like "if (a <= b ? 2 : 3)".
7997           Or left shifting of signed integers in boolean context, like "for
7998           (a = 0; 1 << a; a++);".  Likewise for all kinds of multiplications
7999           regardless of the data type.  This warning is enabled by -Wall.
8000
8001       -Wno-int-to-pointer-cast
8002           Suppress warnings from casts to pointer type of an integer of a
8003           different size. In C++, casting to a pointer type of smaller size
8004           is an error. Wint-to-pointer-cast is enabled by default.
8005
8006       -Wno-pointer-to-int-cast (C and Objective-C only)
8007           Suppress warnings from casts from a pointer to an integer type of a
8008           different size.
8009
8010       -Winvalid-pch
8011           Warn if a precompiled header is found in the search path but cannot
8012           be used.
8013
8014       -Winvalid-utf8
8015           Warn if an invalid UTF-8 character is found.  This warning is on by
8016           default for C++23 if -finput-charset=UTF-8 is used and turned into
8017           error with -pedantic-errors.
8018
8019       -Wno-unicode
8020           Don't diagnose invalid forms of delimited or named escape sequences
8021           which are treated as separate tokens.  Wunicode is enabled by
8022           default.
8023
8024       -Wlong-long
8025           Warn if "long long" type is used.  This is enabled by either
8026           -Wpedantic or -Wtraditional in ISO C90 and C++98 modes.  To inhibit
8027           the warning messages, use -Wno-long-long.
8028
8029       -Wvariadic-macros
8030           Warn if variadic macros are used in ISO C90 mode, or if the GNU
8031           alternate syntax is used in ISO C99 mode.  This is enabled by
8032           either -Wpedantic or -Wtraditional.  To inhibit the warning
8033           messages, use -Wno-variadic-macros.
8034
8035       -Wno-varargs
8036           Do not warn upon questionable usage of the macros used to handle
8037           variable arguments like "va_start".  These warnings are enabled by
8038           default.
8039
8040       -Wvector-operation-performance
8041           Warn if vector operation is not implemented via SIMD capabilities
8042           of the architecture.  Mainly useful for the performance tuning.
8043           Vector operation can be implemented "piecewise", which means that
8044           the scalar operation is performed on every vector element; "in
8045           parallel", which means that the vector operation is implemented
8046           using scalars of wider type, which normally is more performance
8047           efficient; and "as a single scalar", which means that vector fits
8048           into a scalar type.
8049
8050       -Wvla
8051           Warn if a variable-length array is used in the code.  -Wno-vla
8052           prevents the -Wpedantic warning of the variable-length array.
8053
8054       -Wvla-larger-than=byte-size
8055           If this option is used, the compiler warns for declarations of
8056           variable-length arrays whose size is either unbounded, or bounded
8057           by an argument that allows the array size to exceed byte-size
8058           bytes.  This is similar to how -Walloca-larger-than=byte-size
8059           works, but with variable-length arrays.
8060
8061           Note that GCC may optimize small variable-length arrays of a known
8062           value into plain arrays, so this warning may not get triggered for
8063           such arrays.
8064
8065           -Wvla-larger-than=PTRDIFF_MAX is enabled by default but is
8066           typically only effective when -ftree-vrp is active (default for -O2
8067           and above).
8068
8069           See also -Walloca-larger-than=byte-size.
8070
8071       -Wno-vla-larger-than
8072           Disable -Wvla-larger-than= warnings.  The option is equivalent to
8073           -Wvla-larger-than=SIZE_MAX or larger.
8074
8075       -Wvla-parameter
8076           Warn about redeclarations of functions involving arguments of
8077           Variable Length Array types of inconsistent kinds or forms, and
8078           enable the detection of out-of-bounds accesses to such parameters
8079           by warnings such as -Warray-bounds.
8080
8081           If the first function declaration uses the VLA form the bound
8082           specified in the array is assumed to be the minimum number of
8083           elements expected to be provided in calls to the function and the
8084           maximum number of elements accessed by it.  Failing to provide
8085           arguments of sufficient size or accessing more than the maximum
8086           number of elements may be diagnosed.
8087
8088           For example, the warning triggers for the following redeclarations
8089           because the first one allows an array of any size to be passed to
8090           "f" while the second one specifies that the array argument must
8091           have at least "n" elements.  In addition, calling "f" with the
8092           associated VLA bound parameter in excess of the actual VLA bound
8093           triggers a warning as well.
8094
8095                   void f (int n, int[n]);
8096                   // warning: argument 2 previously declared as a VLA
8097                   void f (int, int[]);
8098
8099                   void g (int n)
8100                   {
8101                       if (n > 4)
8102                         return;
8103                       int a[n];
8104                       // warning: access to a by f may be out of bounds
8105                       f (sizeof a, a);
8106                     ...
8107                   }
8108
8109           -Wvla-parameter is included in -Wall.  The -Warray-parameter option
8110           triggers warnings for similar problems involving ordinary array
8111           arguments.
8112
8113       -Wvolatile-register-var
8114           Warn if a register variable is declared volatile.  The volatile
8115           modifier does not inhibit all optimizations that may eliminate
8116           reads and/or writes to register variables.  This warning is enabled
8117           by -Wall.
8118
8119       -Wxor-used-as-pow (C, C++, Objective-C and Objective-C++ only)
8120           Warn about uses of "^", the exclusive or operator, where it appears
8121           the user meant exponentiation.  Specifically, the warning occurs
8122           when the left-hand side is the decimal constant 2 or 10 and the
8123           right-hand side is also a decimal constant.
8124
8125           In C and C++, "^" means exclusive or, whereas in some other
8126           languages (e.g. TeX and some versions of BASIC) it means
8127           exponentiation.
8128
8129           This warning is enabled by default.  It can be silenced by
8130           converting one of the operands to hexadecimal.
8131
8132       -Wdisabled-optimization
8133           Warn if a requested optimization pass is disabled.  This warning
8134           does not generally indicate that there is anything wrong with your
8135           code; it merely indicates that GCC's optimizers are unable to
8136           handle the code effectively.  Often, the problem is that your code
8137           is too big or too complex; GCC refuses to optimize programs when
8138           the optimization itself is likely to take inordinate amounts of
8139           time.
8140
8141       -Wpointer-sign (C and Objective-C only)
8142           Warn for pointer argument passing or assignment with different
8143           signedness.  This option is only supported for C and Objective-C.
8144           It is implied by -Wall and by -Wpedantic, which can be disabled
8145           with -Wno-pointer-sign.
8146
8147       -Wstack-protector
8148           This option is only active when -fstack-protector is active.  It
8149           warns about functions that are not protected against stack
8150           smashing.
8151
8152       -Woverlength-strings
8153           Warn about string constants that are longer than the "minimum
8154           maximum" length specified in the C standard.  Modern compilers
8155           generally allow string constants that are much longer than the
8156           standard's minimum limit, but very portable programs should avoid
8157           using longer strings.
8158
8159           The limit applies after string constant concatenation, and does not
8160           count the trailing NUL.  In C90, the limit was 509 characters; in
8161           C99, it was raised to 4095.  C++98 does not specify a normative
8162           minimum maximum, so we do not diagnose overlength strings in C++.
8163
8164           This option is implied by -Wpedantic, and can be disabled with
8165           -Wno-overlength-strings.
8166
8167       -Wunsuffixed-float-constants (C and Objective-C only)
8168           Issue a warning for any floating constant that does not have a
8169           suffix.  When used together with -Wsystem-headers it warns about
8170           such constants in system header files.  This can be useful when
8171           preparing code to use with the "FLOAT_CONST_DECIMAL64" pragma from
8172           the decimal floating-point extension to C99.
8173
8174       -Wno-lto-type-mismatch
8175           During the link-time optimization, do not warn about type
8176           mismatches in global declarations from different compilation units.
8177           Requires -flto to be enabled.  Enabled by default.
8178
8179       -Wno-designated-init (C and Objective-C only)
8180           Suppress warnings when a positional initializer is used to
8181           initialize a structure that has been marked with the
8182           "designated_init" attribute.
8183
8184   Options That Control Static Analysis
8185       -fanalyzer
8186           This option enables an static analysis of program flow which looks
8187           for "interesting" interprocedural paths through the code, and
8188           issues warnings for problems found on them.
8189
8190           This analysis is much more expensive than other GCC warnings.
8191
8192           In technical terms, it performs coverage-guided symbolic execution
8193           of the code being compiled.  It is neither sound nor complete: it
8194           can have false positives and false negatives.  It is a bug-finding
8195           tool, rather than a tool for proving program correctness.
8196
8197           The analyzer is only suitable for use on C code in this release.
8198
8199           Enabling this option effectively enables the following warnings:
8200
8201           -Wanalyzer-allocation-size -Wanalyzer-deref-before-check
8202           -Wanalyzer-double-fclose -Wanalyzer-double-free
8203           -Wanalyzer-exposure-through-output-file
8204           -Wanalyzer-exposure-through-uninit-copy
8205           -Wanalyzer-fd-access-mode-mismatch -Wanalyzer-fd-double-close
8206           -Wanalyzer-fd-leak -Wanalyzer-fd-phase-mismatch
8207           -Wanalyzer-fd-type-mismatch -Wanalyzer-fd-use-after-close
8208           -Wanalyzer-fd-use-without-check -Wanalyzer-file-leak
8209           -Wanalyzer-free-of-non-heap -Wanalyzer-imprecise-fp-arithmetic
8210           -Wanalyzer-infinite-recursion -Wanalyzer-jump-through-null
8211           -Wanalyzer-malloc-leak -Wanalyzer-mismatching-deallocation
8212           -Wanalyzer-null-argument -Wanalyzer-null-dereference
8213           -Wanalyzer-out-of-bounds -Wanalyzer-possible-null-argument
8214           -Wanalyzer-possible-null-dereference -Wanalyzer-putenv-of-auto-var
8215           -Wanalyzer-shift-count-negative -Wanalyzer-shift-count-overflow
8216           -Wanalyzer-stale-setjmp-buffer
8217           -Wanalyzer-unsafe-call-within-signal-handler
8218           -Wanalyzer-use-after-free
8219           -Wanalyzer-use-of-pointer-in-stale-stack-frame
8220           -Wanalyzer-use-of-uninitialized-value
8221           -Wanalyzer-va-arg-type-mismatch -Wanalyzer-va-list-exhausted
8222           -Wanalyzer-va-list-leak -Wanalyzer-va-list-use-after-va-end
8223           -Wanalyzer-write-to-const -Wanalyzer-write-to-string-literal
8224
8225           This option is only available if GCC was configured with analyzer
8226           support enabled.
8227
8228       -Wanalyzer-too-complex
8229           If -fanalyzer is enabled, the analyzer uses various heuristics to
8230           attempt to explore the control flow and data flow in the program,
8231           but these can be defeated by sufficiently complicated code.
8232
8233           By default, the analysis silently stops if the code is too
8234           complicated for the analyzer to fully explore and it reaches an
8235           internal limit.  The -Wanalyzer-too-complex option warns if this
8236           occurs.
8237
8238       -Wno-analyzer-allocation-size
8239           This warning requires -fanalyzer, which enables it; to disable it,
8240           use -Wno-analyzer-allocation-size.
8241
8242           This diagnostic warns for paths through the code in which a pointer
8243           to a buffer is assigned to point at a buffer with a size that is
8244           not a multiple of "sizeof (*pointer)".
8245
8246           See  CWE-131: Incorrect Calculation of Buffer Size
8247           ("https://cwe.mitre.org/data/definitions/131.html").
8248
8249       -Wno-analyzer-deref-before-check
8250           This warning requires -fanalyzer, which enables it; use
8251           -Wno-analyzer-deref-before-check to disable it.
8252
8253           This diagnostic warns for paths through the code in which a pointer
8254           is checked for "NULL" *after* it has already been dereferenced,
8255           suggesting that the pointer could have been NULL.  Such cases
8256           suggest that the check for NULL is either redundant, or that it
8257           needs to be moved to before the pointer is dereferenced.
8258
8259           This diagnostic also considers values passed to a function argument
8260           marked with "__attribute__((nonnull))" as requiring a non-NULL
8261           value, and thus will complain if such values are checked for "NULL"
8262           after returning from such a function call.
8263
8264           This diagnostic is unlikely to be reported when any level of
8265           optimization is enabled, as GCC's optimization logic will typically
8266           consider such checks for NULL as being redundant, and optimize them
8267           away before the analyzer "sees" them.  Hence optimization should be
8268           disabled when attempting to trigger this diagnostic.
8269
8270       -Wno-analyzer-double-fclose
8271           This warning requires -fanalyzer, which enables it; use
8272           -Wno-analyzer-double-fclose to disable it.
8273
8274           This diagnostic warns for paths through the code in which a "FILE
8275           *" can have "fclose" called on it more than once.
8276
8277           See  CWE-1341: Multiple Releases of Same Resource or Handle
8278           ("https://cwe.mitre.org/data/definitions/1341.html").
8279
8280       -Wno-analyzer-double-free
8281           This warning requires -fanalyzer, which enables it; use
8282           -Wno-analyzer-double-free to disable it.
8283
8284           This diagnostic warns for paths through the code in which a pointer
8285           can have a deallocator called on it more than once, either "free",
8286           or a deallocator referenced by attribute "malloc".
8287
8288           See  CWE-415: Double Free
8289           ("https://cwe.mitre.org/data/definitions/415.html").
8290
8291       -Wno-analyzer-exposure-through-output-file
8292           This warning requires -fanalyzer, which enables it; use
8293           -Wno-analyzer-exposure-through-output-file to disable it.
8294
8295           This diagnostic warns for paths through the code in which a
8296           security-sensitive value is written to an output file (such as
8297           writing a password to a log file).
8298
8299           See  CWE-532: Information Exposure Through Log Files
8300           ("https://cwe.mitre.org/data/definitions/532.html").
8301
8302       -Wanalyzer-exposure-through-uninit-copy
8303           This warning requires both -fanalyzer and the use of a plugin to
8304           specify a function that copies across a "trust boundary".  Use
8305           -Wno-analyzer-exposure-through-uninit-copy to disable it.
8306
8307           This diagnostic warns for "infoleaks" - paths through the code in
8308           which uninitialized values are copied across a security boundary
8309           (such as code within an OS kernel that copies a partially-
8310           initialized struct on the stack to user space).
8311
8312           See  CWE-200: Exposure of Sensitive Information to an Unauthorized
8313           Actor ("https://cwe.mitre.org/data/definitions/200.html").
8314
8315       -Wno-analyzer-fd-access-mode-mismatch
8316           This warning requires -fanalyzer, which enables it; use
8317           -Wno-analyzer-fd-access-mode-mismatch to disable it.
8318
8319           This diagnostic warns for paths through code in which a "read" on a
8320           write-only file descriptor is attempted, or vice versa.
8321
8322           This diagnostic also warns for code paths in a which a function
8323           with attribute "fd_arg_read (N)" is called with a file descriptor
8324           opened with "O_WRONLY" at referenced argument "N" or a function
8325           with attribute "fd_arg_write (N)" is called with a file descriptor
8326           opened with "O_RDONLY" at referenced argument N.
8327
8328       -Wno-analyzer-fd-double-close
8329           This warning requires -fanalyzer, which enables it; use
8330           -Wno-analyzer-fd-double-close to disable it.
8331
8332           This diagnostic warns for paths through code in which a file
8333           descriptor can be closed more than once.
8334
8335           See  CWE-1341: Multiple Releases of Same Resource or Handle
8336           ("https://cwe.mitre.org/data/definitions/1341.html").
8337
8338       -Wno-analyzer-fd-leak
8339           This warning requires -fanalyzer, which enables it; use
8340           -Wno-analyzer-fd-leak to disable it.
8341
8342           This diagnostic warns for paths through code in which an open file
8343           descriptor is leaked.
8344
8345           See  CWE-775: Missing Release of File Descriptor or Handle after
8346           Effective Lifetime
8347           ("https://cwe.mitre.org/data/definitions/775.html").
8348
8349       -Wno-analyzer-fd-phase-mismatch
8350           This warning requires -fanalyzer, which enables it; use
8351           -Wno-analyzer-fd-phase-mismatch to disable it.
8352
8353           This diagnostic warns for paths through code in which an operation
8354           is attempted in the wrong phase of a file descriptor's lifetime.
8355           For example, it will warn on attempts to call "accept" on a stream
8356           socket that has not yet had "listen" successfully called on it.
8357
8358           See  CWE-666: Operation on Resource in Wrong Phase of Lifetime
8359           ("https://cwe.mitre.org/data/definitions/666.html").
8360
8361       -Wno-analyzer-fd-type-mismatch
8362           This warning requires -fanalyzer, which enables it; use
8363           -Wno-analyzer-fd-type-mismatch to disable it.
8364
8365           This diagnostic warns for paths through code in which an operation
8366           is attempted on the wrong type of file descriptor.  For example, it
8367           will warn on attempts to use socket operations on a file descriptor
8368           obtained via "open", or when attempting to use a stream socket
8369           operation on a datagram socket.
8370
8371       -Wno-analyzer-fd-use-after-close
8372           This warning requires -fanalyzer, which enables it; use
8373           -Wno-analyzer-fd-use-after-close to disable it.
8374
8375           This diagnostic warns for paths through code in which a read or
8376           write is called on a closed file descriptor.
8377
8378           This diagnostic also warns for paths through code in which a
8379           function with attribute "fd_arg (N)" or "fd_arg_read (N)" or
8380           "fd_arg_write (N)" is called with a closed file descriptor at
8381           referenced argument "N".
8382
8383       -Wno-analyzer-fd-use-without-check
8384           This warning requires -fanalyzer, which enables it; use
8385           -Wno-analyzer-fd-use-without-check to disable it.
8386
8387           This diagnostic warns for paths through code in which a file
8388           descriptor is used without being checked for validity.
8389
8390           This diagnostic also warns for paths through code in which a
8391           function with attribute "fd_arg (N)" or "fd_arg_read (N)" or
8392           "fd_arg_write (N)" is called with a file descriptor, at referenced
8393           argument "N", without being checked for validity.
8394
8395       -Wno-analyzer-file-leak
8396           This warning requires -fanalyzer, which enables it; use
8397           -Wno-analyzer-file-leak to disable it.
8398
8399           This diagnostic warns for paths through the code in which a
8400           "<stdio.h>" "FILE *" stream object is leaked.
8401
8402           See  CWE-775: Missing Release of File Descriptor or Handle after
8403           Effective Lifetime
8404           ("https://cwe.mitre.org/data/definitions/775.html").
8405
8406       -Wno-analyzer-free-of-non-heap
8407           This warning requires -fanalyzer, which enables it; use
8408           -Wno-analyzer-free-of-non-heap to disable it.
8409
8410           This diagnostic warns for paths through the code in which "free" is
8411           called on a non-heap pointer (e.g. an on-stack buffer, or a
8412           global).
8413
8414           See  CWE-590: Free of Memory not on the Heap
8415           ("https://cwe.mitre.org/data/definitions/590.html").
8416
8417       -Wno-analyzer-imprecise-fp-arithmetic
8418           This warning requires -fanalyzer, which enables it; use
8419           -Wno-analyzer-imprecise-fp-arithmetic to disable it.
8420
8421           This diagnostic warns for paths through the code in which floating-
8422           point arithmetic is used in locations where precise computation is
8423           needed.  This diagnostic only warns on use of floating-point
8424           operands inside the calculation of an allocation size at the
8425           moment.
8426
8427       -Wno-analyzer-infinite-recursion
8428           This warning requires -fanalyzer, which enables it; use
8429           -Wno-analyzer-infinite-recursion to disable it.
8430
8431           This diagnostics warns for paths through the code which appear to
8432           lead to infinite recursion.
8433
8434           Specifically, when the analyzer "sees" a recursive call, it will
8435           compare the state of memory at the entry to the new frame with that
8436           at the entry to the previous frame of that function on the stack.
8437           The warning is issued if nothing in memory appears to be changing;
8438           any changes observed to parameters or globals are assumed to lead
8439           to termination of the recursion and thus suppress the warning.
8440
8441           This diagnostic is likely to miss cases of infinite recursion that
8442           are convered to iteration by the optimizer before the analyzer
8443           "sees" them.  Hence optimization should be disabled when attempting
8444           to trigger this diagnostic.
8445
8446           Compare with -Winfinite-recursion, which provides a similar
8447           diagnostic, but is implemented in a different way.
8448
8449       -Wno-analyzer-jump-through-null
8450           This warning requires -fanalyzer, which enables it; use
8451           -Wno-analyzer-jump-through-null to disable it.
8452
8453           This diagnostic warns for paths through the code in which a "NULL"
8454           function pointer is called.
8455
8456       -Wno-analyzer-malloc-leak
8457           This warning requires -fanalyzer, which enables it; use
8458           -Wno-analyzer-malloc-leak to disable it.
8459
8460           This diagnostic warns for paths through the code in which a pointer
8461           allocated via an allocator is leaked: either "malloc", or a
8462           function marked with attribute "malloc".
8463
8464           See  CWE-401: Missing Release of Memory after Effective Lifetime
8465           ("https://cwe.mitre.org/data/definitions/401.html").
8466
8467       -Wno-analyzer-mismatching-deallocation
8468           This warning requires -fanalyzer, which enables it; use
8469           -Wno-analyzer-mismatching-deallocation to disable it.
8470
8471           This diagnostic warns for paths through the code in which the wrong
8472           deallocation function is called on a pointer value, based on which
8473           function was used to allocate the pointer value.  The diagnostic
8474           will warn about mismatches between "free", scalar "delete" and
8475           vector "delete[]", and those marked as allocator/deallocator pairs
8476           using attribute "malloc".
8477
8478           See  CWE-762: Mismatched Memory Management Routines
8479           ("https://cwe.mitre.org/data/definitions/762.html").
8480
8481       -Wno-analyzer-out-of-bounds
8482           This warning requires -fanalyzer, which enables it; use
8483           -Wno-analyzer-out-of-bounds to disable it.
8484
8485           This diagnostic warns for paths through the code in which a buffer
8486           is definitely read or written out-of-bounds.  The diagnostic
8487           applies for cases where the analyzer is able to determine a
8488           constant offset and for accesses past the end of a buffer, also a
8489           constant capacity.  Further, the diagnostic does limited checking
8490           for accesses past the end when the offset as well as the capacity
8491           is symbolic.
8492
8493           See  CWE-119: Improper Restriction of Operations within the Bounds
8494           of a Memory Buffer
8495           ("https://cwe.mitre.org/data/definitions/119.html").
8496
8497       -Wno-analyzer-possible-null-argument
8498           This warning requires -fanalyzer, which enables it; use
8499           -Wno-analyzer-possible-null-argument to disable it.
8500
8501           This diagnostic warns for paths through the code in which a
8502           possibly-NULL value is passed to a function argument marked with
8503           "__attribute__((nonnull))" as requiring a non-NULL value.
8504
8505           See  CWE-690: Unchecked Return Value to NULL Pointer Dereference
8506           ("https://cwe.mitre.org/data/definitions/690.html").
8507
8508       -Wno-analyzer-possible-null-dereference
8509           This warning requires -fanalyzer, which enables it; use
8510           -Wno-analyzer-possible-null-dereference to disable it.
8511
8512           This diagnostic warns for paths through the code in which a
8513           possibly-NULL value is dereferenced.
8514
8515           See  CWE-690: Unchecked Return Value to NULL Pointer Dereference
8516           ("https://cwe.mitre.org/data/definitions/690.html").
8517
8518       -Wno-analyzer-null-argument
8519           This warning requires -fanalyzer, which enables it; use
8520           -Wno-analyzer-null-argument to disable it.
8521
8522           This diagnostic warns for paths through the code in which a value
8523           known to be NULL is passed to a function argument marked with
8524           "__attribute__((nonnull))" as requiring a non-NULL value.
8525
8526           See  CWE-476: NULL Pointer Dereference
8527           ("https://cwe.mitre.org/data/definitions/476.html").
8528
8529       -Wno-analyzer-null-dereference
8530           This warning requires -fanalyzer, which enables it; use
8531           -Wno-analyzer-null-dereference to disable it.
8532
8533           This diagnostic warns for paths through the code in which a value
8534           known to be NULL is dereferenced.
8535
8536           See  CWE-476: NULL Pointer Dereference
8537           ("https://cwe.mitre.org/data/definitions/476.html").
8538
8539       -Wno-analyzer-putenv-of-auto-var
8540           This warning requires -fanalyzer, which enables it; use
8541           -Wno-analyzer-putenv-of-auto-var to disable it.
8542
8543           This diagnostic warns for paths through the code in which a call to
8544           "putenv" is passed a pointer to an automatic variable or an on-
8545           stack buffer.
8546
8547           See  POS34-C. Do not call putenv() with a pointer to an automatic
8548           variable as the argument
8549           ("https://wiki.sei.cmu.edu/confluence/x/6NYxBQ").
8550
8551       -Wno-analyzer-shift-count-negative
8552           This warning requires -fanalyzer, which enables it; use
8553           -Wno-analyzer-shift-count-negative to disable it.
8554
8555           This diagnostic warns for paths through the code in which a shift
8556           is attempted with a negative count.  It is analogous to the
8557           -Wshift-count-negative diagnostic implemented in the C/C++ front
8558           ends, but is implemented based on analyzing interprocedural paths,
8559           rather than merely parsing the syntax tree.  However, the analyzer
8560           does not prioritize detection of such paths, so false negatives are
8561           more likely relative to other warnings.
8562
8563       -Wno-analyzer-shift-count-overflow
8564           This warning requires -fanalyzer, which enables it; use
8565           -Wno-analyzer-shift-count-overflow to disable it.
8566
8567           This diagnostic warns for paths through the code in which a shift
8568           is attempted with a count greater than or equal to the precision of
8569           the operand's type.  It is analogous to the -Wshift-count-overflow
8570           diagnostic implemented in the C/C++ front ends, but is implemented
8571           based on analyzing interprocedural paths, rather than merely
8572           parsing the syntax tree.  However, the analyzer does not prioritize
8573           detection of such paths, so false negatives are more likely
8574           relative to other warnings.
8575
8576       -Wno-analyzer-stale-setjmp-buffer
8577           This warning requires -fanalyzer, which enables it; use
8578           -Wno-analyzer-stale-setjmp-buffer to disable it.
8579
8580           This diagnostic warns for paths through the code in which "longjmp"
8581           is called to rewind to a "jmp_buf" relating to a "setjmp" call in a
8582           function that has returned.
8583
8584           When "setjmp" is called on a "jmp_buf" to record a rewind location,
8585           it records the stack frame.  The stack frame becomes invalid when
8586           the function containing the "setjmp" call returns.  Attempting to
8587           rewind to it via "longjmp" would reference a stack frame that no
8588           longer exists, and likely lead to a crash (or worse).
8589
8590       -Wno-analyzer-tainted-allocation-size
8591           This warning requires both -fanalyzer and -fanalyzer-checker=taint
8592           to enable it; use -Wno-analyzer-tainted-allocation-size to disable
8593           it.
8594
8595           This diagnostic warns for paths through the code in which a value
8596           that could be under an attacker's control is used as the size of an
8597           allocation without being sanitized, so that an attacker could
8598           inject an excessively large allocation and potentially cause a
8599           denial of service attack.
8600
8601           See  CWE-789: Memory Allocation with Excessive Size Value
8602           ("https://cwe.mitre.org/data/definitions/789.html").
8603
8604       -Wno-analyzer-tainted-assertion
8605           This warning requires both -fanalyzer and -fanalyzer-checker=taint
8606           to enable it; use -Wno-analyzer-tainted-assertion to disable it.
8607
8608           This diagnostic warns for paths through the code in which a value
8609           that could be under an attacker's control is used as part of a
8610           condition without being first sanitized, and that condition guards
8611           a call to a function marked with attribute "noreturn" (such as the
8612           function "__builtin_unreachable").  Such functions typically
8613           indicate abnormal termination of the program, such as for assertion
8614           failure handlers.  For example:
8615
8616                   assert (some_tainted_value < SOME_LIMIT);
8617
8618           In such cases:
8619
8620           *   when assertion-checking is enabled: an attacker could trigger a
8621               denial of service by injecting an assertion failure
8622
8623           *   when assertion-checking is disabled, such as by defining
8624               "NDEBUG", an attacker could inject data that subverts the
8625               process, since it presumably violates a precondition that is
8626               being assumed by the code.
8627
8628           Note that when assertion-checking is disabled, the assertions are
8629           typically removed by the preprocessor before the analyzer has a
8630           chance to "see" them, so this diagnostic can only generate warnings
8631           on builds in which assertion-checking is enabled.
8632
8633           For the purpose of this warning, any function marked with attribute
8634           "noreturn" is considered as a possible assertion failure handler,
8635           including "__builtin_unreachable".  Note that these functions are
8636           sometimes removed by the optimizer before the analyzer "sees" them.
8637           Hence optimization should be disabled when attempting to trigger
8638           this diagnostic.
8639
8640           See  CWE-617: Reachable Assertion
8641           ("https://cwe.mitre.org/data/definitions/617.html").
8642
8643           The warning can also report problematic constructions such as
8644
8645                   switch (some_tainted_value) {
8646                   case 0:
8647                     /* [...etc; various valid cases omitted...] */
8648                     break;
8649
8650                   default:
8651                     __builtin_unreachable (); /* BUG: attacker can trigger this  */
8652                   }
8653
8654           despite the above not being an assertion failure, strictly
8655           speaking.
8656
8657       -Wno-analyzer-tainted-array-index
8658           This warning requires both -fanalyzer and -fanalyzer-checker=taint
8659           to enable it; use -Wno-analyzer-tainted-array-index to disable it.
8660
8661           This diagnostic warns for paths through the code in which a value
8662           that could be under an attacker's control is used as the index of
8663           an array access without being sanitized, so that an attacker could
8664           inject an out-of-bounds access.
8665
8666           See  CWE-129: Improper Validation of Array Index
8667           ("https://cwe.mitre.org/data/definitions/129.html").
8668
8669       -Wno-analyzer-tainted-divisor
8670           This warning requires both -fanalyzer and -fanalyzer-checker=taint
8671           to enable it; use -Wno-analyzer-tainted-divisor to disable it.
8672
8673           This diagnostic warns for paths through the code in which a value
8674           that could be under an attacker's control is used as the divisor in
8675           a division or modulus operation without being sanitized, so that an
8676           attacker could inject a division-by-zero.
8677
8678           See  CWE-369: Divide By Zero
8679           ("https://cwe.mitre.org/data/definitions/369.html").
8680
8681       -Wno-analyzer-tainted-offset
8682           This warning requires both -fanalyzer and -fanalyzer-checker=taint
8683           to enable it; use -Wno-analyzer-tainted-offset to disable it.
8684
8685           This diagnostic warns for paths through the code in which a value
8686           that could be under an attacker's control is used as a pointer
8687           offset without being sanitized, so that an attacker could inject an
8688           out-of-bounds access.
8689
8690           See  CWE-823: Use of Out-of-range Pointer Offset
8691           ("https://cwe.mitre.org/data/definitions/823.html").
8692
8693       -Wno-analyzer-tainted-size
8694           This warning requires both -fanalyzer and -fanalyzer-checker=taint
8695           to enable it; use -Wno-analyzer-tainted-size to disable it.
8696
8697           This diagnostic warns for paths through the code in which a value
8698           that could be under an attacker's control is used as the size of an
8699           operation such as "memset" without being sanitized, so that an
8700           attacker could inject an out-of-bounds access.
8701
8702           See  CWE-129: Improper Validation of Array Index
8703           ("https://cwe.mitre.org/data/definitions/129.html").
8704
8705       -Wno-analyzer-unsafe-call-within-signal-handler
8706           This warning requires -fanalyzer, which enables it; use
8707           -Wno-analyzer-unsafe-call-within-signal-handler to disable it.
8708
8709           This diagnostic warns for paths through the code in which a
8710           function known to be async-signal-unsafe (such as "fprintf") is
8711           called from a signal handler.
8712
8713           See  CWE-479: Signal Handler Use of a Non-reentrant Function
8714           ("https://cwe.mitre.org/data/definitions/479.html").
8715
8716       -Wno-analyzer-use-after-free
8717           This warning requires -fanalyzer, which enables it; use
8718           -Wno-analyzer-use-after-free to disable it.
8719
8720           This diagnostic warns for paths through the code in which a pointer
8721           is used after a deallocator is called on it: either "free", or a
8722           deallocator referenced by attribute "malloc".
8723
8724           See  CWE-416: Use After Free
8725           ("https://cwe.mitre.org/data/definitions/416.html").
8726
8727       -Wno-analyzer-use-of-pointer-in-stale-stack-frame
8728           This warning requires -fanalyzer, which enables it; use
8729           -Wno-analyzer-use-of-pointer-in-stale-stack-frame to disable it.
8730
8731           This diagnostic warns for paths through the code in which a pointer
8732           is dereferenced that points to a variable in a stale stack frame.
8733
8734       -Wno-analyzer-va-arg-type-mismatch
8735           This warning requires -fanalyzer, which enables it; use
8736           -Wno-analyzer-va-arg-type-mismatch to disable it.
8737
8738           This diagnostic warns for interprocedural paths through the code
8739           for which the analyzer detects an attempt to use "va_arg" to
8740           extract a value passed to a variadic call, but uses a type that
8741           does not match that of the expression passed to the call.
8742
8743           See  CWE-686: Function Call With Incorrect Argument Type
8744           ("https://cwe.mitre.org/data/definitions/686.html").
8745
8746       -Wno-analyzer-va-list-exhausted
8747           This warning requires -fanalyzer, which enables it; use
8748           -Wno-analyzer-va-list-exhausted to disable it.
8749
8750           This diagnostic warns for interprocedural paths through the code
8751           for which the analyzer detects an attempt to use "va_arg" to access
8752           the next value passed to a variadic call, but all of the values in
8753           the "va_list" have already been consumed.
8754
8755           See  CWE-685: Function Call With Incorrect Number of Arguments
8756           ("https://cwe.mitre.org/data/definitions/685.html").
8757
8758       -Wno-analyzer-va-list-leak
8759           This warning requires -fanalyzer, which enables it; use
8760           -Wno-analyzer-va-list-leak to disable it.
8761
8762           This diagnostic warns for interprocedural paths through the code
8763           for which the analyzer detects that "va_start" or "va_copy" has
8764           been called on a "va_list" without a corresponding call to
8765           "va_end".
8766
8767       -Wno-analyzer-va-list-use-after-va-end
8768           This warning requires -fanalyzer, which enables it; use
8769           -Wno-analyzer-va-list-use-after-va-end to disable it.
8770
8771           This diagnostic warns for interprocedural paths through the code
8772           for which the analyzer detects an attempt to use a "va_list"  after
8773           "va_end" has been called on it.  "va_list".
8774
8775       -Wno-analyzer-write-to-const
8776           This warning requires -fanalyzer, which enables it; use
8777           -Wno-analyzer-write-to-const to disable it.
8778
8779           This diagnostic warns for paths through the code in which the
8780           analyzer detects an attempt to write through a pointer to a "const"
8781           object.  However, the analyzer does not prioritize detection of
8782           such paths, so false negatives are more likely relative to other
8783           warnings.
8784
8785       -Wno-analyzer-write-to-string-literal
8786           This warning requires -fanalyzer, which enables it; use
8787           -Wno-analyzer-write-to-string-literal to disable it.
8788
8789           This diagnostic warns for paths through the code in which the
8790           analyzer detects an attempt to write through a pointer to a string
8791           literal.  However, the analyzer does not prioritize detection of
8792           such paths, so false negatives are more likely relative to other
8793           warnings.
8794
8795       -Wno-analyzer-use-of-uninitialized-value
8796           This warning requires -fanalyzer, which enables it; use
8797           -Wno-analyzer-use-of-uninitialized-value to disable it.
8798
8799           This diagnostic warns for paths through the code in which an
8800           uninitialized value is used.
8801
8802           See  CWE-457: Use of Uninitialized Variable
8803           ("https://cwe.mitre.org/data/definitions/457.html").
8804
8805       The analyzer has hardcoded knowledge about the behavior of the
8806       following memory-management functions:
8807
8808       *<"alloca">
8809       *<The built-in functions "__builtin_alloc",>
8810           "__builtin_alloc_with_align", @item "__builtin_calloc",
8811           "__builtin_free", "__builtin_malloc", "__builtin_memcpy",
8812           "__builtin_memcpy_chk", "__builtin_memset", "__builtin_memset_chk",
8813           "__builtin_realloc", "__builtin_stack_restore", and
8814           "__builtin_stack_save"
8815
8816       *<"calloc">
8817       *<"free">
8818       *<"malloc">
8819       *<"memset">
8820       *<"operator delete">
8821       *<"operator delete []">
8822       *<"operator new">
8823       *<"operator new []">
8824       *<"realloc">
8825       *<"strdup">
8826       *<"strndup">
8827
8828       of the following functions for working with file descriptors:
8829
8830       *<"open">
8831       *<"close">
8832       *<"creat">
8833       *<"dup", "dup2" and "dup3">
8834       *<"isatty">
8835       *<"pipe", and "pipe2">
8836       *<"read">
8837       *<"write">
8838       *<"socket", "bind", "listen", "accept", and "connect">
8839
8840       of the following functions for working with "<stdio.h>" streams:
8841
8842       *<The built-in functions "__builtin_fprintf",>
8843           "__builtin_fprintf_unlocked", "__builtin_fputc",
8844           "__builtin_fputc_unlocked", "__builtin_fputs",
8845           "__builtin_fputs_unlocked", "__builtin_fwrite",
8846           "__builtin_fwrite_unlocked", "__builtin_printf",
8847           "__builtin_printf_unlocked", "__builtin_putc", "__builtin_putchar",
8848           "__builtin_putchar_unlocked", "__builtin_putc_unlocked",
8849           "__builtin_puts", "__builtin_puts_unlocked", "__builtin_vfprintf",
8850           and "__builtin_vprintf"
8851
8852       *<"fopen">
8853       *<"fclose">
8854       *<"ferror">
8855       *<"fgets">
8856       *<"fgets_unlocked">
8857       *<"fileno">
8858       *<"fread">
8859       *<"getc">
8860       *<"getchar">
8861       *<"fprintf">
8862       *<"printf">
8863       *<"fwrite">
8864
8865       and of the following functions:
8866
8867       *<The built-in functions "__builtin_expect",>
8868           "__builtin_expect_with_probability", "__builtin_strchr",
8869           "__builtin_strcpy", "__builtin_strcpy_chk", "__builtin_strlen",
8870           "__builtin_va_copy", and "__builtin_va_start"
8871
8872       *<The GNU extensions "error" and "error_at_line">
8873       *<"getpass">
8874       *<"longjmp">
8875       *<"putenv">
8876       *<"setjmp">
8877       *<"siglongjmp">
8878       *<"signal">
8879       *<"sigsetjmp">
8880       *<"strchr">
8881       *<"strlen">
8882
8883       In addition, various functions with an "__analyzer_" prefix have
8884       special meaning to the analyzer, described in the GCC Internals manual.
8885
8886       Pertinent parameters for controlling the exploration are:
8887
8888       *<--param analyzer-bb-explosion-factor=value>
8889       *<--param analyzer-max-enodes-per-program-point=value>
8890       *<--param analyzer-max-recursion-depth=value>
8891       *<--param analyzer-min-snodes-for-call-summary=value>
8892
8893       The following options control the analyzer.
8894
8895       -fanalyzer-call-summaries
8896           Simplify interprocedural analysis by computing the effect of
8897           certain calls, rather than exploring all paths through the function
8898           from callsite to each possible return.
8899
8900           If enabled, call summaries are only used for functions with more
8901           than one call site, and that are sufficiently complicated (as per
8902           --param analyzer-min-snodes-for-call-summary=value).
8903
8904       -fanalyzer-checker=name
8905           Restrict the analyzer to run just the named checker, and enable it.
8906
8907           Some checkers are disabled by default (even with -fanalyzer), such
8908           as the "taint" checker that implements
8909           -Wanalyzer-tainted-array-index, and this option is required to
8910           enable them.
8911
8912           Note: currently, -fanalyzer-checker=taint disables the following
8913           warnings from -fanalyzer:
8914
8915           -Wanalyzer-deref-before-check -Wanalyzer-double-fclose
8916           -Wanalyzer-double-free -Wanalyzer-exposure-through-output-file
8917           -Wanalyzer-fd-access-mode-mismatch -Wanalyzer-fd-double-close
8918           -Wanalyzer-fd-leak -Wanalyzer-fd-use-after-close
8919           -Wanalyzer-fd-use-without-check -Wanalyzer-file-leak
8920           -Wanalyzer-free-of-non-heap -Wanalyzer-malloc-leak
8921           -Wanalyzer-mismatching-deallocation -Wanalyzer-null-argument
8922           -Wanalyzer-null-dereference -Wanalyzer-possible-null-argument
8923           -Wanalyzer-possible-null-dereference
8924           -Wanalyzer-unsafe-call-within-signal-handler
8925           -Wanalyzer-use-after-free -Wanalyzer-va-list-leak
8926           -Wanalyzer-va-list-use-after-va-end
8927
8928       -fno-analyzer-feasibility
8929           This option is intended for analyzer developers.
8930
8931           By default the analyzer verifies that there is a feasible control
8932           flow path for each diagnostic it emits: that the conditions that
8933           hold are not mutually exclusive.  Diagnostics for which no feasible
8934           path can be found are rejected.  This filtering can be suppressed
8935           with -fno-analyzer-feasibility, for debugging issues in this code.
8936
8937       -fanalyzer-fine-grained
8938           This option is intended for analyzer developers.
8939
8940           Internally the analyzer builds an "exploded graph" that combines
8941           control flow graphs with data flow information.
8942
8943           By default, an edge in this graph can contain the effects of a run
8944           of multiple statements within a basic block.  With
8945           -fanalyzer-fine-grained, each statement gets its own edge.
8946
8947       -fanalyzer-show-duplicate-count
8948           This option is intended for analyzer developers: if multiple
8949           diagnostics have been detected as being duplicates of each other,
8950           it emits a note when reporting the best diagnostic, giving the
8951           number of additional diagnostics that were suppressed by the
8952           deduplication logic.
8953
8954       -fno-analyzer-state-merge
8955           This option is intended for analyzer developers.
8956
8957           By default the analyzer attempts to simplify analysis by merging
8958           sufficiently similar states at each program point as it builds its
8959           "exploded graph".  With -fno-analyzer-state-merge this merging can
8960           be suppressed, for debugging state-handling issues.
8961
8962       -fno-analyzer-state-purge
8963           This option is intended for analyzer developers.
8964
8965           By default the analyzer attempts to simplify analysis by purging
8966           aspects of state at a program point that appear to no longer be
8967           relevant e.g. the values of locals that aren't accessed later in
8968           the function and which aren't relevant to leak analysis.
8969
8970           With -fno-analyzer-state-purge this purging of state can be
8971           suppressed, for debugging state-handling issues.
8972
8973       -fno-analyzer-suppress-followups
8974           This option is intended for analyzer developers.
8975
8976           By default the analyzer will stop exploring an execution path after
8977           encountering certain diagnostics, in order to avoid potentially
8978           issuing a cascade of follow-up diagnostics.
8979
8980           The diagnostics that terminate analysis along a path are:
8981
8982           *<-Wanalyzer-null-argument>
8983           *<-Wanalyzer-null-dereference>
8984           *<-Wanalyzer-use-after-free>
8985           *<-Wanalyzer-use-of-pointer-in-stale-stack-frame>
8986           *<-Wanalyzer-use-of-uninitialized-value>
8987
8988           With -fno-analyzer-suppress-followups the analyzer will continue to
8989           explore such paths even after such diagnostics, which may be
8990           helpful for debugging issues in the analyzer, or for
8991           microbenchmarks for detecting undefined behavior.
8992
8993       -fanalyzer-transitivity
8994           This option enables transitivity of constraints within the
8995           analyzer.
8996
8997       -fno-analyzer-undo-inlining
8998           This option is intended for analyzer developers.
8999
9000           -fanalyzer runs relatively late compared to other code analysis
9001           tools, and some optimizations have already been applied to the
9002           code.  In particular function inlining may have occurred, leading
9003           to the interprocedural execution paths emitted by the analyzer
9004           containing function frames that don't correspond to those in the
9005           original source code.
9006
9007           By default the analyzer attempts to reconstruct the original
9008           function frames, and to emit events showing the inlined calls.
9009
9010           With -fno-analyzer-undo-inlining this attempt to reconstruct the
9011           original frame information can be be disabled, which may be of help
9012           when debugging issues in the analyzer.
9013
9014       -fanalyzer-verbose-edges
9015           This option is intended for analyzer developers.  It enables more
9016           verbose, lower-level detail in the descriptions of control flow
9017           within diagnostic paths.
9018
9019       -fanalyzer-verbose-state-changes
9020           This option is intended for analyzer developers.  It enables more
9021           verbose, lower-level detail in the descriptions of events relating
9022           to state machines within diagnostic paths.
9023
9024       -fanalyzer-verbosity=level
9025           This option controls the complexity of the control flow paths that
9026           are emitted for analyzer diagnostics.
9027
9028           The level can be one of:
9029
9030           0   At this level, interprocedural call and return events are
9031               displayed, along with the most pertinent state-change events
9032               relating to a diagnostic.  For example, for a double-"free"
9033               diagnostic, both calls to "free" will be shown.
9034
9035           1   As per the previous level, but also show events for the entry
9036               to each function.
9037
9038           2   As per the previous level, but also show events relating to
9039               control flow that are significant to triggering the issue (e.g.
9040               "true path taken" at a conditional).
9041
9042               This level is the default.
9043
9044           3   As per the previous level, but show all control flow events,
9045               not just significant ones.
9046
9047           4   This level is intended for analyzer developers; it adds various
9048               other events intended for debugging the analyzer.
9049
9050       -fdump-analyzer
9051           Dump internal details about what the analyzer is doing to
9052           file.analyzer.txt.  -fdump-analyzer-stderr overrides this option.
9053
9054       -fdump-analyzer-stderr
9055           Dump internal details about what the analyzer is doing to stderr.
9056           This option overrides -fdump-analyzer.
9057
9058       -fdump-analyzer-callgraph
9059           Dump a representation of the call graph suitable for viewing with
9060           GraphViz to file.callgraph.dot.
9061
9062       -fdump-analyzer-exploded-graph
9063           Dump a representation of the "exploded graph" suitable for viewing
9064           with GraphViz to file.eg.dot.  Nodes are color-coded based on
9065           state-machine states to emphasize state changes.
9066
9067       -fdump-analyzer-exploded-nodes
9068           Emit diagnostics showing where nodes in the "exploded graph" are in
9069           relation to the program source.
9070
9071       -fdump-analyzer-exploded-nodes-2
9072           Dump a textual representation of the "exploded graph" to
9073           file.eg.txt.
9074
9075       -fdump-analyzer-exploded-nodes-3
9076           Dump a textual representation of the "exploded graph" to one dump
9077           file per node, to file.eg-id.txt.  This is typically a large number
9078           of dump files.
9079
9080       -fdump-analyzer-exploded-paths
9081           Dump a textual representation of the "exploded path" for each
9082           diagnostic to file.idx.kind.epath.txt.
9083
9084       -fdump-analyzer-feasibility
9085           Dump internal details about the analyzer's search for feasible
9086           paths.  The details are written in a form suitable for viewing with
9087           GraphViz to filenames of the form file.*.fg.dot, file.*.tg.dot, and
9088           file.*.fpath.txt.
9089
9090       -fdump-analyzer-json
9091           Dump a compressed JSON representation of analyzer internals to
9092           file.analyzer.json.gz.  The precise format is subject to change.
9093
9094       -fdump-analyzer-state-purge
9095           As per -fdump-analyzer-supergraph, dump a representation of the
9096           "supergraph" suitable for viewing with GraphViz, but annotate the
9097           graph with information on what state will be purged at each node.
9098           The graph is written to file.state-purge.dot.
9099
9100       -fdump-analyzer-supergraph
9101           Dump representations of the "supergraph" suitable for viewing with
9102           GraphViz to file.supergraph.dot and to file.supergraph-eg.dot.
9103           These show all of the control flow graphs in the program, with
9104           interprocedural edges for calls and returns.  The second dump
9105           contains annotations showing nodes in the "exploded graph" and
9106           diagnostics associated with them.
9107
9108       -fdump-analyzer-untracked
9109           Emit custom warnings with internal details intended for analyzer
9110           developers.
9111
9112   Options for Debugging Your Program
9113       To tell GCC to emit extra information for use by a debugger, in almost
9114       all cases you need only to add -g to your other options.  Some debug
9115       formats can co-exist (like DWARF with CTF) when each of them is enabled
9116       explicitly by adding the respective command line option to your other
9117       options.
9118
9119       GCC allows you to use -g with -O.  The shortcuts taken by optimized
9120       code may occasionally be surprising: some variables you declared may
9121       not exist at all; flow of control may briefly move where you did not
9122       expect it; some statements may not be executed because they compute
9123       constant results or their values are already at hand; some statements
9124       may execute in different places because they have been moved out of
9125       loops.  Nevertheless it is possible to debug optimized output.  This
9126       makes it reasonable to use the optimizer for programs that might have
9127       bugs.
9128
9129       If you are not using some other optimization option, consider using -Og
9130       with -g.  With no -O option at all, some compiler passes that collect
9131       information useful for debugging do not run at all, so that -Og may
9132       result in a better debugging experience.
9133
9134       -g  Produce debugging information in the operating system's native
9135           format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
9136           debugging information.
9137
9138           On most systems that use stabs format, -g enables use of extra
9139           debugging information that only GDB can use; this extra information
9140           makes debugging work better in GDB but probably makes other
9141           debuggers crash or refuse to read the program.  If you want to
9142           control for certain whether to generate the extra information, use
9143           -gvms (see below).
9144
9145       -ggdb
9146           Produce debugging information for use by GDB.  This means to use
9147           the most expressive format available (DWARF, stabs, or the native
9148           format if neither of those are supported), including GDB extensions
9149           if at all possible.
9150
9151       -gdwarf
9152       -gdwarf-version
9153           Produce debugging information in DWARF format (if that is
9154           supported).  The value of version may be either 2, 3, 4 or 5; the
9155           default version for most targets is 5 (with the exception of
9156           VxWorks, TPF and Darwin/Mac OS X, which default to version 2, and
9157           AIX, which defaults to version 4).
9158
9159           Note that with DWARF Version 2, some ports require and always use
9160           some non-conflicting DWARF 3 extensions in the unwind tables.
9161
9162           Version 4 may require GDB 7.0 and -fvar-tracking-assignments for
9163           maximum benefit. Version 5 requires GDB 8.0 or higher.
9164
9165           GCC no longer supports DWARF Version 1, which is substantially
9166           different than Version 2 and later.  For historical reasons, some
9167           other DWARF-related options such as -fno-dwarf2-cfi-asm) retain a
9168           reference to DWARF Version 2 in their names, but apply to all
9169           currently-supported versions of DWARF.
9170
9171       -gbtf
9172           Request BTF debug information.  BTF is the default debugging format
9173           for the eBPF target.  On other targets, like x86, BTF debug
9174           information can be generated along with DWARF debug information
9175           when both of the debug formats are enabled explicitly via their
9176           respective command line options.
9177
9178       -gctf
9179       -gctflevel
9180           Request CTF debug information and use level to specify how much CTF
9181           debug information should be produced.  If -gctf is specified
9182           without a value for level, the default level of CTF debug
9183           information is 2.
9184
9185           CTF debug information can be generated along with DWARF debug
9186           information when both of the debug formats are enabled explicitly
9187           via their respective command line options.
9188
9189           Level 0 produces no CTF debug information at all.  Thus, -gctf0
9190           negates -gctf.
9191
9192           Level 1 produces CTF information for tracebacks only.  This
9193           includes callsite information, but does not include type
9194           information.
9195
9196           Level 2 produces type information for entities (functions, data
9197           objects etc.)  at file-scope or global-scope only.
9198
9199       -gvms
9200           Produce debugging information in Alpha/VMS debug format (if that is
9201           supported).  This is the format used by DEBUG on Alpha/VMS systems.
9202
9203       -glevel
9204       -ggdblevel
9205       -gvmslevel
9206           Request debugging information and also use level to specify how
9207           much information.  The default level is 2.
9208
9209           Level 0 produces no debug information at all.  Thus, -g0 negates
9210           -g.
9211
9212           Level 1 produces minimal information, enough for making backtraces
9213           in parts of the program that you don't plan to debug.  This
9214           includes descriptions of functions and external variables, and line
9215           number tables, but no information about local variables.
9216
9217           Level 3 includes extra information, such as all the macro
9218           definitions present in the program.  Some debuggers support macro
9219           expansion when you use -g3.
9220
9221           If you use multiple -g options, with or without level numbers, the
9222           last such option is the one that is effective.
9223
9224           -gdwarf does not accept a concatenated debug level, to avoid
9225           confusion with -gdwarf-level.  Instead use an additional -glevel
9226           option to change the debug level for DWARF.
9227
9228       -fno-eliminate-unused-debug-symbols
9229           By default, no debug information is produced for symbols that are
9230           not actually used. Use this option if you want debug information
9231           for all symbols.
9232
9233       -femit-class-debug-always
9234           Instead of emitting debugging information for a C++ class in only
9235           one object file, emit it in all object files using the class.  This
9236           option should be used only with debuggers that are unable to handle
9237           the way GCC normally emits debugging information for classes
9238           because using this option increases the size of debugging
9239           information by as much as a factor of two.
9240
9241       -fno-merge-debug-strings
9242           Direct the linker to not merge together strings in the debugging
9243           information that are identical in different object files.  Merging
9244           is not supported by all assemblers or linkers.  Merging decreases
9245           the size of the debug information in the output file at the cost of
9246           increasing link processing time.  Merging is enabled by default.
9247
9248       -fdebug-prefix-map=old=new
9249           When compiling files residing in directory old, record debugging
9250           information describing them as if the files resided in directory
9251           new instead.  This can be used to replace a build-time path with an
9252           install-time path in the debug info.  It can also be used to change
9253           an absolute path to a relative path by using . for new.  This can
9254           give more reproducible builds, which are location independent, but
9255           may require an extra command to tell GDB where to find the source
9256           files. See also -ffile-prefix-map and -fcanon-prefix-map.
9257
9258       -fvar-tracking
9259           Run variable tracking pass.  It computes where variables are stored
9260           at each position in code.  Better debugging information is then
9261           generated (if the debugging information format supports this
9262           information).
9263
9264           It is enabled by default when compiling with optimization (-Os, -O,
9265           -O2, ...), debugging information (-g) and the debug info format
9266           supports it.
9267
9268       -fvar-tracking-assignments
9269           Annotate assignments to user variables early in the compilation and
9270           attempt to carry the annotations over throughout the compilation
9271           all the way to the end, in an attempt to improve debug information
9272           while optimizing.  Use of -gdwarf-4 is recommended along with it.
9273
9274           It can be enabled even if var-tracking is disabled, in which case
9275           annotations are created and maintained, but discarded at the end.
9276           By default, this flag is enabled together with -fvar-tracking,
9277           except when selective scheduling is enabled.
9278
9279       -gsplit-dwarf
9280           If DWARF debugging information is enabled, separate as much
9281           debugging information as possible into a separate output file with
9282           the extension .dwo.  This option allows the build system to avoid
9283           linking files with debug information.  To be useful, this option
9284           requires a debugger capable of reading .dwo files.
9285
9286       -gdwarf32
9287       -gdwarf64
9288           If DWARF debugging information is enabled, the -gdwarf32 selects
9289           the 32-bit DWARF format and the -gdwarf64 selects the 64-bit DWARF
9290           format.  The default is target specific, on most targets it is
9291           -gdwarf32 though.  The 32-bit DWARF format is smaller, but can't
9292           support more than 2GiB of debug information in any of the DWARF
9293           debug information sections.  The 64-bit DWARF format allows larger
9294           debug information and might not be well supported by all consumers
9295           yet.
9296
9297       -gdescribe-dies
9298           Add description attributes to some DWARF DIEs that have no name
9299           attribute, such as artificial variables, external references and
9300           call site parameter DIEs.
9301
9302       -gpubnames
9303           Generate DWARF ".debug_pubnames" and ".debug_pubtypes" sections.
9304
9305       -ggnu-pubnames
9306           Generate ".debug_pubnames" and ".debug_pubtypes" sections in a
9307           format suitable for conversion into a GDB index.  This option is
9308           only useful with a linker that can produce GDB index version 7.
9309
9310       -fdebug-types-section
9311           When using DWARF Version 4 or higher, type DIEs can be put into
9312           their own ".debug_types" section instead of making them part of the
9313           ".debug_info" section.  It is more efficient to put them in a
9314           separate comdat section since the linker can then remove
9315           duplicates.  But not all DWARF consumers support ".debug_types"
9316           sections yet and on some objects ".debug_types" produces larger
9317           instead of smaller debugging information.
9318
9319       -grecord-gcc-switches
9320       -gno-record-gcc-switches
9321           This switch causes the command-line options used to invoke the
9322           compiler that may affect code generation to be appended to the
9323           DW_AT_producer attribute in DWARF debugging information.  The
9324           options are concatenated with spaces separating them from each
9325           other and from the compiler version.  It is enabled by default.
9326           See also -frecord-gcc-switches for another way of storing compiler
9327           options into the object file.
9328
9329       -gstrict-dwarf
9330           Disallow using extensions of later DWARF standard version than
9331           selected with -gdwarf-version.  On most targets using non-
9332           conflicting DWARF extensions from later standard versions is
9333           allowed.
9334
9335       -gno-strict-dwarf
9336           Allow using extensions of later DWARF standard version than
9337           selected with -gdwarf-version.
9338
9339       -gas-loc-support
9340           Inform the compiler that the assembler supports ".loc" directives.
9341           It may then use them for the assembler to generate DWARF2+ line
9342           number tables.
9343
9344           This is generally desirable, because assembler-generated line-
9345           number tables are a lot more compact than those the compiler can
9346           generate itself.
9347
9348           This option will be enabled by default if, at GCC configure time,
9349           the assembler was found to support such directives.
9350
9351       -gno-as-loc-support
9352           Force GCC to generate DWARF2+ line number tables internally, if
9353           DWARF2+ line number tables are to be generated.
9354
9355       -gas-locview-support
9356           Inform the compiler that the assembler supports "view" assignment
9357           and reset assertion checking in ".loc" directives.
9358
9359           This option will be enabled by default if, at GCC configure time,
9360           the assembler was found to support them.
9361
9362       -gno-as-locview-support
9363           Force GCC to assign view numbers internally, if
9364           -gvariable-location-views are explicitly requested.
9365
9366       -gcolumn-info
9367       -gno-column-info
9368           Emit location column information into DWARF debugging information,
9369           rather than just file and line.  This option is enabled by default.
9370
9371       -gstatement-frontiers
9372       -gno-statement-frontiers
9373           This option causes GCC to create markers in the internal
9374           representation at the beginning of statements, and to keep them
9375           roughly in place throughout compilation, using them to guide the
9376           output of "is_stmt" markers in the line number table.  This is
9377           enabled by default when compiling with optimization (-Os, -O1, -O2,
9378           ...), and outputting DWARF 2 debug information at the normal level.
9379
9380       -gvariable-location-views
9381       -gvariable-location-views=incompat5
9382       -gno-variable-location-views
9383           Augment variable location lists with progressive view numbers
9384           implied from the line number table.  This enables debug information
9385           consumers to inspect state at certain points of the program, even
9386           if no instructions associated with the corresponding source
9387           locations are present at that point.  If the assembler lacks
9388           support for view numbers in line number tables, this will cause the
9389           compiler to emit the line number table, which generally makes them
9390           somewhat less compact.  The augmented line number tables and
9391           location lists are fully backward-compatible, so they can be
9392           consumed by debug information consumers that are not aware of these
9393           augmentations, but they won't derive any benefit from them either.
9394
9395           This is enabled by default when outputting DWARF 2 debug
9396           information at the normal level, as long as there is assembler
9397           support, -fvar-tracking-assignments is enabled and -gstrict-dwarf
9398           is not.  When assembler support is not available, this may still be
9399           enabled, but it will force GCC to output internal line number
9400           tables, and if -ginternal-reset-location-views is not enabled, that
9401           will most certainly lead to silently mismatching location views.
9402
9403           There is a proposed representation for view numbers that is not
9404           backward compatible with the location list format introduced in
9405           DWARF 5, that can be enabled with
9406           -gvariable-location-views=incompat5.  This option may be removed in
9407           the future, is only provided as a reference implementation of the
9408           proposed representation.  Debug information consumers are not
9409           expected to support this extended format, and they would be
9410           rendered unable to decode location lists using it.
9411
9412       -ginternal-reset-location-views
9413       -gno-internal-reset-location-views
9414           Attempt to determine location views that can be omitted from
9415           location view lists.  This requires the compiler to have very
9416           accurate insn length estimates, which isn't always the case, and it
9417           may cause incorrect view lists to be generated silently when using
9418           an assembler that does not support location view lists.  The GNU
9419           assembler will flag any such error as a "view number mismatch".
9420           This is only enabled on ports that define a reliable estimation
9421           function.
9422
9423       -ginline-points
9424       -gno-inline-points
9425           Generate extended debug information for inlined functions.
9426           Location view tracking markers are inserted at inlined entry
9427           points, so that address and view numbers can be computed and output
9428           in debug information.  This can be enabled independently of
9429           location views, in which case the view numbers won't be output, but
9430           it can only be enabled along with statement frontiers, and it is
9431           only enabled by default if location views are enabled.
9432
9433       -gz[=type]
9434           Produce compressed debug sections in DWARF format, if that is
9435           supported.  If type is not given, the default type depends on the
9436           capabilities of the assembler and linker used.  type may be one of
9437           none (don't compress debug sections), or zlib (use zlib compression
9438           in ELF gABI format).  If the linker doesn't support writing
9439           compressed debug sections, the option is rejected.  Otherwise, if
9440           the assembler does not support them, -gz is silently ignored when
9441           producing object files.
9442
9443       -femit-struct-debug-baseonly
9444           Emit debug information for struct-like types only when the base
9445           name of the compilation source file matches the base name of file
9446           in which the struct is defined.
9447
9448           This option substantially reduces the size of debugging
9449           information, but at significant potential loss in type information
9450           to the debugger.  See -femit-struct-debug-reduced for a less
9451           aggressive option.  See -femit-struct-debug-detailed for more
9452           detailed control.
9453
9454           This option works only with DWARF debug output.
9455
9456       -femit-struct-debug-reduced
9457           Emit debug information for struct-like types only when the base
9458           name of the compilation source file matches the base name of file
9459           in which the type is defined, unless the struct is a template or
9460           defined in a system header.
9461
9462           This option significantly reduces the size of debugging
9463           information, with some potential loss in type information to the
9464           debugger.  See -femit-struct-debug-baseonly for a more aggressive
9465           option.  See -femit-struct-debug-detailed for more detailed
9466           control.
9467
9468           This option works only with DWARF debug output.
9469
9470       -femit-struct-debug-detailed[=spec-list]
9471           Specify the struct-like types for which the compiler generates
9472           debug information.  The intent is to reduce duplicate struct debug
9473           information between different object files within the same program.
9474
9475           This option is a detailed version of -femit-struct-debug-reduced
9476           and -femit-struct-debug-baseonly, which serves for most needs.
9477
9478           A specification has the
9479           syntax[dir:|ind:][ord:|gen:](any|sys|base|none)
9480
9481           The optional first word limits the specification to structs that
9482           are used directly (dir:) or used indirectly (ind:).  A struct type
9483           is used directly when it is the type of a variable, member.
9484           Indirect uses arise through pointers to structs.  That is, when use
9485           of an incomplete struct is valid, the use is indirect.  An example
9486           is struct one direct; struct two * indirect;.
9487
9488           The optional second word limits the specification to ordinary
9489           structs (ord:) or generic structs (gen:).  Generic structs are a
9490           bit complicated to explain.  For C++, these are non-explicit
9491           specializations of template classes, or non-template classes within
9492           the above.  Other programming languages have generics, but
9493           -femit-struct-debug-detailed does not yet implement them.
9494
9495           The third word specifies the source files for those structs for
9496           which the compiler should emit debug information.  The values none
9497           and any have the normal meaning.  The value base means that the
9498           base of name of the file in which the type declaration appears must
9499           match the base of the name of the main compilation file.  In
9500           practice, this means that when compiling foo.c, debug information
9501           is generated for types declared in that file and foo.h, but not
9502           other header files.  The value sys means those types satisfying
9503           base or declared in system or compiler headers.
9504
9505           You may need to experiment to determine the best settings for your
9506           application.
9507
9508           The default is -femit-struct-debug-detailed=all.
9509
9510           This option works only with DWARF debug output.
9511
9512       -fno-dwarf2-cfi-asm
9513           Emit DWARF unwind info as compiler generated ".eh_frame" section
9514           instead of using GAS ".cfi_*" directives.
9515
9516       -fno-eliminate-unused-debug-types
9517           Normally, when producing DWARF output, GCC avoids producing debug
9518           symbol output for types that are nowhere used in the source file
9519           being compiled.  Sometimes it is useful to have GCC emit debugging
9520           information for all types declared in a compilation unit,
9521           regardless of whether or not they are actually used in that
9522           compilation unit, for example if, in the debugger, you want to cast
9523           a value to a type that is not actually used in your program (but is
9524           declared).  More often, however, this results in a significant
9525           amount of wasted space.
9526
9527   Options That Control Optimization
9528       These options control various sorts of optimizations.
9529
9530       Without any optimization option, the compiler's goal is to reduce the
9531       cost of compilation and to make debugging produce the expected results.
9532       Statements are independent: if you stop the program with a breakpoint
9533       between statements, you can then assign a new value to any variable or
9534       change the program counter to any other statement in the function and
9535       get exactly the results you expect from the source code.
9536
9537       Turning on optimization flags makes the compiler attempt to improve the
9538       performance and/or code size at the expense of compilation time and
9539       possibly the ability to debug the program.
9540
9541       The compiler performs optimization based on the knowledge it has of the
9542       program.  Compiling multiple files at once to a single output file mode
9543       allows the compiler to use information gained from all of the files
9544       when compiling each of them.
9545
9546       Not all optimizations are controlled directly by a flag.  Only
9547       optimizations that have a flag are listed in this section.
9548
9549       Most optimizations are completely disabled at -O0 or if an -O level is
9550       not set on the command line, even if individual optimization flags are
9551       specified.  Similarly, -Og suppresses many optimization passes.
9552
9553       Depending on the target and how GCC was configured, a slightly
9554       different set of optimizations may be enabled at each -O level than
9555       those listed here.  You can invoke GCC with -Q --help=optimizers to
9556       find out the exact set of optimizations that are enabled at each level.
9557
9558       -O
9559       -O1 Optimize.  Optimizing compilation takes somewhat more time, and a
9560           lot more memory for a large function.
9561
9562           With -O, the compiler tries to reduce code size and execution time,
9563           without performing any optimizations that take a great deal of
9564           compilation time.
9565
9566           -O turns on the following optimization flags:
9567
9568           -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments
9569           -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
9570           -fdse -fforward-propagate -fguess-branch-probability
9571           -fif-conversion -fif-conversion2 -finline-functions-called-once
9572           -fipa-modref -fipa-profile -fipa-pure-const -fipa-reference
9573           -fipa-reference-addressable -fmerge-constants
9574           -fmove-loop-invariants -fmove-loop-stores -fomit-frame-pointer
9575           -freorder-blocks -fshrink-wrap -fshrink-wrap-separate
9576           -fsplit-wide-types -fssa-backprop -fssa-phiopt -ftree-bit-ccp
9577           -ftree-ccp -ftree-ch -ftree-coalesce-vars -ftree-copy-prop
9578           -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
9579           -ftree-fre -ftree-phiprop -ftree-pta -ftree-scev-cprop -ftree-sink
9580           -ftree-slsr -ftree-sra -ftree-ter -funit-at-a-time
9581
9582       -O2 Optimize even more.  GCC performs nearly all supported
9583           optimizations that do not involve a space-speed tradeoff.  As
9584           compared to -O, this option increases both compilation time and the
9585           performance of the generated code.
9586
9587           -O2 turns on all optimization flags specified by -O1.  It also
9588           turns on the following optimization flags:
9589
9590           -falign-functions  -falign-jumps -falign-labels  -falign-loops
9591           -fcaller-saves -fcode-hoisting -fcrossjumping -fcse-follow-jumps
9592           -fcse-skip-blocks -fdelete-null-pointer-checks -fdevirtualize
9593           -fdevirtualize-speculatively -fexpensive-optimizations
9594           -ffinite-loops -fgcse  -fgcse-lm -fhoist-adjacent-loads
9595           -finline-functions -finline-small-functions -findirect-inlining
9596           -fipa-bit-cp  -fipa-cp  -fipa-icf -fipa-ra  -fipa-sra  -fipa-vrp
9597           -fisolate-erroneous-paths-dereference -flra-remat
9598           -foptimize-sibling-calls -foptimize-strlen -fpartial-inlining
9599           -fpeephole2 -freorder-blocks-algorithm=stc
9600           -freorder-blocks-and-partition  -freorder-functions
9601           -frerun-cse-after-loop -fschedule-insns  -fschedule-insns2
9602           -fsched-interblock  -fsched-spec -fstore-merging -fstrict-aliasing
9603           -fthread-jumps -ftree-builtin-call-dce -ftree-loop-vectorize
9604           -ftree-pre -ftree-slp-vectorize -ftree-switch-conversion
9605           -ftree-tail-merge -ftree-vrp -fvect-cost-model=very-cheap
9606
9607           Please note the warning under -fgcse about invoking -O2 on programs
9608           that use computed gotos.
9609
9610       -O3 Optimize yet more.  -O3 turns on all optimizations specified by -O2
9611           and also turns on the following optimization flags:
9612
9613           -fgcse-after-reload -fipa-cp-clone -floop-interchange
9614           -floop-unroll-and-jam -fpeel-loops -fpredictive-commoning
9615           -fsplit-loops -fsplit-paths -ftree-loop-distribution
9616           -ftree-partial-pre -funswitch-loops -fvect-cost-model=dynamic
9617           -fversion-loops-for-strides
9618
9619       -O0 Reduce compilation time and make debugging produce the expected
9620           results.  This is the default.
9621
9622       -Os Optimize for size.  -Os enables all -O2 optimizations except those
9623           that often increase code size:
9624
9625           -falign-functions  -falign-jumps -falign-labels  -falign-loops
9626           -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
9627
9628           It also enables -finline-functions, causes the compiler to tune for
9629           code size rather than execution speed, and performs further
9630           optimizations designed to reduce code size.
9631
9632       -Ofast
9633           Disregard strict standards compliance.  -Ofast enables all -O3
9634           optimizations.  It also enables optimizations that are not valid
9635           for all standard-compliant programs.  It turns on -ffast-math,
9636           -fallow-store-data-races and the Fortran-specific -fstack-arrays,
9637           unless -fmax-stack-var-size is specified, and -fno-protect-parens.
9638           It turns off -fsemantic-interposition.
9639
9640       -Og Optimize debugging experience.  -Og should be the optimization
9641           level of choice for the standard edit-compile-debug cycle, offering
9642           a reasonable level of optimization while maintaining fast
9643           compilation and a good debugging experience.  It is a better choice
9644           than -O0 for producing debuggable code because some compiler passes
9645           that collect debug information are disabled at -O0.
9646
9647           Like -O0, -Og completely disables a number of optimization passes
9648           so that individual options controlling them have no effect.
9649           Otherwise -Og enables all -O1 optimization flags except for those
9650           that may interfere with debugging:
9651
9652           -fbranch-count-reg  -fdelayed-branch -fdse  -fif-conversion
9653           -fif-conversion2 -finline-functions-called-once
9654           -fmove-loop-invariants  -fmove-loop-stores  -fssa-phiopt
9655           -ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra
9656
9657       -Oz Optimize aggressively for size rather than speed.  This may
9658           increase the number of instructions executed if those instructions
9659           require fewer bytes to encode.  -Oz behaves similarly to -Os
9660           including enabling most -O2 optimizations.
9661
9662       If you use multiple -O options, with or without level numbers, the last
9663       such option is the one that is effective.
9664
9665       Options of the form -fflag specify machine-independent flags.  Most
9666       flags have both positive and negative forms; the negative form of -ffoo
9667       is -fno-foo.  In the table below, only one of the forms is listed---the
9668       one you typically use.  You can figure out the other form by either
9669       removing no- or adding it.
9670
9671       The following options control specific optimizations.  They are either
9672       activated by -O options or are related to ones that are.  You can use
9673       the following flags in the rare cases when "fine-tuning" of
9674       optimizations to be performed is desired.
9675
9676       -fno-defer-pop
9677           For machines that must pop arguments after a function call, always
9678           pop the arguments as soon as each function returns.  At levels -O1
9679           and higher, -fdefer-pop is the default; this allows the compiler to
9680           let arguments accumulate on the stack for several function calls
9681           and pop them all at once.
9682
9683       -fforward-propagate
9684           Perform a forward propagation pass on RTL.  The pass tries to
9685           combine two instructions and checks if the result can be
9686           simplified.  If loop unrolling is active, two passes are performed
9687           and the second is scheduled after loop unrolling.
9688
9689           This option is enabled by default at optimization levels -O1, -O2,
9690           -O3, -Os.
9691
9692       -ffp-contract=style
9693           -ffp-contract=off disables floating-point expression contraction.
9694           -ffp-contract=fast enables floating-point expression contraction
9695           such as forming of fused multiply-add operations if the target has
9696           native support for them.  -ffp-contract=on enables floating-point
9697           expression contraction if allowed by the language standard.  This
9698           is currently not implemented and treated equal to
9699           -ffp-contract=off.
9700
9701           The default is -ffp-contract=fast.
9702
9703       -fomit-frame-pointer
9704           Omit the frame pointer in functions that don't need one.  This
9705           avoids the instructions to save, set up and restore the frame
9706           pointer; on many targets it also makes an extra register available.
9707
9708           On some targets this flag has no effect because the standard
9709           calling sequence always uses a frame pointer, so it cannot be
9710           omitted.
9711
9712           Note that -fno-omit-frame-pointer doesn't guarantee the frame
9713           pointer is used in all functions.  Several targets always omit the
9714           frame pointer in leaf functions.
9715
9716           Enabled by default at -O1 and higher.
9717
9718       -foptimize-sibling-calls
9719           Optimize sibling and tail recursive calls.
9720
9721           Enabled at levels -O2, -O3, -Os.
9722
9723       -foptimize-strlen
9724           Optimize various standard C string functions (e.g. "strlen",
9725           "strchr" or "strcpy") and their "_FORTIFY_SOURCE" counterparts into
9726           faster alternatives.
9727
9728           Enabled at levels -O2, -O3.
9729
9730       -fno-inline
9731           Do not expand any functions inline apart from those marked with the
9732           "always_inline" attribute.  This is the default when not
9733           optimizing.
9734
9735           Single functions can be exempted from inlining by marking them with
9736           the "noinline" attribute.
9737
9738       -finline-small-functions
9739           Integrate functions into their callers when their body is smaller
9740           than expected function call code (so overall size of program gets
9741           smaller).  The compiler heuristically decides which functions are
9742           simple enough to be worth integrating in this way.  This inlining
9743           applies to all functions, even those not declared inline.
9744
9745           Enabled at levels -O2, -O3, -Os.
9746
9747       -findirect-inlining
9748           Inline also indirect calls that are discovered to be known at
9749           compile time thanks to previous inlining.  This option has any
9750           effect only when inlining itself is turned on by the
9751           -finline-functions or -finline-small-functions options.
9752
9753           Enabled at levels -O2, -O3, -Os.
9754
9755       -finline-functions
9756           Consider all functions for inlining, even if they are not declared
9757           inline.  The compiler heuristically decides which functions are
9758           worth integrating in this way.
9759
9760           If all calls to a given function are integrated, and the function
9761           is declared "static", then the function is normally not output as
9762           assembler code in its own right.
9763
9764           Enabled at levels -O2, -O3, -Os.  Also enabled by -fprofile-use and
9765           -fauto-profile.
9766
9767       -finline-functions-called-once
9768           Consider all "static" functions called once for inlining into their
9769           caller even if they are not marked "inline".  If a call to a given
9770           function is integrated, then the function is not output as
9771           assembler code in its own right.
9772
9773           Enabled at levels -O1, -O2, -O3 and -Os, but not -Og.
9774
9775       -fearly-inlining
9776           Inline functions marked by "always_inline" and functions whose body
9777           seems smaller than the function call overhead early before doing
9778           -fprofile-generate instrumentation and real inlining pass.  Doing
9779           so makes profiling significantly cheaper and usually inlining
9780           faster on programs having large chains of nested wrapper functions.
9781
9782           Enabled by default.
9783
9784       -fipa-sra
9785           Perform interprocedural scalar replacement of aggregates, removal
9786           of unused parameters and replacement of parameters passed by
9787           reference by parameters passed by value.
9788
9789           Enabled at levels -O2, -O3 and -Os.
9790
9791       -finline-limit=n
9792           By default, GCC limits the size of functions that can be inlined.
9793           This flag allows coarse control of this limit.  n is the size of
9794           functions that can be inlined in number of pseudo instructions.
9795
9796           Inlining is actually controlled by a number of parameters, which
9797           may be specified individually by using --param name=value.  The
9798           -finline-limit=n option sets some of these parameters as follows:
9799
9800           max-inline-insns-single
9801               is set to n/2.
9802
9803           max-inline-insns-auto
9804               is set to n/2.
9805
9806           See below for a documentation of the individual parameters
9807           controlling inlining and for the defaults of these parameters.
9808
9809           Note: there may be no value to -finline-limit that results in
9810           default behavior.
9811
9812           Note: pseudo instruction represents, in this particular context, an
9813           abstract measurement of function's size.  In no way does it
9814           represent a count of assembly instructions and as such its exact
9815           meaning might change from one release to an another.
9816
9817       -fno-keep-inline-dllexport
9818           This is a more fine-grained version of -fkeep-inline-functions,
9819           which applies only to functions that are declared using the
9820           "dllexport" attribute or declspec.
9821
9822       -fkeep-inline-functions
9823           In C, emit "static" functions that are declared "inline" into the
9824           object file, even if the function has been inlined into all of its
9825           callers.  This switch does not affect functions using the "extern
9826           inline" extension in GNU C90.  In C++, emit any and all inline
9827           functions into the object file.
9828
9829       -fkeep-static-functions
9830           Emit "static" functions into the object file, even if the function
9831           is never used.
9832
9833       -fkeep-static-consts
9834           Emit variables declared "static const" when optimization isn't
9835           turned on, even if the variables aren't referenced.
9836
9837           GCC enables this option by default.  If you want to force the
9838           compiler to check if a variable is referenced, regardless of
9839           whether or not optimization is turned on, use the
9840           -fno-keep-static-consts option.
9841
9842       -fmerge-constants
9843           Attempt to merge identical constants (string constants and
9844           floating-point constants) across compilation units.
9845
9846           This option is the default for optimized compilation if the
9847           assembler and linker support it.  Use -fno-merge-constants to
9848           inhibit this behavior.
9849
9850           Enabled at levels -O1, -O2, -O3, -Os.
9851
9852       -fmerge-all-constants
9853           Attempt to merge identical constants and identical variables.
9854
9855           This option implies -fmerge-constants.  In addition to
9856           -fmerge-constants this considers e.g. even constant initialized
9857           arrays or initialized constant variables with integral or floating-
9858           point types.  Languages like C or C++ require each variable,
9859           including multiple instances of the same variable in recursive
9860           calls, to have distinct locations, so using this option results in
9861           non-conforming behavior.
9862
9863       -fmodulo-sched
9864           Perform swing modulo scheduling immediately before the first
9865           scheduling pass.  This pass looks at innermost loops and reorders
9866           their instructions by overlapping different iterations.
9867
9868       -fmodulo-sched-allow-regmoves
9869           Perform more aggressive SMS-based modulo scheduling with register
9870           moves allowed.  By setting this flag certain anti-dependences edges
9871           are deleted, which triggers the generation of reg-moves based on
9872           the life-range analysis.  This option is effective only with
9873           -fmodulo-sched enabled.
9874
9875       -fno-branch-count-reg
9876           Disable the optimization pass that scans for opportunities to use
9877           "decrement and branch" instructions on a count register instead of
9878           instruction sequences that decrement a register, compare it against
9879           zero, and then branch based upon the result.  This option is only
9880           meaningful on architectures that support such instructions, which
9881           include x86, PowerPC, IA-64 and S/390.  Note that the
9882           -fno-branch-count-reg option doesn't remove the decrement and
9883           branch instructions from the generated instruction stream
9884           introduced by other optimization passes.
9885
9886           The default is -fbranch-count-reg at -O1 and higher, except for
9887           -Og.
9888
9889       -fno-function-cse
9890           Do not put function addresses in registers; make each instruction
9891           that calls a constant function contain the function's address
9892           explicitly.
9893
9894           This option results in less efficient code, but some strange hacks
9895           that alter the assembler output may be confused by the
9896           optimizations performed when this option is not used.
9897
9898           The default is -ffunction-cse
9899
9900       -fno-zero-initialized-in-bss
9901           If the target supports a BSS section, GCC by default puts variables
9902           that are initialized to zero into BSS.  This can save space in the
9903           resulting code.
9904
9905           This option turns off this behavior because some programs
9906           explicitly rely on variables going to the data section---e.g., so
9907           that the resulting executable can find the beginning of that
9908           section and/or make assumptions based on that.
9909
9910           The default is -fzero-initialized-in-bss.
9911
9912       -fthread-jumps
9913           Perform optimizations that check to see if a jump branches to a
9914           location where another comparison subsumed by the first is found.
9915           If so, the first branch is redirected to either the destination of
9916           the second branch or a point immediately following it, depending on
9917           whether the condition is known to be true or false.
9918
9919           Enabled at levels -O1, -O2, -O3, -Os.
9920
9921       -fsplit-wide-types
9922           When using a type that occupies multiple registers, such as "long
9923           long" on a 32-bit system, split the registers apart and allocate
9924           them independently.  This normally generates better code for those
9925           types, but may make debugging more difficult.
9926
9927           Enabled at levels -O1, -O2, -O3, -Os.
9928
9929       -fsplit-wide-types-early
9930           Fully split wide types early, instead of very late.  This option
9931           has no effect unless -fsplit-wide-types is turned on.
9932
9933           This is the default on some targets.
9934
9935       -fcse-follow-jumps
9936           In common subexpression elimination (CSE), scan through jump
9937           instructions when the target of the jump is not reached by any
9938           other path.  For example, when CSE encounters an "if" statement
9939           with an "else" clause, CSE follows the jump when the condition
9940           tested is false.
9941
9942           Enabled at levels -O2, -O3, -Os.
9943
9944       -fcse-skip-blocks
9945           This is similar to -fcse-follow-jumps, but causes CSE to follow
9946           jumps that conditionally skip over blocks.  When CSE encounters a
9947           simple "if" statement with no else clause, -fcse-skip-blocks causes
9948           CSE to follow the jump around the body of the "if".
9949
9950           Enabled at levels -O2, -O3, -Os.
9951
9952       -frerun-cse-after-loop
9953           Re-run common subexpression elimination after loop optimizations
9954           are performed.
9955
9956           Enabled at levels -O2, -O3, -Os.
9957
9958       -fgcse
9959           Perform a global common subexpression elimination pass.  This pass
9960           also performs global constant and copy propagation.
9961
9962           Note: When compiling a program using computed gotos, a GCC
9963           extension, you may get better run-time performance if you disable
9964           the global common subexpression elimination pass by adding
9965           -fno-gcse to the command line.
9966
9967           Enabled at levels -O2, -O3, -Os.
9968
9969       -fgcse-lm
9970           When -fgcse-lm is enabled, global common subexpression elimination
9971           attempts to move loads that are only killed by stores into
9972           themselves.  This allows a loop containing a load/store sequence to
9973           be changed to a load outside the loop, and a copy/store within the
9974           loop.
9975
9976           Enabled by default when -fgcse is enabled.
9977
9978       -fgcse-sm
9979           When -fgcse-sm is enabled, a store motion pass is run after global
9980           common subexpression elimination.  This pass attempts to move
9981           stores out of loops.  When used in conjunction with -fgcse-lm,
9982           loops containing a load/store sequence can be changed to a load
9983           before the loop and a store after the loop.
9984
9985           Not enabled at any optimization level.
9986
9987       -fgcse-las
9988           When -fgcse-las is enabled, the global common subexpression
9989           elimination pass eliminates redundant loads that come after stores
9990           to the same memory location (both partial and full redundancies).
9991
9992           Not enabled at any optimization level.
9993
9994       -fgcse-after-reload
9995           When -fgcse-after-reload is enabled, a redundant load elimination
9996           pass is performed after reload.  The purpose of this pass is to
9997           clean up redundant spilling.
9998
9999           Enabled by -O3, -fprofile-use and -fauto-profile.
10000
10001       -faggressive-loop-optimizations
10002           This option tells the loop optimizer to use language constraints to
10003           derive bounds for the number of iterations of a loop.  This assumes
10004           that loop code does not invoke undefined behavior by for example
10005           causing signed integer overflows or out-of-bound array accesses.
10006           The bounds for the number of iterations of a loop are used to guide
10007           loop unrolling and peeling and loop exit test optimizations.  This
10008           option is enabled by default.
10009
10010       -funconstrained-commons
10011           This option tells the compiler that variables declared in common
10012           blocks (e.g. Fortran) may later be overridden with longer trailing
10013           arrays. This prevents certain optimizations that depend on knowing
10014           the array bounds.
10015
10016       -fcrossjumping
10017           Perform cross-jumping transformation.  This transformation unifies
10018           equivalent code and saves code size.  The resulting code may or may
10019           not perform better than without cross-jumping.
10020
10021           Enabled at levels -O2, -O3, -Os.
10022
10023       -fauto-inc-dec
10024           Combine increments or decrements of addresses with memory accesses.
10025           This pass is always skipped on architectures that do not have
10026           instructions to support this.  Enabled by default at -O1 and higher
10027           on architectures that support this.
10028
10029       -fdce
10030           Perform dead code elimination (DCE) on RTL.  Enabled by default at
10031           -O1 and higher.
10032
10033       -fdse
10034           Perform dead store elimination (DSE) on RTL.  Enabled by default at
10035           -O1 and higher.
10036
10037       -fif-conversion
10038           Attempt to transform conditional jumps into branch-less
10039           equivalents.  This includes use of conditional moves, min, max, set
10040           flags and abs instructions, and some tricks doable by standard
10041           arithmetics.  The use of conditional execution on chips where it is
10042           available is controlled by -fif-conversion2.
10043
10044           Enabled at levels -O1, -O2, -O3, -Os, but not with -Og.
10045
10046       -fif-conversion2
10047           Use conditional execution (where available) to transform
10048           conditional jumps into branch-less equivalents.
10049
10050           Enabled at levels -O1, -O2, -O3, -Os, but not with -Og.
10051
10052       -fdeclone-ctor-dtor
10053           The C++ ABI requires multiple entry points for constructors and
10054           destructors: one for a base subobject, one for a complete object,
10055           and one for a virtual destructor that calls operator delete
10056           afterwards.  For a hierarchy with virtual bases, the base and
10057           complete variants are clones, which means two copies of the
10058           function.  With this option, the base and complete variants are
10059           changed to be thunks that call a common implementation.
10060
10061           Enabled by -Os.
10062
10063       -fdelete-null-pointer-checks
10064           Assume that programs cannot safely dereference null pointers, and
10065           that no code or data element resides at address zero.  This option
10066           enables simple constant folding optimizations at all optimization
10067           levels.  In addition, other optimization passes in GCC use this
10068           flag to control global dataflow analyses that eliminate useless
10069           checks for null pointers; these assume that a memory access to
10070           address zero always results in a trap, so that if a pointer is
10071           checked after it has already been dereferenced, it cannot be null.
10072
10073           Note however that in some environments this assumption is not true.
10074           Use -fno-delete-null-pointer-checks to disable this optimization
10075           for programs that depend on that behavior.
10076
10077           This option is enabled by default on most targets.  On Nios II ELF,
10078           it defaults to off.  On AVR and MSP430, this option is completely
10079           disabled.
10080
10081           Passes that use the dataflow information are enabled independently
10082           at different optimization levels.
10083
10084       -fdevirtualize
10085           Attempt to convert calls to virtual functions to direct calls.
10086           This is done both within a procedure and interprocedurally as part
10087           of indirect inlining (-findirect-inlining) and interprocedural
10088           constant propagation (-fipa-cp).  Enabled at levels -O2, -O3, -Os.
10089
10090       -fdevirtualize-speculatively
10091           Attempt to convert calls to virtual functions to speculative direct
10092           calls.  Based on the analysis of the type inheritance graph,
10093           determine for a given call the set of likely targets. If the set is
10094           small, preferably of size 1, change the call into a conditional
10095           deciding between direct and indirect calls.  The speculative calls
10096           enable more optimizations, such as inlining.  When they seem
10097           useless after further optimization, they are converted back into
10098           original form.
10099
10100       -fdevirtualize-at-ltrans
10101           Stream extra information needed for aggressive devirtualization
10102           when running the link-time optimizer in local transformation mode.
10103           This option enables more devirtualization but significantly
10104           increases the size of streamed data. For this reason it is disabled
10105           by default.
10106
10107       -fexpensive-optimizations
10108           Perform a number of minor optimizations that are relatively
10109           expensive.
10110
10111           Enabled at levels -O2, -O3, -Os.
10112
10113       -free
10114           Attempt to remove redundant extension instructions.  This is
10115           especially helpful for the x86-64 architecture, which implicitly
10116           zero-extends in 64-bit registers after writing to their lower
10117           32-bit half.
10118
10119           Enabled for Alpha, AArch64 and x86 at levels -O2, -O3, -Os.
10120
10121       -fno-lifetime-dse
10122           In C++ the value of an object is only affected by changes within
10123           its lifetime: when the constructor begins, the object has an
10124           indeterminate value, and any changes during the lifetime of the
10125           object are dead when the object is destroyed.  Normally dead store
10126           elimination will take advantage of this; if your code relies on the
10127           value of the object storage persisting beyond the lifetime of the
10128           object, you can use this flag to disable this optimization.  To
10129           preserve stores before the constructor starts (e.g. because your
10130           operator new clears the object storage) but still treat the object
10131           as dead after the destructor, you can use -flifetime-dse=1.  The
10132           default behavior can be explicitly selected with -flifetime-dse=2.
10133           -flifetime-dse=0 is equivalent to -fno-lifetime-dse.
10134
10135       -flive-range-shrinkage
10136           Attempt to decrease register pressure through register live range
10137           shrinkage.  This is helpful for fast processors with small or
10138           moderate size register sets.
10139
10140       -fira-algorithm=algorithm
10141           Use the specified coloring algorithm for the integrated register
10142           allocator.  The algorithm argument can be priority, which specifies
10143           Chow's priority coloring, or CB, which specifies Chaitin-Briggs
10144           coloring.  Chaitin-Briggs coloring is not implemented for all
10145           architectures, but for those targets that do support it, it is the
10146           default because it generates better code.
10147
10148       -fira-region=region
10149           Use specified regions for the integrated register allocator.  The
10150           region argument should be one of the following:
10151
10152           all Use all loops as register allocation regions.  This can give
10153               the best results for machines with a small and/or irregular
10154               register set.
10155
10156           mixed
10157               Use all loops except for loops with small register pressure as
10158               the regions.  This value usually gives the best results in most
10159               cases and for most architectures, and is enabled by default
10160               when compiling with optimization for speed (-O, -O2, ...).
10161
10162           one Use all functions as a single region.  This typically results
10163               in the smallest code size, and is enabled by default for -Os or
10164               -O0.
10165
10166       -fira-hoist-pressure
10167           Use IRA to evaluate register pressure in the code hoisting pass for
10168           decisions to hoist expressions.  This option usually results in
10169           smaller code, but it can slow the compiler down.
10170
10171           This option is enabled at level -Os for all targets.
10172
10173       -fira-loop-pressure
10174           Use IRA to evaluate register pressure in loops for decisions to
10175           move loop invariants.  This option usually results in generation of
10176           faster and smaller code on machines with large register files (>=
10177           32 registers), but it can slow the compiler down.
10178
10179           This option is enabled at level -O3 for some targets.
10180
10181       -fno-ira-share-save-slots
10182           Disable sharing of stack slots used for saving call-used hard
10183           registers living through a call.  Each hard register gets a
10184           separate stack slot, and as a result function stack frames are
10185           larger.
10186
10187       -fno-ira-share-spill-slots
10188           Disable sharing of stack slots allocated for pseudo-registers.
10189           Each pseudo-register that does not get a hard register gets a
10190           separate stack slot, and as a result function stack frames are
10191           larger.
10192
10193       -flra-remat
10194           Enable CFG-sensitive rematerialization in LRA.  Instead of loading
10195           values of spilled pseudos, LRA tries to rematerialize (recalculate)
10196           values if it is profitable.
10197
10198           Enabled at levels -O2, -O3, -Os.
10199
10200       -fdelayed-branch
10201           If supported for the target machine, attempt to reorder
10202           instructions to exploit instruction slots available after delayed
10203           branch instructions.
10204
10205           Enabled at levels -O1, -O2, -O3, -Os, but not at -Og.
10206
10207       -fschedule-insns
10208           If supported for the target machine, attempt to reorder
10209           instructions to eliminate execution stalls due to required data
10210           being unavailable.  This helps machines that have slow floating
10211           point or memory load instructions by allowing other instructions to
10212           be issued until the result of the load or floating-point
10213           instruction is required.
10214
10215           Enabled at levels -O2, -O3.
10216
10217       -fschedule-insns2
10218           Similar to -fschedule-insns, but requests an additional pass of
10219           instruction scheduling after register allocation has been done.
10220           This is especially useful on machines with a relatively small
10221           number of registers and where memory load instructions take more
10222           than one cycle.
10223
10224           Enabled at levels -O2, -O3, -Os.
10225
10226       -fno-sched-interblock
10227           Disable instruction scheduling across basic blocks, which is
10228           normally enabled when scheduling before register allocation, i.e.
10229           with -fschedule-insns or at -O2 or higher.
10230
10231       -fno-sched-spec
10232           Disable speculative motion of non-load instructions, which is
10233           normally enabled when scheduling before register allocation, i.e.
10234           with -fschedule-insns or at -O2 or higher.
10235
10236       -fsched-pressure
10237           Enable register pressure sensitive insn scheduling before register
10238           allocation.  This only makes sense when scheduling before register
10239           allocation is enabled, i.e. with -fschedule-insns or at -O2 or
10240           higher.  Usage of this option can improve the generated code and
10241           decrease its size by preventing register pressure increase above
10242           the number of available hard registers and subsequent spills in
10243           register allocation.
10244
10245       -fsched-spec-load
10246           Allow speculative motion of some load instructions.  This only
10247           makes sense when scheduling before register allocation, i.e. with
10248           -fschedule-insns or at -O2 or higher.
10249
10250       -fsched-spec-load-dangerous
10251           Allow speculative motion of more load instructions.  This only
10252           makes sense when scheduling before register allocation, i.e. with
10253           -fschedule-insns or at -O2 or higher.
10254
10255       -fsched-stalled-insns
10256       -fsched-stalled-insns=n
10257           Define how many insns (if any) can be moved prematurely from the
10258           queue of stalled insns into the ready list during the second
10259           scheduling pass.  -fno-sched-stalled-insns means that no insns are
10260           moved prematurely, -fsched-stalled-insns=0 means there is no limit
10261           on how many queued insns can be moved prematurely.
10262           -fsched-stalled-insns without a value is equivalent to
10263           -fsched-stalled-insns=1.
10264
10265       -fsched-stalled-insns-dep
10266       -fsched-stalled-insns-dep=n
10267           Define how many insn groups (cycles) are examined for a dependency
10268           on a stalled insn that is a candidate for premature removal from
10269           the queue of stalled insns.  This has an effect only during the
10270           second scheduling pass, and only if -fsched-stalled-insns is used.
10271           -fno-sched-stalled-insns-dep is equivalent to
10272           -fsched-stalled-insns-dep=0.  -fsched-stalled-insns-dep without a
10273           value is equivalent to -fsched-stalled-insns-dep=1.
10274
10275       -fsched2-use-superblocks
10276           When scheduling after register allocation, use superblock
10277           scheduling.  This allows motion across basic block boundaries,
10278           resulting in faster schedules.  This option is experimental, as not
10279           all machine descriptions used by GCC model the CPU closely enough
10280           to avoid unreliable results from the algorithm.
10281
10282           This only makes sense when scheduling after register allocation,
10283           i.e. with -fschedule-insns2 or at -O2 or higher.
10284
10285       -fsched-group-heuristic
10286           Enable the group heuristic in the scheduler.  This heuristic favors
10287           the instruction that belongs to a schedule group.  This is enabled
10288           by default when scheduling is enabled, i.e. with -fschedule-insns
10289           or -fschedule-insns2 or at -O2 or higher.
10290
10291       -fsched-critical-path-heuristic
10292           Enable the critical-path heuristic in the scheduler.  This
10293           heuristic favors instructions on the critical path.  This is
10294           enabled by default when scheduling is enabled, i.e. with
10295           -fschedule-insns or -fschedule-insns2 or at -O2 or higher.
10296
10297       -fsched-spec-insn-heuristic
10298           Enable the speculative instruction heuristic in the scheduler.
10299           This heuristic favors speculative instructions with greater
10300           dependency weakness.  This is enabled by default when scheduling is
10301           enabled, i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2
10302           or higher.
10303
10304       -fsched-rank-heuristic
10305           Enable the rank heuristic in the scheduler.  This heuristic favors
10306           the instruction belonging to a basic block with greater size or
10307           frequency.  This is enabled by default when scheduling is enabled,
10308           i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2 or
10309           higher.
10310
10311       -fsched-last-insn-heuristic
10312           Enable the last-instruction heuristic in the scheduler.  This
10313           heuristic favors the instruction that is less dependent on the last
10314           instruction scheduled.  This is enabled by default when scheduling
10315           is enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at
10316           -O2 or higher.
10317
10318       -fsched-dep-count-heuristic
10319           Enable the dependent-count heuristic in the scheduler.  This
10320           heuristic favors the instruction that has more instructions
10321           depending on it.  This is enabled by default when scheduling is
10322           enabled, i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2
10323           or higher.
10324
10325       -freschedule-modulo-scheduled-loops
10326           Modulo scheduling is performed before traditional scheduling.  If a
10327           loop is modulo scheduled, later scheduling passes may change its
10328           schedule.  Use this option to control that behavior.
10329
10330       -fselective-scheduling
10331           Schedule instructions using selective scheduling algorithm.
10332           Selective scheduling runs instead of the first scheduler pass.
10333
10334       -fselective-scheduling2
10335           Schedule instructions using selective scheduling algorithm.
10336           Selective scheduling runs instead of the second scheduler pass.
10337
10338       -fsel-sched-pipelining
10339           Enable software pipelining of innermost loops during selective
10340           scheduling.  This option has no effect unless one of
10341           -fselective-scheduling or -fselective-scheduling2 is turned on.
10342
10343       -fsel-sched-pipelining-outer-loops
10344           When pipelining loops during selective scheduling, also pipeline
10345           outer loops.  This option has no effect unless
10346           -fsel-sched-pipelining is turned on.
10347
10348       -fsemantic-interposition
10349           Some object formats, like ELF, allow interposing of symbols by the
10350           dynamic linker.  This means that for symbols exported from the DSO,
10351           the compiler cannot perform interprocedural propagation, inlining
10352           and other optimizations in anticipation that the function or
10353           variable in question may change. While this feature is useful, for
10354           example, to rewrite memory allocation functions by a debugging
10355           implementation, it is expensive in the terms of code quality.  With
10356           -fno-semantic-interposition the compiler assumes that if
10357           interposition happens for functions the overwriting function will
10358           have precisely the same semantics (and side effects).  Similarly if
10359           interposition happens for variables, the constructor of the
10360           variable will be the same. The flag has no effect for functions
10361           explicitly declared inline (where it is never allowed for
10362           interposition to change semantics) and for symbols explicitly
10363           declared weak.
10364
10365       -fshrink-wrap
10366           Emit function prologues only before parts of the function that need
10367           it, rather than at the top of the function.  This flag is enabled
10368           by default at -O and higher.
10369
10370       -fshrink-wrap-separate
10371           Shrink-wrap separate parts of the prologue and epilogue separately,
10372           so that those parts are only executed when needed.  This option is
10373           on by default, but has no effect unless -fshrink-wrap is also
10374           turned on and the target supports this.
10375
10376       -fcaller-saves
10377           Enable allocation of values to registers that are clobbered by
10378           function calls, by emitting extra instructions to save and restore
10379           the registers around such calls.  Such allocation is done only when
10380           it seems to result in better code.
10381
10382           This option is always enabled by default on certain machines,
10383           usually those which have no call-preserved registers to use
10384           instead.
10385
10386           Enabled at levels -O2, -O3, -Os.
10387
10388       -fcombine-stack-adjustments
10389           Tracks stack adjustments (pushes and pops) and stack memory
10390           references and then tries to find ways to combine them.
10391
10392           Enabled by default at -O1 and higher.
10393
10394       -fipa-ra
10395           Use caller save registers for allocation if those registers are not
10396           used by any called function.  In that case it is not necessary to
10397           save and restore them around calls.  This is only possible if
10398           called functions are part of same compilation unit as current
10399           function and they are compiled before it.
10400
10401           Enabled at levels -O2, -O3, -Os, however the option is disabled if
10402           generated code will be instrumented for profiling (-p, or -pg) or
10403           if callee's register usage cannot be known exactly (this happens on
10404           targets that do not expose prologues and epilogues in RTL).
10405
10406       -fconserve-stack
10407           Attempt to minimize stack usage.  The compiler attempts to use less
10408           stack space, even if that makes the program slower.  This option
10409           implies setting the large-stack-frame parameter to 100 and the
10410           large-stack-frame-growth parameter to 400.
10411
10412       -ftree-reassoc
10413           Perform reassociation on trees.  This flag is enabled by default at
10414           -O1 and higher.
10415
10416       -fcode-hoisting
10417           Perform code hoisting.  Code hoisting tries to move the evaluation
10418           of expressions executed on all paths to the function exit as early
10419           as possible.  This is especially useful as a code size
10420           optimization, but it often helps for code speed as well.  This flag
10421           is enabled by default at -O2 and higher.
10422
10423       -ftree-pre
10424           Perform partial redundancy elimination (PRE) on trees.  This flag
10425           is enabled by default at -O2 and -O3.
10426
10427       -ftree-partial-pre
10428           Make partial redundancy elimination (PRE) more aggressive.  This
10429           flag is enabled by default at -O3.
10430
10431       -ftree-forwprop
10432           Perform forward propagation on trees.  This flag is enabled by
10433           default at -O1 and higher.
10434
10435       -ftree-fre
10436           Perform full redundancy elimination (FRE) on trees.  The difference
10437           between FRE and PRE is that FRE only considers expressions that are
10438           computed on all paths leading to the redundant computation.  This
10439           analysis is faster than PRE, though it exposes fewer redundancies.
10440           This flag is enabled by default at -O1 and higher.
10441
10442       -ftree-phiprop
10443           Perform hoisting of loads from conditional pointers on trees.  This
10444           pass is enabled by default at -O1 and higher.
10445
10446       -fhoist-adjacent-loads
10447           Speculatively hoist loads from both branches of an if-then-else if
10448           the loads are from adjacent locations in the same structure and the
10449           target architecture has a conditional move instruction.  This flag
10450           is enabled by default at -O2 and higher.
10451
10452       -ftree-copy-prop
10453           Perform copy propagation on trees.  This pass eliminates
10454           unnecessary copy operations.  This flag is enabled by default at
10455           -O1 and higher.
10456
10457       -fipa-pure-const
10458           Discover which functions are pure or constant.  Enabled by default
10459           at -O1 and higher.
10460
10461       -fipa-reference
10462           Discover which static variables do not escape the compilation unit.
10463           Enabled by default at -O1 and higher.
10464
10465       -fipa-reference-addressable
10466           Discover read-only, write-only and non-addressable static
10467           variables.  Enabled by default at -O1 and higher.
10468
10469       -fipa-stack-alignment
10470           Reduce stack alignment on call sites if possible.  Enabled by
10471           default.
10472
10473       -fipa-pta
10474           Perform interprocedural pointer analysis and interprocedural
10475           modification and reference analysis.  This option can cause
10476           excessive memory and compile-time usage on large compilation units.
10477           It is not enabled by default at any optimization level.
10478
10479       -fipa-profile
10480           Perform interprocedural profile propagation.  The functions called
10481           only from cold functions are marked as cold. Also functions
10482           executed once (such as "cold", "noreturn", static constructors or
10483           destructors) are identified. Cold functions and loop less parts of
10484           functions executed once are then optimized for size.  Enabled by
10485           default at -O1 and higher.
10486
10487       -fipa-modref
10488           Perform interprocedural mod/ref analysis.  This optimization
10489           analyzes the side effects of functions (memory locations that are
10490           modified or referenced) and enables better optimization across the
10491           function call boundary.  This flag is enabled by default at -O1 and
10492           higher.
10493
10494       -fipa-cp
10495           Perform interprocedural constant propagation.  This optimization
10496           analyzes the program to determine when values passed to functions
10497           are constants and then optimizes accordingly.  This optimization
10498           can substantially increase performance if the application has
10499           constants passed to functions.  This flag is enabled by default at
10500           -O2, -Os and -O3.  It is also enabled by -fprofile-use and
10501           -fauto-profile.
10502
10503       -fipa-cp-clone
10504           Perform function cloning to make interprocedural constant
10505           propagation stronger.  When enabled, interprocedural constant
10506           propagation performs function cloning when externally visible
10507           function can be called with constant arguments.  Because this
10508           optimization can create multiple copies of functions, it may
10509           significantly increase code size (see --param
10510           ipa-cp-unit-growth=value).  This flag is enabled by default at -O3.
10511           It is also enabled by -fprofile-use and -fauto-profile.
10512
10513       -fipa-bit-cp
10514           When enabled, perform interprocedural bitwise constant propagation.
10515           This flag is enabled by default at -O2 and by -fprofile-use and
10516           -fauto-profile.  It requires that -fipa-cp is enabled.
10517
10518       -fipa-vrp
10519           When enabled, perform interprocedural propagation of value ranges.
10520           This flag is enabled by default at -O2. It requires that -fipa-cp
10521           is enabled.
10522
10523       -fipa-icf
10524           Perform Identical Code Folding for functions and read-only
10525           variables.  The optimization reduces code size and may disturb
10526           unwind stacks by replacing a function by equivalent one with a
10527           different name. The optimization works more effectively with link-
10528           time optimization enabled.
10529
10530           Although the behavior is similar to the Gold Linker's ICF
10531           optimization, GCC ICF works on different levels and thus the
10532           optimizations are not same - there are equivalences that are found
10533           only by GCC and equivalences found only by Gold.
10534
10535           This flag is enabled by default at -O2 and -Os.
10536
10537       -flive-patching=level
10538           Control GCC's optimizations to produce output suitable for live-
10539           patching.
10540
10541           If the compiler's optimization uses a function's body or
10542           information extracted from its body to optimize/change another
10543           function, the latter is called an impacted function of the former.
10544           If a function is patched, its impacted functions should be patched
10545           too.
10546
10547           The impacted functions are determined by the compiler's
10548           interprocedural optimizations.  For example, a caller is impacted
10549           when inlining a function into its caller, cloning a function and
10550           changing its caller to call this new clone, or extracting a
10551           function's pureness/constness information to optimize its direct or
10552           indirect callers, etc.
10553
10554           Usually, the more IPA optimizations enabled, the larger the number
10555           of impacted functions for each function.  In order to control the
10556           number of impacted functions and more easily compute the list of
10557           impacted function, IPA optimizations can be partially enabled at
10558           two different levels.
10559
10560           The level argument should be one of the following:
10561
10562           inline-clone
10563               Only enable inlining and cloning optimizations, which includes
10564               inlining, cloning, interprocedural scalar replacement of
10565               aggregates and partial inlining.  As a result, when patching a
10566               function, all its callers and its clones' callers are impacted,
10567               therefore need to be patched as well.
10568
10569               -flive-patching=inline-clone disables the following
10570               optimization flags: -fwhole-program  -fipa-pta  -fipa-reference
10571               -fipa-ra -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
10572               -fipa-bit-cp  -fipa-vrp  -fipa-pure-const
10573               -fipa-reference-addressable -fipa-stack-alignment -fipa-modref
10574
10575           inline-only-static
10576               Only enable inlining of static functions.  As a result, when
10577               patching a static function, all its callers are impacted and so
10578               need to be patched as well.
10579
10580               In addition to all the flags that -flive-patching=inline-clone
10581               disables, -flive-patching=inline-only-static disables the
10582               following additional optimization flags: -fipa-cp-clone
10583               -fipa-sra  -fpartial-inlining  -fipa-cp
10584
10585           When -flive-patching is specified without any value, the default
10586           value is inline-clone.
10587
10588           This flag is disabled by default.
10589
10590           Note that -flive-patching is not supported with link-time
10591           optimization (-flto).
10592
10593       -fisolate-erroneous-paths-dereference
10594           Detect paths that trigger erroneous or undefined behavior due to
10595           dereferencing a null pointer.  Isolate those paths from the main
10596           control flow and turn the statement with erroneous or undefined
10597           behavior into a trap.  This flag is enabled by default at -O2 and
10598           higher and depends on -fdelete-null-pointer-checks also being
10599           enabled.
10600
10601       -fisolate-erroneous-paths-attribute
10602           Detect paths that trigger erroneous or undefined behavior due to a
10603           null value being used in a way forbidden by a "returns_nonnull" or
10604           "nonnull" attribute.  Isolate those paths from the main control
10605           flow and turn the statement with erroneous or undefined behavior
10606           into a trap.  This is not currently enabled, but may be enabled by
10607           -O2 in the future.
10608
10609       -ftree-sink
10610           Perform forward store motion on trees.  This flag is enabled by
10611           default at -O1 and higher.
10612
10613       -ftree-bit-ccp
10614           Perform sparse conditional bit constant propagation on trees and
10615           propagate pointer alignment information.  This pass only operates
10616           on local scalar variables and is enabled by default at -O1 and
10617           higher, except for -Og.  It requires that -ftree-ccp is enabled.
10618
10619       -ftree-ccp
10620           Perform sparse conditional constant propagation (CCP) on trees.
10621           This pass only operates on local scalar variables and is enabled by
10622           default at -O1 and higher.
10623
10624       -fssa-backprop
10625           Propagate information about uses of a value up the definition chain
10626           in order to simplify the definitions.  For example, this pass
10627           strips sign operations if the sign of a value never matters.  The
10628           flag is enabled by default at -O1 and higher.
10629
10630       -fssa-phiopt
10631           Perform pattern matching on SSA PHI nodes to optimize conditional
10632           code.  This pass is enabled by default at -O1 and higher, except
10633           for -Og.
10634
10635       -ftree-switch-conversion
10636           Perform conversion of simple initializations in a switch to
10637           initializations from a scalar array.  This flag is enabled by
10638           default at -O2 and higher.
10639
10640       -ftree-tail-merge
10641           Look for identical code sequences.  When found, replace one with a
10642           jump to the other.  This optimization is known as tail merging or
10643           cross jumping.  This flag is enabled by default at -O2 and higher.
10644           The compilation time in this pass can be limited using max-tail-
10645           merge-comparisons parameter and max-tail-merge-iterations
10646           parameter.
10647
10648       -ftree-dce
10649           Perform dead code elimination (DCE) on trees.  This flag is enabled
10650           by default at -O1 and higher.
10651
10652       -ftree-builtin-call-dce
10653           Perform conditional dead code elimination (DCE) for calls to built-
10654           in functions that may set "errno" but are otherwise free of side
10655           effects.  This flag is enabled by default at -O2 and higher if -Os
10656           is not also specified.
10657
10658       -ffinite-loops
10659           Assume that a loop with an exit will eventually take the exit and
10660           not loop indefinitely.  This allows the compiler to remove loops
10661           that otherwise have no side-effects, not considering eventual
10662           endless looping as such.
10663
10664           This option is enabled by default at -O2 for C++ with -std=c++11 or
10665           higher.
10666
10667       -ftree-dominator-opts
10668           Perform a variety of simple scalar cleanups (constant/copy
10669           propagation, redundancy elimination, range propagation and
10670           expression simplification) based on a dominator tree traversal.
10671           This also performs jump threading (to reduce jumps to jumps). This
10672           flag is enabled by default at -O1 and higher.
10673
10674       -ftree-dse
10675           Perform dead store elimination (DSE) on trees.  A dead store is a
10676           store into a memory location that is later overwritten by another
10677           store without any intervening loads.  In this case the earlier
10678           store can be deleted.  This flag is enabled by default at -O1 and
10679           higher.
10680
10681       -ftree-ch
10682           Perform loop header copying on trees.  This is beneficial since it
10683           increases effectiveness of code motion optimizations.  It also
10684           saves one jump.  This flag is enabled by default at -O1 and higher.
10685           It is not enabled for -Os, since it usually increases code size.
10686
10687       -ftree-loop-optimize
10688           Perform loop optimizations on trees.  This flag is enabled by
10689           default at -O1 and higher.
10690
10691       -ftree-loop-linear
10692       -floop-strip-mine
10693       -floop-block
10694           Perform loop nest optimizations.  Same as -floop-nest-optimize.  To
10695           use this code transformation, GCC has to be configured with
10696           --with-isl to enable the Graphite loop transformation
10697           infrastructure.
10698
10699       -fgraphite-identity
10700           Enable the identity transformation for graphite.  For every SCoP we
10701           generate the polyhedral representation and transform it back to
10702           gimple.  Using -fgraphite-identity we can check the costs or
10703           benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
10704           minimal optimizations are also performed by the code generator isl,
10705           like index splitting and dead code elimination in loops.
10706
10707       -floop-nest-optimize
10708           Enable the isl based loop nest optimizer.  This is a generic loop
10709           nest optimizer based on the Pluto optimization algorithms.  It
10710           calculates a loop structure optimized for data-locality and
10711           parallelism.  This option is experimental.
10712
10713       -floop-parallelize-all
10714           Use the Graphite data dependence analysis to identify loops that
10715           can be parallelized.  Parallelize all the loops that can be
10716           analyzed to not contain loop carried dependences without checking
10717           that it is profitable to parallelize the loops.
10718
10719       -ftree-coalesce-vars
10720           While transforming the program out of the SSA representation,
10721           attempt to reduce copying by coalescing versions of different user-
10722           defined variables, instead of just compiler temporaries.  This may
10723           severely limit the ability to debug an optimized program compiled
10724           with -fno-var-tracking-assignments.  In the negated form, this flag
10725           prevents SSA coalescing of user variables.  This option is enabled
10726           by default if optimization is enabled, and it does very little
10727           otherwise.
10728
10729       -ftree-loop-if-convert
10730           Attempt to transform conditional jumps in the innermost loops to
10731           branch-less equivalents.  The intent is to remove control-flow from
10732           the innermost loops in order to improve the ability of the
10733           vectorization pass to handle these loops.  This is enabled by
10734           default if vectorization is enabled.
10735
10736       -ftree-loop-distribution
10737           Perform loop distribution.  This flag can improve cache performance
10738           on big loop bodies and allow further loop optimizations, like
10739           parallelization or vectorization, to take place.  For example, the
10740           loop
10741
10742                   DO I = 1, N
10743                     A(I) = B(I) + C
10744                     D(I) = E(I) * F
10745                   ENDDO
10746
10747           is transformed to
10748
10749                   DO I = 1, N
10750                      A(I) = B(I) + C
10751                   ENDDO
10752                   DO I = 1, N
10753                      D(I) = E(I) * F
10754                   ENDDO
10755
10756           This flag is enabled by default at -O3.  It is also enabled by
10757           -fprofile-use and -fauto-profile.
10758
10759       -ftree-loop-distribute-patterns
10760           Perform loop distribution of patterns that can be code generated
10761           with calls to a library.  This flag is enabled by default at -O2
10762           and higher, and by -fprofile-use and -fauto-profile.
10763
10764           This pass distributes the initialization loops and generates a call
10765           to memset zero.  For example, the loop
10766
10767                   DO I = 1, N
10768                     A(I) = 0
10769                     B(I) = A(I) + I
10770                   ENDDO
10771
10772           is transformed to
10773
10774                   DO I = 1, N
10775                      A(I) = 0
10776                   ENDDO
10777                   DO I = 1, N
10778                      B(I) = A(I) + I
10779                   ENDDO
10780
10781           and the initialization loop is transformed into a call to memset
10782           zero.  This flag is enabled by default at -O3.  It is also enabled
10783           by -fprofile-use and -fauto-profile.
10784
10785       -floop-interchange
10786           Perform loop interchange outside of graphite.  This flag can
10787           improve cache performance on loop nest and allow further loop
10788           optimizations, like vectorization, to take place.  For example, the
10789           loop
10790
10791                   for (int i = 0; i < N; i++)
10792                     for (int j = 0; j < N; j++)
10793                       for (int k = 0; k < N; k++)
10794                         c[i][j] = c[i][j] + a[i][k]*b[k][j];
10795
10796           is transformed to
10797
10798                   for (int i = 0; i < N; i++)
10799                     for (int k = 0; k < N; k++)
10800                       for (int j = 0; j < N; j++)
10801                         c[i][j] = c[i][j] + a[i][k]*b[k][j];
10802
10803           This flag is enabled by default at -O3.  It is also enabled by
10804           -fprofile-use and -fauto-profile.
10805
10806       -floop-unroll-and-jam
10807           Apply unroll and jam transformations on feasible loops.  In a loop
10808           nest this unrolls the outer loop by some factor and fuses the
10809           resulting multiple inner loops.  This flag is enabled by default at
10810           -O3.  It is also enabled by -fprofile-use and -fauto-profile.
10811
10812       -ftree-loop-im
10813           Perform loop invariant motion on trees.  This pass moves only
10814           invariants that are hard to handle at RTL level (function calls,
10815           operations that expand to nontrivial sequences of insns).  With
10816           -funswitch-loops it also moves operands of conditions that are
10817           invariant out of the loop, so that we can use just trivial
10818           invariantness analysis in loop unswitching.  The pass also includes
10819           store motion.
10820
10821       -ftree-loop-ivcanon
10822           Create a canonical counter for number of iterations in loops for
10823           which determining number of iterations requires complicated
10824           analysis.  Later optimizations then may determine the number
10825           easily.  Useful especially in connection with unrolling.
10826
10827       -ftree-scev-cprop
10828           Perform final value replacement.  If a variable is modified in a
10829           loop in such a way that its value when exiting the loop can be
10830           determined using only its initial value and the number of loop
10831           iterations, replace uses of the final value by such a computation,
10832           provided it is sufficiently cheap.  This reduces data dependencies
10833           and may allow further simplifications.  Enabled by default at -O1
10834           and higher.
10835
10836       -fivopts
10837           Perform induction variable optimizations (strength reduction,
10838           induction variable merging and induction variable elimination) on
10839           trees.
10840
10841       -ftree-parallelize-loops=n
10842           Parallelize loops, i.e., split their iteration space to run in n
10843           threads.  This is only possible for loops whose iterations are
10844           independent and can be arbitrarily reordered.  The optimization is
10845           only profitable on multiprocessor machines, for loops that are CPU-
10846           intensive, rather than constrained e.g. by memory bandwidth.  This
10847           option implies -pthread, and thus is only supported on targets that
10848           have support for -pthread.
10849
10850       -ftree-pta
10851           Perform function-local points-to analysis on trees.  This flag is
10852           enabled by default at -O1 and higher, except for -Og.
10853
10854       -ftree-sra
10855           Perform scalar replacement of aggregates.  This pass replaces
10856           structure references with scalars to prevent committing structures
10857           to memory too early.  This flag is enabled by default at -O1 and
10858           higher, except for -Og.
10859
10860       -fstore-merging
10861           Perform merging of narrow stores to consecutive memory addresses.
10862           This pass merges contiguous stores of immediate values narrower
10863           than a word into fewer wider stores to reduce the number of
10864           instructions.  This is enabled by default at -O2 and higher as well
10865           as -Os.
10866
10867       -ftree-ter
10868           Perform temporary expression replacement during the SSA->normal
10869           phase.  Single use/single def temporaries are replaced at their use
10870           location with their defining expression.  This results in non-
10871           GIMPLE code, but gives the expanders much more complex trees to
10872           work on resulting in better RTL generation.  This is enabled by
10873           default at -O1 and higher.
10874
10875       -ftree-slsr
10876           Perform straight-line strength reduction on trees.  This recognizes
10877           related expressions involving multiplications and replaces them by
10878           less expensive calculations when possible.  This is enabled by
10879           default at -O1 and higher.
10880
10881       -ftree-vectorize
10882           Perform vectorization on trees. This flag enables
10883           -ftree-loop-vectorize and -ftree-slp-vectorize if not explicitly
10884           specified.
10885
10886       -ftree-loop-vectorize
10887           Perform loop vectorization on trees. This flag is enabled by
10888           default at -O2 and by -ftree-vectorize, -fprofile-use, and
10889           -fauto-profile.
10890
10891       -ftree-slp-vectorize
10892           Perform basic block vectorization on trees. This flag is enabled by
10893           default at -O2 and by -ftree-vectorize, -fprofile-use, and
10894           -fauto-profile.
10895
10896       -ftrivial-auto-var-init=choice
10897           Initialize automatic variables with either a pattern or with zeroes
10898           to increase the security and predictability of a program by
10899           preventing uninitialized memory disclosure and use.  GCC still
10900           considers an automatic variable that doesn't have an explicit
10901           initializer as uninitialized, -Wuninitialized and
10902           -Wanalyzer-use-of-uninitialized-value will still report warning
10903           messages on such automatic variables and the compiler will perform
10904           optimization as if the variable were uninitialized.  With this
10905           option, GCC will also initialize any padding of automatic variables
10906           that have structure or union types to zeroes.  However, the current
10907           implementation cannot initialize automatic variables that are
10908           declared between the controlling expression and the first case of a
10909           "switch" statement.  Using -Wtrivial-auto-var-init to report all
10910           such cases.
10911
10912           The three values of choice are:
10913
10914           *   uninitialized doesn't initialize any automatic variables.  This
10915               is C and C++'s default.
10916
10917           *   pattern Initialize automatic variables with values which will
10918               likely transform logic bugs into crashes down the line, are
10919               easily recognized in a crash dump and without being values that
10920               programmers can rely on for useful program semantics.  The
10921               current value is byte-repeatable pattern with byte "0xFE".  The
10922               values used for pattern initialization might be changed in the
10923               future.
10924
10925           *   zero Initialize automatic variables with zeroes.
10926
10927           The default is uninitialized.
10928
10929           You can control this behavior for a specific variable by using the
10930           variable attribute "uninitialized".
10931
10932       -fvect-cost-model=model
10933           Alter the cost model used for vectorization.  The model argument
10934           should be one of unlimited, dynamic, cheap or very-cheap.  With the
10935           unlimited model the vectorized code-path is assumed to be
10936           profitable while with the dynamic model a runtime check guards the
10937           vectorized code-path to enable it only for iteration counts that
10938           will likely execute faster than when executing the original scalar
10939           loop.  The cheap model disables vectorization of loops where doing
10940           so would be cost prohibitive for example due to required runtime
10941           checks for data dependence or alignment but otherwise is equal to
10942           the dynamic model.  The very-cheap model only allows vectorization
10943           if the vector code would entirely replace the scalar code that is
10944           being vectorized.  For example, if each iteration of a vectorized
10945           loop would only be able to handle exactly four iterations of the
10946           scalar loop, the very-cheap model would only allow vectorization if
10947           the scalar iteration count is known to be a multiple of four.
10948
10949           The default cost model depends on other optimization flags and is
10950           either dynamic or cheap.
10951
10952       -fsimd-cost-model=model
10953           Alter the cost model used for vectorization of loops marked with
10954           the OpenMP simd directive.  The model argument should be one of
10955           unlimited, dynamic, cheap.  All values of model have the same
10956           meaning as described in -fvect-cost-model and by default a cost
10957           model defined with -fvect-cost-model is used.
10958
10959       -ftree-vrp
10960           Perform Value Range Propagation on trees.  This is similar to the
10961           constant propagation pass, but instead of values, ranges of values
10962           are propagated.  This allows the optimizers to remove unnecessary
10963           range checks like array bound checks and null pointer checks.  This
10964           is enabled by default at -O2 and higher.  Null pointer check
10965           elimination is only done if -fdelete-null-pointer-checks is
10966           enabled.
10967
10968       -fsplit-paths
10969           Split paths leading to loop backedges.  This can improve dead code
10970           elimination and common subexpression elimination.  This is enabled
10971           by default at -O3 and above.
10972
10973       -fsplit-ivs-in-unroller
10974           Enables expression of values of induction variables in later
10975           iterations of the unrolled loop using the value in the first
10976           iteration.  This breaks long dependency chains, thus improving
10977           efficiency of the scheduling passes.
10978
10979           A combination of -fweb and CSE is often sufficient to obtain the
10980           same effect.  However, that is not reliable in cases where the loop
10981           body is more complicated than a single basic block.  It also does
10982           not work at all on some architectures due to restrictions in the
10983           CSE pass.
10984
10985           This optimization is enabled by default.
10986
10987       -fvariable-expansion-in-unroller
10988           With this option, the compiler creates multiple copies of some
10989           local variables when unrolling a loop, which can result in superior
10990           code.
10991
10992           This optimization is enabled by default for PowerPC targets, but
10993           disabled by default otherwise.
10994
10995       -fpartial-inlining
10996           Inline parts of functions.  This option has any effect only when
10997           inlining itself is turned on by the -finline-functions or
10998           -finline-small-functions options.
10999
11000           Enabled at levels -O2, -O3, -Os.
11001
11002       -fpredictive-commoning
11003           Perform predictive commoning optimization, i.e., reusing
11004           computations (especially memory loads and stores) performed in
11005           previous iterations of loops.
11006
11007           This option is enabled at level -O3.  It is also enabled by
11008           -fprofile-use and -fauto-profile.
11009
11010       -fprefetch-loop-arrays
11011           If supported by the target machine, generate instructions to
11012           prefetch memory to improve the performance of loops that access
11013           large arrays.
11014
11015           This option may generate better or worse code; results are highly
11016           dependent on the structure of loops within the source code.
11017
11018           Disabled at level -Os.
11019
11020       -fno-printf-return-value
11021           Do not substitute constants for known return value of formatted
11022           output functions such as "sprintf", "snprintf", "vsprintf", and
11023           "vsnprintf" (but not "printf" of "fprintf").  This transformation
11024           allows GCC to optimize or even eliminate branches based on the
11025           known return value of these functions called with arguments that
11026           are either constant, or whose values are known to be in a range
11027           that makes determining the exact return value possible.  For
11028           example, when -fprintf-return-value is in effect, both the branch
11029           and the body of the "if" statement (but not the call to "snprint")
11030           can be optimized away when "i" is a 32-bit or smaller integer
11031           because the return value is guaranteed to be at most 8.
11032
11033                   char buf[9];
11034                   if (snprintf (buf, "%08x", i) >= sizeof buf)
11035                     ...
11036
11037           The -fprintf-return-value option relies on other optimizations and
11038           yields best results with -O2 and above.  It works in tandem with
11039           the -Wformat-overflow and -Wformat-truncation options.  The
11040           -fprintf-return-value option is enabled by default.
11041
11042       -fno-peephole
11043       -fno-peephole2
11044           Disable any machine-specific peephole optimizations.  The
11045           difference between -fno-peephole and -fno-peephole2 is in how they
11046           are implemented in the compiler; some targets use one, some use the
11047           other, a few use both.
11048
11049           -fpeephole is enabled by default.  -fpeephole2 enabled at levels
11050           -O2, -O3, -Os.
11051
11052       -fno-guess-branch-probability
11053           Do not guess branch probabilities using heuristics.
11054
11055           GCC uses heuristics to guess branch probabilities if they are not
11056           provided by profiling feedback (-fprofile-arcs).  These heuristics
11057           are based on the control flow graph.  If some branch probabilities
11058           are specified by "__builtin_expect", then the heuristics are used
11059           to guess branch probabilities for the rest of the control flow
11060           graph, taking the "__builtin_expect" info into account.  The
11061           interactions between the heuristics and "__builtin_expect" can be
11062           complex, and in some cases, it may be useful to disable the
11063           heuristics so that the effects of "__builtin_expect" are easier to
11064           understand.
11065
11066           It is also possible to specify expected probability of the
11067           expression with "__builtin_expect_with_probability" built-in
11068           function.
11069
11070           The default is -fguess-branch-probability at levels -O, -O2, -O3,
11071           -Os.
11072
11073       -freorder-blocks
11074           Reorder basic blocks in the compiled function in order to reduce
11075           number of taken branches and improve code locality.
11076
11077           Enabled at levels -O1, -O2, -O3, -Os.
11078
11079       -freorder-blocks-algorithm=algorithm
11080           Use the specified algorithm for basic block reordering.  The
11081           algorithm argument can be simple, which does not increase code size
11082           (except sometimes due to secondary effects like alignment), or stc,
11083           the "software trace cache" algorithm, which tries to put all often
11084           executed code together, minimizing the number of branches executed
11085           by making extra copies of code.
11086
11087           The default is simple at levels -O1, -Os, and stc at levels -O2,
11088           -O3.
11089
11090       -freorder-blocks-and-partition
11091           In addition to reordering basic blocks in the compiled function, in
11092           order to reduce number of taken branches, partitions hot and cold
11093           basic blocks into separate sections of the assembly and .o files,
11094           to improve paging and cache locality performance.
11095
11096           This optimization is automatically turned off in the presence of
11097           exception handling or unwind tables (on targets using
11098           setjump/longjump or target specific scheme), for linkonce sections,
11099           for functions with a user-defined section attribute and on any
11100           architecture that does not support named sections.  When
11101           -fsplit-stack is used this option is not enabled by default (to
11102           avoid linker errors), but may be enabled explicitly (if using a
11103           working linker).
11104
11105           Enabled for x86 at levels -O2, -O3, -Os.
11106
11107       -freorder-functions
11108           Reorder functions in the object file in order to improve code
11109           locality.  This is implemented by using special subsections
11110           ".text.hot" for most frequently executed functions and
11111           ".text.unlikely" for unlikely executed functions.  Reordering is
11112           done by the linker so object file format must support named
11113           sections and linker must place them in a reasonable way.
11114
11115           This option isn't effective unless you either provide profile
11116           feedback (see -fprofile-arcs for details) or manually annotate
11117           functions with "hot" or "cold" attributes.
11118
11119           Enabled at levels -O2, -O3, -Os.
11120
11121       -fstrict-aliasing
11122           Allow the compiler to assume the strictest aliasing rules
11123           applicable to the language being compiled.  For C (and C++), this
11124           activates optimizations based on the type of expressions.  In
11125           particular, an object of one type is assumed never to reside at the
11126           same address as an object of a different type, unless the types are
11127           almost the same.  For example, an "unsigned int" can alias an
11128           "int", but not a "void*" or a "double".  A character type may alias
11129           any other type.
11130
11131           Pay special attention to code like this:
11132
11133                   union a_union {
11134                     int i;
11135                     double d;
11136                   };
11137
11138                   int f() {
11139                     union a_union t;
11140                     t.d = 3.0;
11141                     return t.i;
11142                   }
11143
11144           The practice of reading from a different union member than the one
11145           most recently written to (called "type-punning") is common.  Even
11146           with -fstrict-aliasing, type-punning is allowed, provided the
11147           memory is accessed through the union type.  So, the code above
11148           works as expected.    However, this code might not:
11149
11150                   int f() {
11151                     union a_union t;
11152                     int* ip;
11153                     t.d = 3.0;
11154                     ip = &t.i;
11155                     return *ip;
11156                   }
11157
11158           Similarly, access by taking the address, casting the resulting
11159           pointer and dereferencing the result has undefined behavior, even
11160           if the cast uses a union type, e.g.:
11161
11162                   int f() {
11163                     double d = 3.0;
11164                     return ((union a_union *) &d)->i;
11165                   }
11166
11167           The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
11168
11169       -fipa-strict-aliasing
11170           Controls whether rules of -fstrict-aliasing are applied across
11171           function boundaries.  Note that if multiple functions gets inlined
11172           into a single function the memory accesses are no longer considered
11173           to be crossing a function boundary.
11174
11175           The -fipa-strict-aliasing option is enabled by default and is
11176           effective only in combination with -fstrict-aliasing.
11177
11178       -falign-functions
11179       -falign-functions=n
11180       -falign-functions=n:m
11181       -falign-functions=n:m:n2
11182       -falign-functions=n:m:n2:m2
11183           Align the start of functions to the next power-of-two greater than
11184           or equal to n, skipping up to m-1 bytes.  This ensures that at
11185           least the first m bytes of the function can be fetched by the CPU
11186           without crossing an n-byte alignment boundary.
11187
11188           If m is not specified, it defaults to n.
11189
11190           Examples: -falign-functions=32 aligns functions to the next 32-byte
11191           boundary, -falign-functions=24 aligns to the next 32-byte boundary
11192           only if this can be done by skipping 23 bytes or less,
11193           -falign-functions=32:7 aligns to the next 32-byte boundary only if
11194           this can be done by skipping 6 bytes or less.
11195
11196           The second pair of n2:m2 values allows you to specify a secondary
11197           alignment: -falign-functions=64:7:32:3 aligns to the next 64-byte
11198           boundary if this can be done by skipping 6 bytes or less, otherwise
11199           aligns to the next 32-byte boundary if this can be done by skipping
11200           2 bytes or less.  If m2 is not specified, it defaults to n2.
11201
11202           Some assemblers only support this flag when n is a power of two; in
11203           that case, it is rounded up.
11204
11205           -fno-align-functions and -falign-functions=1 are equivalent and
11206           mean that functions are not aligned.
11207
11208           If n is not specified or is zero, use a machine-dependent default.
11209           The maximum allowed n option value is 65536.
11210
11211           Enabled at levels -O2, -O3.
11212
11213       -flimit-function-alignment
11214           If this option is enabled, the compiler tries to avoid
11215           unnecessarily overaligning functions. It attempts to instruct the
11216           assembler to align by the amount specified by -falign-functions,
11217           but not to skip more bytes than the size of the function.
11218
11219       -falign-labels
11220       -falign-labels=n
11221       -falign-labels=n:m
11222       -falign-labels=n:m:n2
11223       -falign-labels=n:m:n2:m2
11224           Align all branch targets to a power-of-two boundary.
11225
11226           Parameters of this option are analogous to the -falign-functions
11227           option.  -fno-align-labels and -falign-labels=1 are equivalent and
11228           mean that labels are not aligned.
11229
11230           If -falign-loops or -falign-jumps are applicable and are greater
11231           than this value, then their values are used instead.
11232
11233           If n is not specified or is zero, use a machine-dependent default
11234           which is very likely to be 1, meaning no alignment.  The maximum
11235           allowed n option value is 65536.
11236
11237           Enabled at levels -O2, -O3.
11238
11239       -falign-loops
11240       -falign-loops=n
11241       -falign-loops=n:m
11242       -falign-loops=n:m:n2
11243       -falign-loops=n:m:n2:m2
11244           Align loops to a power-of-two boundary.  If the loops are executed
11245           many times, this makes up for any execution of the dummy padding
11246           instructions.
11247
11248           If -falign-labels is greater than this value, then its value is
11249           used instead.
11250
11251           Parameters of this option are analogous to the -falign-functions
11252           option.  -fno-align-loops and -falign-loops=1 are equivalent and
11253           mean that loops are not aligned.  The maximum allowed n option
11254           value is 65536.
11255
11256           If n is not specified or is zero, use a machine-dependent default.
11257
11258           Enabled at levels -O2, -O3.
11259
11260       -falign-jumps
11261       -falign-jumps=n
11262       -falign-jumps=n:m
11263       -falign-jumps=n:m:n2
11264       -falign-jumps=n:m:n2:m2
11265           Align branch targets to a power-of-two boundary, for branch targets
11266           where the targets can only be reached by jumping.  In this case, no
11267           dummy operations need be executed.
11268
11269           If -falign-labels is greater than this value, then its value is
11270           used instead.
11271
11272           Parameters of this option are analogous to the -falign-functions
11273           option.  -fno-align-jumps and -falign-jumps=1 are equivalent and
11274           mean that loops are not aligned.
11275
11276           If n is not specified or is zero, use a machine-dependent default.
11277           The maximum allowed n option value is 65536.
11278
11279           Enabled at levels -O2, -O3.
11280
11281       -fno-allocation-dce
11282           Do not remove unused C++ allocations in dead code elimination.
11283
11284       -fallow-store-data-races
11285           Allow the compiler to perform optimizations that may introduce new
11286           data races on stores, without proving that the variable cannot be
11287           concurrently accessed by other threads.  Does not affect
11288           optimization of local data.  It is safe to use this option if it is
11289           known that global data will not be accessed by multiple threads.
11290
11291           Examples of optimizations enabled by -fallow-store-data-races
11292           include hoisting or if-conversions that may cause a value that was
11293           already in memory to be re-written with that same value.  Such re-
11294           writing is safe in a single threaded context but may be unsafe in a
11295           multi-threaded context.  Note that on some processors, if-
11296           conversions may be required in order to enable vectorization.
11297
11298           Enabled at level -Ofast.
11299
11300       -funit-at-a-time
11301           This option is left for compatibility reasons. -funit-at-a-time has
11302           no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
11303           and -fno-section-anchors.
11304
11305           Enabled by default.
11306
11307       -fno-toplevel-reorder
11308           Do not reorder top-level functions, variables, and "asm"
11309           statements.  Output them in the same order that they appear in the
11310           input file.  When this option is used, unreferenced static
11311           variables are not removed.  This option is intended to support
11312           existing code that relies on a particular ordering.  For new code,
11313           it is better to use attributes when possible.
11314
11315           -ftoplevel-reorder is the default at -O1 and higher, and also at
11316           -O0 if -fsection-anchors is explicitly requested.  Additionally
11317           -fno-toplevel-reorder implies -fno-section-anchors.
11318
11319       -funreachable-traps
11320           With this option, the compiler turns calls to
11321           "__builtin_unreachable" into traps, instead of using them for
11322           optimization.  This also affects any such calls implicitly
11323           generated by the compiler.
11324
11325           This option has the same effect as -fsanitize=unreachable
11326           -fsanitize-trap=unreachable, but does not affect the values of
11327           those options.  If -fsanitize=unreachable is enabled, that option
11328           takes priority over this one.
11329
11330           This option is enabled by default at -O0 and -Og.
11331
11332       -fweb
11333           Constructs webs as commonly used for register allocation purposes
11334           and assign each web individual pseudo register.  This allows the
11335           register allocation pass to operate on pseudos directly, but also
11336           strengthens several other optimization passes, such as CSE, loop
11337           optimizer and trivial dead code remover.  It can, however, make
11338           debugging impossible, since variables no longer stay in a "home
11339           register".
11340
11341           Enabled by default with -funroll-loops.
11342
11343       -fwhole-program
11344           Assume that the current compilation unit represents the whole
11345           program being compiled.  All public functions and variables with
11346           the exception of "main" and those merged by attribute
11347           "externally_visible" become static functions and in effect are
11348           optimized more aggressively by interprocedural optimizers.
11349
11350           With -flto this option has a limited use.  In most cases the
11351           precise list of symbols used or exported from the binary is known
11352           the resolution info passed to the link-time optimizer by the linker
11353           plugin.  It is still useful if no linker plugin is used or during
11354           incremental link step when final code is produced (with -flto
11355           -flinker-output=nolto-rel).
11356
11357       -flto[=n]
11358           This option runs the standard link-time optimizer.  When invoked
11359           with source code, it generates GIMPLE (one of GCC's internal
11360           representations) and writes it to special ELF sections in the
11361           object file.  When the object files are linked together, all the
11362           function bodies are read from these ELF sections and instantiated
11363           as if they had been part of the same translation unit.
11364
11365           To use the link-time optimizer, -flto and optimization options
11366           should be specified at compile time and during the final link.  It
11367           is recommended that you compile all the files participating in the
11368           same link with the same options and also specify those options at
11369           link time.  For example:
11370
11371                   gcc -c -O2 -flto foo.c
11372                   gcc -c -O2 -flto bar.c
11373                   gcc -o myprog -flto -O2 foo.o bar.o
11374
11375           The first two invocations to GCC save a bytecode representation of
11376           GIMPLE into special ELF sections inside foo.o and bar.o.  The final
11377           invocation reads the GIMPLE bytecode from foo.o and bar.o, merges
11378           the two files into a single internal image, and compiles the result
11379           as usual.  Since both foo.o and bar.o are merged into a single
11380           image, this causes all the interprocedural analyses and
11381           optimizations in GCC to work across the two files as if they were a
11382           single one.  This means, for example, that the inliner is able to
11383           inline functions in bar.o into functions in foo.o and vice-versa.
11384
11385           Another (simpler) way to enable link-time optimization is:
11386
11387                   gcc -o myprog -flto -O2 foo.c bar.c
11388
11389           The above generates bytecode for foo.c and bar.c, merges them
11390           together into a single GIMPLE representation and optimizes them as
11391           usual to produce myprog.
11392
11393           The important thing to keep in mind is that to enable link-time
11394           optimizations you need to use the GCC driver to perform the link
11395           step.  GCC automatically performs link-time optimization if any of
11396           the objects involved were compiled with the -flto command-line
11397           option.  You can always override the automatic decision to do link-
11398           time optimization by passing -fno-lto to the link command.
11399
11400           To make whole program optimization effective, it is necessary to
11401           make certain whole program assumptions.  The compiler needs to know
11402           what functions and variables can be accessed by libraries and
11403           runtime outside of the link-time optimized unit.  When supported by
11404           the linker, the linker plugin (see -fuse-linker-plugin) passes
11405           information to the compiler about used and externally visible
11406           symbols.  When the linker plugin is not available, -fwhole-program
11407           should be used to allow the compiler to make these assumptions,
11408           which leads to more aggressive optimization decisions.
11409
11410           When a file is compiled with -flto without -fuse-linker-plugin, the
11411           generated object file is larger than a regular object file because
11412           it contains GIMPLE bytecodes and the usual final code (see
11413           -ffat-lto-objects).  This means that object files with LTO
11414           information can be linked as normal object files; if -fno-lto is
11415           passed to the linker, no interprocedural optimizations are applied.
11416           Note that when -fno-fat-lto-objects is enabled the compile stage is
11417           faster but you cannot perform a regular, non-LTO link on them.
11418
11419           When producing the final binary, GCC only applies link-time
11420           optimizations to those files that contain bytecode.  Therefore, you
11421           can mix and match object files and libraries with GIMPLE bytecodes
11422           and final object code.  GCC automatically selects which files to
11423           optimize in LTO mode and which files to link without further
11424           processing.
11425
11426           Generally, options specified at link time override those specified
11427           at compile time, although in some cases GCC attempts to infer link-
11428           time options from the settings used to compile the input files.
11429
11430           If you do not specify an optimization level option -O at link time,
11431           then GCC uses the highest optimization level used when compiling
11432           the object files.  Note that it is generally ineffective to specify
11433           an optimization level option only at link time and not at compile
11434           time, for two reasons.  First, compiling without optimization
11435           suppresses compiler passes that gather information needed for
11436           effective optimization at link time.  Second, some early
11437           optimization passes can be performed only at compile time and not
11438           at link time.
11439
11440           There are some code generation flags preserved by GCC when
11441           generating bytecodes, as they need to be used during the final
11442           link.  Currently, the following options and their settings are
11443           taken from the first object file that explicitly specifies them:
11444           -fcommon, -fexceptions, -fnon-call-exceptions, -fgnu-tm and all the
11445           -m target flags.
11446
11447           The following options -fPIC, -fpic, -fpie and -fPIE are combined
11448           based on the following scheme:
11449
11450                   B<-fPIC> + B<-fpic> = B<-fpic>
11451                   B<-fPIC> + B<-fno-pic> = B<-fno-pic>
11452                   B<-fpic/-fPIC> + (no option) = (no option)
11453                   B<-fPIC> + B<-fPIE> = B<-fPIE>
11454                   B<-fpic> + B<-fPIE> = B<-fpie>
11455                   B<-fPIC/-fpic> + B<-fpie> = B<-fpie>
11456
11457           Certain ABI-changing flags are required to match in all compilation
11458           units, and trying to override this at link time with a conflicting
11459           value is ignored.  This includes options such as
11460           -freg-struct-return and -fpcc-struct-return.
11461
11462           Other options such as -ffp-contract, -fno-strict-overflow, -fwrapv,
11463           -fno-trapv or -fno-strict-aliasing are passed through to the link
11464           stage and merged conservatively for conflicting translation units.
11465           Specifically -fno-strict-overflow, -fwrapv and -fno-trapv take
11466           precedence; and for example -ffp-contract=off takes precedence over
11467           -ffp-contract=fast.  You can override them at link time.
11468
11469           Diagnostic options such as -Wstringop-overflow are passed through
11470           to the link stage and their setting matches that of the compile-
11471           step at function granularity.  Note that this matters only for
11472           diagnostics emitted during optimization.  Note that code transforms
11473           such as inlining can lead to warnings being enabled or disabled for
11474           regions if code not consistent with the setting at compile time.
11475
11476           When you need to pass options to the assembler via -Wa or
11477           -Xassembler make sure to either compile such translation units with
11478           -fno-lto or consistently use the same assembler options on all
11479           translation units.  You can alternatively also specify assembler
11480           options at LTO link time.
11481
11482           To enable debug info generation you need to supply -g at compile
11483           time.  If any of the input files at link time were built with debug
11484           info generation enabled the link will enable debug info generation
11485           as well.  Any elaborate debug info settings like the dwarf level
11486           -gdwarf-5 need to be explicitly repeated at the linker command line
11487           and mixing different settings in different translation units is
11488           discouraged.
11489
11490           If LTO encounters objects with C linkage declared with incompatible
11491           types in separate translation units to be linked together
11492           (undefined behavior according to ISO C99 6.2.7), a non-fatal
11493           diagnostic may be issued.  The behavior is still undefined at run
11494           time.  Similar diagnostics may be raised for other languages.
11495
11496           Another feature of LTO is that it is possible to apply
11497           interprocedural optimizations on files written in different
11498           languages:
11499
11500                   gcc -c -flto foo.c
11501                   g++ -c -flto bar.cc
11502                   gfortran -c -flto baz.f90
11503                   g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
11504
11505           Notice that the final link is done with g++ to get the C++ runtime
11506           libraries and -lgfortran is added to get the Fortran runtime
11507           libraries.  In general, when mixing languages in LTO mode, you
11508           should use the same link command options as when mixing languages
11509           in a regular (non-LTO) compilation.
11510
11511           If object files containing GIMPLE bytecode are stored in a library
11512           archive, say libfoo.a, it is possible to extract and use them in an
11513           LTO link if you are using a linker with plugin support.  To create
11514           static libraries suitable for LTO, use gcc-ar and gcc-ranlib
11515           instead of ar and ranlib; to show the symbols of object files with
11516           GIMPLE bytecode, use gcc-nm.  Those commands require that ar,
11517           ranlib and nm have been compiled with plugin support.  At link
11518           time, use the flag -fuse-linker-plugin to ensure that the library
11519           participates in the LTO optimization process:
11520
11521                   gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
11522
11523           With the linker plugin enabled, the linker extracts the needed
11524           GIMPLE files from libfoo.a and passes them on to the running GCC to
11525           make them part of the aggregated GIMPLE image to be optimized.
11526
11527           If you are not using a linker with plugin support and/or do not
11528           enable the linker plugin, then the objects inside libfoo.a are
11529           extracted and linked as usual, but they do not participate in the
11530           LTO optimization process.  In order to make a static library
11531           suitable for both LTO optimization and usual linkage, compile its
11532           object files with -flto -ffat-lto-objects.
11533
11534           Link-time optimizations do not require the presence of the whole
11535           program to operate.  If the program does not require any symbols to
11536           be exported, it is possible to combine -flto and -fwhole-program to
11537           allow the interprocedural optimizers to use more aggressive
11538           assumptions which may lead to improved optimization opportunities.
11539           Use of -fwhole-program is not needed when linker plugin is active
11540           (see -fuse-linker-plugin).
11541
11542           The current implementation of LTO makes no attempt to generate
11543           bytecode that is portable between different types of hosts.  The
11544           bytecode files are versioned and there is a strict version check,
11545           so bytecode files generated in one version of GCC do not work with
11546           an older or newer version of GCC.
11547
11548           Link-time optimization does not work well with generation of
11549           debugging information on systems other than those using a
11550           combination of ELF and DWARF.
11551
11552           If you specify the optional n, the optimization and code generation
11553           done at link time is executed in parallel using n parallel jobs by
11554           utilizing an installed make program.  The environment variable MAKE
11555           may be used to override the program used.
11556
11557           You can also specify -flto=jobserver to use GNU make's job server
11558           mode to determine the number of parallel jobs. This is useful when
11559           the Makefile calling GCC is already executing in parallel.  You
11560           must prepend a + to the command recipe in the parent Makefile for
11561           this to work.  This option likely only works if MAKE is GNU make.
11562           Even without the option value, GCC tries to automatically detect a
11563           running GNU make's job server.
11564
11565           Use -flto=auto to use GNU make's job server, if available, or
11566           otherwise fall back to autodetection of the number of CPU threads
11567           present in your system.
11568
11569       -flto-partition=alg
11570           Specify the partitioning algorithm used by the link-time optimizer.
11571           The value is either 1to1 to specify a partitioning mirroring the
11572           original source files or balanced to specify partitioning into
11573           equally sized chunks (whenever possible) or max to create new
11574           partition for every symbol where possible.  Specifying none as an
11575           algorithm disables partitioning and streaming completely.  The
11576           default value is balanced. While 1to1 can be used as an workaround
11577           for various code ordering issues, the max partitioning is intended
11578           for internal testing only.  The value one specifies that exactly
11579           one partition should be used while the value none bypasses
11580           partitioning and executes the link-time optimization step directly
11581           from the WPA phase.
11582
11583       -flto-compression-level=n
11584           This option specifies the level of compression used for
11585           intermediate language written to LTO object files, and is only
11586           meaningful in conjunction with LTO mode (-flto).  GCC currently
11587           supports two LTO compression algorithms. For zstd, valid values are
11588           0 (no compression) to 19 (maximum compression), while zlib supports
11589           values from 0 to 9.  Values outside this range are clamped to
11590           either minimum or maximum of the supported values.  If the option
11591           is not given, a default balanced compression setting is used.
11592
11593       -fuse-linker-plugin
11594           Enables the use of a linker plugin during link-time optimization.
11595           This option relies on plugin support in the linker, which is
11596           available in gold or in GNU ld 2.21 or newer.
11597
11598           This option enables the extraction of object files with GIMPLE
11599           bytecode out of library archives. This improves the quality of
11600           optimization by exposing more code to the link-time optimizer.
11601           This information specifies what symbols can be accessed externally
11602           (by non-LTO object or during dynamic linking).  Resulting code
11603           quality improvements on binaries (and shared libraries that use
11604           hidden visibility) are similar to -fwhole-program.  See -flto for a
11605           description of the effect of this flag and how to use it.
11606
11607           This option is enabled by default when LTO support in GCC is
11608           enabled and GCC was configured for use with a linker supporting
11609           plugins (GNU ld 2.21 or newer or gold).
11610
11611       -ffat-lto-objects
11612           Fat LTO objects are object files that contain both the intermediate
11613           language and the object code. This makes them usable for both LTO
11614           linking and normal linking. This option is effective only when
11615           compiling with -flto and is ignored at link time.
11616
11617           -fno-fat-lto-objects improves compilation time over plain LTO, but
11618           requires the complete toolchain to be aware of LTO. It requires a
11619           linker with linker plugin support for basic functionality.
11620           Additionally, nm, ar and ranlib need to support linker plugins to
11621           allow a full-featured build environment (capable of building static
11622           libraries etc).  GCC provides the gcc-ar, gcc-nm, gcc-ranlib
11623           wrappers to pass the right options to these tools. With non fat LTO
11624           makefiles need to be modified to use them.
11625
11626           Note that modern binutils provide plugin auto-load mechanism.
11627           Installing the linker plugin into $libdir/bfd-plugins has the same
11628           effect as usage of the command wrappers (gcc-ar, gcc-nm and gcc-
11629           ranlib).
11630
11631           The default is -fno-fat-lto-objects on targets with linker plugin
11632           support.
11633
11634       -fcompare-elim
11635           After register allocation and post-register allocation instruction
11636           splitting, identify arithmetic instructions that compute processor
11637           flags similar to a comparison operation based on that arithmetic.
11638           If possible, eliminate the explicit comparison operation.
11639
11640           This pass only applies to certain targets that cannot explicitly
11641           represent the comparison operation before register allocation is
11642           complete.
11643
11644           Enabled at levels -O1, -O2, -O3, -Os.
11645
11646       -fcprop-registers
11647           After register allocation and post-register allocation instruction
11648           splitting, perform a copy-propagation pass to try to reduce
11649           scheduling dependencies and occasionally eliminate the copy.
11650
11651           Enabled at levels -O1, -O2, -O3, -Os.
11652
11653       -fprofile-correction
11654           Profiles collected using an instrumented binary for multi-threaded
11655           programs may be inconsistent due to missed counter updates. When
11656           this option is specified, GCC uses heuristics to correct or smooth
11657           out such inconsistencies. By default, GCC emits an error message
11658           when an inconsistent profile is detected.
11659
11660           This option is enabled by -fauto-profile.
11661
11662       -fprofile-partial-training
11663           With "-fprofile-use" all portions of programs not executed during
11664           train run are optimized agressively for size rather than speed.  In
11665           some cases it is not practical to train all possible hot paths in
11666           the program. (For example, program may contain functions specific
11667           for a given hardware and trianing may not cover all hardware
11668           configurations program is run on.)  With
11669           "-fprofile-partial-training" profile feedback will be ignored for
11670           all functions not executed during the train run leading them to be
11671           optimized as if they were compiled without profile feedback. This
11672           leads to better performance when train run is not representative
11673           but also leads to significantly bigger code.
11674
11675       -fprofile-use
11676       -fprofile-use=path
11677           Enable profile feedback-directed optimizations, and the following
11678           optimizations, many of which are generally profitable only with
11679           profile feedback available:
11680
11681           -fbranch-probabilities  -fprofile-values -funroll-loops
11682           -fpeel-loops  -ftracer  -fvpt -finline-functions  -fipa-cp
11683           -fipa-cp-clone  -fipa-bit-cp -fpredictive-commoning  -fsplit-loops
11684           -funswitch-loops -fgcse-after-reload  -ftree-loop-vectorize
11685           -ftree-slp-vectorize -fvect-cost-model=dynamic
11686           -ftree-loop-distribute-patterns -fprofile-reorder-functions
11687
11688           Before you can use this option, you must first generate profiling
11689           information.
11690
11691           By default, GCC emits an error message if the feedback profiles do
11692           not match the source code.  This error can be turned into a warning
11693           by using -Wno-error=coverage-mismatch.  Note this may result in
11694           poorly optimized code.  Additionally, by default, GCC also emits a
11695           warning message if the feedback profiles do not exist (see
11696           -Wmissing-profile).
11697
11698           If path is specified, GCC looks at the path to find the profile
11699           feedback data files. See -fprofile-dir.
11700
11701       -fauto-profile
11702       -fauto-profile=path
11703           Enable sampling-based feedback-directed optimizations, and the
11704           following optimizations, many of which are generally profitable
11705           only with profile feedback available:
11706
11707           -fbranch-probabilities  -fprofile-values -funroll-loops
11708           -fpeel-loops  -ftracer  -fvpt -finline-functions  -fipa-cp
11709           -fipa-cp-clone  -fipa-bit-cp -fpredictive-commoning  -fsplit-loops
11710           -funswitch-loops -fgcse-after-reload  -ftree-loop-vectorize
11711           -ftree-slp-vectorize -fvect-cost-model=dynamic
11712           -ftree-loop-distribute-patterns -fprofile-correction
11713
11714           path is the name of a file containing AutoFDO profile information.
11715           If omitted, it defaults to fbdata.afdo in the current directory.
11716
11717           Producing an AutoFDO profile data file requires running your
11718           program with the perf utility on a supported GNU/Linux target
11719           system.  For more information, see <https://perf.wiki.kernel.org/>.
11720
11721           E.g.
11722
11723                   perf record -e br_inst_retired:near_taken -b -o perf.data \
11724                       -- your_program
11725
11726           Then use the create_gcov tool to convert the raw profile data to a
11727           format that can be used by GCC.  You must also supply the
11728           unstripped binary for your program to this tool.  See
11729           <https://github.com/google/autofdo>.
11730
11731           E.g.
11732
11733                   create_gcov --binary=your_program.unstripped --profile=perf.data \
11734                       --gcov=profile.afdo
11735
11736       The following options control compiler behavior regarding floating-
11737       point arithmetic.  These options trade off between speed and
11738       correctness.  All must be specifically enabled.
11739
11740       -ffloat-store
11741           Do not store floating-point variables in registers, and inhibit
11742           other options that might change whether a floating-point value is
11743           taken from a register or memory.
11744
11745           This option prevents undesirable excess precision on machines such
11746           as the 68000 where the floating registers (of the 68881) keep more
11747           precision than a "double" is supposed to have.  Similarly for the
11748           x86 architecture.  For most programs, the excess precision does
11749           only good, but a few programs rely on the precise definition of
11750           IEEE floating point.  Use -ffloat-store for such programs, after
11751           modifying them to store all pertinent intermediate computations
11752           into variables.
11753
11754       -fexcess-precision=style
11755           This option allows further control over excess precision on
11756           machines where floating-point operations occur in a format with
11757           more precision or range than the IEEE standard and interchange
11758           floating-point types.  By default, -fexcess-precision=fast is in
11759           effect; this means that operations may be carried out in a wider
11760           precision than the types specified in the source if that would
11761           result in faster code, and it is unpredictable when rounding to the
11762           types specified in the source code takes place.  When compiling C
11763           or C++, if -fexcess-precision=standard is specified then excess
11764           precision follows the rules specified in ISO C99 or C++; in
11765           particular, both casts and assignments cause values to be rounded
11766           to their semantic types (whereas -ffloat-store only affects
11767           assignments).  This option is enabled by default for C or C++ if a
11768           strict conformance option such as -std=c99 or -std=c++17 is used.
11769           -ffast-math enables -fexcess-precision=fast by default regardless
11770           of whether a strict conformance option is used.
11771
11772           -fexcess-precision=standard is not implemented for languages other
11773           than C or C++.  On the x86, it has no effect if -mfpmath=sse or
11774           -mfpmath=sse+387 is specified; in the former case, IEEE semantics
11775           apply without excess precision, and in the latter, rounding is
11776           unpredictable.
11777
11778       -ffast-math
11779           Sets the options -fno-math-errno, -funsafe-math-optimizations,
11780           -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans,
11781           -fcx-limited-range and -fexcess-precision=fast.
11782
11783           This option causes the preprocessor macro "__FAST_MATH__" to be
11784           defined.
11785
11786           This option is not turned on by any -O option besides -Ofast since
11787           it can result in incorrect output for programs that depend on an
11788           exact implementation of IEEE or ISO rules/specifications for math
11789           functions. It may, however, yield faster code for programs that do
11790           not require the guarantees of these specifications.
11791
11792       -fno-math-errno
11793           Do not set "errno" after calling math functions that are executed
11794           with a single instruction, e.g., "sqrt".  A program that relies on
11795           IEEE exceptions for math error handling may want to use this flag
11796           for speed while maintaining IEEE arithmetic compatibility.
11797
11798           This option is not turned on by any -O option since it can result
11799           in incorrect output for programs that depend on an exact
11800           implementation of IEEE or ISO rules/specifications for math
11801           functions. It may, however, yield faster code for programs that do
11802           not require the guarantees of these specifications.
11803
11804           The default is -fmath-errno.
11805
11806           On Darwin systems, the math library never sets "errno".  There is
11807           therefore no reason for the compiler to consider the possibility
11808           that it might, and -fno-math-errno is the default.
11809
11810       -funsafe-math-optimizations
11811           Allow optimizations for floating-point arithmetic that (a) assume
11812           that arguments and results are valid and (b) may violate IEEE or
11813           ANSI standards.  When used at link time, it may include libraries
11814           or startup files that change the default FPU control word or other
11815           similar optimizations.
11816
11817           This option is not turned on by any -O option since it can result
11818           in incorrect output for programs that depend on an exact
11819           implementation of IEEE or ISO rules/specifications for math
11820           functions. It may, however, yield faster code for programs that do
11821           not require the guarantees of these specifications.  Enables
11822           -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
11823           -freciprocal-math.
11824
11825           The default is -fno-unsafe-math-optimizations.
11826
11827       -fassociative-math
11828           Allow re-association of operands in series of floating-point
11829           operations.  This violates the ISO C and C++ language standard by
11830           possibly changing computation result.  NOTE: re-ordering may change
11831           the sign of zero as well as ignore NaNs and inhibit or create
11832           underflow or overflow (and thus cannot be used on code that relies
11833           on rounding behavior like "(x + 2**52) - 2**52".  May also reorder
11834           floating-point comparisons and thus may not be used when ordered
11835           comparisons are required.  This option requires that both
11836           -fno-signed-zeros and -fno-trapping-math be in effect.  Moreover,
11837           it doesn't make much sense with -frounding-math. For Fortran the
11838           option is automatically enabled when both -fno-signed-zeros and
11839           -fno-trapping-math are in effect.
11840
11841           The default is -fno-associative-math.
11842
11843       -freciprocal-math
11844           Allow the reciprocal of a value to be used instead of dividing by
11845           the value if this enables optimizations.  For example "x / y" can
11846           be replaced with "x * (1/y)", which is useful if "(1/y)" is subject
11847           to common subexpression elimination.  Note that this loses
11848           precision and increases the number of flops operating on the value.
11849
11850           The default is -fno-reciprocal-math.
11851
11852       -ffinite-math-only
11853           Allow optimizations for floating-point arithmetic that assume that
11854           arguments and results are not NaNs or +-Infs.
11855
11856           This option is not turned on by any -O option since it can result
11857           in incorrect output for programs that depend on an exact
11858           implementation of IEEE or ISO rules/specifications for math
11859           functions. It may, however, yield faster code for programs that do
11860           not require the guarantees of these specifications.
11861
11862           The default is -fno-finite-math-only.
11863
11864       -fno-signed-zeros
11865           Allow optimizations for floating-point arithmetic that ignore the
11866           signedness of zero.  IEEE arithmetic specifies the behavior of
11867           distinct +0.0 and -0.0 values, which then prohibits simplification
11868           of expressions such as x+0.0 or 0.0*x (even with
11869           -ffinite-math-only).  This option implies that the sign of a zero
11870           result isn't significant.
11871
11872           The default is -fsigned-zeros.
11873
11874       -fno-trapping-math
11875           Compile code assuming that floating-point operations cannot
11876           generate user-visible traps.  These traps include division by zero,
11877           overflow, underflow, inexact result and invalid operation.  This
11878           option requires that -fno-signaling-nans be in effect.  Setting
11879           this option may allow faster code if one relies on "non-stop" IEEE
11880           arithmetic, for example.
11881
11882           This option should never be turned on by any -O option since it can
11883           result in incorrect output for programs that depend on an exact
11884           implementation of IEEE or ISO rules/specifications for math
11885           functions.
11886
11887           The default is -ftrapping-math.
11888
11889           Future versions of GCC may provide finer control of this setting
11890           using C99's "FENV_ACCESS" pragma.  This command-line option will be
11891           used along with -frounding-math to specify the default state for
11892           "FENV_ACCESS".
11893
11894       -frounding-math
11895           Disable transformations and optimizations that assume default
11896           floating-point rounding behavior.  This is round-to-zero for all
11897           floating point to integer conversions, and round-to-nearest for all
11898           other arithmetic truncations.  This option should be specified for
11899           programs that change the FP rounding mode dynamically, or that may
11900           be executed with a non-default rounding mode.  This option disables
11901           constant folding of floating-point expressions at compile time
11902           (which may be affected by rounding mode) and arithmetic
11903           transformations that are unsafe in the presence of sign-dependent
11904           rounding modes.
11905
11906           The default is -fno-rounding-math.
11907
11908           This option is experimental and does not currently guarantee to
11909           disable all GCC optimizations that are affected by rounding mode.
11910           Future versions of GCC may provide finer control of this setting
11911           using C99's "FENV_ACCESS" pragma.  This command-line option will be
11912           used along with -ftrapping-math to specify the default state for
11913           "FENV_ACCESS".
11914
11915       -fsignaling-nans
11916           Compile code assuming that IEEE signaling NaNs may generate user-
11917           visible traps during floating-point operations.  Setting this
11918           option disables optimizations that may change the number of
11919           exceptions visible with signaling NaNs.  This option implies
11920           -ftrapping-math.
11921
11922           This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
11923           defined.
11924
11925           The default is -fno-signaling-nans.
11926
11927           This option is experimental and does not currently guarantee to
11928           disable all GCC optimizations that affect signaling NaN behavior.
11929
11930       -fno-fp-int-builtin-inexact
11931           Do not allow the built-in functions "ceil", "floor", "round" and
11932           "trunc", and their "float" and "long double" variants, to generate
11933           code that raises the "inexact" floating-point exception for
11934           noninteger arguments.  ISO C99 and C11 allow these functions to
11935           raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
11936           bindings to IEEE 754-2008, as integrated into ISO C2X, does not
11937           allow these functions to do so.
11938
11939           The default is -ffp-int-builtin-inexact, allowing the exception to
11940           be raised, unless C2X or a later C standard is selected.  This
11941           option does nothing unless -ftrapping-math is in effect.
11942
11943           Even if -fno-fp-int-builtin-inexact is used, if the functions
11944           generate a call to a library function then the "inexact" exception
11945           may be raised if the library implementation does not follow TS
11946           18661.
11947
11948       -fsingle-precision-constant
11949           Treat floating-point constants as single precision instead of
11950           implicitly converting them to double-precision constants.
11951
11952       -fcx-limited-range
11953           When enabled, this option states that a range reduction step is not
11954           needed when performing complex division.  Also, there is no
11955           checking whether the result of a complex multiplication or division
11956           is "NaN + I*NaN", with an attempt to rescue the situation in that
11957           case.  The default is -fno-cx-limited-range, but is enabled by
11958           -ffast-math.
11959
11960           This option controls the default setting of the ISO C99
11961           "CX_LIMITED_RANGE" pragma.  Nevertheless, the option applies to all
11962           languages.
11963
11964       -fcx-fortran-rules
11965           Complex multiplication and division follow Fortran rules.  Range
11966           reduction is done as part of complex division, but there is no
11967           checking whether the result of a complex multiplication or division
11968           is "NaN + I*NaN", with an attempt to rescue the situation in that
11969           case.
11970
11971           The default is -fno-cx-fortran-rules.
11972
11973       The following options control optimizations that may improve
11974       performance, but are not enabled by any -O options.  This section
11975       includes experimental options that may produce broken code.
11976
11977       -fbranch-probabilities
11978           After running a program compiled with -fprofile-arcs, you can
11979           compile it a second time using -fbranch-probabilities, to improve
11980           optimizations based on the number of times each branch was taken.
11981           When a program compiled with -fprofile-arcs exits, it saves arc
11982           execution counts to a file called sourcename.gcda for each source
11983           file.  The information in this data file is very dependent on the
11984           structure of the generated code, so you must use the same source
11985           code and the same optimization options for both compilations.  See
11986           details about the file naming in -fprofile-arcs.
11987
11988           With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
11989           JUMP_INSN and CALL_INSN.  These can be used to improve
11990           optimization.  Currently, they are only used in one place: in
11991           reorg.cc, instead of guessing which path a branch is most likely to
11992           take, the REG_BR_PROB values are used to exactly determine which
11993           path is taken more often.
11994
11995           Enabled by -fprofile-use and -fauto-profile.
11996
11997       -fprofile-values
11998           If combined with -fprofile-arcs, it adds code so that some data
11999           about values of expressions in the program is gathered.
12000
12001           With -fbranch-probabilities, it reads back the data gathered from
12002           profiling values of expressions for usage in optimizations.
12003
12004           Enabled by -fprofile-generate, -fprofile-use, and -fauto-profile.
12005
12006       -fprofile-reorder-functions
12007           Function reordering based on profile instrumentation collects first
12008           time of execution of a function and orders these functions in
12009           ascending order.
12010
12011           Enabled with -fprofile-use.
12012
12013       -fvpt
12014           If combined with -fprofile-arcs, this option instructs the compiler
12015           to add code to gather information about values of expressions.
12016
12017           With -fbranch-probabilities, it reads back the data gathered and
12018           actually performs the optimizations based on them.  Currently the
12019           optimizations include specialization of division operations using
12020           the knowledge about the value of the denominator.
12021
12022           Enabled with -fprofile-use and -fauto-profile.
12023
12024       -frename-registers
12025           Attempt to avoid false dependencies in scheduled code by making use
12026           of registers left over after register allocation.  This
12027           optimization most benefits processors with lots of registers.
12028           Depending on the debug information format adopted by the target,
12029           however, it can make debugging impossible, since variables no
12030           longer stay in a "home register".
12031
12032           Enabled by default with -funroll-loops.
12033
12034       -fschedule-fusion
12035           Performs a target dependent pass over the instruction stream to
12036           schedule instructions of same type together because target machine
12037           can execute them more efficiently if they are adjacent to each
12038           other in the instruction flow.
12039
12040           Enabled at levels -O2, -O3, -Os.
12041
12042       -ftracer
12043           Perform tail duplication to enlarge superblock size.  This
12044           transformation simplifies the control flow of the function allowing
12045           other optimizations to do a better job.
12046
12047           Enabled by -fprofile-use and -fauto-profile.
12048
12049       -funroll-loops
12050           Unroll loops whose number of iterations can be determined at
12051           compile time or upon entry to the loop.  -funroll-loops implies
12052           -frerun-cse-after-loop, -fweb and -frename-registers.  It also
12053           turns on complete loop peeling (i.e. complete removal of loops with
12054           a small constant number of iterations).  This option makes code
12055           larger, and may or may not make it run faster.
12056
12057           Enabled by -fprofile-use and -fauto-profile.
12058
12059       -funroll-all-loops
12060           Unroll all loops, even if their number of iterations is uncertain
12061           when the loop is entered.  This usually makes programs run more
12062           slowly.  -funroll-all-loops implies the same options as
12063           -funroll-loops.
12064
12065       -fpeel-loops
12066           Peels loops for which there is enough information that they do not
12067           roll much (from profile feedback or static analysis).  It also
12068           turns on complete loop peeling (i.e. complete removal of loops with
12069           small constant number of iterations).
12070
12071           Enabled by -O3, -fprofile-use, and -fauto-profile.
12072
12073       -fmove-loop-invariants
12074           Enables the loop invariant motion pass in the RTL loop optimizer.
12075           Enabled at level -O1 and higher, except for -Og.
12076
12077       -fmove-loop-stores
12078           Enables the loop store motion pass in the GIMPLE loop optimizer.
12079           This moves invariant stores to after the end of the loop in
12080           exchange for carrying the stored value in a register across the
12081           iteration.  Note for this option to have an effect -ftree-loop-im
12082           has to be enabled as well.  Enabled at level -O1 and higher, except
12083           for -Og.
12084
12085       -fsplit-loops
12086           Split a loop into two if it contains a condition that's always true
12087           for one side of the iteration space and false for the other.
12088
12089           Enabled by -fprofile-use and -fauto-profile.
12090
12091       -funswitch-loops
12092           Move branches with loop invariant conditions out of the loop, with
12093           duplicates of the loop on both branches (modified according to
12094           result of the condition).
12095
12096           Enabled by -fprofile-use and -fauto-profile.
12097
12098       -fversion-loops-for-strides
12099           If a loop iterates over an array with a variable stride, create
12100           another version of the loop that assumes the stride is always one.
12101           For example:
12102
12103                   for (int i = 0; i < n; ++i)
12104                     x[i * stride] = ...;
12105
12106           becomes:
12107
12108                   if (stride == 1)
12109                     for (int i = 0; i < n; ++i)
12110                       x[i] = ...;
12111                   else
12112                     for (int i = 0; i < n; ++i)
12113                       x[i * stride] = ...;
12114
12115           This is particularly useful for assumed-shape arrays in Fortran
12116           where (for example) it allows better vectorization assuming
12117           contiguous accesses.  This flag is enabled by default at -O3.  It
12118           is also enabled by -fprofile-use and -fauto-profile.
12119
12120       -ffunction-sections
12121       -fdata-sections
12122           Place each function or data item into its own section in the output
12123           file if the target supports arbitrary sections.  The name of the
12124           function or the name of the data item determines the section's name
12125           in the output file.
12126
12127           Use these options on systems where the linker can perform
12128           optimizations to improve locality of reference in the instruction
12129           space.  Most systems using the ELF object format have linkers with
12130           such optimizations.  On AIX, the linker rearranges sections
12131           (CSECTs) based on the call graph.  The performance impact varies.
12132
12133           Together with a linker garbage collection (linker --gc-sections
12134           option) these options may lead to smaller statically-linked
12135           executables (after stripping).
12136
12137           On ELF/DWARF systems these options do not degenerate the quality of
12138           the debug information.  There could be issues with other object
12139           files/debug info formats.
12140
12141           Only use these options when there are significant benefits from
12142           doing so.  When you specify these options, the assembler and linker
12143           create larger object and executable files and are also slower.
12144           These options affect code generation.  They prevent optimizations
12145           by the compiler and assembler using relative locations inside a
12146           translation unit since the locations are unknown until link time.
12147           An example of such an optimization is relaxing calls to short call
12148           instructions.
12149
12150       -fstdarg-opt
12151           Optimize the prologue of variadic argument functions with respect
12152           to usage of those arguments.
12153
12154       -fsection-anchors
12155           Try to reduce the number of symbolic address calculations by using
12156           shared "anchor" symbols to address nearby objects.  This
12157           transformation can help to reduce the number of GOT entries and GOT
12158           accesses on some targets.
12159
12160           For example, the implementation of the following function "foo":
12161
12162                   static int a, b, c;
12163                   int foo (void) { return a + b + c; }
12164
12165           usually calculates the addresses of all three variables, but if you
12166           compile it with -fsection-anchors, it accesses the variables from a
12167           common anchor point instead.  The effect is similar to the
12168           following pseudocode (which isn't valid C):
12169
12170                   int foo (void)
12171                   {
12172                     register int *xr = &x;
12173                     return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
12174                   }
12175
12176           Not all targets support this option.
12177
12178       -fzero-call-used-regs=choice
12179           Zero call-used registers at function return to increase program
12180           security by either mitigating Return-Oriented Programming (ROP)
12181           attacks or preventing information leakage through registers.
12182
12183           The possible values of choice are the same as for the
12184           "zero_call_used_regs" attribute.  The default is skip.
12185
12186           You can control this behavior for a specific function by using the
12187           function attribute "zero_call_used_regs".
12188
12189       --param name=value
12190           In some places, GCC uses various constants to control the amount of
12191           optimization that is done.  For example, GCC does not inline
12192           functions that contain more than a certain number of instructions.
12193           You can control some of these constants on the command line using
12194           the --param option.
12195
12196           The names of specific parameters, and the meaning of the values,
12197           are tied to the internals of the compiler, and are subject to
12198           change without notice in future releases.
12199
12200           In order to get the minimal, maximal and default values of a
12201           parameter, use the --help=param -Q options.
12202
12203           In each case, the value is an integer.  The following choices of
12204           name are recognized for all targets:
12205
12206           predictable-branch-outcome
12207               When branch is predicted to be taken with probability lower
12208               than this threshold (in percent), then it is considered well
12209               predictable.
12210
12211           max-rtl-if-conversion-insns
12212               RTL if-conversion tries to remove conditional branches around a
12213               block and replace them with conditionally executed
12214               instructions.  This parameter gives the maximum number of
12215               instructions in a block which should be considered for if-
12216               conversion.  The compiler will also use other heuristics to
12217               decide whether if-conversion is likely to be profitable.
12218
12219           max-rtl-if-conversion-predictable-cost
12220               RTL if-conversion will try to remove conditional branches
12221               around a block and replace them with conditionally executed
12222               instructions.  These parameters give the maximum permissible
12223               cost for the sequence that would be generated by if-conversion
12224               depending on whether the branch is statically determined to be
12225               predictable or not.  The units for this parameter are the same
12226               as those for the GCC internal seq_cost metric.  The compiler
12227               will try to provide a reasonable default for this parameter
12228               using the BRANCH_COST target macro.
12229
12230           max-crossjump-edges
12231               The maximum number of incoming edges to consider for cross-
12232               jumping.  The algorithm used by -fcrossjumping is O(N^2) in the
12233               number of edges incoming to each block.  Increasing values mean
12234               more aggressive optimization, making the compilation time
12235               increase with probably small improvement in executable size.
12236
12237           min-crossjump-insns
12238               The minimum number of instructions that must be matched at the
12239               end of two blocks before cross-jumping is performed on them.
12240               This value is ignored in the case where all instructions in the
12241               block being cross-jumped from are matched.
12242
12243           max-grow-copy-bb-insns
12244               The maximum code size expansion factor when copying basic
12245               blocks instead of jumping.  The expansion is relative to a jump
12246               instruction.
12247
12248           max-goto-duplication-insns
12249               The maximum number of instructions to duplicate to a block that
12250               jumps to a computed goto.  To avoid O(N^2) behavior in a number
12251               of passes, GCC factors computed gotos early in the compilation
12252               process, and unfactors them as late as possible.  Only computed
12253               jumps at the end of a basic blocks with no more than max-goto-
12254               duplication-insns are unfactored.
12255
12256           max-delay-slot-insn-search
12257               The maximum number of instructions to consider when looking for
12258               an instruction to fill a delay slot.  If more than this
12259               arbitrary number of instructions are searched, the time savings
12260               from filling the delay slot are minimal, so stop searching.
12261               Increasing values mean more aggressive optimization, making the
12262               compilation time increase with probably small improvement in
12263               execution time.
12264
12265           max-delay-slot-live-search
12266               When trying to fill delay slots, the maximum number of
12267               instructions to consider when searching for a block with valid
12268               live register information.  Increasing this arbitrarily chosen
12269               value means more aggressive optimization, increasing the
12270               compilation time.  This parameter should be removed when the
12271               delay slot code is rewritten to maintain the control-flow
12272               graph.
12273
12274           max-gcse-memory
12275               The approximate maximum amount of memory in "kB" that can be
12276               allocated in order to perform the global common subexpression
12277               elimination optimization.  If more memory than specified is
12278               required, the optimization is not done.
12279
12280           max-gcse-insertion-ratio
12281               If the ratio of expression insertions to deletions is larger
12282               than this value for any expression, then RTL PRE inserts or
12283               removes the expression and thus leaves partially redundant
12284               computations in the instruction stream.
12285
12286           max-pending-list-length
12287               The maximum number of pending dependencies scheduling allows
12288               before flushing the current state and starting over.  Large
12289               functions with few branches or calls can create excessively
12290               large lists which needlessly consume memory and resources.
12291
12292           max-modulo-backtrack-attempts
12293               The maximum number of backtrack attempts the scheduler should
12294               make when modulo scheduling a loop.  Larger values can
12295               exponentially increase compilation time.
12296
12297           max-inline-functions-called-once-loop-depth
12298               Maximal loop depth of a call considered by inline heuristics
12299               that tries to inline all functions called once.
12300
12301           max-inline-functions-called-once-insns
12302               Maximal estimated size of functions produced while inlining
12303               functions called once.
12304
12305           max-inline-insns-single
12306               Several parameters control the tree inliner used in GCC.  This
12307               number sets the maximum number of instructions (counted in
12308               GCC's internal representation) in a single function that the
12309               tree inliner considers for inlining.  This only affects
12310               functions declared inline and methods implemented in a class
12311               declaration (C++).
12312
12313           max-inline-insns-auto
12314               When you use -finline-functions (included in -O3), a lot of
12315               functions that would otherwise not be considered for inlining
12316               by the compiler are investigated.  To those functions, a
12317               different (more restrictive) limit compared to functions
12318               declared inline can be applied (--param max-inline-insns-auto).
12319
12320           max-inline-insns-small
12321               This is bound applied to calls which are considered relevant
12322               with -finline-small-functions.
12323
12324           max-inline-insns-size
12325               This is bound applied to calls which are optimized for size.
12326               Small growth may be desirable to anticipate optimization
12327               oppurtunities exposed by inlining.
12328
12329           uninlined-function-insns
12330               Number of instructions accounted by inliner for function
12331               overhead such as function prologue and epilogue.
12332
12333           uninlined-function-time
12334               Extra time accounted by inliner for function overhead such as
12335               time needed to execute function prologue and epilogue.
12336
12337           inline-heuristics-hint-percent
12338               The scale (in percents) applied to inline-insns-single,
12339               inline-insns-single-O2, inline-insns-auto when inline
12340               heuristics hints that inlining is very profitable (will enable
12341               later optimizations).
12342
12343           uninlined-thunk-insns
12344           uninlined-thunk-time
12345               Same as --param uninlined-function-insns and --param uninlined-
12346               function-time but applied to function thunks.
12347
12348           inline-min-speedup
12349               When estimated performance improvement of caller + callee
12350               runtime exceeds this threshold (in percent), the function can
12351               be inlined regardless of the limit on --param max-inline-insns-
12352               single and --param max-inline-insns-auto.
12353
12354           large-function-insns
12355               The limit specifying really large functions.  For functions
12356               larger than this limit after inlining, inlining is constrained
12357               by --param large-function-growth.  This parameter is useful
12358               primarily to avoid extreme compilation time caused by non-
12359               linear algorithms used by the back end.
12360
12361           large-function-growth
12362               Specifies maximal growth of large function caused by inlining
12363               in percents.  For example, parameter value 100 limits large
12364               function growth to 2.0 times the original size.
12365
12366           large-unit-insns
12367               The limit specifying large translation unit.  Growth caused by
12368               inlining of units larger than this limit is limited by --param
12369               inline-unit-growth.  For small units this might be too tight.
12370               For example, consider a unit consisting of function A that is
12371               inline and B that just calls A three times.  If B is small
12372               relative to A, the growth of unit is 300\% and yet such
12373               inlining is very sane.  For very large units consisting of
12374               small inlineable functions, however, the overall unit growth
12375               limit is needed to avoid exponential explosion of code size.
12376               Thus for smaller units, the size is increased to --param large-
12377               unit-insns before applying --param inline-unit-growth.
12378
12379           lazy-modules
12380               Maximum number of concurrently open C++ module files when lazy
12381               loading.
12382
12383           inline-unit-growth
12384               Specifies maximal overall growth of the compilation unit caused
12385               by inlining.  For example, parameter value 20 limits unit
12386               growth to 1.2 times the original size. Cold functions (either
12387               marked cold via an attribute or by profile feedback) are not
12388               accounted into the unit size.
12389
12390           ipa-cp-unit-growth
12391               Specifies maximal overall growth of the compilation unit caused
12392               by interprocedural constant propagation.  For example,
12393               parameter value 10 limits unit growth to 1.1 times the original
12394               size.
12395
12396           ipa-cp-large-unit-insns
12397               The size of translation unit that IPA-CP pass considers large.
12398
12399           large-stack-frame
12400               The limit specifying large stack frames.  While inlining the
12401               algorithm is trying to not grow past this limit too much.
12402
12403           large-stack-frame-growth
12404               Specifies maximal growth of large stack frames caused by
12405               inlining in percents.  For example, parameter value 1000 limits
12406               large stack frame growth to 11 times the original size.
12407
12408           max-inline-insns-recursive
12409           max-inline-insns-recursive-auto
12410               Specifies the maximum number of instructions an out-of-line
12411               copy of a self-recursive inline function can grow into by
12412               performing recursive inlining.
12413
12414               --param max-inline-insns-recursive applies to functions
12415               declared inline.  For functions not declared inline, recursive
12416               inlining happens only when -finline-functions (included in -O3)
12417               is enabled; --param max-inline-insns-recursive-auto applies
12418               instead.
12419
12420           max-inline-recursive-depth
12421           max-inline-recursive-depth-auto
12422               Specifies the maximum recursion depth used for recursive
12423               inlining.
12424
12425               --param max-inline-recursive-depth applies to functions
12426               declared inline.  For functions not declared inline, recursive
12427               inlining happens only when -finline-functions (included in -O3)
12428               is enabled; --param max-inline-recursive-depth-auto applies
12429               instead.
12430
12431           min-inline-recursive-probability
12432               Recursive inlining is profitable only for function having deep
12433               recursion in average and can hurt for function having little
12434               recursion depth by increasing the prologue size or complexity
12435               of function body to other optimizers.
12436
12437               When profile feedback is available (see -fprofile-generate) the
12438               actual recursion depth can be guessed from the probability that
12439               function recurses via a given call expression.  This parameter
12440               limits inlining only to call expressions whose probability
12441               exceeds the given threshold (in percents).
12442
12443           early-inlining-insns
12444               Specify growth that the early inliner can make.  In effect it
12445               increases the amount of inlining for code having a large
12446               abstraction penalty.
12447
12448           max-early-inliner-iterations
12449               Limit of iterations of the early inliner.  This basically
12450               bounds the number of nested indirect calls the early inliner
12451               can resolve.  Deeper chains are still handled by late inlining.
12452
12453           comdat-sharing-probability
12454               Probability (in percent) that C++ inline function with comdat
12455               visibility are shared across multiple compilation units.
12456
12457           modref-max-bases
12458           modref-max-refs
12459           modref-max-accesses
12460               Specifies the maximal number of base pointers, references and
12461               accesses stored for a single function by mod/ref analysis.
12462
12463           modref-max-tests
12464               Specifies the maxmal number of tests alias oracle can perform
12465               to disambiguate memory locations using the mod/ref information.
12466               This parameter ought to be bigger than --param modref-max-bases
12467               and --param modref-max-refs.
12468
12469           modref-max-depth
12470               Specifies the maximum depth of DFS walk used by modref escape
12471               analysis.  Setting to 0 disables the analysis completely.
12472
12473           modref-max-escape-points
12474               Specifies the maximum number of escape points tracked by modref
12475               per SSA-name.
12476
12477           modref-max-adjustments
12478               Specifies the maximum number the access range is enlarged
12479               during modref dataflow analysis.
12480
12481           profile-func-internal-id
12482               A parameter to control whether to use function internal id in
12483               profile database lookup. If the value is 0, the compiler uses
12484               an id that is based on function assembler name and filename,
12485               which makes old profile data more tolerant to source changes
12486               such as function reordering etc.
12487
12488           min-vect-loop-bound
12489               The minimum number of iterations under which loops are not
12490               vectorized when -ftree-vectorize is used.  The number of
12491               iterations after vectorization needs to be greater than the
12492               value specified by this option to allow vectorization.
12493
12494           gcse-cost-distance-ratio
12495               Scaling factor in calculation of maximum distance an expression
12496               can be moved by GCSE optimizations.  This is currently
12497               supported only in the code hoisting pass.  The bigger the
12498               ratio, the more aggressive code hoisting is with simple
12499               expressions, i.e., the expressions that have cost less than
12500               gcse-unrestricted-cost.  Specifying 0 disables hoisting of
12501               simple expressions.
12502
12503           gcse-unrestricted-cost
12504               Cost, roughly measured as the cost of a single typical machine
12505               instruction, at which GCSE optimizations do not constrain the
12506               distance an expression can travel.  This is currently supported
12507               only in the code hoisting pass.  The lesser the cost, the more
12508               aggressive code hoisting is.  Specifying 0 allows all
12509               expressions to travel unrestricted distances.
12510
12511           max-hoist-depth
12512               The depth of search in the dominator tree for expressions to
12513               hoist.  This is used to avoid quadratic behavior in hoisting
12514               algorithm.  The value of 0 does not limit on the search, but
12515               may slow down compilation of huge functions.
12516
12517           max-tail-merge-comparisons
12518               The maximum amount of similar bbs to compare a bb with.  This
12519               is used to avoid quadratic behavior in tree tail merging.
12520
12521           max-tail-merge-iterations
12522               The maximum amount of iterations of the pass over the function.
12523               This is used to limit compilation time in tree tail merging.
12524
12525           store-merging-allow-unaligned
12526               Allow the store merging pass to introduce unaligned stores if
12527               it is legal to do so.
12528
12529           max-stores-to-merge
12530               The maximum number of stores to attempt to merge into wider
12531               stores in the store merging pass.
12532
12533           max-store-chains-to-track
12534               The maximum number of store chains to track at the same time in
12535               the attempt to merge them into wider stores in the store
12536               merging pass.
12537
12538           max-stores-to-track
12539               The maximum number of stores to track at the same time in the
12540               attemt to to merge them into wider stores in the store merging
12541               pass.
12542
12543           max-unrolled-insns
12544               The maximum number of instructions that a loop may have to be
12545               unrolled.  If a loop is unrolled, this parameter also
12546               determines how many times the loop code is unrolled.
12547
12548           max-average-unrolled-insns
12549               The maximum number of instructions biased by probabilities of
12550               their execution that a loop may have to be unrolled.  If a loop
12551               is unrolled, this parameter also determines how many times the
12552               loop code is unrolled.
12553
12554           max-unroll-times
12555               The maximum number of unrollings of a single loop.
12556
12557           max-peeled-insns
12558               The maximum number of instructions that a loop may have to be
12559               peeled.  If a loop is peeled, this parameter also determines
12560               how many times the loop code is peeled.
12561
12562           max-peel-times
12563               The maximum number of peelings of a single loop.
12564
12565           max-peel-branches
12566               The maximum number of branches on the hot path through the
12567               peeled sequence.
12568
12569           max-completely-peeled-insns
12570               The maximum number of insns of a completely peeled loop.
12571
12572           max-completely-peel-times
12573               The maximum number of iterations of a loop to be suitable for
12574               complete peeling.
12575
12576           max-completely-peel-loop-nest-depth
12577               The maximum depth of a loop nest suitable for complete peeling.
12578
12579           max-unswitch-insns
12580               The maximum number of insns of an unswitched loop.
12581
12582           max-unswitch-depth
12583               The maximum depth of a loop nest to be unswitched.
12584
12585           lim-expensive
12586               The minimum cost of an expensive expression in the loop
12587               invariant motion.
12588
12589           min-loop-cond-split-prob
12590               When FDO profile information is available, min-loop-cond-split-
12591               prob specifies minimum threshold for probability of semi-
12592               invariant condition statement to trigger loop split.
12593
12594           iv-consider-all-candidates-bound
12595               Bound on number of candidates for induction variables, below
12596               which all candidates are considered for each use in induction
12597               variable optimizations.  If there are more candidates than
12598               this, only the most relevant ones are considered to avoid
12599               quadratic time complexity.
12600
12601           iv-max-considered-uses
12602               The induction variable optimizations give up on loops that
12603               contain more induction variable uses.
12604
12605           iv-always-prune-cand-set-bound
12606               If the number of candidates in the set is smaller than this
12607               value, always try to remove unnecessary ivs from the set when
12608               adding a new one.
12609
12610           avg-loop-niter
12611               Average number of iterations of a loop.
12612
12613           dse-max-object-size
12614               Maximum size (in bytes) of objects tracked bytewise by dead
12615               store elimination.  Larger values may result in larger
12616               compilation times.
12617
12618           dse-max-alias-queries-per-store
12619               Maximum number of queries into the alias oracle per store.
12620               Larger values result in larger compilation times and may result
12621               in more removed dead stores.
12622
12623           scev-max-expr-size
12624               Bound on size of expressions used in the scalar evolutions
12625               analyzer.  Large expressions slow the analyzer.
12626
12627           scev-max-expr-complexity
12628               Bound on the complexity of the expressions in the scalar
12629               evolutions analyzer.  Complex expressions slow the analyzer.
12630
12631           max-tree-if-conversion-phi-args
12632               Maximum number of arguments in a PHI supported by TREE if
12633               conversion unless the loop is marked with simd pragma.
12634
12635           vect-max-layout-candidates
12636               The maximum number of possible vector layouts (such as
12637               permutations) to consider when optimizing to-be-vectorized
12638               code.
12639
12640           vect-max-version-for-alignment-checks
12641               The maximum number of run-time checks that can be performed
12642               when doing loop versioning for alignment in the vectorizer.
12643
12644           vect-max-version-for-alias-checks
12645               The maximum number of run-time checks that can be performed
12646               when doing loop versioning for alias in the vectorizer.
12647
12648           vect-max-peeling-for-alignment
12649               The maximum number of loop peels to enhance access alignment
12650               for vectorizer. Value -1 means no limit.
12651
12652           max-iterations-to-track
12653               The maximum number of iterations of a loop the brute-force
12654               algorithm for analysis of the number of iterations of the loop
12655               tries to evaluate.
12656
12657           hot-bb-count-fraction
12658               The denominator n of fraction 1/n of the maximal execution
12659               count of a basic block in the entire program that a basic block
12660               needs to at least have in order to be considered hot.  The
12661               default is 10000, which means that a basic block is considered
12662               hot if its execution count is greater than 1/10000 of the
12663               maximal execution count.  0 means that it is never considered
12664               hot.  Used in non-LTO mode.
12665
12666           hot-bb-count-ws-permille
12667               The number of most executed permilles, ranging from 0 to 1000,
12668               of the profiled execution of the entire program to which the
12669               execution count of a basic block must be part of in order to be
12670               considered hot.  The default is 990, which means that a basic
12671               block is considered hot if its execution count contributes to
12672               the upper 990 permilles, or 99.0%, of the profiled execution of
12673               the entire program.  0 means that it is never considered hot.
12674               Used in LTO mode.
12675
12676           hot-bb-frequency-fraction
12677               The denominator n of fraction 1/n of the execution frequency of
12678               the entry block of a function that a basic block of this
12679               function needs to at least have in order to be considered hot.
12680               The default is 1000, which means that a basic block is
12681               considered hot in a function if it is executed more frequently
12682               than 1/1000 of the frequency of the entry block of the
12683               function.  0 means that it is never considered hot.
12684
12685           unlikely-bb-count-fraction
12686               The denominator n of fraction 1/n of the number of profiled
12687               runs of the entire program below which the execution count of a
12688               basic block must be in order for the basic block to be
12689               considered unlikely executed.  The default is 20, which means
12690               that a basic block is considered unlikely executed if it is
12691               executed in fewer than 1/20, or 5%, of the runs of the program.
12692               0 means that it is always considered unlikely executed.
12693
12694           max-predicted-iterations
12695               The maximum number of loop iterations we predict statically.
12696               This is useful in cases where a function contains a single loop
12697               with known bound and another loop with unknown bound.  The
12698               known number of iterations is predicted correctly, while the
12699               unknown number of iterations average to roughly 10.  This means
12700               that the loop without bounds appears artificially cold relative
12701               to the other one.
12702
12703           builtin-expect-probability
12704               Control the probability of the expression having the specified
12705               value. This parameter takes a percentage (i.e. 0 ... 100) as
12706               input.
12707
12708           builtin-string-cmp-inline-length
12709               The maximum length of a constant string for a builtin string
12710               cmp call eligible for inlining.
12711
12712           align-threshold
12713               Select fraction of the maximal frequency of executions of a
12714               basic block in a function to align the basic block.
12715
12716           align-loop-iterations
12717               A loop expected to iterate at least the selected number of
12718               iterations is aligned.
12719
12720           tracer-dynamic-coverage
12721           tracer-dynamic-coverage-feedback
12722               This value is used to limit superblock formation once the given
12723               percentage of executed instructions is covered.  This limits
12724               unnecessary code size expansion.
12725
12726               The tracer-dynamic-coverage-feedback parameter is used only
12727               when profile feedback is available.  The real profiles (as
12728               opposed to statically estimated ones) are much less balanced
12729               allowing the threshold to be larger value.
12730
12731           tracer-max-code-growth
12732               Stop tail duplication once code growth has reached given
12733               percentage.  This is a rather artificial limit, as most of the
12734               duplicates are eliminated later in cross jumping, so it may be
12735               set to much higher values than is the desired code growth.
12736
12737           tracer-min-branch-ratio
12738               Stop reverse growth when the reverse probability of best edge
12739               is less than this threshold (in percent).
12740
12741           tracer-min-branch-probability
12742           tracer-min-branch-probability-feedback
12743               Stop forward growth if the best edge has probability lower than
12744               this threshold.
12745
12746               Similarly to tracer-dynamic-coverage two parameters are
12747               provided.  tracer-min-branch-probability-feedback is used for
12748               compilation with profile feedback and tracer-min-branch-
12749               probability compilation without.  The value for compilation
12750               with profile feedback needs to be more conservative (higher) in
12751               order to make tracer effective.
12752
12753           stack-clash-protection-guard-size
12754               Specify the size of the operating system provided stack guard
12755               as 2 raised to num bytes.  Higher values may reduce the number
12756               of explicit probes, but a value larger than the operating
12757               system provided guard will leave code vulnerable to stack clash
12758               style attacks.
12759
12760           stack-clash-protection-probe-interval
12761               Stack clash protection involves probing stack space as it is
12762               allocated.  This param controls the maximum distance between
12763               probes into the stack as 2 raised to num bytes.  Higher values
12764               may reduce the number of explicit probes, but a value larger
12765               than the operating system provided guard will leave code
12766               vulnerable to stack clash style attacks.
12767
12768           max-cse-path-length
12769               The maximum number of basic blocks on path that CSE considers.
12770
12771           max-cse-insns
12772               The maximum number of instructions CSE processes before
12773               flushing.
12774
12775           ggc-min-expand
12776               GCC uses a garbage collector to manage its own memory
12777               allocation.  This parameter specifies the minimum percentage by
12778               which the garbage collector's heap should be allowed to expand
12779               between collections.  Tuning this may improve compilation
12780               speed; it has no effect on code generation.
12781
12782               The default is 30% + 70% * (RAM/1GB) with an upper bound of
12783               100% when RAM >= 1GB.  If "getrlimit" is available, the notion
12784               of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
12785               "RLIMIT_AS".  If GCC is not able to calculate RAM on a
12786               particular platform, the lower bound of 30% is used.  Setting
12787               this parameter and ggc-min-heapsize to zero causes a full
12788               collection to occur at every opportunity.  This is extremely
12789               slow, but can be useful for debugging.
12790
12791           ggc-min-heapsize
12792               Minimum size of the garbage collector's heap before it begins
12793               bothering to collect garbage.  The first collection occurs
12794               after the heap expands by ggc-min-expand% beyond ggc-min-
12795               heapsize.  Again, tuning this may improve compilation speed,
12796               and has no effect on code generation.
12797
12798               The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
12799               that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
12800               exceeded, but with a lower bound of 4096 (four megabytes) and
12801               an upper bound of 131072 (128 megabytes).  If GCC is not able
12802               to calculate RAM on a particular platform, the lower bound is
12803               used.  Setting this parameter very large effectively disables
12804               garbage collection.  Setting this parameter and ggc-min-expand
12805               to zero causes a full collection to occur at every opportunity.
12806
12807           max-reload-search-insns
12808               The maximum number of instruction reload should look backward
12809               for equivalent register.  Increasing values mean more
12810               aggressive optimization, making the compilation time increase
12811               with probably slightly better performance.
12812
12813           max-cselib-memory-locations
12814               The maximum number of memory locations cselib should take into
12815               account.  Increasing values mean more aggressive optimization,
12816               making the compilation time increase with probably slightly
12817               better performance.
12818
12819           max-sched-ready-insns
12820               The maximum number of instructions ready to be issued the
12821               scheduler should consider at any given time during the first
12822               scheduling pass.  Increasing values mean more thorough
12823               searches, making the compilation time increase with probably
12824               little benefit.
12825
12826           max-sched-region-blocks
12827               The maximum number of blocks in a region to be considered for
12828               interblock scheduling.
12829
12830           max-pipeline-region-blocks
12831               The maximum number of blocks in a region to be considered for
12832               pipelining in the selective scheduler.
12833
12834           max-sched-region-insns
12835               The maximum number of insns in a region to be considered for
12836               interblock scheduling.
12837
12838           max-pipeline-region-insns
12839               The maximum number of insns in a region to be considered for
12840               pipelining in the selective scheduler.
12841
12842           min-spec-prob
12843               The minimum probability (in percents) of reaching a source
12844               block for interblock speculative scheduling.
12845
12846           max-sched-extend-regions-iters
12847               The maximum number of iterations through CFG to extend regions.
12848               A value of 0 disables region extensions.
12849
12850           max-sched-insn-conflict-delay
12851               The maximum conflict delay for an insn to be considered for
12852               speculative motion.
12853
12854           sched-spec-prob-cutoff
12855               The minimal probability of speculation success (in percents),
12856               so that speculative insns are scheduled.
12857
12858           sched-state-edge-prob-cutoff
12859               The minimum probability an edge must have for the scheduler to
12860               save its state across it.
12861
12862           sched-mem-true-dep-cost
12863               Minimal distance (in CPU cycles) between store and load
12864               targeting same memory locations.
12865
12866           selsched-max-lookahead
12867               The maximum size of the lookahead window of selective
12868               scheduling.  It is a depth of search for available
12869               instructions.
12870
12871           selsched-max-sched-times
12872               The maximum number of times that an instruction is scheduled
12873               during selective scheduling.  This is the limit on the number
12874               of iterations through which the instruction may be pipelined.
12875
12876           selsched-insns-to-rename
12877               The maximum number of best instructions in the ready list that
12878               are considered for renaming in the selective scheduler.
12879
12880           sms-min-sc
12881               The minimum value of stage count that swing modulo scheduler
12882               generates.
12883
12884           max-last-value-rtl
12885               The maximum size measured as number of RTLs that can be
12886               recorded in an expression in combiner for a pseudo register as
12887               last known value of that register.
12888
12889           max-combine-insns
12890               The maximum number of instructions the RTL combiner tries to
12891               combine.
12892
12893           integer-share-limit
12894               Small integer constants can use a shared data structure,
12895               reducing the compiler's memory usage and increasing its speed.
12896               This sets the maximum value of a shared integer constant.
12897
12898           ssp-buffer-size
12899               The minimum size of buffers (i.e. arrays) that receive stack
12900               smashing protection when -fstack-protector is used.
12901
12902           min-size-for-stack-sharing
12903               The minimum size of variables taking part in stack slot sharing
12904               when not optimizing.
12905
12906           max-jump-thread-duplication-stmts
12907               Maximum number of statements allowed in a block that needs to
12908               be duplicated when threading jumps.
12909
12910           max-jump-thread-paths
12911               The maximum number of paths to consider when searching for jump
12912               threading opportunities.  When arriving at a block, incoming
12913               edges are only considered if the number of paths to be searched
12914               so far multiplied by the number of incoming edges does not
12915               exhaust the specified maximum number of paths to consider.
12916
12917           max-fields-for-field-sensitive
12918               Maximum number of fields in a structure treated in a field
12919               sensitive manner during pointer analysis.
12920
12921           prefetch-latency
12922               Estimate on average number of instructions that are executed
12923               before prefetch finishes.  The distance prefetched ahead is
12924               proportional to this constant.  Increasing this number may also
12925               lead to less streams being prefetched (see simultaneous-
12926               prefetches).
12927
12928           simultaneous-prefetches
12929               Maximum number of prefetches that can run at the same time.
12930
12931           l1-cache-line-size
12932               The size of cache line in L1 data cache, in bytes.
12933
12934           l1-cache-size
12935               The size of L1 data cache, in kilobytes.
12936
12937           l2-cache-size
12938               The size of L2 data cache, in kilobytes.
12939
12940           prefetch-dynamic-strides
12941               Whether the loop array prefetch pass should issue software
12942               prefetch hints for strides that are non-constant.  In some
12943               cases this may be beneficial, though the fact the stride is
12944               non-constant may make it hard to predict when there is clear
12945               benefit to issuing these hints.
12946
12947               Set to 1 if the prefetch hints should be issued for non-
12948               constant strides.  Set to 0 if prefetch hints should be issued
12949               only for strides that are known to be constant and below
12950               prefetch-minimum-stride.
12951
12952           prefetch-minimum-stride
12953               Minimum constant stride, in bytes, to start using prefetch
12954               hints for.  If the stride is less than this threshold, prefetch
12955               hints will not be issued.
12956
12957               This setting is useful for processors that have hardware
12958               prefetchers, in which case there may be conflicts between the
12959               hardware prefetchers and the software prefetchers.  If the
12960               hardware prefetchers have a maximum stride they can handle, it
12961               should be used here to improve the use of software prefetchers.
12962
12963               A value of -1 means we don't have a threshold and therefore
12964               prefetch hints can be issued for any constant stride.
12965
12966               This setting is only useful for strides that are known and
12967               constant.
12968
12969           destructive-interference-size
12970           constructive-interference-size
12971               The values for the C++17 variables
12972               "std::hardware_destructive_interference_size" and
12973               "std::hardware_constructive_interference_size".  The
12974               destructive interference size is the minimum recommended offset
12975               between two independent concurrently-accessed objects; the
12976               constructive interference size is the maximum recommended size
12977               of contiguous memory accessed together.  Typically both will be
12978               the size of an L1 cache line for the target, in bytes.  For a
12979               generic target covering a range of L1 cache line sizes,
12980               typically the constructive interference size will be the small
12981               end of the range and the destructive size will be the large
12982               end.
12983
12984               The destructive interference size is intended to be used for
12985               layout, and thus has ABI impact.  The default value is not
12986               expected to be stable, and on some targets varies with -mtune,
12987               so use of this variable in a context where ABI stability is
12988               important, such as the public interface of a library, is
12989               strongly discouraged; if it is used in that context, users can
12990               stabilize the value using this option.
12991
12992               The constructive interference size is less sensitive, as it is
12993               typically only used in a static_assert to make sure that a type
12994               fits within a cache line.
12995
12996               See also -Winterference-size.
12997
12998           loop-interchange-max-num-stmts
12999               The maximum number of stmts in a loop to be interchanged.
13000
13001           loop-interchange-stride-ratio
13002               The minimum ratio between stride of two loops for interchange
13003               to be profitable.
13004
13005           min-insn-to-prefetch-ratio
13006               The minimum ratio between the number of instructions and the
13007               number of prefetches to enable prefetching in a loop.
13008
13009           prefetch-min-insn-to-mem-ratio
13010               The minimum ratio between the number of instructions and the
13011               number of memory references to enable prefetching in a loop.
13012
13013           use-canonical-types
13014               Whether the compiler should use the "canonical" type system.
13015               Should always be 1, which uses a more efficient internal
13016               mechanism for comparing types in C++ and Objective-C++.
13017               However, if bugs in the canonical type system are causing
13018               compilation failures, set this value to 0 to disable canonical
13019               types.
13020
13021           switch-conversion-max-branch-ratio
13022               Switch initialization conversion refuses to create arrays that
13023               are bigger than switch-conversion-max-branch-ratio times the
13024               number of branches in the switch.
13025
13026           max-partial-antic-length
13027               Maximum length of the partial antic set computed during the
13028               tree partial redundancy elimination optimization (-ftree-pre)
13029               when optimizing at -O3 and above.  For some sorts of source
13030               code the enhanced partial redundancy elimination optimization
13031               can run away, consuming all of the memory available on the host
13032               machine.  This parameter sets a limit on the length of the sets
13033               that are computed, which prevents the runaway behavior.
13034               Setting a value of 0 for this parameter allows an unlimited set
13035               length.
13036
13037           rpo-vn-max-loop-depth
13038               Maximum loop depth that is value-numbered optimistically.  When
13039               the limit hits the innermost rpo-vn-max-loop-depth loops and
13040               the outermost loop in the loop nest are value-numbered
13041               optimistically and the remaining ones not.
13042
13043           sccvn-max-alias-queries-per-access
13044               Maximum number of alias-oracle queries we perform when looking
13045               for redundancies for loads and stores.  If this limit is hit
13046               the search is aborted and the load or store is not considered
13047               redundant.  The number of queries is algorithmically limited to
13048               the number of stores on all paths from the load to the function
13049               entry.
13050
13051           ira-max-loops-num
13052               IRA uses regional register allocation by default.  If a
13053               function contains more loops than the number given by this
13054               parameter, only at most the given number of the most
13055               frequently-executed loops form regions for regional register
13056               allocation.
13057
13058           ira-max-conflict-table-size
13059               Although IRA uses a sophisticated algorithm to compress the
13060               conflict table, the table can still require excessive amounts
13061               of memory for huge functions.  If the conflict table for a
13062               function could be more than the size in MB given by this
13063               parameter, the register allocator instead uses a faster,
13064               simpler, and lower-quality algorithm that does not require
13065               building a pseudo-register conflict table.
13066
13067           ira-loop-reserved-regs
13068               IRA can be used to evaluate more accurate register pressure in
13069               loops for decisions to move loop invariants (see -O3).  The
13070               number of available registers reserved for some other purposes
13071               is given by this parameter.  Default of the parameter is the
13072               best found from numerous experiments.
13073
13074           ira-consider-dup-in-all-alts
13075               Make IRA to consider matching constraint (duplicated operand
13076               number) heavily in all available alternatives for preferred
13077               register class.  If it is set as zero, it means IRA only
13078               respects the matching constraint when it's in the only
13079               available alternative with an appropriate register class.
13080               Otherwise, it means IRA will check all available alternatives
13081               for preferred register class even if it has found some choice
13082               with an appropriate register class and respect the found
13083               qualified matching constraint.
13084
13085           ira-simple-lra-insn-threshold
13086               Approximate function insn number in 1K units triggering simple
13087               local RA.
13088
13089           lra-inheritance-ebb-probability-cutoff
13090               LRA tries to reuse values reloaded in registers in subsequent
13091               insns.  This optimization is called inheritance.  EBB is used
13092               as a region to do this optimization.  The parameter defines a
13093               minimal fall-through edge probability in percentage used to add
13094               BB to inheritance EBB in LRA.  The default value was chosen
13095               from numerous runs of SPEC2000 on x86-64.
13096
13097           loop-invariant-max-bbs-in-loop
13098               Loop invariant motion can be very expensive, both in
13099               compilation time and in amount of needed compile-time memory,
13100               with very large loops.  Loops with more basic blocks than this
13101               parameter won't have loop invariant motion optimization
13102               performed on them.
13103
13104           loop-max-datarefs-for-datadeps
13105               Building data dependencies is expensive for very large loops.
13106               This parameter limits the number of data references in loops
13107               that are considered for data dependence analysis.  These large
13108               loops are no handled by the optimizations using loop data
13109               dependencies.
13110
13111           max-vartrack-size
13112               Sets a maximum number of hash table slots to use during
13113               variable tracking dataflow analysis of any function.  If this
13114               limit is exceeded with variable tracking at assignments
13115               enabled, analysis for that function is retried without it,
13116               after removing all debug insns from the function.  If the limit
13117               is exceeded even without debug insns, var tracking analysis is
13118               completely disabled for the function.  Setting the parameter to
13119               zero makes it unlimited.
13120
13121           max-vartrack-expr-depth
13122               Sets a maximum number of recursion levels when attempting to
13123               map variable names or debug temporaries to value expressions.
13124               This trades compilation time for more complete debug
13125               information.  If this is set too low, value expressions that
13126               are available and could be represented in debug information may
13127               end up not being used; setting this higher may enable the
13128               compiler to find more complex debug expressions, but compile
13129               time and memory use may grow.
13130
13131           max-debug-marker-count
13132               Sets a threshold on the number of debug markers (e.g. begin
13133               stmt markers) to avoid complexity explosion at inlining or
13134               expanding to RTL.  If a function has more such gimple stmts
13135               than the set limit, such stmts will be dropped from the inlined
13136               copy of a function, and from its RTL expansion.
13137
13138           min-nondebug-insn-uid
13139               Use uids starting at this parameter for nondebug insns.  The
13140               range below the parameter is reserved exclusively for debug
13141               insns created by -fvar-tracking-assignments, but debug insns
13142               may get (non-overlapping) uids above it if the reserved range
13143               is exhausted.
13144
13145           ipa-sra-deref-prob-threshold
13146               IPA-SRA replaces a pointer which is known not be NULL with one
13147               or more new parameters only when the probability (in percent,
13148               relative to function entry) of it being dereferenced is higher
13149               than this parameter.
13150
13151           ipa-sra-ptr-growth-factor
13152               IPA-SRA replaces a pointer to an aggregate with one or more new
13153               parameters only when their cumulative size is less or equal to
13154               ipa-sra-ptr-growth-factor times the size of the original
13155               pointer parameter.
13156
13157           ipa-sra-ptrwrap-growth-factor
13158               Additional maximum allowed growth of total size of new
13159               parameters that ipa-sra replaces a pointer to an aggregate
13160               with, if it points to a local variable that the caller only
13161               writes to and passes it as an argument to other functions.
13162
13163           ipa-sra-max-replacements
13164               Maximum pieces of an aggregate that IPA-SRA tracks.  As a
13165               consequence, it is also the maximum number of replacements of a
13166               formal parameter.
13167
13168           sra-max-scalarization-size-Ospeed
13169           sra-max-scalarization-size-Osize
13170               The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA)
13171               aim to replace scalar parts of aggregates with uses of
13172               independent scalar variables.  These parameters control the
13173               maximum size, in storage units, of aggregate which is
13174               considered for replacement when compiling for speed (sra-max-
13175               scalarization-size-Ospeed) or size (sra-max-scalarization-size-
13176               Osize) respectively.
13177
13178           sra-max-propagations
13179               The maximum number of artificial accesses that Scalar
13180               Replacement of Aggregates (SRA) will track, per one local
13181               variable, in order to facilitate copy propagation.
13182
13183           tm-max-aggregate-size
13184               When making copies of thread-local variables in a transaction,
13185               this parameter specifies the size in bytes after which
13186               variables are saved with the logging functions as opposed to
13187               save/restore code sequence pairs.  This option only applies
13188               when using -fgnu-tm.
13189
13190           graphite-max-nb-scop-params
13191               To avoid exponential effects in the Graphite loop transforms,
13192               the number of parameters in a Static Control Part (SCoP) is
13193               bounded.  A value of zero can be used to lift the bound.  A
13194               variable whose value is unknown at compilation time and defined
13195               outside a SCoP is a parameter of the SCoP.
13196
13197           loop-block-tile-size
13198               Loop blocking or strip mining transforms, enabled with
13199               -floop-block or -floop-strip-mine, strip mine each loop in the
13200               loop nest by a given number of iterations.  The strip length
13201               can be changed using the loop-block-tile-size parameter.
13202
13203           ipa-jump-function-lookups
13204               Specifies number of statements visited during jump function
13205               offset discovery.
13206
13207           ipa-cp-value-list-size
13208               IPA-CP attempts to track all possible values and types passed
13209               to a function's parameter in order to propagate them and
13210               perform devirtualization.  ipa-cp-value-list-size is the
13211               maximum number of values and types it stores per one formal
13212               parameter of a function.
13213
13214           ipa-cp-eval-threshold
13215               IPA-CP calculates its own score of cloning profitability
13216               heuristics and performs those cloning opportunities with scores
13217               that exceed ipa-cp-eval-threshold.
13218
13219           ipa-cp-max-recursive-depth
13220               Maximum depth of recursive cloning for self-recursive function.
13221
13222           ipa-cp-min-recursive-probability
13223               Recursive cloning only when the probability of call being
13224               executed exceeds the parameter.
13225
13226           ipa-cp-profile-count-base
13227               When using -fprofile-use option, IPA-CP will consider the
13228               measured execution count of a call graph edge at this
13229               percentage position in their histogram as the basis for its
13230               heuristics calculation.
13231
13232           ipa-cp-recursive-freq-factor
13233               The number of times interprocedural copy propagation expects
13234               recursive functions to call themselves.
13235
13236           ipa-cp-recursion-penalty
13237               Percentage penalty the recursive functions will receive when
13238               they are evaluated for cloning.
13239
13240           ipa-cp-single-call-penalty
13241               Percentage penalty functions containing a single call to
13242               another function will receive when they are evaluated for
13243               cloning.
13244
13245           ipa-max-agg-items
13246               IPA-CP is also capable to propagate a number of scalar values
13247               passed in an aggregate. ipa-max-agg-items controls the maximum
13248               number of such values per one parameter.
13249
13250           ipa-cp-loop-hint-bonus
13251               When IPA-CP determines that a cloning candidate would make the
13252               number of iterations of a loop known, it adds a bonus of ipa-
13253               cp-loop-hint-bonus to the profitability score of the candidate.
13254
13255           ipa-max-loop-predicates
13256               The maximum number of different predicates IPA will use to
13257               describe when loops in a function have known properties.
13258
13259           ipa-max-aa-steps
13260               During its analysis of function bodies, IPA-CP employs alias
13261               analysis in order to track values pointed to by function
13262               parameters.  In order not spend too much time analyzing huge
13263               functions, it gives up and consider all memory clobbered after
13264               examining ipa-max-aa-steps statements modifying memory.
13265
13266           ipa-max-switch-predicate-bounds
13267               Maximal number of boundary endpoints of case ranges of switch
13268               statement.  For switch exceeding this limit, IPA-CP will not
13269               construct cloning cost predicate, which is used to estimate
13270               cloning benefit, for default case of the switch statement.
13271
13272           ipa-max-param-expr-ops
13273               IPA-CP will analyze conditional statement that references some
13274               function parameter to estimate benefit for cloning upon certain
13275               constant value.  But if number of operations in a parameter
13276               expression exceeds ipa-max-param-expr-ops, the expression is
13277               treated as complicated one, and is not handled by IPA analysis.
13278
13279           lto-partitions
13280               Specify desired number of partitions produced during WHOPR
13281               compilation.  The number of partitions should exceed the number
13282               of CPUs used for compilation.
13283
13284           lto-min-partition
13285               Size of minimal partition for WHOPR (in estimated
13286               instructions).  This prevents expenses of splitting very small
13287               programs into too many partitions.
13288
13289           lto-max-partition
13290               Size of max partition for WHOPR (in estimated instructions).
13291               to provide an upper bound for individual size of partition.
13292               Meant to be used only with balanced partitioning.
13293
13294           lto-max-streaming-parallelism
13295               Maximal number of parallel processes used for LTO streaming.
13296
13297           cxx-max-namespaces-for-diagnostic-help
13298               The maximum number of namespaces to consult for suggestions
13299               when C++ name lookup fails for an identifier.
13300
13301           sink-frequency-threshold
13302               The maximum relative execution frequency (in percents) of the
13303               target block relative to a statement's original block to allow
13304               statement sinking of a statement.  Larger numbers result in
13305               more aggressive statement sinking.  A small positive adjustment
13306               is applied for statements with memory operands as those are
13307               even more profitable so sink.
13308
13309           max-stores-to-sink
13310               The maximum number of conditional store pairs that can be sunk.
13311               Set to 0 if either vectorization (-ftree-vectorize) or if-
13312               conversion (-ftree-loop-if-convert) is disabled.
13313
13314           case-values-threshold
13315               The smallest number of different values for which it is best to
13316               use a jump-table instead of a tree of conditional branches.  If
13317               the value is 0, use the default for the machine.
13318
13319           jump-table-max-growth-ratio-for-size
13320               The maximum code size growth ratio when expanding into a jump
13321               table (in percent).  The parameter is used when optimizing for
13322               size.
13323
13324           jump-table-max-growth-ratio-for-speed
13325               The maximum code size growth ratio when expanding into a jump
13326               table (in percent).  The parameter is used when optimizing for
13327               speed.
13328
13329           tree-reassoc-width
13330               Set the maximum number of instructions executed in parallel in
13331               reassociated tree. This parameter overrides target dependent
13332               heuristics used by default if has non zero value.
13333
13334           sched-pressure-algorithm
13335               Choose between the two available implementations of
13336               -fsched-pressure.  Algorithm 1 is the original implementation
13337               and is the more likely to prevent instructions from being
13338               reordered.  Algorithm 2 was designed to be a compromise between
13339               the relatively conservative approach taken by algorithm 1 and
13340               the rather aggressive approach taken by the default scheduler.
13341               It relies more heavily on having a regular register file and
13342               accurate register pressure classes.  See haifa-sched.cc in the
13343               GCC sources for more details.
13344
13345               The default choice depends on the target.
13346
13347           max-slsr-cand-scan
13348               Set the maximum number of existing candidates that are
13349               considered when seeking a basis for a new straight-line
13350               strength reduction candidate.
13351
13352           asan-globals
13353               Enable buffer overflow detection for global objects.  This kind
13354               of protection is enabled by default if you are using
13355               -fsanitize=address option.  To disable global objects
13356               protection use --param asan-globals=0.
13357
13358           asan-stack
13359               Enable buffer overflow detection for stack objects.  This kind
13360               of protection is enabled by default when using
13361               -fsanitize=address.  To disable stack protection use --param
13362               asan-stack=0 option.
13363
13364           asan-instrument-reads
13365               Enable buffer overflow detection for memory reads.  This kind
13366               of protection is enabled by default when using
13367               -fsanitize=address.  To disable memory reads protection use
13368               --param asan-instrument-reads=0.
13369
13370           asan-instrument-writes
13371               Enable buffer overflow detection for memory writes.  This kind
13372               of protection is enabled by default when using
13373               -fsanitize=address.  To disable memory writes protection use
13374               --param asan-instrument-writes=0 option.
13375
13376           asan-memintrin
13377               Enable detection for built-in functions.  This kind of
13378               protection is enabled by default when using -fsanitize=address.
13379               To disable built-in functions protection use --param
13380               asan-memintrin=0.
13381
13382           asan-use-after-return
13383               Enable detection of use-after-return.  This kind of protection
13384               is enabled by default when using the -fsanitize=address option.
13385               To disable it use --param asan-use-after-return=0.
13386
13387               Note: By default the check is disabled at run time.  To enable
13388               it, add "detect_stack_use_after_return=1" to the environment
13389               variable ASAN_OPTIONS.
13390
13391           asan-instrumentation-with-call-threshold
13392               If number of memory accesses in function being instrumented is
13393               greater or equal to this number, use callbacks instead of
13394               inline checks.  E.g. to disable inline code use --param
13395               asan-instrumentation-with-call-threshold=0.
13396
13397           asan-kernel-mem-intrinsic-prefix
13398               If nonzero, prefix calls to "memcpy", "memset" and "memmove"
13399               with __asan_ or __hwasan_ for -fsanitize=kernel-address or
13400               -fsanitize=kernel-hwaddress, respectively.
13401
13402           hwasan-instrument-stack
13403               Enable hwasan instrumentation of statically sized stack-
13404               allocated variables.  This kind of instrumentation is enabled
13405               by default when using -fsanitize=hwaddress and disabled by
13406               default when using -fsanitize=kernel-hwaddress.  To disable
13407               stack instrumentation use --param hwasan-instrument-stack=0,
13408               and to enable it use --param hwasan-instrument-stack=1.
13409
13410           hwasan-random-frame-tag
13411               When using stack instrumentation, decide tags for stack
13412               variables using a deterministic sequence beginning at a random
13413               tag for each frame.  With this parameter unset tags are chosen
13414               using the same sequence but beginning from 1.  This is enabled
13415               by default for -fsanitize=hwaddress and unavailable for
13416               -fsanitize=kernel-hwaddress.  To disable it use --param
13417               hwasan-random-frame-tag=0.
13418
13419           hwasan-instrument-allocas
13420               Enable hwasan instrumentation of dynamically sized stack-
13421               allocated variables.  This kind of instrumentation is enabled
13422               by default when using -fsanitize=hwaddress and disabled by
13423               default when using -fsanitize=kernel-hwaddress.  To disable
13424               instrumentation of such variables use --param
13425               hwasan-instrument-allocas=0, and to enable it use --param
13426               hwasan-instrument-allocas=1.
13427
13428           hwasan-instrument-reads
13429               Enable hwasan checks on memory reads.  Instrumentation of reads
13430               is enabled by default for both -fsanitize=hwaddress and
13431               -fsanitize=kernel-hwaddress.  To disable checking memory reads
13432               use --param hwasan-instrument-reads=0.
13433
13434           hwasan-instrument-writes
13435               Enable hwasan checks on memory writes.  Instrumentation of
13436               writes is enabled by default for both -fsanitize=hwaddress and
13437               -fsanitize=kernel-hwaddress.  To disable checking memory writes
13438               use --param hwasan-instrument-writes=0.
13439
13440           hwasan-instrument-mem-intrinsics
13441               Enable hwasan instrumentation of builtin functions.
13442               Instrumentation of these builtin functions is enabled by
13443               default for both -fsanitize=hwaddress and
13444               -fsanitize=kernel-hwaddress.  To disable instrumentation of
13445               builtin functions use --param
13446               hwasan-instrument-mem-intrinsics=0.
13447
13448           use-after-scope-direct-emission-threshold
13449               If the size of a local variable in bytes is smaller or equal to
13450               this number, directly poison (or unpoison) shadow memory
13451               instead of using run-time callbacks.
13452
13453           tsan-distinguish-volatile
13454               Emit special instrumentation for accesses to volatiles.
13455
13456           tsan-instrument-func-entry-exit
13457               Emit instrumentation calls to __tsan_func_entry() and
13458               __tsan_func_exit().
13459
13460           max-fsm-thread-path-insns
13461               Maximum number of instructions to copy when duplicating blocks
13462               on a finite state automaton jump thread path.
13463
13464           threader-debug
13465               threader-debug=[none|all] Enables verbose dumping of the
13466               threader solver.
13467
13468           parloops-chunk-size
13469               Chunk size of omp schedule for loops parallelized by parloops.
13470
13471           parloops-schedule
13472               Schedule type of omp schedule for loops parallelized by
13473               parloops (static, dynamic, guided, auto, runtime).
13474
13475           parloops-min-per-thread
13476               The minimum number of iterations per thread of an innermost
13477               parallelized loop for which the parallelized variant is
13478               preferred over the single threaded one.  Note that for a
13479               parallelized loop nest the minimum number of iterations of the
13480               outermost loop per thread is two.
13481
13482           max-ssa-name-query-depth
13483               Maximum depth of recursion when querying properties of SSA
13484               names in things like fold routines.  One level of recursion
13485               corresponds to following a use-def chain.
13486
13487           max-speculative-devirt-maydefs
13488               The maximum number of may-defs we analyze when looking for a
13489               must-def specifying the dynamic type of an object that invokes
13490               a virtual call we may be able to devirtualize speculatively.
13491
13492           evrp-sparse-threshold
13493               Maximum number of basic blocks before EVRP uses a sparse cache.
13494
13495           ranger-debug
13496               Specifies the type of debug output to be issued for ranges.
13497
13498           evrp-switch-limit
13499               Specifies the maximum number of switch cases before EVRP
13500               ignores a switch.
13501
13502           unroll-jam-min-percent
13503               The minimum percentage of memory references that must be
13504               optimized away for the unroll-and-jam transformation to be
13505               considered profitable.
13506
13507           unroll-jam-max-unroll
13508               The maximum number of times the outer loop should be unrolled
13509               by the unroll-and-jam transformation.
13510
13511           max-rtl-if-conversion-unpredictable-cost
13512               Maximum permissible cost for the sequence that would be
13513               generated by the RTL if-conversion pass for a branch that is
13514               considered unpredictable.
13515
13516           max-variable-expansions-in-unroller
13517               If -fvariable-expansion-in-unroller is used, the maximum number
13518               of times that an individual variable will be expanded during
13519               loop unrolling.
13520
13521           partial-inlining-entry-probability
13522               Maximum probability of the entry BB of split region (in percent
13523               relative to entry BB of the function) to make partial inlining
13524               happen.
13525
13526           max-tracked-strlens
13527               Maximum number of strings for which strlen optimization pass
13528               will track string lengths.
13529
13530           gcse-after-reload-partial-fraction
13531               The threshold ratio for performing partial redundancy
13532               elimination after reload.
13533
13534           gcse-after-reload-critical-fraction
13535               The threshold ratio of critical edges execution count that
13536               permit performing redundancy elimination after reload.
13537
13538           max-loop-header-insns
13539               The maximum number of insns in loop header duplicated by the
13540               copy loop headers pass.
13541
13542           vect-epilogues-nomask
13543               Enable loop epilogue vectorization using smaller vector size.
13544
13545           vect-partial-vector-usage
13546               Controls when the loop vectorizer considers using partial
13547               vector loads and stores as an alternative to falling back to
13548               scalar code.  0 stops the vectorizer from ever using partial
13549               vector loads and stores.  1 allows partial vector loads and
13550               stores if vectorization removes the need for the code to
13551               iterate.  2 allows partial vector loads and stores in all
13552               loops.  The parameter only has an effect on targets that
13553               support partial vector loads and stores.
13554
13555           vect-inner-loop-cost-factor
13556               The maximum factor which the loop vectorizer applies to the
13557               cost of statements in an inner loop relative to the loop being
13558               vectorized.  The factor applied is the maximum of the estimated
13559               number of iterations of the inner loop and this parameter.  The
13560               default value of this parameter is 50.
13561
13562           vect-induction-float
13563               Enable loop vectorization of floating point inductions.
13564
13565           avoid-fma-max-bits
13566               Maximum number of bits for which we avoid creating FMAs.
13567
13568           sms-loop-average-count-threshold
13569               A threshold on the average loop count considered by the swing
13570               modulo scheduler.
13571
13572           sms-dfa-history
13573               The number of cycles the swing modulo scheduler considers when
13574               checking conflicts using DFA.
13575
13576           graphite-allow-codegen-errors
13577               Whether codegen errors should be ICEs when -fchecking.
13578
13579           sms-max-ii-factor
13580               A factor for tuning the upper bound that swing modulo scheduler
13581               uses for scheduling a loop.
13582
13583           lra-max-considered-reload-pseudos
13584               The max number of reload pseudos which are considered during
13585               spilling a non-reload pseudo.
13586
13587           max-pow-sqrt-depth
13588               Maximum depth of sqrt chains to use when synthesizing
13589               exponentiation by a real constant.
13590
13591           max-dse-active-local-stores
13592               Maximum number of active local stores in RTL dead store
13593               elimination.
13594
13595           asan-instrument-allocas
13596               Enable asan allocas/VLAs protection.
13597
13598           max-iterations-computation-cost
13599               Bound on the cost of an expression to compute the number of
13600               iterations.
13601
13602           max-isl-operations
13603               Maximum number of isl operations, 0 means unlimited.
13604
13605           graphite-max-arrays-per-scop
13606               Maximum number of arrays per scop.
13607
13608           max-vartrack-reverse-op-size
13609               Max. size of loc list for which reverse ops should be added.
13610
13611           fsm-scale-path-stmts
13612               Scale factor to apply to the number of statements in a
13613               threading path crossing a loop backedge when comparing to
13614               --param=max-jump-thread-duplication-stmts.
13615
13616           uninit-control-dep-attempts
13617               Maximum number of nested calls to search for control
13618               dependencies during uninitialized variable analysis.
13619
13620           sched-autopref-queue-depth
13621               Hardware autoprefetcher scheduler model control flag.  Number
13622               of lookahead cycles the model looks into; at ' ' only enable
13623               instruction sorting heuristic.
13624
13625           loop-versioning-max-inner-insns
13626               The maximum number of instructions that an inner loop can have
13627               before the loop versioning pass considers it too big to copy.
13628
13629           loop-versioning-max-outer-insns
13630               The maximum number of instructions that an outer loop can have
13631               before the loop versioning pass considers it too big to copy,
13632               discounting any instructions in inner loops that directly
13633               benefit from versioning.
13634
13635           ssa-name-def-chain-limit
13636               The maximum number of SSA_NAME assignments to follow in
13637               determining a property of a variable such as its value.  This
13638               limits the number of iterations or recursive calls GCC performs
13639               when optimizing certain statements or when determining their
13640               validity prior to issuing diagnostics.
13641
13642           store-merging-max-size
13643               Maximum size of a single store merging region in bytes.
13644
13645           hash-table-verification-limit
13646               The number of elements for which hash table verification is
13647               done for each searched element.
13648
13649           max-find-base-term-values
13650               Maximum number of VALUEs handled during a single find_base_term
13651               call.
13652
13653           analyzer-max-enodes-per-program-point
13654               The maximum number of exploded nodes per program point within
13655               the analyzer, before terminating analysis of that point.
13656
13657           analyzer-max-constraints
13658               The maximum number of constraints per state.
13659
13660           analyzer-min-snodes-for-call-summary
13661               The minimum number of supernodes within a function for the
13662               analyzer to consider summarizing its effects at call sites.
13663
13664           analyzer-max-enodes-for-full-dump
13665               The maximum depth of exploded nodes that should appear in a dot
13666               dump before switching to a less verbose format.
13667
13668           analyzer-max-recursion-depth
13669               The maximum number of times a callsite can appear in a call
13670               stack within the analyzer, before terminating analysis of a
13671               call that would recurse deeper.
13672
13673           analyzer-max-svalue-depth
13674               The maximum depth of a symbolic value, before approximating the
13675               value as unknown.
13676
13677           analyzer-max-infeasible-edges
13678               The maximum number of infeasible edges to reject before
13679               declaring a diagnostic as infeasible.
13680
13681           gimple-fe-computed-hot-bb-threshold
13682               The number of executions of a basic block which is considered
13683               hot.  The parameter is used only in GIMPLE FE.
13684
13685           analyzer-bb-explosion-factor
13686               The maximum number of 'after supernode' exploded nodes within
13687               the analyzer per supernode, before terminating analysis.
13688
13689           ranger-logical-depth
13690               Maximum depth of logical expression evaluation ranger will look
13691               through when evaluating outgoing edge ranges.
13692
13693           ranger-recompute-depth
13694               Maximum depth of instruction chains to consider for
13695               recomputation in the outgoing range calculator.
13696
13697           relation-block-limit
13698               Maximum number of relations the oracle will register in a basic
13699               block.
13700
13701           min-pagesize
13702               Minimum page size for warning purposes.
13703
13704           openacc-kernels
13705               Specify mode of OpenACC `kernels' constructs handling.  With
13706               --param=openacc-kernels=decompose, OpenACC `kernels' constructs
13707               are decomposed into parts, a sequence of compute constructs,
13708               each then handled individually.  This is work in progress.
13709               With --param=openacc-kernels=parloops, OpenACC `kernels'
13710               constructs are handled by the parloops pass, en bloc.  This is
13711               the current default.
13712
13713           openacc-privatization
13714               Control whether the -fopt-info-omp-note and applicable
13715               -fdump-tree-*-details options emit OpenACC privatization
13716               diagnostics.  With --param=openacc-privatization=quiet, don't
13717               diagnose.  This is the current default.  With
13718               --param=openacc-privatization=noisy, do diagnose.
13719
13720           The following choices of name are available on AArch64 targets:
13721
13722           aarch64-sve-compare-costs
13723               When vectorizing for SVE, consider using "unpacked" vectors for
13724               smaller elements and use the cost model to pick the cheapest
13725               approach.  Also use the cost model to choose between SVE and
13726               Advanced SIMD vectorization.
13727
13728               Using unpacked vectors includes storing smaller elements in
13729               larger containers and accessing elements with extending loads
13730               and truncating stores.
13731
13732           aarch64-float-recp-precision
13733               The number of Newton iterations for calculating the reciprocal
13734               for float type.  The precision of division is proportional to
13735               this param when division approximation is enabled.  The default
13736               value is 1.
13737
13738           aarch64-double-recp-precision
13739               The number of Newton iterations for calculating the reciprocal
13740               for double type.  The precision of division is propotional to
13741               this param when division approximation is enabled.  The default
13742               value is 2.
13743
13744           aarch64-autovec-preference
13745               Force an ISA selection strategy for auto-vectorization.
13746               Accepts values from 0 to 4, inclusive.
13747
13748               0   Use the default heuristics.
13749
13750               1   Use only Advanced SIMD for auto-vectorization.
13751
13752               2   Use only SVE for auto-vectorization.
13753
13754               3   Use both Advanced SIMD and SVE.  Prefer Advanced SIMD when
13755                   the costs are deemed equal.
13756
13757               4   Use both Advanced SIMD and SVE.  Prefer SVE when the costs
13758                   are deemed equal.
13759
13760               The default value is 0.
13761
13762           aarch64-loop-vect-issue-rate-niters
13763               The tuning for some AArch64 CPUs tries to take both latencies
13764               and issue rates into account when deciding whether a loop
13765               should be vectorized using SVE, vectorized using Advanced SIMD,
13766               or not vectorized at all.  If this parameter is set to n, GCC
13767               will not use this heuristic for loops that are known to execute
13768               in fewer than n Advanced SIMD iterations.
13769
13770           aarch64-vect-unroll-limit
13771               The vectorizer will use available tuning information to
13772               determine whether it would be beneficial to unroll the main
13773               vectorized loop and by how much.  This parameter set's the
13774               upper bound of how much the vectorizer will unroll the main
13775               loop.  The default value is four.
13776
13777           The following choices of name are available on i386 and x86_64
13778           targets:
13779
13780           x86-stlf-window-ninsns
13781               Instructions number above which STFL stall penalty can be
13782               compensated.
13783
13784           x86-stv-max-visits
13785               The maximum number of use and def visits when discovering a STV
13786               chain before the discovery is aborted.
13787
13788   Program Instrumentation Options
13789       GCC supports a number of command-line options that control adding run-
13790       time instrumentation to the code it normally generates.  For example,
13791       one purpose of instrumentation is collect profiling statistics for use
13792       in finding program hot spots, code coverage analysis, or profile-guided
13793       optimizations.  Another class of program instrumentation is adding run-
13794       time checking to detect programming errors like invalid pointer
13795       dereferences or out-of-bounds array accesses, as well as deliberately
13796       hostile attacks such as stack smashing or C++ vtable hijacking.  There
13797       is also a general hook which can be used to implement other forms of
13798       tracing or function-level instrumentation for debug or program analysis
13799       purposes.
13800
13801       -p
13802       -pg Generate extra code to write profile information suitable for the
13803           analysis program prof (for -p) or gprof (for -pg).  You must use
13804           this option when compiling the source files you want data about,
13805           and you must also use it when linking.
13806
13807           You can use the function attribute "no_instrument_function" to
13808           suppress profiling of individual functions when compiling with
13809           these options.
13810
13811       -fprofile-arcs
13812           Add code so that program flow arcs are instrumented.  During
13813           execution the program records how many times each branch and call
13814           is executed and how many times it is taken or returns.  On targets
13815           that support constructors with priority support, profiling properly
13816           handles constructors, destructors and C++ constructors (and
13817           destructors) of classes which are used as a type of a global
13818           variable.
13819
13820           When the compiled program exits it saves this data to a file called
13821           auxname.gcda for each source file.  The data may be used for
13822           profile-directed optimizations (-fbranch-probabilities), or for
13823           test coverage analysis (-ftest-coverage).  Each object file's
13824           auxname is generated from the name of the output file, if
13825           explicitly specified and it is not the final executable, otherwise
13826           it is the basename of the source file.  In both cases any suffix is
13827           removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
13828           for output file specified as -o dir/foo.o).
13829
13830           Note that if a command line directly links source files, the
13831           corresponding .gcda files will be prefixed with the unsuffixed name
13832           of the output file.  E.g. "gcc a.c b.c -o binary" would generate
13833           binary-a.gcda and binary-b.gcda files.
13834
13835       --coverage
13836           This option is used to compile and link code instrumented for
13837           coverage analysis.  The option is a synonym for -fprofile-arcs
13838           -ftest-coverage (when compiling) and -lgcov (when linking).  See
13839           the documentation for those options for more details.
13840
13841           *   Compile the source files with -fprofile-arcs plus optimization
13842               and code generation options.  For test coverage analysis, use
13843               the additional -ftest-coverage option.  You do not need to
13844               profile every source file in a program.
13845
13846           *   Compile the source files additionally with -fprofile-abs-path
13847               to create absolute path names in the .gcno files.  This allows
13848               gcov to find the correct sources in projects where compilations
13849               occur with different working directories.
13850
13851           *   Link your object files with -lgcov or -fprofile-arcs (the
13852               latter implies the former).
13853
13854           *   Run the program on a representative workload to generate the
13855               arc profile information.  This may be repeated any number of
13856               times.  You can run concurrent instances of your program, and
13857               provided that the file system supports locking, the data files
13858               will be correctly updated.  Unless a strict ISO C dialect
13859               option is in effect, "fork" calls are detected and correctly
13860               handled without double counting.
13861
13862               Moreover, an object file can be recompiled multiple times and
13863               the corresponding .gcda file merges as long as the source file
13864               and the compiler options are unchanged.
13865
13866           *   For profile-directed optimizations, compile the source files
13867               again with the same optimization and code generation options
13868               plus -fbranch-probabilities.
13869
13870           *   For test coverage analysis, use gcov to produce human readable
13871               information from the .gcno and .gcda files.  Refer to the gcov
13872               documentation for further information.
13873
13874           With -fprofile-arcs, for each function of your program GCC creates
13875           a program flow graph, then finds a spanning tree for the graph.
13876           Only arcs that are not on the spanning tree have to be
13877           instrumented: the compiler adds code to count the number of times
13878           that these arcs are executed.  When an arc is the only exit or only
13879           entrance to a block, the instrumentation code can be added to the
13880           block; otherwise, a new basic block must be created to hold the
13881           instrumentation code.
13882
13883       -ftest-coverage
13884           Produce a notes file that the gcov code-coverage utility can use to
13885           show program coverage.  Each source file's note file is called
13886           auxname.gcno.  Refer to the -fprofile-arcs option above for a
13887           description of auxname and instructions on how to generate test
13888           coverage data.  Coverage data matches the source files more closely
13889           if you do not optimize.
13890
13891       -fprofile-abs-path
13892           Automatically convert relative source file names to absolute path
13893           names in the .gcno files.  This allows gcov to find the correct
13894           sources in projects where compilations occur with different working
13895           directories.
13896
13897       -fprofile-dir=path
13898           Set the directory to search for the profile data files in to path.
13899           This option affects only the profile data generated by
13900           -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
13901           -fprofile-use and -fbranch-probabilities and its related options.
13902           Both absolute and relative paths can be used.  By default, GCC uses
13903           the current directory as path, thus the profile data file appears
13904           in the same directory as the object file.  In order to prevent the
13905           file name clashing, if the object file name is not an absolute
13906           path, we mangle the absolute path of the sourcename.gcda file and
13907           use it as the file name of a .gcda file.  See details about the
13908           file naming in -fprofile-arcs.  See similar option -fprofile-note.
13909
13910           When an executable is run in a massive parallel environment, it is
13911           recommended to save profile to different folders.  That can be done
13912           with variables in path that are exported during run-time:
13913
13914           %p  process ID.
13915
13916           %q{VAR}
13917               value of environment variable VAR
13918
13919       -fprofile-generate
13920       -fprofile-generate=path
13921           Enable options usually used for instrumenting application to
13922           produce profile useful for later recompilation with profile
13923           feedback based optimization.  You must use -fprofile-generate both
13924           when compiling and when linking your program.
13925
13926           The following options are enabled: -fprofile-arcs,
13927           -fprofile-values, -finline-functions, and -fipa-bit-cp.
13928
13929           If path is specified, GCC looks at the path to find the profile
13930           feedback data files. See -fprofile-dir.
13931
13932           To optimize the program based on the collected profile information,
13933           use -fprofile-use.
13934
13935       -fprofile-info-section
13936       -fprofile-info-section=name
13937           Register the profile information in the specified section instead
13938           of using a constructor/destructor.  The section name is name if it
13939           is specified, otherwise the section name defaults to ".gcov_info".
13940           A pointer to the profile information generated by -fprofile-arcs is
13941           placed in the specified section for each translation unit.  This
13942           option disables the profile information registration through a
13943           constructor and it disables the profile information processing
13944           through a destructor.  This option is not intended to be used in
13945           hosted environments such as GNU/Linux.  It targets freestanding
13946           environments (for example embedded systems) with limited resources
13947           which do not support constructors/destructors or the C library file
13948           I/O.
13949
13950           The linker could collect the input sections in a continuous memory
13951           block and define start and end symbols.  A GNU linker script
13952           example which defines a linker output section follows:
13953
13954                     .gcov_info      :
13955                     {
13956                       PROVIDE (__gcov_info_start = .);
13957                       KEEP (*(.gcov_info))
13958                       PROVIDE (__gcov_info_end = .);
13959                     }
13960
13961           The program could dump the profiling information registered in this
13962           linker set for example like this:
13963
13964                   #include <gcov.h>
13965                   #include <stdio.h>
13966                   #include <stdlib.h>
13967
13968                   extern const struct gcov_info *const __gcov_info_start[];
13969                   extern const struct gcov_info *const __gcov_info_end[];
13970
13971                   static void
13972                   dump (const void *d, unsigned n, void *arg)
13973                   {
13974                     const unsigned char *c = d;
13975
13976                     for (unsigned i = 0; i < n; ++i)
13977                       printf ("%02x", c[i]);
13978                   }
13979
13980                   static void
13981                   filename (const char *f, void *arg)
13982                   {
13983                     __gcov_filename_to_gcfn (f, dump, arg );
13984                   }
13985
13986                   static void *
13987                   allocate (unsigned length, void *arg)
13988                   {
13989                     return malloc (length);
13990                   }
13991
13992                   static void
13993                   dump_gcov_info (void)
13994                   {
13995                     const struct gcov_info *const *info = __gcov_info_start;
13996                     const struct gcov_info *const *end = __gcov_info_end;
13997
13998                     /* Obfuscate variable to prevent compiler optimizations.  */
13999                     __asm__ ("" : "+r" (info));
14000
14001                     while (info != end)
14002                     {
14003                       void *arg = NULL;
14004                       __gcov_info_to_gcda (*info, filename, dump, allocate, arg);
14005                       putchar ('\n');
14006                       ++info;
14007                     }
14008                   }
14009
14010                   int
14011                   main (void)
14012                   {
14013                     dump_gcov_info ();
14014                     return 0;
14015                   }
14016
14017           The merge-stream subcommand of gcov-tool may be used to deserialize
14018           the data stream generated by the "__gcov_filename_to_gcfn" and
14019           "__gcov_info_to_gcda" functions and merge the profile information
14020           into .gcda files on the host filesystem.
14021
14022       -fprofile-note=path
14023           If path is specified, GCC saves .gcno file into path location.  If
14024           you combine the option with multiple source files, the .gcno file
14025           will be overwritten.
14026
14027       -fprofile-prefix-path=path
14028           This option can be used in combination with
14029           profile-generate=profile_dir and profile-use=profile_dir to inform
14030           GCC where is the base directory of built source tree.  By default
14031           profile_dir will contain files with mangled absolute paths of all
14032           object files in the built project.  This is not desirable when
14033           directory used to build the instrumented binary differs from the
14034           directory used to build the binary optimized with profile feedback
14035           because the profile data will not be found during the optimized
14036           build.  In such setups -fprofile-prefix-path=path with path
14037           pointing to the base directory of the build can be used to strip
14038           the irrelevant part of the path and keep all file names relative to
14039           the main build directory.
14040
14041       -fprofile-prefix-map=old=new
14042           When compiling files residing in directory old, record profiling
14043           information (with --coverage) describing them as if the files
14044           resided in directory new instead.  See also -ffile-prefix-map and
14045           -fcanon-prefix-map.
14046
14047       -fprofile-update=method
14048           Alter the update method for an application instrumented for profile
14049           feedback based optimization.  The method argument should be one of
14050           single, atomic or prefer-atomic.  The first one is useful for
14051           single-threaded applications, while the second one prevents profile
14052           corruption by emitting thread-safe code.
14053
14054           Warning: When an application does not properly join all threads (or
14055           creates an detached thread), a profile file can be still corrupted.
14056
14057           Using prefer-atomic would be transformed either to atomic, when
14058           supported by a target, or to single otherwise.  The GCC driver
14059           automatically selects prefer-atomic when -pthread is present in the
14060           command line.
14061
14062       -fprofile-filter-files=regex
14063           Instrument only functions from files whose name matches any of the
14064           regular expressions (separated by semi-colons).
14065
14066           For example, -fprofile-filter-files=main\.c;module.*\.c will
14067           instrument only main.c and all C files starting with 'module'.
14068
14069       -fprofile-exclude-files=regex
14070           Instrument only functions from files whose name does not match any
14071           of the regular expressions (separated by semi-colons).
14072
14073           For example, -fprofile-exclude-files=/usr/.* will prevent
14074           instrumentation of all files that are located in the /usr/ folder.
14075
14076       -fprofile-reproducible=[multithreaded|parallel-runs|serial]
14077           Control level of reproducibility of profile gathered by
14078           "-fprofile-generate".  This makes it possible to rebuild program
14079           with same outcome which is useful, for example, for distribution
14080           packages.
14081
14082           With -fprofile-reproducible=serial the profile gathered by
14083           -fprofile-generate is reproducible provided the trained program
14084           behaves the same at each invocation of the train run, it is not
14085           multi-threaded and profile data streaming is always done in the
14086           same order.  Note that profile streaming happens at the end of
14087           program run but also before "fork" function is invoked.
14088
14089           Note that it is quite common that execution counts of some part of
14090           programs depends, for example, on length of temporary file names or
14091           memory space randomization (that may affect hash-table collision
14092           rate).  Such non-reproducible part of programs may be annotated by
14093           "no_instrument_function" function attribute. gcov-dump with -l can
14094           be used to dump gathered data and verify that they are indeed
14095           reproducible.
14096
14097           With -fprofile-reproducible=parallel-runs collected profile stays
14098           reproducible regardless the order of streaming of the data into
14099           gcda files.  This setting makes it possible to run multiple
14100           instances of instrumented program in parallel (such as with "make
14101           -j"). This reduces quality of gathered data, in particular of
14102           indirect call profiling.
14103
14104       -fsanitize=address
14105           Enable AddressSanitizer, a fast memory error detector.  Memory
14106           access instructions are instrumented to detect out-of-bounds and
14107           use-after-free bugs.  The option enables
14108           -fsanitize-address-use-after-scope.  See
14109           <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
14110           more details.  The run-time behavior can be influenced using the
14111           ASAN_OPTIONS environment variable.  When set to "help=1", the
14112           available options are shown at startup of the instrumented program.
14113           See
14114           <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
14115           for a list of supported options.  The option cannot be combined
14116           with -fsanitize=thread or -fsanitize=hwaddress.  Note that the only
14117           target -fsanitize=hwaddress is currently supported on is AArch64.
14118
14119           To get more accurate stack traces, it is possible to use options
14120           such as -O0, -O1, or -Og (which, for instance, prevent most
14121           function inlining), -fno-optimize-sibling-calls (which prevents
14122           optimizing sibling and tail recursive calls; this option is
14123           implicit for -O0, -O1, or -Og), or -fno-ipa-icf (which disables
14124           Identical Code Folding for functions).  Since multiple runs of the
14125           program may yield backtraces with different addresses due to ASLR
14126           (Address Space Layout Randomization), it may be desirable to turn
14127           ASLR off.  On Linux, this can be achieved with setarch `uname -m`
14128           -R ./prog.
14129
14130       -fsanitize=kernel-address
14131           Enable AddressSanitizer for Linux kernel.  See
14132           <https://github.com/google/kernel-sanitizers> for more details.
14133
14134       -fsanitize=hwaddress
14135           Enable Hardware-assisted AddressSanitizer, which uses a hardware
14136           ability to ignore the top byte of a pointer to allow the detection
14137           of memory errors with a low memory overhead.  Memory access
14138           instructions are instrumented to detect out-of-bounds and use-
14139           after-free bugs.  The option enables
14140           -fsanitize-address-use-after-scope.  See
14141           <https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html>
14142           for more details.  The run-time behavior can be influenced using
14143           the HWASAN_OPTIONS environment variable.  When set to "help=1", the
14144           available options are shown at startup of the instrumented program.
14145           The option cannot be combined with -fsanitize=thread or
14146           -fsanitize=address, and is currently only available on AArch64.
14147
14148       -fsanitize=kernel-hwaddress
14149           Enable Hardware-assisted AddressSanitizer for compilation of the
14150           Linux kernel.  Similar to -fsanitize=kernel-address but using an
14151           alternate instrumentation method, and similar to
14152           -fsanitize=hwaddress but with instrumentation differences necessary
14153           for compiling the Linux kernel.  These differences are to avoid
14154           hwasan library initialization calls and to account for the stack
14155           pointer having a different value in its top byte.
14156
14157           Note: This option has different defaults to the
14158           -fsanitize=hwaddress.  Instrumenting the stack and alloca calls are
14159           not on by default but are still possible by specifying the command-
14160           line options --param hwasan-instrument-stack=1 and --param
14161           hwasan-instrument-allocas=1 respectively. Using a random frame tag
14162           is not implemented for kernel instrumentation.
14163
14164       -fsanitize=pointer-compare
14165           Instrument comparison operation (<, <=, >, >=) with pointer
14166           operands.  The option must be combined with either
14167           -fsanitize=kernel-address or -fsanitize=address The option cannot
14168           be combined with -fsanitize=thread.  Note: By default the check is
14169           disabled at run time.  To enable it, add
14170           "detect_invalid_pointer_pairs=2" to the environment variable
14171           ASAN_OPTIONS. Using "detect_invalid_pointer_pairs=1" detects
14172           invalid operation only when both pointers are non-null.
14173
14174       -fsanitize=pointer-subtract
14175           Instrument subtraction with pointer operands.  The option must be
14176           combined with either -fsanitize=kernel-address or
14177           -fsanitize=address The option cannot be combined with
14178           -fsanitize=thread.  Note: By default the check is disabled at run
14179           time.  To enable it, add "detect_invalid_pointer_pairs=2" to the
14180           environment variable ASAN_OPTIONS. Using
14181           "detect_invalid_pointer_pairs=1" detects invalid operation only
14182           when both pointers are non-null.
14183
14184       -fsanitize=shadow-call-stack
14185           Enable ShadowCallStack, a security enhancement mechanism used to
14186           protect programs against return address overwrites (e.g. stack
14187           buffer overflows.)  It works by saving a function's return address
14188           to a separately allocated shadow call stack in the function
14189           prologue and restoring the return address from the shadow call
14190           stack in the function epilogue.  Instrumentation only occurs in
14191           functions that need to save the return address to the stack.
14192
14193           Currently it only supports the aarch64 platform.  It is
14194           specifically designed for linux kernels that enable the
14195           CONFIG_SHADOW_CALL_STACK option.  For the user space programs,
14196           runtime support is not currently provided in libc and libgcc.
14197           Users who want to use this feature in user space need to provide
14198           their own support for the runtime.  It should be noted that this
14199           may cause the ABI rules to be broken.
14200
14201           On aarch64, the instrumentation makes use of the platform register
14202           "x18".  This generally means that any code that may run on the same
14203           thread as code compiled with ShadowCallStack must be compiled with
14204           the flag -ffixed-x18, otherwise functions compiled without
14205           -ffixed-x18 might clobber "x18" and so corrupt the shadow stack
14206           pointer.
14207
14208           Also, because there is no userspace runtime support, code compiled
14209           with ShadowCallStack cannot use exception handling.  Use
14210           -fno-exceptions to turn off exceptions.
14211
14212           See <https://clang.llvm.org/docs/ShadowCallStack.html> for more
14213           details.
14214
14215       -fsanitize=thread
14216           Enable ThreadSanitizer, a fast data race detector.  Memory access
14217           instructions are instrumented to detect data race bugs.  See
14218           <https://github.com/google/sanitizers/wiki#threadsanitizer> for
14219           more details. The run-time behavior can be influenced using the
14220           TSAN_OPTIONS environment variable; see
14221           <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
14222           for a list of supported options.  The option cannot be combined
14223           with -fsanitize=address, -fsanitize=leak.
14224
14225           Note that sanitized atomic builtins cannot throw exceptions when
14226           operating on invalid memory addresses with non-call exceptions
14227           (-fnon-call-exceptions).
14228
14229       -fsanitize=leak
14230           Enable LeakSanitizer, a memory leak detector.  This option only
14231           matters for linking of executables.  The executable is linked
14232           against a library that overrides "malloc" and other allocator
14233           functions.  See
14234           <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
14235           for more details.  The run-time behavior can be influenced using
14236           the LSAN_OPTIONS environment variable.  The option cannot be
14237           combined with -fsanitize=thread.
14238
14239       -fsanitize=undefined
14240           Enable UndefinedBehaviorSanitizer, a fast undefined behavior
14241           detector.  Various computations are instrumented to detect
14242           undefined behavior at runtime.  See
14243           <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html> for
14244           more details.   The run-time behavior can be influenced using the
14245           UBSAN_OPTIONS environment variable.  Current suboptions are:
14246
14247           -fsanitize=shift
14248               This option enables checking that the result of a shift
14249               operation is not undefined.  Note that what exactly is
14250               considered undefined differs slightly between C and C++, as
14251               well as between ISO C90 and C99, etc.  This option has two
14252               suboptions, -fsanitize=shift-base and
14253               -fsanitize=shift-exponent.
14254
14255           -fsanitize=shift-exponent
14256               This option enables checking that the second argument of a
14257               shift operation is not negative and is smaller than the
14258               precision of the promoted first argument.
14259
14260           -fsanitize=shift-base
14261               If the second argument of a shift operation is within range,
14262               check that the result of a shift operation is not undefined.
14263               Note that what exactly is considered undefined differs slightly
14264               between C and C++, as well as between ISO C90 and C99, etc.
14265
14266           -fsanitize=integer-divide-by-zero
14267               Detect integer division by zero.
14268
14269           -fsanitize=unreachable
14270               With this option, the compiler turns the
14271               "__builtin_unreachable" call into a diagnostics message call
14272               instead.  When reaching the "__builtin_unreachable" call, the
14273               behavior is undefined.
14274
14275           -fsanitize=vla-bound
14276               This option instructs the compiler to check that the size of a
14277               variable length array is positive.
14278
14279           -fsanitize=null
14280               This option enables pointer checking.  Particularly, the
14281               application built with this option turned on will issue an
14282               error message when it tries to dereference a NULL pointer, or
14283               if a reference (possibly an rvalue reference) is bound to a
14284               NULL pointer, or if a method is invoked on an object pointed by
14285               a NULL pointer.
14286
14287           -fsanitize=return
14288               This option enables return statement checking.  Programs built
14289               with this option turned on will issue an error message when the
14290               end of a non-void function is reached without actually
14291               returning a value.  This option works in C++ only.
14292
14293           -fsanitize=signed-integer-overflow
14294               This option enables signed integer overflow checking.  We check
14295               that the result of "+", "*", and both unary and binary "-" does
14296               not overflow in the signed arithmetics.  This also detects
14297               "INT_MIN / -1" signed division.  Note, integer promotion rules
14298               must be taken into account.  That is, the following is not an
14299               overflow:
14300
14301                       signed char a = SCHAR_MAX;
14302                       a++;
14303
14304           -fsanitize=bounds
14305               This option enables instrumentation of array bounds.  Various
14306               out of bounds accesses are detected.  Flexible array members,
14307               flexible array member-like arrays, and initializers of
14308               variables with static storage are not instrumented, with the
14309               exception of flexible array member-like arrays for which
14310               "-fstrict-flex-arrays" or "-fstrict-flex-arrays=" options or
14311               "strict_flex_array" attributes say they shouldn't be treated
14312               like flexible array member-like arrays.
14313
14314           -fsanitize=bounds-strict
14315               This option enables strict instrumentation of array bounds.
14316               Most out of bounds accesses are detected, including flexible
14317               array member-like arrays.  Initializers of variables with
14318               static storage are not instrumented.
14319
14320           -fsanitize=alignment
14321               This option enables checking of alignment of pointers when they
14322               are dereferenced, or when a reference is bound to
14323               insufficiently aligned target, or when a method or constructor
14324               is invoked on insufficiently aligned object.
14325
14326           -fsanitize=object-size
14327               This option enables instrumentation of memory references using
14328               the "__builtin_dynamic_object_size" function.  Various out of
14329               bounds pointer accesses are detected.
14330
14331           -fsanitize=float-divide-by-zero
14332               Detect floating-point division by zero.  Unlike other similar
14333               options, -fsanitize=float-divide-by-zero is not enabled by
14334               -fsanitize=undefined, since floating-point division by zero can
14335               be a legitimate way of obtaining infinities and NaNs.
14336
14337           -fsanitize=float-cast-overflow
14338               This option enables floating-point type to integer conversion
14339               checking.  We check that the result of the conversion does not
14340               overflow.  Unlike other similar options,
14341               -fsanitize=float-cast-overflow is not enabled by
14342               -fsanitize=undefined.  This option does not work well with
14343               "FE_INVALID" exceptions enabled.
14344
14345           -fsanitize=nonnull-attribute
14346               This option enables instrumentation of calls, checking whether
14347               null values are not passed to arguments marked as requiring a
14348               non-null value by the "nonnull" function attribute.
14349
14350           -fsanitize=returns-nonnull-attribute
14351               This option enables instrumentation of return statements in
14352               functions marked with "returns_nonnull" function attribute, to
14353               detect returning of null values from such functions.
14354
14355           -fsanitize=bool
14356               This option enables instrumentation of loads from bool.  If a
14357               value other than 0/1 is loaded, a run-time error is issued.
14358
14359           -fsanitize=enum
14360               This option enables instrumentation of loads from an enum type.
14361               If a value outside the range of values for the enum type is
14362               loaded, a run-time error is issued.
14363
14364           -fsanitize=vptr
14365               This option enables instrumentation of C++ member function
14366               calls, member accesses and some conversions between pointers to
14367               base and derived classes, to verify the referenced object has
14368               the correct dynamic type.
14369
14370           -fsanitize=pointer-overflow
14371               This option enables instrumentation of pointer arithmetics.  If
14372               the pointer arithmetics overflows, a run-time error is issued.
14373
14374           -fsanitize=builtin
14375               This option enables instrumentation of arguments to selected
14376               builtin functions.  If an invalid value is passed to such
14377               arguments, a run-time error is issued.  E.g. passing 0 as the
14378               argument to "__builtin_ctz" or "__builtin_clz" invokes
14379               undefined behavior and is diagnosed by this option.
14380
14381           Note that sanitizers tend to increase the rate of false positive
14382           warnings, most notably those around -Wmaybe-uninitialized.  We
14383           recommend against combining -Werror and [the use of] sanitizers.
14384
14385           While -ftrapv causes traps for signed overflows to be emitted,
14386           -fsanitize=undefined gives a diagnostic message.  This currently
14387           works only for the C family of languages.
14388
14389       -fno-sanitize=all
14390           This option disables all previously enabled sanitizers.
14391           -fsanitize=all is not allowed, as some sanitizers cannot be used
14392           together.
14393
14394       -fasan-shadow-offset=number
14395           This option forces GCC to use custom shadow offset in
14396           AddressSanitizer checks.  It is useful for experimenting with
14397           different shadow memory layouts in Kernel AddressSanitizer.
14398
14399       -fsanitize-sections=s1,s2,...
14400           Sanitize global variables in selected user-defined sections.  si
14401           may contain wildcards.
14402
14403       -fsanitize-recover[=opts]
14404           -fsanitize-recover= controls error recovery mode for sanitizers
14405           mentioned in comma-separated list of opts.  Enabling this option
14406           for a sanitizer component causes it to attempt to continue running
14407           the program as if no error happened.  This means multiple runtime
14408           errors can be reported in a single program run, and the exit code
14409           of the program may indicate success even when errors have been
14410           reported.  The -fno-sanitize-recover= option can be used to alter
14411           this behavior: only the first detected error is reported and
14412           program then exits with a non-zero exit code.
14413
14414           Currently this feature only works for -fsanitize=undefined (and its
14415           suboptions except for -fsanitize=unreachable and
14416           -fsanitize=return), -fsanitize=float-cast-overflow,
14417           -fsanitize=float-divide-by-zero, -fsanitize=bounds-strict,
14418           -fsanitize=kernel-address and -fsanitize=address.  For these
14419           sanitizers error recovery is turned on by default, except
14420           -fsanitize=address, for which this feature is experimental.
14421           -fsanitize-recover=all and -fno-sanitize-recover=all is also
14422           accepted, the former enables recovery for all sanitizers that
14423           support it, the latter disables recovery for all sanitizers that
14424           support it.
14425
14426           Even if a recovery mode is turned on the compiler side, it needs to
14427           be also enabled on the runtime library side, otherwise the failures
14428           are still fatal.  The runtime library defaults to "halt_on_error=0"
14429           for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
14430           value for AddressSanitizer is "halt_on_error=1". This can be
14431           overridden through setting the "halt_on_error" flag in the
14432           corresponding environment variable.
14433
14434           Syntax without an explicit opts parameter is deprecated.  It is
14435           equivalent to specifying an opts list of:
14436
14437                   undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
14438
14439       -fsanitize-address-use-after-scope
14440           Enable sanitization of local variables to detect use-after-scope
14441           bugs.  The option sets -fstack-reuse to none.
14442
14443       -fsanitize-trap[=opts]
14444           The -fsanitize-trap= option instructs the compiler to report for
14445           sanitizers mentioned in comma-separated list of opts undefined
14446           behavior using "__builtin_trap" rather than a "libubsan" library
14447           routine.  If this option is enabled for certain sanitizer, it takes
14448           precedence over the -fsanitizer-recover= for that sanitizer,
14449           "__builtin_trap" will be emitted and be fatal regardless of whether
14450           recovery is enabled or disabled using -fsanitize-recover=.
14451
14452           The advantage of this is that the "libubsan" library is not needed
14453           and is not linked in, so this is usable even in freestanding
14454           environments.
14455
14456           Currently this feature works with -fsanitize=undefined (and its
14457           suboptions except for -fsanitize=vptr),
14458           -fsanitize=float-cast-overflow, -fsanitize=float-divide-by-zero and
14459           -fsanitize=bounds-strict.  "-fsanitize-trap=all" can be also
14460           specified, which enables it for "undefined" suboptions,
14461           -fsanitize=float-cast-overflow, -fsanitize=float-divide-by-zero and
14462           -fsanitize=bounds-strict.  If "-fsanitize-trap=undefined" or
14463           "-fsanitize-trap=all" is used and "-fsanitize=vptr" is enabled on
14464           the command line, the instrumentation is silently ignored as the
14465           instrumentation always needs "libubsan" support,
14466           -fsanitize-trap=vptr is not allowed.
14467
14468       -fsanitize-undefined-trap-on-error
14469           The -fsanitize-undefined-trap-on-error option is deprecated
14470           equivalent of -fsanitize-trap=all.
14471
14472       -fsanitize-coverage=trace-pc
14473           Enable coverage-guided fuzzing code instrumentation.  Inserts a
14474           call to "__sanitizer_cov_trace_pc" into every basic block.
14475
14476       -fsanitize-coverage=trace-cmp
14477           Enable dataflow guided fuzzing code instrumentation.  Inserts a
14478           call to "__sanitizer_cov_trace_cmp1", "__sanitizer_cov_trace_cmp2",
14479           "__sanitizer_cov_trace_cmp4" or "__sanitizer_cov_trace_cmp8" for
14480           integral comparison with both operands variable or
14481           "__sanitizer_cov_trace_const_cmp1",
14482           "__sanitizer_cov_trace_const_cmp2",
14483           "__sanitizer_cov_trace_const_cmp4" or
14484           "__sanitizer_cov_trace_const_cmp8" for integral comparison with one
14485           operand constant, "__sanitizer_cov_trace_cmpf" or
14486           "__sanitizer_cov_trace_cmpd" for float or double comparisons and
14487           "__sanitizer_cov_trace_switch" for switch statements.
14488
14489       -fcf-protection=[full|branch|return|none|check]
14490           Enable code instrumentation of control-flow transfers to increase
14491           program security by checking that target addresses of control-flow
14492           transfer instructions (such as indirect function call, function
14493           return, indirect jump) are valid.  This prevents diverting the flow
14494           of control to an unexpected target.  This is intended to protect
14495           against such threats as Return-oriented Programming (ROP), and
14496           similarly call/jmp-oriented programming (COP/JOP).
14497
14498           The value "branch" tells the compiler to implement checking of
14499           validity of control-flow transfer at the point of indirect branch
14500           instructions, i.e. call/jmp instructions.  The value "return"
14501           implements checking of validity at the point of returning from a
14502           function.  The value "full" is an alias for specifying both
14503           "branch" and "return". The value "none" turns off instrumentation.
14504
14505           The value "check" is used for the final link with link-time
14506           optimization (LTO).  An error is issued if LTO object files are
14507           compiled with different -fcf-protection values.  The value "check"
14508           is ignored at the compile time.
14509
14510           The macro "__CET__" is defined when -fcf-protection is used.  The
14511           first bit of "__CET__" is set to 1 for the value "branch" and the
14512           second bit of "__CET__" is set to 1 for the "return".
14513
14514           You can also use the "nocf_check" attribute to identify which
14515           functions and calls should be skipped from instrumentation.
14516
14517           Currently the x86 GNU/Linux target provides an implementation based
14518           on Intel Control-flow Enforcement Technology (CET) which works for
14519           i686 processor or newer.
14520
14521       -fharden-compares
14522           For every logical test that survives gimple optimizations and is
14523           not the condition in a conditional branch (for example, conditions
14524           tested for conditional moves, or to store in boolean variables),
14525           emit extra code to compute and verify the reversed condition, and
14526           to call "__builtin_trap" if the results do not match.  Use with
14527           -fharden-conditional-branches to cover all conditionals.
14528
14529       -fharden-conditional-branches
14530           For every non-vectorized conditional branch that survives gimple
14531           optimizations, emit extra code to compute and verify the reversed
14532           condition, and to call "__builtin_trap" if the result is
14533           unexpected.  Use with -fharden-compares to cover all conditionals.
14534
14535       -fstack-protector
14536           Emit extra code to check for buffer overflows, such as stack
14537           smashing attacks.  This is done by adding a guard variable to
14538           functions with vulnerable objects.  This includes functions that
14539           call "alloca", and functions with buffers larger than or equal to 8
14540           bytes.  The guards are initialized when a function is entered and
14541           then checked when the function exits.  If a guard check fails, an
14542           error message is printed and the program exits.  Only variables
14543           that are actually allocated on the stack are considered, optimized
14544           away variables or variables allocated in registers don't count.
14545
14546       -fstack-protector-all
14547           Like -fstack-protector except that all functions are protected.
14548
14549       -fstack-protector-strong
14550           Like -fstack-protector but includes additional functions to be
14551           protected --- those that have local array definitions, or have
14552           references to local frame addresses.  Only variables that are
14553           actually allocated on the stack are considered, optimized away
14554           variables or variables allocated in registers don't count.
14555
14556       -fstack-protector-explicit
14557           Like -fstack-protector but only protects those functions which have
14558           the "stack_protect" attribute.
14559
14560       -fstack-check
14561           Generate code to verify that you do not go beyond the boundary of
14562           the stack.  You should specify this flag if you are running in an
14563           environment with multiple threads, but you only rarely need to
14564           specify it in a single-threaded environment since stack overflow is
14565           automatically detected on nearly all systems if there is only one
14566           stack.
14567
14568           Note that this switch does not actually cause checking to be done;
14569           the operating system or the language runtime must do that.  The
14570           switch causes generation of code to ensure that they see the stack
14571           being extended.
14572
14573           You can additionally specify a string parameter: no means no
14574           checking, generic means force the use of old-style checking,
14575           specific means use the best checking method and is equivalent to
14576           bare -fstack-check.
14577
14578           Old-style checking is a generic mechanism that requires no specific
14579           target support in the compiler but comes with the following
14580           drawbacks:
14581
14582           1.  Modified allocation strategy for large objects: they are always
14583               allocated dynamically if their size exceeds a fixed threshold.
14584               Note this may change the semantics of some code.
14585
14586           2.  Fixed limit on the size of the static frame of functions: when
14587               it is topped by a particular function, stack checking is not
14588               reliable and a warning is issued by the compiler.
14589
14590           3.  Inefficiency: because of both the modified allocation strategy
14591               and the generic implementation, code performance is hampered.
14592
14593           Note that old-style stack checking is also the fallback method for
14594           specific if no target support has been added in the compiler.
14595
14596           -fstack-check= is designed for Ada's needs to detect infinite
14597           recursion and stack overflows.  specific is an excellent choice
14598           when compiling Ada code.  It is not generally sufficient to protect
14599           against stack-clash attacks.  To protect against those you want
14600           -fstack-clash-protection.
14601
14602       -fstack-clash-protection
14603           Generate code to prevent stack clash style attacks.  When this
14604           option is enabled, the compiler will only allocate one page of
14605           stack space at a time and each page is accessed immediately after
14606           allocation.  Thus, it prevents allocations from jumping over any
14607           stack guard page provided by the operating system.
14608
14609           Most targets do not fully support stack clash protection.  However,
14610           on those targets -fstack-clash-protection will protect dynamic
14611           stack allocations.  -fstack-clash-protection may also provide
14612           limited protection for static stack allocations if the target
14613           supports -fstack-check=specific.
14614
14615       -fstack-limit-register=reg
14616       -fstack-limit-symbol=sym
14617       -fno-stack-limit
14618           Generate code to ensure that the stack does not grow beyond a
14619           certain value, either the value of a register or the address of a
14620           symbol.  If a larger stack is required, a signal is raised at run
14621           time.  For most targets, the signal is raised before the stack
14622           overruns the boundary, so it is possible to catch the signal
14623           without taking special precautions.
14624
14625           For instance, if the stack starts at absolute address 0x80000000
14626           and grows downwards, you can use the flags
14627           -fstack-limit-symbol=__stack_limit and
14628           -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
14629           128KB.  Note that this may only work with the GNU linker.
14630
14631           You can locally override stack limit checking by using the
14632           "no_stack_limit" function attribute.
14633
14634       -fsplit-stack
14635           Generate code to automatically split the stack before it overflows.
14636           The resulting program has a discontiguous stack which can only
14637           overflow if the program is unable to allocate any more memory.
14638           This is most useful when running threaded programs, as it is no
14639           longer necessary to calculate a good stack size to use for each
14640           thread.  This is currently only implemented for the x86 targets
14641           running GNU/Linux.
14642
14643           When code compiled with -fsplit-stack calls code compiled without
14644           -fsplit-stack, there may not be much stack space available for the
14645           latter code to run.  If compiling all code, including library code,
14646           with -fsplit-stack is not an option, then the linker can fix up
14647           these calls so that the code compiled without -fsplit-stack always
14648           has a large stack.  Support for this is implemented in the gold
14649           linker in GNU binutils release 2.21 and later.
14650
14651       -fvtable-verify=[std|preinit|none]
14652           This option is only available when compiling C++ code.  It turns on
14653           (or off, if using -fvtable-verify=none) the security feature that
14654           verifies at run time, for every virtual call, that the vtable
14655           pointer through which the call is made is valid for the type of the
14656           object, and has not been corrupted or overwritten.  If an invalid
14657           vtable pointer is detected at run time, an error is reported and
14658           execution of the program is immediately halted.
14659
14660           This option causes run-time data structures to be built at program
14661           startup, which are used for verifying the vtable pointers.  The
14662           options std and preinit control the timing of when these data
14663           structures are built.  In both cases the data structures are built
14664           before execution reaches "main".  Using -fvtable-verify=std causes
14665           the data structures to be built after shared libraries have been
14666           loaded and initialized.  -fvtable-verify=preinit causes them to be
14667           built before shared libraries have been loaded and initialized.
14668
14669           If this option appears multiple times in the command line with
14670           different values specified, none takes highest priority over both
14671           std and preinit; preinit takes priority over std.
14672
14673       -fvtv-debug
14674           When used in conjunction with -fvtable-verify=std or
14675           -fvtable-verify=preinit, causes debug versions of the runtime
14676           functions for the vtable verification feature to be called.  This
14677           flag also causes the compiler to log information about which vtable
14678           pointers it finds for each class.  This information is written to a
14679           file named vtv_set_ptr_data.log in the directory named by the
14680           environment variable VTV_LOGS_DIR if that is defined or the current
14681           working directory otherwise.
14682
14683           Note:  This feature appends data to the log file. If you want a
14684           fresh log file, be sure to delete any existing one.
14685
14686       -fvtv-counts
14687           This is a debugging flag.  When used in conjunction with
14688           -fvtable-verify=std or -fvtable-verify=preinit, this causes the
14689           compiler to keep track of the total number of virtual calls it
14690           encounters and the number of verifications it inserts.  It also
14691           counts the number of calls to certain run-time library functions
14692           that it inserts and logs this information for each compilation
14693           unit.  The compiler writes this information to a file named
14694           vtv_count_data.log in the directory named by the environment
14695           variable VTV_LOGS_DIR if that is defined or the current working
14696           directory otherwise.  It also counts the size of the vtable pointer
14697           sets for each class, and writes this information to
14698           vtv_class_set_sizes.log in the same directory.
14699
14700           Note:  This feature appends data to the log files.  To get fresh
14701           log files, be sure to delete any existing ones.
14702
14703       -finstrument-functions
14704           Generate instrumentation calls for entry and exit to functions.
14705           Just after function entry and just before function exit, the
14706           following profiling functions are called with the address of the
14707           current function and its call site.  (On some platforms,
14708           "__builtin_return_address" does not work beyond the current
14709           function, so the call site information may not be available to the
14710           profiling functions otherwise.)
14711
14712                   void __cyg_profile_func_enter (void *this_fn,
14713                                                  void *call_site);
14714                   void __cyg_profile_func_exit  (void *this_fn,
14715                                                  void *call_site);
14716
14717           The first argument is the address of the start of the current
14718           function, which may be looked up exactly in the symbol table.
14719
14720           This instrumentation is also done for functions expanded inline in
14721           other functions.  The profiling calls indicate where, conceptually,
14722           the inline function is entered and exited.  This means that
14723           addressable versions of such functions must be available.  If all
14724           your uses of a function are expanded inline, this may mean an
14725           additional expansion of code size.  If you use "extern inline" in
14726           your C code, an addressable version of such functions must be
14727           provided.  (This is normally the case anyway, but if you get lucky
14728           and the optimizer always expands the functions inline, you might
14729           have gotten away without providing static copies.)
14730
14731           A function may be given the attribute "no_instrument_function", in
14732           which case this instrumentation is not done.  This can be used, for
14733           example, for the profiling functions listed above, high-priority
14734           interrupt routines, and any functions from which the profiling
14735           functions cannot safely be called (perhaps signal handlers, if the
14736           profiling routines generate output or allocate memory).
14737
14738       -finstrument-functions-once
14739           This is similar to -finstrument-functions, but the profiling
14740           functions are called only once per instrumented function, i.e. the
14741           first profiling function is called after the first entry into the
14742           instrumented function and the second profiling function is called
14743           before the exit corresponding to this first entry.
14744
14745           The definition of "once" for the purpose of this option is a little
14746           vague because the implementation is not protected against data
14747           races.  As a result, the implementation only guarantees that the
14748           profiling functions are called at least once per process and at
14749           most once per thread, but the calls are always paired, that is to
14750           say, if a thread calls the first function, then it will call the
14751           second function, unless it never reaches the exit of the
14752           instrumented function.
14753
14754       -finstrument-functions-exclude-file-list=file,file,...
14755           Set the list of functions that are excluded from instrumentation
14756           (see the description of -finstrument-functions).  If the file that
14757           contains a function definition matches with one of file, then that
14758           function is not instrumented.  The match is done on substrings: if
14759           the file parameter is a substring of the file name, it is
14760           considered to be a match.
14761
14762           For example:
14763
14764                   -finstrument-functions-exclude-file-list=/bits/stl,include/sys
14765
14766           excludes any inline function defined in files whose pathnames
14767           contain /bits/stl or include/sys.
14768
14769           If, for some reason, you want to include letter , in one of sym,
14770           write ,. For example,
14771           -finstrument-functions-exclude-file-list=',,tmp' (note the single
14772           quote surrounding the option).
14773
14774       -finstrument-functions-exclude-function-list=sym,sym,...
14775           This is similar to -finstrument-functions-exclude-file-list, but
14776           this option sets the list of function names to be excluded from
14777           instrumentation.  The function name to be matched is its user-
14778           visible name, such as "vector<int> blah(const vector<int> &)", not
14779           the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE").  The
14780           match is done on substrings: if the sym parameter is a substring of
14781           the function name, it is considered to be a match.  For C99 and C++
14782           extended identifiers, the function name must be given in UTF-8, not
14783           using universal character names.
14784
14785       -fpatchable-function-entry=N[,M]
14786           Generate N NOPs right at the beginning of each function, with the
14787           function entry point before the Mth NOP.  If M is omitted, it
14788           defaults to 0 so the function entry points to the address just at
14789           the first NOP.  The NOP instructions reserve extra space which can
14790           be used to patch in any desired instrumentation at run time,
14791           provided that the code segment is writable.  The amount of space is
14792           controllable indirectly via the number of NOPs; the NOP instruction
14793           used corresponds to the instruction emitted by the internal GCC
14794           back-end interface "gen_nop".  This behavior is target-specific and
14795           may also depend on the architecture variant and/or other
14796           compilation options.
14797
14798           For run-time identification, the starting addresses of these areas,
14799           which correspond to their respective function entries minus M, are
14800           additionally collected in the "__patchable_function_entries"
14801           section of the resulting binary.
14802
14803           Note that the value of "__attribute__ ((patchable_function_entry
14804           (N,M)))" takes precedence over command-line option
14805           -fpatchable-function-entry=N,M.  This can be used to increase the
14806           area size or to remove it completely on a single function.  If
14807           "N=0", no pad location is recorded.
14808
14809           The NOP instructions are inserted at---and maybe before, depending
14810           on M---the function entry address, even before the prologue.  On
14811           PowerPC with the ELFv2 ABI, for a function with dual entry points,
14812           the local entry point is this function entry address.
14813
14814           The maximum value of N and M is 65535.  On PowerPC with the ELFv2
14815           ABI, for a function with dual entry points, the supported values
14816           for M are 0, 2, 6 and 14.
14817
14818   Options Controlling the Preprocessor
14819       These options control the C preprocessor, which is run on each C source
14820       file before actual compilation.
14821
14822       If you use the -E option, nothing is done except preprocessing.  Some
14823       of these options make sense only together with -E because they cause
14824       the preprocessor output to be unsuitable for actual compilation.
14825
14826       In addition to the options listed here, there are a number of options
14827       to control search paths for include files documented in Directory
14828       Options.  Options to control preprocessor diagnostics are listed in
14829       Warning Options.
14830
14831       -D name
14832           Predefine name as a macro, with definition 1.
14833
14834       -D name=definition
14835           The contents of definition are tokenized and processed as if they
14836           appeared during translation phase three in a #define directive.  In
14837           particular, the definition is truncated by embedded newline
14838           characters.
14839
14840           If you are invoking the preprocessor from a shell or shell-like
14841           program you may need to use the shell's quoting syntax to protect
14842           characters such as spaces that have a meaning in the shell syntax.
14843
14844           If you wish to define a function-like macro on the command line,
14845           write its argument list with surrounding parentheses before the
14846           equals sign (if any).  Parentheses are meaningful to most shells,
14847           so you should quote the option.  With sh and csh,
14848           -D'name(args...)=definition' works.
14849
14850           -D and -U options are processed in the order they are given on the
14851           command line.  All -imacros file and -include file options are
14852           processed after all -D and -U options.
14853
14854       -U name
14855           Cancel any previous definition of name, either built in or provided
14856           with a -D option.
14857
14858       -include file
14859           Process file as if "#include "file"" appeared as the first line of
14860           the primary source file.  However, the first directory searched for
14861           file is the preprocessor's working directory instead of the
14862           directory containing the main source file.  If not found there, it
14863           is searched for in the remainder of the "#include "..."" search
14864           chain as normal.
14865
14866           If multiple -include options are given, the files are included in
14867           the order they appear on the command line.
14868
14869       -imacros file
14870           Exactly like -include, except that any output produced by scanning
14871           file is thrown away.  Macros it defines remain defined.  This
14872           allows you to acquire all the macros from a header without also
14873           processing its declarations.
14874
14875           All files specified by -imacros are processed before all files
14876           specified by -include.
14877
14878       -undef
14879           Do not predefine any system-specific or GCC-specific macros.  The
14880           standard predefined macros remain defined.
14881
14882       -pthread
14883           Define additional macros required for using the POSIX threads
14884           library.  You should use this option consistently for both
14885           compilation and linking.  This option is supported on GNU/Linux
14886           targets, most other Unix derivatives, and also on x86 Cygwin and
14887           MinGW targets.
14888
14889       -M  Instead of outputting the result of preprocessing, output a rule
14890           suitable for make describing the dependencies of the main source
14891           file.  The preprocessor outputs one make rule containing the object
14892           file name for that source file, a colon, and the names of all the
14893           included files, including those coming from -include or -imacros
14894           command-line options.
14895
14896           Unless specified explicitly (with -MT or -MQ), the object file name
14897           consists of the name of the source file with any suffix replaced
14898           with object file suffix and with any leading directory parts
14899           removed.  If there are many included files then the rule is split
14900           into several lines using \-newline.  The rule has no commands.
14901
14902           This option does not suppress the preprocessor's debug output, such
14903           as -dM.  To avoid mixing such debug output with the dependency
14904           rules you should explicitly specify the dependency output file with
14905           -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
14906           Debug output is still sent to the regular output stream as normal.
14907
14908           Passing -M to the driver implies -E, and suppresses warnings with
14909           an implicit -w.
14910
14911       -MM Like -M but do not mention header files that are found in system
14912           header directories, nor header files that are included, directly or
14913           indirectly, from such a header.
14914
14915           This implies that the choice of angle brackets or double quotes in
14916           an #include directive does not in itself determine whether that
14917           header appears in -MM dependency output.
14918
14919       -MF file
14920           When used with -M or -MM, specifies a file to write the
14921           dependencies to.  If no -MF switch is given the preprocessor sends
14922           the rules to the same place it would send preprocessed output.
14923
14924           When used with the driver options -MD or -MMD, -MF overrides the
14925           default dependency output file.
14926
14927           If file is -, then the dependencies are written to stdout.
14928
14929       -MG In conjunction with an option such as -M requesting dependency
14930           generation, -MG assumes missing header files are generated files
14931           and adds them to the dependency list without raising an error.  The
14932           dependency filename is taken directly from the "#include" directive
14933           without prepending any path.  -MG also suppresses preprocessed
14934           output, as a missing header file renders this useless.
14935
14936           This feature is used in automatic updating of makefiles.
14937
14938       -Mno-modules
14939           Disable dependency generation for compiled module interfaces.
14940
14941       -MP This option instructs CPP to add a phony target for each dependency
14942           other than the main file, causing each to depend on nothing.  These
14943           dummy rules work around errors make gives if you remove header
14944           files without updating the Makefile to match.
14945
14946           This is typical output:
14947
14948                   test.o: test.c test.h
14949
14950                   test.h:
14951
14952       -MT target
14953           Change the target of the rule emitted by dependency generation.  By
14954           default CPP takes the name of the main input file, deletes any
14955           directory components and any file suffix such as .c, and appends
14956           the platform's usual object suffix.  The result is the target.
14957
14958           An -MT option sets the target to be exactly the string you specify.
14959           If you want multiple targets, you can specify them as a single
14960           argument to -MT, or use multiple -MT options.
14961
14962           For example, -MT '$(objpfx)foo.o' might give
14963
14964                   $(objpfx)foo.o: foo.c
14965
14966       -MQ target
14967           Same as -MT, but it quotes any characters which are special to
14968           Make.  -MQ '$(objpfx)foo.o' gives
14969
14970                   $$(objpfx)foo.o: foo.c
14971
14972           The default target is automatically quoted, as if it were given
14973           with -MQ.
14974
14975       -MD -MD is equivalent to -M -MF file, except that -E is not implied.
14976           The driver determines file based on whether an -o option is given.
14977           If it is, the driver uses its argument but with a suffix of .d,
14978           otherwise it takes the name of the input file, removes any
14979           directory components and suffix, and applies a .d suffix.
14980
14981           If -MD is used in conjunction with -E, any -o switch is understood
14982           to specify the dependency output file, but if used without -E, each
14983           -o is understood to specify a target object file.
14984
14985           Since -E is not implied, -MD can be used to generate a dependency
14986           output file as a side effect of the compilation process.
14987
14988       -MMD
14989           Like -MD except mention only user header files, not system header
14990           files.
14991
14992       -fpreprocessed
14993           Indicate to the preprocessor that the input file has already been
14994           preprocessed.  This suppresses things like macro expansion,
14995           trigraph conversion, escaped newline splicing, and processing of
14996           most directives.  The preprocessor still recognizes and removes
14997           comments, so that you can pass a file preprocessed with -C to the
14998           compiler without problems.  In this mode the integrated
14999           preprocessor is little more than a tokenizer for the front ends.
15000
15001           -fpreprocessed is implicit if the input file has one of the
15002           extensions .i, .ii or .mi.  These are the extensions that GCC uses
15003           for preprocessed files created by -save-temps.
15004
15005       -fdirectives-only
15006           When preprocessing, handle directives, but do not expand macros.
15007
15008           The option's behavior depends on the -E and -fpreprocessed options.
15009
15010           With -E, preprocessing is limited to the handling of directives
15011           such as "#define", "#ifdef", and "#error".  Other preprocessor
15012           operations, such as macro expansion and trigraph conversion are not
15013           performed.  In addition, the -dD option is implicitly enabled.
15014
15015           With -fpreprocessed, predefinition of command line and most builtin
15016           macros is disabled.  Macros such as "__LINE__", which are
15017           contextually dependent, are handled normally.  This enables
15018           compilation of files previously preprocessed with "-E
15019           -fdirectives-only".
15020
15021           With both -E and -fpreprocessed, the rules for -fpreprocessed take
15022           precedence.  This enables full preprocessing of files previously
15023           preprocessed with "-E -fdirectives-only".
15024
15025       -fdollars-in-identifiers
15026           Accept $ in identifiers.
15027
15028       -fextended-identifiers
15029           Accept universal character names and extended characters in
15030           identifiers.  This option is enabled by default for C99 (and later
15031           C standard versions) and C++.
15032
15033       -fno-canonical-system-headers
15034           When preprocessing, do not shorten system header paths with
15035           canonicalization.
15036
15037       -fmax-include-depth=depth
15038           Set the maximum depth of the nested #include. The default is 200.
15039
15040       -ftabstop=width
15041           Set the distance between tab stops.  This helps the preprocessor
15042           report correct column numbers in warnings or errors, even if tabs
15043           appear on the line.  If the value is less than 1 or greater than
15044           100, the option is ignored.  The default is 8.
15045
15046       -ftrack-macro-expansion[=level]
15047           Track locations of tokens across macro expansions. This allows the
15048           compiler to emit diagnostic about the current macro expansion stack
15049           when a compilation error occurs in a macro expansion. Using this
15050           option makes the preprocessor and the compiler consume more memory.
15051           The level parameter can be used to choose the level of precision of
15052           token location tracking thus decreasing the memory consumption if
15053           necessary. Value 0 of level de-activates this option. Value 1
15054           tracks tokens locations in a degraded mode for the sake of minimal
15055           memory overhead. In this mode all tokens resulting from the
15056           expansion of an argument of a function-like macro have the same
15057           location. Value 2 tracks tokens locations completely. This value is
15058           the most memory hungry.  When this option is given no argument, the
15059           default parameter value is 2.
15060
15061           Note that "-ftrack-macro-expansion=2" is activated by default.
15062
15063       -fmacro-prefix-map=old=new
15064           When preprocessing files residing in directory old, expand the
15065           "__FILE__" and "__BASE_FILE__" macros as if the files resided in
15066           directory new instead.  This can be used to change an absolute path
15067           to a relative path by using . for new which can result in more
15068           reproducible builds that are location independent.  This option
15069           also affects "__builtin_FILE()" during compilation.  See also
15070           -ffile-prefix-map and -fcanon-prefix-map.
15071
15072       -fexec-charset=charset
15073           Set the execution character set, used for string and character
15074           constants.  The default is UTF-8.  charset can be any encoding
15075           supported by the system's "iconv" library routine.
15076
15077       -fwide-exec-charset=charset
15078           Set the wide execution character set, used for wide string and
15079           character constants.  The default is one of UTF-32BE, UTF-32LE,
15080           UTF-16BE, or UTF-16LE, whichever corresponds to the width of
15081           "wchar_t" and the big-endian or little-endian byte order being used
15082           for code generation.  As with -fexec-charset, charset can be any
15083           encoding supported by the system's "iconv" library routine;
15084           however, you will have problems with encodings that do not fit
15085           exactly in "wchar_t".
15086
15087       -finput-charset=charset
15088           Set the input character set, used for translation from the
15089           character set of the input file to the source character set used by
15090           GCC.  If the locale does not specify, or GCC cannot get this
15091           information from the locale, the default is UTF-8.  This can be
15092           overridden by either the locale or this command-line option.
15093           Currently the command-line option takes precedence if there's a
15094           conflict.  charset can be any encoding supported by the system's
15095           "iconv" library routine.
15096
15097       -fpch-deps
15098           When using precompiled headers, this flag causes the dependency-
15099           output flags to also list the files from the precompiled header's
15100           dependencies.  If not specified, only the precompiled header are
15101           listed and not the files that were used to create it, because those
15102           files are not consulted when a precompiled header is used.
15103
15104       -fpch-preprocess
15105           This option allows use of a precompiled header together with -E.
15106           It inserts a special "#pragma", "#pragma GCC pch_preprocess
15107           "filename"" in the output to mark the place where the precompiled
15108           header was found, and its filename.  When -fpreprocessed is in use,
15109           GCC recognizes this "#pragma" and loads the PCH.
15110
15111           This option is off by default, because the resulting preprocessed
15112           output is only really suitable as input to GCC.  It is switched on
15113           by -save-temps.
15114
15115           You should not write this "#pragma" in your own code, but it is
15116           safe to edit the filename if the PCH file is available in a
15117           different location.  The filename may be absolute or it may be
15118           relative to GCC's current directory.
15119
15120       -fworking-directory
15121           Enable generation of linemarkers in the preprocessor output that
15122           let the compiler know the current working directory at the time of
15123           preprocessing.  When this option is enabled, the preprocessor
15124           emits, after the initial linemarker, a second linemarker with the
15125           current working directory followed by two slashes.  GCC uses this
15126           directory, when it's present in the preprocessed input, as the
15127           directory emitted as the current working directory in some
15128           debugging information formats.  This option is implicitly enabled
15129           if debugging information is enabled, but this can be inhibited with
15130           the negated form -fno-working-directory.  If the -P flag is present
15131           in the command line, this option has no effect, since no "#line"
15132           directives are emitted whatsoever.
15133
15134       -A predicate=answer
15135           Make an assertion with the predicate predicate and answer answer.
15136           This form is preferred to the older form -A predicate(answer),
15137           which is still supported, because it does not use shell special
15138           characters.
15139
15140       -A -predicate=answer
15141           Cancel an assertion with the predicate predicate and answer answer.
15142
15143       -C  Do not discard comments.  All comments are passed through to the
15144           output file, except for comments in processed directives, which are
15145           deleted along with the directive.
15146
15147           You should be prepared for side effects when using -C; it causes
15148           the preprocessor to treat comments as tokens in their own right.
15149           For example, comments appearing at the start of what would be a
15150           directive line have the effect of turning that line into an
15151           ordinary source line, since the first token on the line is no
15152           longer a #.
15153
15154       -CC Do not discard comments, including during macro expansion.  This is
15155           like -C, except that comments contained within macros are also
15156           passed through to the output file where the macro is expanded.
15157
15158           In addition to the side effects of the -C option, the -CC option
15159           causes all C++-style comments inside a macro to be converted to
15160           C-style comments.  This is to prevent later use of that macro from
15161           inadvertently commenting out the remainder of the source line.
15162
15163           The -CC option is generally used to support lint comments.
15164
15165       -P  Inhibit generation of linemarkers in the output from the
15166           preprocessor.  This might be useful when running the preprocessor
15167           on something that is not C code, and will be sent to a program
15168           which might be confused by the linemarkers.
15169
15170       -traditional
15171       -traditional-cpp
15172           Try to imitate the behavior of pre-standard C preprocessors, as
15173           opposed to ISO C preprocessors.  See the GNU CPP manual for
15174           details.
15175
15176           Note that GCC does not otherwise attempt to emulate a pre-standard
15177           C compiler, and these options are only supported with the -E
15178           switch, or when invoking CPP explicitly.
15179
15180       -trigraphs
15181           Support ISO C trigraphs.  These are three-character sequences, all
15182           starting with ??, that are defined by ISO C to stand for single
15183           characters.  For example, ??/ stands for \, so '??/n' is a
15184           character constant for a newline.
15185
15186           The nine trigraphs and their replacements are
15187
15188                   Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
15189                   Replacement:      [    ]    {    }    #    \    ^    |    ~
15190
15191           By default, GCC ignores trigraphs, but in standard-conforming modes
15192           it converts them.  See the -std and -ansi options.
15193
15194       -remap
15195           Enable special code to work around file systems which only permit
15196           very short file names, such as MS-DOS.
15197
15198       -H  Print the name of each header file used, in addition to other
15199           normal activities.  Each name is indented to show how deep in the
15200           #include stack it is.  Precompiled header files are also printed,
15201           even if they are found to be invalid; an invalid precompiled header
15202           file is printed with ...x and a valid one with ...! .
15203
15204       -dletters
15205           Says to make debugging dumps during compilation as specified by
15206           letters.  The flags documented here are those relevant to the
15207           preprocessor.  Other letters are interpreted by the compiler
15208           proper, or reserved for future versions of GCC, and so are silently
15209           ignored.  If you specify letters whose behavior conflicts, the
15210           result is undefined.
15211
15212           -dM Instead of the normal output, generate a list of #define
15213               directives for all the macros defined during the execution of
15214               the preprocessor, including predefined macros.  This gives you
15215               a way of finding out what is predefined in your version of the
15216               preprocessor.  Assuming you have no file foo.h, the command
15217
15218                       touch foo.h; cpp -dM foo.h
15219
15220               shows all the predefined macros.
15221
15222               If you use -dM without the -E option, -dM is interpreted as a
15223               synonym for -fdump-rtl-mach.
15224
15225           -dD Like -dM except in two respects: it does not include the
15226               predefined macros, and it outputs both the #define directives
15227               and the result of preprocessing.  Both kinds of output go to
15228               the standard output file.
15229
15230           -dN Like -dD, but emit only the macro names, not their expansions.
15231
15232           -dI Output #include directives in addition to the result of
15233               preprocessing.
15234
15235           -dU Like -dD except that only macros that are expanded, or whose
15236               definedness is tested in preprocessor directives, are output;
15237               the output is delayed until the use or test of the macro; and
15238               #undef directives are also output for macros tested but
15239               undefined at the time.
15240
15241       -fdebug-cpp
15242           This option is only useful for debugging GCC.  When used from CPP
15243           or with -E, it dumps debugging information about location maps.
15244           Every token in the output is preceded by the dump of the map its
15245           location belongs to.
15246
15247           When used from GCC without -E, this option has no effect.
15248
15249       -Wp,option
15250           You can use -Wp,option to bypass the compiler driver and pass
15251           option directly through to the preprocessor.  If option contains
15252           commas, it is split into multiple options at the commas.  However,
15253           many options are modified, translated or interpreted by the
15254           compiler driver before being passed to the preprocessor, and -Wp
15255           forcibly bypasses this phase.  The preprocessor's direct interface
15256           is undocumented and subject to change, so whenever possible you
15257           should avoid using -Wp and let the driver handle the options
15258           instead.
15259
15260       -Xpreprocessor option
15261           Pass option as an option to the preprocessor.  You can use this to
15262           supply system-specific preprocessor options that GCC does not
15263           recognize.
15264
15265           If you want to pass an option that takes an argument, you must use
15266           -Xpreprocessor twice, once for the option and once for the
15267           argument.
15268
15269       -no-integrated-cpp
15270           Perform preprocessing as a separate pass before compilation.  By
15271           default, GCC performs preprocessing as an integrated part of input
15272           tokenization and parsing.  If this option is provided, the
15273           appropriate language front end (cc1, cc1plus, or cc1obj for C, C++,
15274           and Objective-C, respectively) is instead invoked twice, once for
15275           preprocessing only and once for actual compilation of the
15276           preprocessed input.  This option may be useful in conjunction with
15277           the -B or -wrapper options to specify an alternate preprocessor or
15278           perform additional processing of the program source between normal
15279           preprocessing and compilation.
15280
15281       -flarge-source-files
15282           Adjust GCC to expect large source files, at the expense of slower
15283           compilation and higher memory usage.
15284
15285           Specifically, GCC normally tracks both column numbers and line
15286           numbers within source files and it normally prints both of these
15287           numbers in diagnostics.  However, once it has processed a certain
15288           number of source lines, it stops tracking column numbers and only
15289           tracks line numbers.  This means that diagnostics for later lines
15290           do not include column numbers.  It also means that options like
15291           -Wmisleading-indentation cease to work at that point, although the
15292           compiler prints a note if this happens.  Passing
15293           -flarge-source-files significantly increases the number of source
15294           lines that GCC can process before it stops tracking columns.
15295
15296   Passing Options to the Assembler
15297       You can pass options to the assembler.
15298
15299       -Wa,option
15300           Pass option as an option to the assembler.  If option contains
15301           commas, it is split into multiple options at the commas.
15302
15303       -Xassembler option
15304           Pass option as an option to the assembler.  You can use this to
15305           supply system-specific assembler options that GCC does not
15306           recognize.
15307
15308           If you want to pass an option that takes an argument, you must use
15309           -Xassembler twice, once for the option and once for the argument.
15310
15311   Options for Linking
15312       These options come into play when the compiler links object files into
15313       an executable output file.  They are meaningless if the compiler is not
15314       doing a link step.
15315
15316       object-file-name
15317           A file name that does not end in a special recognized suffix is
15318           considered to name an object file or library.  (Object files are
15319           distinguished from libraries by the linker according to the file
15320           contents.)  If linking is done, these object files are used as
15321           input to the linker.
15322
15323       -c
15324       -S
15325       -E  If any of these options is used, then the linker is not run, and
15326           object file names should not be used as arguments.
15327
15328       -flinker-output=type
15329           This option controls code generation of the link-time optimizer.
15330           By default the linker output is automatically determined by the
15331           linker plugin.  For debugging the compiler and if incremental
15332           linking with a non-LTO object file is desired, it may be useful to
15333           control the type manually.
15334
15335           If type is exec, code generation produces a static binary. In this
15336           case -fpic and -fpie are both disabled.
15337
15338           If type is dyn, code generation produces a shared library.  In this
15339           case -fpic or -fPIC is preserved, but not enabled automatically.
15340           This allows to build shared libraries without position-independent
15341           code on architectures where this is possible, i.e. on x86.
15342
15343           If type is pie, code generation produces an -fpie executable. This
15344           results in similar optimizations as exec except that -fpie is not
15345           disabled if specified at compilation time.
15346
15347           If type is rel, the compiler assumes that incremental linking is
15348           done.  The sections containing intermediate code for link-time
15349           optimization are merged, pre-optimized, and output to the resulting
15350           object file. In addition, if -ffat-lto-objects is specified, binary
15351           code is produced for future non-LTO linking. The object file
15352           produced by incremental linking is smaller than a static library
15353           produced from the same object files.  At link time the result of
15354           incremental linking also loads faster than a static library
15355           assuming that the majority of objects in the library are used.
15356
15357           Finally nolto-rel configures the compiler for incremental linking
15358           where code generation is forced, a final binary is produced, and
15359           the intermediate code for later link-time optimization is stripped.
15360           When multiple object files are linked together the resulting code
15361           is better optimized than with link-time optimizations disabled (for
15362           example, cross-module inlining happens), but most of benefits of
15363           whole program optimizations are lost.
15364
15365           During the incremental link (by -r) the linker plugin defaults to
15366           rel. With current interfaces to GNU Binutils it is however not
15367           possible to incrementally link LTO objects and non-LTO objects into
15368           a single mixed object file.  If any of object files in incremental
15369           link cannot be used for link-time optimization, the linker plugin
15370           issues a warning and uses nolto-rel. To maintain whole program
15371           optimization, it is recommended to link such objects into static
15372           library instead. Alternatively it is possible to use H.J. Lu's
15373           binutils with support for mixed objects.
15374
15375       -fuse-ld=bfd
15376           Use the bfd linker instead of the default linker.
15377
15378       -fuse-ld=gold
15379           Use the gold linker instead of the default linker.
15380
15381       -fuse-ld=lld
15382           Use the LLVM lld linker instead of the default linker.
15383
15384       -fuse-ld=mold
15385           Use the Modern Linker (mold) instead of the default linker.
15386
15387       -llibrary
15388       -l library
15389           Search the library named library when linking.  (The second
15390           alternative with the library as a separate argument is only for
15391           POSIX compliance and is not recommended.)
15392
15393           The -l option is passed directly to the linker by GCC.  Refer to
15394           your linker documentation for exact details.  The general
15395           description below applies to the GNU linker.
15396
15397           The linker searches a standard list of directories for the library.
15398           The directories searched include several standard system
15399           directories plus any that you specify with -L.
15400
15401           Static libraries are archives of object files, and have file names
15402           like liblibrary.a.  Some targets also support shared libraries,
15403           which typically have names like liblibrary.so.  If both static and
15404           shared libraries are found, the linker gives preference to linking
15405           with the shared library unless the -static option is used.
15406
15407           It makes a difference where in the command you write this option;
15408           the linker searches and processes libraries and object files in the
15409           order they are specified.  Thus, foo.o -lz bar.o searches library z
15410           after file foo.o but before bar.o.  If bar.o refers to functions in
15411           z, those functions may not be loaded.
15412
15413       -lobjc
15414           You need this special case of the -l option in order to link an
15415           Objective-C or Objective-C++ program.
15416
15417       -nostartfiles
15418           Do not use the standard system startup files when linking.  The
15419           standard system libraries are used normally, unless -nostdlib,
15420           -nolibc, or -nodefaultlibs is used.
15421
15422       -nodefaultlibs
15423           Do not use the standard system libraries when linking.  Only the
15424           libraries you specify are passed to the linker, and options
15425           specifying linkage of the system libraries, such as -static-libgcc
15426           or -shared-libgcc, are ignored.  The standard startup files are
15427           used normally, unless -nostartfiles is used.
15428
15429           The compiler may generate calls to "memcmp", "memset", "memcpy" and
15430           "memmove".  These entries are usually resolved by entries in libc.
15431           These entry points should be supplied through some other mechanism
15432           when this option is specified.
15433
15434       -nolibc
15435           Do not use the C library or system libraries tightly coupled with
15436           it when linking.  Still link with the startup files, libgcc or
15437           toolchain provided language support libraries such as libgnat,
15438           libgfortran or libstdc++ unless options preventing their inclusion
15439           are used as well.  This typically removes -lc from the link command
15440           line, as well as system libraries that normally go with it and
15441           become meaningless when absence of a C library is assumed, for
15442           example -lpthread or -lm in some configurations.  This is intended
15443           for bare-board targets when there is indeed no C library available.
15444
15445       -nostdlib
15446           Do not use the standard system startup files or libraries when
15447           linking.  No startup files and only the libraries you specify are
15448           passed to the linker, and options specifying linkage of the system
15449           libraries, such as -static-libgcc or -shared-libgcc, are ignored.
15450
15451           The compiler may generate calls to "memcmp", "memset", "memcpy" and
15452           "memmove".  These entries are usually resolved by entries in libc.
15453           These entry points should be supplied through some other mechanism
15454           when this option is specified.
15455
15456           One of the standard libraries bypassed by -nostdlib and
15457           -nodefaultlibs is libgcc.a, a library of internal subroutines which
15458           GCC uses to overcome shortcomings of particular machines, or
15459           special needs for some languages.
15460
15461           In most cases, you need libgcc.a even when you want to avoid other
15462           standard libraries.  In other words, when you specify -nostdlib or
15463           -nodefaultlibs you should usually specify -lgcc as well.  This
15464           ensures that you have no unresolved references to internal GCC
15465           library subroutines.  (An example of such an internal subroutine is
15466           "__main", used to ensure C++ constructors are called.)
15467
15468       -nostdlib++
15469           Do not implicitly link with standard C++ libraries.
15470
15471       -e entry
15472       --entry=entry
15473           Specify that the program entry point is entry.  The argument is
15474           interpreted by the linker; the GNU linker accepts either a symbol
15475           name or an address.
15476
15477       -pie
15478           Produce a dynamically linked position independent executable on
15479           targets that support it.  For predictable results, you must also
15480           specify the same set of options used for compilation (-fpie, -fPIE,
15481           or model suboptions) when you specify this linker option.
15482
15483       -no-pie
15484           Don't produce a dynamically linked position independent executable.
15485
15486       -static-pie
15487           Produce a static position independent executable on targets that
15488           support it.  A static position independent executable is similar to
15489           a static executable, but can be loaded at any address without a
15490           dynamic linker.  For predictable results, you must also specify the
15491           same set of options used for compilation (-fpie, -fPIE, or model
15492           suboptions) when you specify this linker option.
15493
15494       -pthread
15495           Link with the POSIX threads library.  This option is supported on
15496           GNU/Linux targets, most other Unix derivatives, and also on x86
15497           Cygwin and MinGW targets.  On some targets this option also sets
15498           flags for the preprocessor, so it should be used consistently for
15499           both compilation and linking.
15500
15501       -r  Produce a relocatable object as output.  This is also known as
15502           partial linking.
15503
15504       -rdynamic
15505           Pass the flag -export-dynamic to the ELF linker, on targets that
15506           support it. This instructs the linker to add all symbols, not only
15507           used ones, to the dynamic symbol table. This option is needed for
15508           some uses of "dlopen" or to allow obtaining backtraces from within
15509           a program.
15510
15511       -s  Remove all symbol table and relocation information from the
15512           executable.
15513
15514       -static
15515           On systems that support dynamic linking, this overrides -pie and
15516           prevents linking with the shared libraries.  On other systems, this
15517           option has no effect.
15518
15519       -shared
15520           Produce a shared object which can then be linked with other objects
15521           to form an executable.  Not all systems support this option.  For
15522           predictable results, you must also specify the same set of options
15523           used for compilation (-fpic, -fPIC, or model suboptions) when you
15524           specify this linker option.[1]
15525
15526       -shared-libgcc
15527       -static-libgcc
15528           On systems that provide libgcc as a shared library, these options
15529           force the use of either the shared or static version, respectively.
15530           If no shared version of libgcc was built when the compiler was
15531           configured, these options have no effect.
15532
15533           There are several situations in which an application should use the
15534           shared libgcc instead of the static version.  The most common of
15535           these is when the application wishes to throw and catch exceptions
15536           across different shared libraries.  In that case, each of the
15537           libraries as well as the application itself should use the shared
15538           libgcc.
15539
15540           Therefore, the G++ driver automatically adds -shared-libgcc
15541           whenever you build a shared library or a main executable, because
15542           C++ programs typically use exceptions, so this is the right thing
15543           to do.
15544
15545           If, instead, you use the GCC driver to create shared libraries, you
15546           may find that they are not always linked with the shared libgcc.
15547           If GCC finds, at its configuration time, that you have a non-GNU
15548           linker or a GNU linker that does not support option --eh-frame-hdr,
15549           it links the shared version of libgcc into shared libraries by
15550           default.  Otherwise, it takes advantage of the linker and optimizes
15551           away the linking with the shared version of libgcc, linking with
15552           the static version of libgcc by default.  This allows exceptions to
15553           propagate through such shared libraries, without incurring
15554           relocation costs at library load time.
15555
15556           However, if a library or main executable is supposed to throw or
15557           catch exceptions, you must link it using the G++ driver, or using
15558           the option -shared-libgcc, such that it is linked with the shared
15559           libgcc.
15560
15561       -static-libasan
15562           When the -fsanitize=address option is used to link a program, the
15563           GCC driver automatically links against libasan.  If libasan is
15564           available as a shared library, and the -static option is not used,
15565           then this links against the shared version of libasan.  The
15566           -static-libasan option directs the GCC driver to link libasan
15567           statically, without necessarily linking other libraries statically.
15568
15569       -static-libtsan
15570           When the -fsanitize=thread option is used to link a program, the
15571           GCC driver automatically links against libtsan.  If libtsan is
15572           available as a shared library, and the -static option is not used,
15573           then this links against the shared version of libtsan.  The
15574           -static-libtsan option directs the GCC driver to link libtsan
15575           statically, without necessarily linking other libraries statically.
15576
15577       -static-liblsan
15578           When the -fsanitize=leak option is used to link a program, the GCC
15579           driver automatically links against liblsan.  If liblsan is
15580           available as a shared library, and the -static option is not used,
15581           then this links against the shared version of liblsan.  The
15582           -static-liblsan option directs the GCC driver to link liblsan
15583           statically, without necessarily linking other libraries statically.
15584
15585       -static-libubsan
15586           When the -fsanitize=undefined option is used to link a program, the
15587           GCC driver automatically links against libubsan.  If libubsan is
15588           available as a shared library, and the -static option is not used,
15589           then this links against the shared version of libubsan.  The
15590           -static-libubsan option directs the GCC driver to link libubsan
15591           statically, without necessarily linking other libraries statically.
15592
15593       -static-libstdc++
15594           When the g++ program is used to link a C++ program, it normally
15595           automatically links against libstdc++.  If libstdc++ is available
15596           as a shared library, and the -static option is not used, then this
15597           links against the shared version of libstdc++.  That is normally
15598           fine.  However, it is sometimes useful to freeze the version of
15599           libstdc++ used by the program without going all the way to a fully
15600           static link.  The -static-libstdc++ option directs the g++ driver
15601           to link libstdc++ statically, without necessarily linking other
15602           libraries statically.
15603
15604       -symbolic
15605           Bind references to global symbols when building a shared object.
15606           Warn about any unresolved references (unless overridden by the link
15607           editor option -Xlinker -z -Xlinker defs).  Only a few systems
15608           support this option.
15609
15610       -T script
15611           Use script as the linker script.  This option is supported by most
15612           systems using the GNU linker.  On some targets, such as bare-board
15613           targets without an operating system, the -T option may be required
15614           when linking to avoid references to undefined symbols.
15615
15616       -Xlinker option
15617           Pass option as an option to the linker.  You can use this to supply
15618           system-specific linker options that GCC does not recognize.
15619
15620           If you want to pass an option that takes a separate argument, you
15621           must use -Xlinker twice, once for the option and once for the
15622           argument.  For example, to pass -assert definitions, you must write
15623           -Xlinker -assert -Xlinker definitions.  It does not work to write
15624           -Xlinker "-assert definitions", because this passes the entire
15625           string as a single argument, which is not what the linker expects.
15626
15627           When using the GNU linker, it is usually more convenient to pass
15628           arguments to linker options using the option=value syntax than as
15629           separate arguments.  For example, you can specify -Xlinker
15630           -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
15631           Other linkers may not support this syntax for command-line options.
15632
15633       -Wl,option
15634           Pass option as an option to the linker.  If option contains commas,
15635           it is split into multiple options at the commas.  You can use this
15636           syntax to pass an argument to the option.  For example,
15637           -Wl,-Map,output.map passes -Map output.map to the linker.  When
15638           using the GNU linker, you can also get the same effect with
15639           -Wl,-Map=output.map.
15640
15641       -u symbol
15642           Pretend the symbol symbol is undefined, to force linking of library
15643           modules to define it.  You can use -u multiple times with different
15644           symbols to force loading of additional library modules.
15645
15646       -z keyword
15647           -z is passed directly on to the linker along with the keyword
15648           keyword. See the section in the documentation of your linker for
15649           permitted values and their meanings.
15650
15651   Options for Directory Search
15652       These options specify directories to search for header files, for
15653       libraries and for parts of the compiler:
15654
15655       -I dir
15656       -iquote dir
15657       -isystem dir
15658       -idirafter dir
15659           Add the directory dir to the list of directories to be searched for
15660           header files during preprocessing.  If dir begins with = or
15661           $SYSROOT, then the = or $SYSROOT is replaced by the sysroot prefix;
15662           see --sysroot and -isysroot.
15663
15664           Directories specified with -iquote apply only to the quote form of
15665           the directive, "#include "file"".  Directories specified with -I,
15666           -isystem, or -idirafter apply to lookup for both the
15667           "#include "file"" and "#include <file>" directives.
15668
15669           You can specify any number or combination of these options on the
15670           command line to search for header files in several directories.
15671           The lookup order is as follows:
15672
15673           1.  For the quote form of the include directive, the directory of
15674               the current file is searched first.
15675
15676           2.  For the quote form of the include directive, the directories
15677               specified by -iquote options are searched in left-to-right
15678               order, as they appear on the command line.
15679
15680           3.  Directories specified with -I options are scanned in left-to-
15681               right order.
15682
15683           4.  Directories specified with -isystem options are scanned in
15684               left-to-right order.
15685
15686           5.  Standard system directories are scanned.
15687
15688           6.  Directories specified with -idirafter options are scanned in
15689               left-to-right order.
15690
15691           You can use -I to override a system header file, substituting your
15692           own version, since these directories are searched before the
15693           standard system header file directories.  However, you should not
15694           use this option to add directories that contain vendor-supplied
15695           system header files; use -isystem for that.
15696
15697           The -isystem and -idirafter options also mark the directory as a
15698           system directory, so that it gets the same special treatment that
15699           is applied to the standard system directories.
15700
15701           If a standard system include directory, or a directory specified
15702           with -isystem, is also specified with -I, the -I option is ignored.
15703           The directory is still searched but as a system directory at its
15704           normal position in the system include chain.  This is to ensure
15705           that GCC's procedure to fix buggy system headers and the ordering
15706           for the "#include_next" directive are not inadvertently changed.
15707           If you really need to change the search order for system
15708           directories, use the -nostdinc and/or -isystem options.
15709
15710       -I- Split the include path.  This option has been deprecated.  Please
15711           use -iquote instead for -I directories before the -I- and remove
15712           the -I- option.
15713
15714           Any directories specified with -I options before -I- are searched
15715           only for headers requested with "#include "file""; they are not
15716           searched for "#include <file>".  If additional directories are
15717           specified with -I options after the -I-, those directories are
15718           searched for all #include directives.
15719
15720           In addition, -I- inhibits the use of the directory of the current
15721           file directory as the first search directory for "#include "file"".
15722           There is no way to override this effect of -I-.
15723
15724       -iprefix prefix
15725           Specify prefix as the prefix for subsequent -iwithprefix options.
15726           If the prefix represents a directory, you should include the final
15727           /.
15728
15729       -iwithprefix dir
15730       -iwithprefixbefore dir
15731           Append dir to the prefix specified previously with -iprefix, and
15732           add the resulting directory to the include search path.
15733           -iwithprefixbefore puts it in the same place -I would; -iwithprefix
15734           puts it where -idirafter would.
15735
15736       -isysroot dir
15737           This option is like the --sysroot option, but applies only to
15738           header files (except for Darwin targets, where it applies to both
15739           header files and libraries).  See the --sysroot option for more
15740           information.
15741
15742       -imultilib dir
15743           Use dir as a subdirectory of the directory containing target-
15744           specific C++ headers.
15745
15746       -nostdinc
15747           Do not search the standard system directories for header files.
15748           Only the directories explicitly specified with -I, -iquote,
15749           -isystem, and/or -idirafter options (and the directory of the
15750           current file, if appropriate) are searched.
15751
15752       -nostdinc++
15753           Do not search for header files in the C++-specific standard
15754           directories, but do still search the other standard directories.
15755           (This option is used when building the C++ library.)
15756
15757       -iplugindir=dir
15758           Set the directory to search for plugins that are passed by
15759           -fplugin=name instead of -fplugin=path/name.so.  This option is not
15760           meant to be used by the user, but only passed by the driver.
15761
15762       -Ldir
15763           Add directory dir to the list of directories to be searched for -l.
15764
15765       -Bprefix
15766           This option specifies where to find the executables, libraries,
15767           include files, and data files of the compiler itself.
15768
15769           The compiler driver program runs one or more of the subprograms
15770           cpp, cc1, as and ld.  It tries prefix as a prefix for each program
15771           it tries to run, both with and without machine/version/ for the
15772           corresponding target machine and compiler version.
15773
15774           For each subprogram to be run, the compiler driver first tries the
15775           -B prefix, if any.  If that name is not found, or if -B is not
15776           specified, the driver tries two standard prefixes, /usr/lib/gcc/
15777           and /usr/local/lib/gcc/.  If neither of those results in a file
15778           name that is found, the unmodified program name is searched for
15779           using the directories specified in your PATH environment variable.
15780
15781           The compiler checks to see if the path provided by -B refers to a
15782           directory, and if necessary it adds a directory separator character
15783           at the end of the path.
15784
15785           -B prefixes that effectively specify directory names also apply to
15786           libraries in the linker, because the compiler translates these
15787           options into -L options for the linker.  They also apply to include
15788           files in the preprocessor, because the compiler translates these
15789           options into -isystem options for the preprocessor.  In this case,
15790           the compiler appends include to the prefix.
15791
15792           The runtime support file libgcc.a can also be searched for using
15793           the -B prefix, if needed.  If it is not found there, the two
15794           standard prefixes above are tried, and that is all.  The file is
15795           left out of the link if it is not found by those means.
15796
15797           Another way to specify a prefix much like the -B prefix is to use
15798           the environment variable GCC_EXEC_PREFIX.
15799
15800           As a special kludge, if the path provided by -B is [dir/]stageN/,
15801           where N is a number in the range 0 to 9, then it is replaced by
15802           [dir/]include.  This is to help with boot-strapping the compiler.
15803
15804       -no-canonical-prefixes
15805           Do not expand any symbolic links, resolve references to /../ or
15806           /./, or make the path absolute when generating a relative prefix.
15807
15808       --sysroot=dir
15809           Use dir as the logical root directory for headers and libraries.
15810           For example, if the compiler normally searches for headers in
15811           /usr/include and libraries in /usr/lib, it instead searches
15812           dir/usr/include and dir/usr/lib.
15813
15814           If you use both this option and the -isysroot option, then the
15815           --sysroot option applies to libraries, but the -isysroot option
15816           applies to header files.
15817
15818           The GNU linker (beginning with version 2.16) has the necessary
15819           support for this option.  If your linker does not support this
15820           option, the header file aspect of --sysroot still works, but the
15821           library aspect does not.
15822
15823       --no-sysroot-suffix
15824           For some targets, a suffix is added to the root directory specified
15825           with --sysroot, depending on the other options used, so that
15826           headers may for example be found in dir/suffix/usr/include instead
15827           of dir/usr/include.  This option disables the addition of such a
15828           suffix.
15829
15830   Options for Code Generation Conventions
15831       These machine-independent options control the interface conventions
15832       used in code generation.
15833
15834       Most of them have both positive and negative forms; the negative form
15835       of -ffoo is -fno-foo.  In the table below, only one of the forms is
15836       listed---the one that is not the default.  You can figure out the other
15837       form by either removing no- or adding it.
15838
15839       -fstack-reuse=reuse-level
15840           This option controls stack space reuse for user declared local/auto
15841           variables and compiler generated temporaries.  reuse_level can be
15842           all, named_vars, or none. all enables stack reuse for all local
15843           variables and temporaries, named_vars enables the reuse only for
15844           user defined local variables with names, and none disables stack
15845           reuse completely. The default value is all. The option is needed
15846           when the program extends the lifetime of a scoped local variable or
15847           a compiler generated temporary beyond the end point defined by the
15848           language.  When a lifetime of a variable ends, and if the variable
15849           lives in memory, the optimizing compiler has the freedom to reuse
15850           its stack space with other temporaries or scoped local variables
15851           whose live range does not overlap with it. Legacy code extending
15852           local lifetime is likely to break with the stack reuse
15853           optimization.
15854
15855           For example,
15856
15857                      int *p;
15858                      {
15859                        int local1;
15860
15861                        p = &local1;
15862                        local1 = 10;
15863                        ....
15864                      }
15865                      {
15866                         int local2;
15867                         local2 = 20;
15868                         ...
15869                      }
15870
15871                      if (*p == 10)  // out of scope use of local1
15872                        {
15873
15874                        }
15875
15876           Another example:
15877
15878                      struct A
15879                      {
15880                          A(int k) : i(k), j(k) { }
15881                          int i;
15882                          int j;
15883                      };
15884
15885                      A *ap;
15886
15887                      void foo(const A& ar)
15888                      {
15889                         ap = &ar;
15890                      }
15891
15892                      void bar()
15893                      {
15894                         foo(A(10)); // temp object's lifetime ends when foo returns
15895
15896                         {
15897                           A a(20);
15898                           ....
15899                         }
15900                         ap->i+= 10;  // ap references out of scope temp whose space
15901                                      // is reused with a. What is the value of ap->i?
15902                      }
15903
15904           The lifetime of a compiler generated temporary is well defined by
15905           the C++ standard. When a lifetime of a temporary ends, and if the
15906           temporary lives in memory, the optimizing compiler has the freedom
15907           to reuse its stack space with other temporaries or scoped local
15908           variables whose live range does not overlap with it. However some
15909           of the legacy code relies on the behavior of older compilers in
15910           which temporaries' stack space is not reused, the aggressive stack
15911           reuse can lead to runtime errors. This option is used to control
15912           the temporary stack reuse optimization.
15913
15914       -ftrapv
15915           This option generates traps for signed overflow on addition,
15916           subtraction, multiplication operations.  The options -ftrapv and
15917           -fwrapv override each other, so using -ftrapv -fwrapv on the
15918           command-line results in -fwrapv being effective.  Note that only
15919           active options override, so using -ftrapv -fwrapv -fno-wrapv on the
15920           command-line results in -ftrapv being effective.
15921
15922       -fwrapv
15923           This option instructs the compiler to assume that signed arithmetic
15924           overflow of addition, subtraction and multiplication wraps around
15925           using twos-complement representation.  This flag enables some
15926           optimizations and disables others.  The options -ftrapv and -fwrapv
15927           override each other, so using -ftrapv -fwrapv on the command-line
15928           results in -fwrapv being effective.  Note that only active options
15929           override, so using -ftrapv -fwrapv -fno-wrapv on the command-line
15930           results in -ftrapv being effective.
15931
15932       -fwrapv-pointer
15933           This option instructs the compiler to assume that pointer
15934           arithmetic overflow on addition and subtraction wraps around using
15935           twos-complement representation.  This flag disables some
15936           optimizations which assume pointer overflow is invalid.
15937
15938       -fstrict-overflow
15939           This option implies -fno-wrapv -fno-wrapv-pointer and when negated
15940           implies -fwrapv -fwrapv-pointer.
15941
15942       -fexceptions
15943           Enable exception handling.  Generates extra code needed to
15944           propagate exceptions.  For some targets, this implies GCC generates
15945           frame unwind information for all functions, which can produce
15946           significant data size overhead, although it does not affect
15947           execution.  If you do not specify this option, GCC enables it by
15948           default for languages like C++ that normally require exception
15949           handling, and disables it for languages like C that do not normally
15950           require it.  However, you may need to enable this option when
15951           compiling C code that needs to interoperate properly with exception
15952           handlers written in C++.  You may also wish to disable this option
15953           if you are compiling older C++ programs that don't use exception
15954           handling.
15955
15956       -fnon-call-exceptions
15957           Generate code that allows trapping instructions to throw
15958           exceptions.  Note that this requires platform-specific runtime
15959           support that does not exist everywhere.  Moreover, it only allows
15960           trapping instructions to throw exceptions, i.e. memory references
15961           or floating-point instructions.  It does not allow exceptions to be
15962           thrown from arbitrary signal handlers such as "SIGALRM".  This
15963           enables -fexceptions.
15964
15965       -fdelete-dead-exceptions
15966           Consider that instructions that may throw exceptions but don't
15967           otherwise contribute to the execution of the program can be
15968           optimized away.  This does not affect calls to functions except
15969           those with the "pure" or "const" attributes.  This option is
15970           enabled by default for the Ada and C++ compilers, as permitted by
15971           the language specifications.  Optimization passes that cause dead
15972           exceptions to be removed are enabled independently at different
15973           optimization levels.
15974
15975       -funwind-tables
15976           Similar to -fexceptions, except that it just generates any needed
15977           static data, but does not affect the generated code in any other
15978           way.  You normally do not need to enable this option; instead, a
15979           language processor that needs this handling enables it on your
15980           behalf.
15981
15982       -fasynchronous-unwind-tables
15983           Generate unwind table in DWARF format, if supported by target
15984           machine.  The table is exact at each instruction boundary, so it
15985           can be used for stack unwinding from asynchronous events (such as
15986           debugger or garbage collector).
15987
15988       -fno-gnu-unique
15989           On systems with recent GNU assembler and C library, the C++
15990           compiler uses the "STB_GNU_UNIQUE" binding to make sure that
15991           definitions of template static data members and static local
15992           variables in inline functions are unique even in the presence of
15993           "RTLD_LOCAL"; this is necessary to avoid problems with a library
15994           used by two different "RTLD_LOCAL" plugins depending on a
15995           definition in one of them and therefore disagreeing with the other
15996           one about the binding of the symbol.  But this causes "dlclose" to
15997           be ignored for affected DSOs; if your program relies on
15998           reinitialization of a DSO via "dlclose" and "dlopen", you can use
15999           -fno-gnu-unique.
16000
16001       -fpcc-struct-return
16002           Return "short" "struct" and "union" values in memory like longer
16003           ones, rather than in registers.  This convention is less efficient,
16004           but it has the advantage of allowing intercallability between GCC-
16005           compiled files and files compiled with other compilers,
16006           particularly the Portable C Compiler (pcc).
16007
16008           The precise convention for returning structures in memory depends
16009           on the target configuration macros.
16010
16011           Short structures and unions are those whose size and alignment
16012           match that of some integer type.
16013
16014           Warning: code compiled with the -fpcc-struct-return switch is not
16015           binary compatible with code compiled with the -freg-struct-return
16016           switch.  Use it to conform to a non-default application binary
16017           interface.
16018
16019       -freg-struct-return
16020           Return "struct" and "union" values in registers when possible.
16021           This is more efficient for small structures than
16022           -fpcc-struct-return.
16023
16024           If you specify neither -fpcc-struct-return nor -freg-struct-return,
16025           GCC defaults to whichever convention is standard for the target.
16026           If there is no standard convention, GCC defaults to
16027           -fpcc-struct-return, except on targets where GCC is the principal
16028           compiler.  In those cases, we can choose the standard, and we chose
16029           the more efficient register return alternative.
16030
16031           Warning: code compiled with the -freg-struct-return switch is not
16032           binary compatible with code compiled with the -fpcc-struct-return
16033           switch.  Use it to conform to a non-default application binary
16034           interface.
16035
16036       -fshort-enums
16037           Allocate to an "enum" type only as many bytes as it needs for the
16038           declared range of possible values.  Specifically, the "enum" type
16039           is equivalent to the smallest integer type that has enough room.
16040
16041           Warning: the -fshort-enums switch causes GCC to generate code that
16042           is not binary compatible with code generated without that switch.
16043           Use it to conform to a non-default application binary interface.
16044
16045       -fshort-wchar
16046           Override the underlying type for "wchar_t" to be "short unsigned
16047           int" instead of the default for the target.  This option is useful
16048           for building programs to run under WINE.
16049
16050           Warning: the -fshort-wchar switch causes GCC to generate code that
16051           is not binary compatible with code generated without that switch.
16052           Use it to conform to a non-default application binary interface.
16053
16054       -fcommon
16055           In C code, this option controls the placement of global variables
16056           defined without an initializer, known as tentative definitions in
16057           the C standard.  Tentative definitions are distinct from
16058           declarations of a variable with the "extern" keyword, which do not
16059           allocate storage.
16060
16061           The default is -fno-common, which specifies that the compiler
16062           places uninitialized global variables in the BSS section of the
16063           object file.  This inhibits the merging of tentative definitions by
16064           the linker so you get a multiple-definition error if the same
16065           variable is accidentally defined in more than one compilation unit.
16066
16067           The -fcommon places uninitialized global variables in a common
16068           block.  This allows the linker to resolve all tentative definitions
16069           of the same variable in different compilation units to the same
16070           object, or to a non-tentative definition.  This behavior is
16071           inconsistent with C++, and on many targets implies a speed and code
16072           size penalty on global variable references.  It is mainly useful to
16073           enable legacy code to link without errors.
16074
16075       -fno-ident
16076           Ignore the "#ident" directive.
16077
16078       -finhibit-size-directive
16079           Don't output a ".size" assembler directive, or anything else that
16080           would cause trouble if the function is split in the middle, and the
16081           two halves are placed at locations far apart in memory.  This
16082           option is used when compiling crtstuff.c; you should not need to
16083           use it for anything else.
16084
16085       -fverbose-asm
16086           Put extra commentary information in the generated assembly code to
16087           make it more readable.  This option is generally only of use to
16088           those who actually need to read the generated assembly code
16089           (perhaps while debugging the compiler itself).
16090
16091           -fno-verbose-asm, the default, causes the extra information to be
16092           omitted and is useful when comparing two assembler files.
16093
16094           The added comments include:
16095
16096           *   information on the compiler version and command-line options,
16097
16098           *   the source code lines associated with the assembly
16099               instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
16100
16101           *   hints on which high-level expressions correspond to the various
16102               assembly instruction operands.
16103
16104           For example, given this C source file:
16105
16106                   int test (int n)
16107                   {
16108                     int i;
16109                     int total = 0;
16110
16111                     for (i = 0; i < n; i++)
16112                       total += i * i;
16113
16114                     return total;
16115                   }
16116
16117           compiling to (x86_64) assembly via -S and emitting the result
16118           direct to stdout via -o -
16119
16120                   gcc -S test.c -fverbose-asm -Os -o -
16121
16122           gives output similar to this:
16123
16124                           .file   "test.c"
16125                   # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
16126                     [...snip...]
16127                   # options passed:
16128                     [...snip...]
16129
16130                           .text
16131                           .globl  test
16132                           .type   test, @function
16133                   test:
16134                   .LFB0:
16135                           .cfi_startproc
16136                   # test.c:4:   int total = 0;
16137                           xorl    %eax, %eax      # <retval>
16138                   # test.c:6:   for (i = 0; i < n; i++)
16139                           xorl    %edx, %edx      # i
16140                   .L2:
16141                   # test.c:6:   for (i = 0; i < n; i++)
16142                           cmpl    %edi, %edx      # n, i
16143                           jge     .L5     #,
16144                   # test.c:7:     total += i * i;
16145                           movl    %edx, %ecx      # i, tmp92
16146                           imull   %edx, %ecx      # i, tmp92
16147                   # test.c:6:   for (i = 0; i < n; i++)
16148                           incl    %edx    # i
16149                   # test.c:7:     total += i * i;
16150                           addl    %ecx, %eax      # tmp92, <retval>
16151                           jmp     .L2     #
16152                   .L5:
16153                   # test.c:10: }
16154                           ret
16155                           .cfi_endproc
16156                   .LFE0:
16157                           .size   test, .-test
16158                           .ident  "GCC: (GNU) 7.0.0 20160809 (experimental)"
16159                           .section        .note.GNU-stack,"",@progbits
16160
16161           The comments are intended for humans rather than machines and hence
16162           the precise format of the comments is subject to change.
16163
16164       -frecord-gcc-switches
16165           This switch causes the command line used to invoke the compiler to
16166           be recorded into the object file that is being created.  This
16167           switch is only implemented on some targets and the exact format of
16168           the recording is target and binary file format dependent, but it
16169           usually takes the form of a section containing ASCII text.  This
16170           switch is related to the -fverbose-asm switch, but that switch only
16171           records information in the assembler output file as comments, so it
16172           never reaches the object file.  See also -grecord-gcc-switches for
16173           another way of storing compiler options into the object file.
16174
16175       -fpic
16176           Generate position-independent code (PIC) suitable for use in a
16177           shared library, if supported for the target machine.  Such code
16178           accesses all constant addresses through a global offset table
16179           (GOT).  The dynamic loader resolves the GOT entries when the
16180           program starts (the dynamic loader is not part of GCC; it is part
16181           of the operating system).  If the GOT size for the linked
16182           executable exceeds a machine-specific maximum size, you get an
16183           error message from the linker indicating that -fpic does not work;
16184           in that case, recompile with -fPIC instead.  (These maximums are 8k
16185           on the SPARC, 28k on AArch64 and 32k on the m68k and RS/6000.  The
16186           x86 has no such limit.)
16187
16188           Position-independent code requires special support, and therefore
16189           works only on certain machines.  For the x86, GCC supports PIC for
16190           System V but not for the Sun 386i.  Code generated for the IBM
16191           RS/6000 is always position-independent.
16192
16193           When this flag is set, the macros "__pic__" and "__PIC__" are
16194           defined to 1.
16195
16196       -fPIC
16197           If supported for the target machine, emit position-independent
16198           code, suitable for dynamic linking and avoiding any limit on the
16199           size of the global offset table.  This option makes a difference on
16200           AArch64, m68k, PowerPC and SPARC.
16201
16202           Position-independent code requires special support, and therefore
16203           works only on certain machines.
16204
16205           When this flag is set, the macros "__pic__" and "__PIC__" are
16206           defined to 2.
16207
16208       -fpie
16209       -fPIE
16210           These options are similar to -fpic and -fPIC, but the generated
16211           position-independent code can be only linked into executables.
16212           Usually these options are used to compile code that will be linked
16213           using the -pie GCC option.
16214
16215           -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
16216           The macros have the value 1 for -fpie and 2 for -fPIE.
16217
16218       -fno-plt
16219           Do not use the PLT for external function calls in position-
16220           independent code.  Instead, load the callee address at call sites
16221           from the GOT and branch to it.  This leads to more efficient code
16222           by eliminating PLT stubs and exposing GOT loads to optimizations.
16223           On architectures such as 32-bit x86 where PLT stubs expect the GOT
16224           pointer in a specific register, this gives more register allocation
16225           freedom to the compiler.  Lazy binding requires use of the PLT;
16226           with -fno-plt all external symbols are resolved at load time.
16227
16228           Alternatively, the function attribute "noplt" can be used to avoid
16229           calls through the PLT for specific external functions.
16230
16231           In position-dependent code, a few targets also convert calls to
16232           functions that are marked to not use the PLT to use the GOT
16233           instead.
16234
16235       -fno-jump-tables
16236           Do not use jump tables for switch statements even where it would be
16237           more efficient than other code generation strategies.  This option
16238           is of use in conjunction with -fpic or -fPIC for building code that
16239           forms part of a dynamic linker and cannot reference the address of
16240           a jump table.  On some targets, jump tables do not require a GOT
16241           and this option is not needed.
16242
16243       -fno-bit-tests
16244           Do not use bit tests for switch statements even where it would be
16245           more efficient than other code generation strategies.
16246
16247       -ffixed-reg
16248           Treat the register named reg as a fixed register; generated code
16249           should never refer to it (except perhaps as a stack pointer, frame
16250           pointer or in some other fixed role).
16251
16252           reg must be the name of a register.  The register names accepted
16253           are machine-specific and are defined in the "REGISTER_NAMES" macro
16254           in the machine description macro file.
16255
16256           This flag does not have a negative form, because it specifies a
16257           three-way choice.
16258
16259       -fcall-used-reg
16260           Treat the register named reg as an allocable register that is
16261           clobbered by function calls.  It may be allocated for temporaries
16262           or variables that do not live across a call.  Functions compiled
16263           this way do not save and restore the register reg.
16264
16265           It is an error to use this flag with the frame pointer or stack
16266           pointer.  Use of this flag for other registers that have fixed
16267           pervasive roles in the machine's execution model produces
16268           disastrous results.
16269
16270           This flag does not have a negative form, because it specifies a
16271           three-way choice.
16272
16273       -fcall-saved-reg
16274           Treat the register named reg as an allocable register saved by
16275           functions.  It may be allocated even for temporaries or variables
16276           that live across a call.  Functions compiled this way save and
16277           restore the register reg if they use it.
16278
16279           It is an error to use this flag with the frame pointer or stack
16280           pointer.  Use of this flag for other registers that have fixed
16281           pervasive roles in the machine's execution model produces
16282           disastrous results.
16283
16284           A different sort of disaster results from the use of this flag for
16285           a register in which function values may be returned.
16286
16287           This flag does not have a negative form, because it specifies a
16288           three-way choice.
16289
16290       -fpack-struct[=n]
16291           Without a value specified, pack all structure members together
16292           without holes.  When a value is specified (which must be a small
16293           power of two), pack structure members according to this value,
16294           representing the maximum alignment (that is, objects with default
16295           alignment requirements larger than this are output potentially
16296           unaligned at the next fitting location.
16297
16298           Warning: the -fpack-struct switch causes GCC to generate code that
16299           is not binary compatible with code generated without that switch.
16300           Additionally, it makes the code suboptimal.  Use it to conform to a
16301           non-default application binary interface.
16302
16303       -fleading-underscore
16304           This option and its counterpart, -fno-leading-underscore, forcibly
16305           change the way C symbols are represented in the object file.  One
16306           use is to help link with legacy assembly code.
16307
16308           Warning: the -fleading-underscore switch causes GCC to generate
16309           code that is not binary compatible with code generated without that
16310           switch.  Use it to conform to a non-default application binary
16311           interface.  Not all targets provide complete support for this
16312           switch.
16313
16314       -ftls-model=model
16315           Alter the thread-local storage model to be used.  The model
16316           argument should be one of global-dynamic, local-dynamic, initial-
16317           exec or local-exec.  Note that the choice is subject to
16318           optimization: the compiler may use a more efficient model for
16319           symbols not visible outside of the translation unit, or if -fpic is
16320           not given on the command line.
16321
16322           The default without -fpic is initial-exec; with -fpic the default
16323           is global-dynamic.
16324
16325       -ftrampolines
16326           For targets that normally need trampolines for nested functions,
16327           always generate them instead of using descriptors.  Otherwise, for
16328           targets that do not need them, like for example HP-PA or IA-64, do
16329           nothing.
16330
16331           A trampoline is a small piece of code that is created at run time
16332           on the stack when the address of a nested function is taken, and is
16333           used to call the nested function indirectly.  Therefore, it
16334           requires the stack to be made executable in order for the program
16335           to work properly.
16336
16337           -fno-trampolines is enabled by default on a language by language
16338           basis to let the compiler avoid generating them, if it computes
16339           that this is safe, and replace them with descriptors.  Descriptors
16340           are made up of data only, but the generated code must be prepared
16341           to deal with them.  As of this writing, -fno-trampolines is enabled
16342           by default only for Ada.
16343
16344           Moreover, code compiled with -ftrampolines and code compiled with
16345           -fno-trampolines are not binary compatible if nested functions are
16346           present.  This option must therefore be used on a program-wide
16347           basis and be manipulated with extreme care.
16348
16349           For languages other than Ada, the "-ftrampolines" and
16350           "-fno-trampolines" options currently have no effect, and
16351           trampolines are always generated on platforms that need them for
16352           nested functions.
16353
16354       -fvisibility=[default|internal|hidden|protected]
16355           Set the default ELF image symbol visibility to the specified
16356           option---all symbols are marked with this unless overridden within
16357           the code.  Using this feature can very substantially improve
16358           linking and load times of shared object libraries, produce more
16359           optimized code, provide near-perfect API export and prevent symbol
16360           clashes.  It is strongly recommended that you use this in any
16361           shared objects you distribute.
16362
16363           Despite the nomenclature, default always means public; i.e.,
16364           available to be linked against from outside the shared object.
16365           protected and internal are pretty useless in real-world usage so
16366           the only other commonly used option is hidden.  The default if
16367           -fvisibility isn't specified is default, i.e., make every symbol
16368           public.
16369
16370           A good explanation of the benefits offered by ensuring ELF symbols
16371           have the correct visibility is given by "How To Write Shared
16372           Libraries" by Ulrich Drepper (which can be found at
16373           <https://www.akkadia.org/drepper/>)---however a superior solution
16374           made possible by this option to marking things hidden when the
16375           default is public is to make the default hidden and mark things
16376           public.  This is the norm with DLLs on Windows and with
16377           -fvisibility=hidden and "__attribute__ ((visibility("default")))"
16378           instead of "__declspec(dllexport)" you get almost identical
16379           semantics with identical syntax.  This is a great boon to those
16380           working with cross-platform projects.
16381
16382           For those adding visibility support to existing code, you may find
16383           "#pragma GCC visibility" of use.  This works by you enclosing the
16384           declarations you wish to set visibility for with (for example)
16385           "#pragma GCC visibility push(hidden)" and "#pragma GCC visibility
16386           pop".  Bear in mind that symbol visibility should be viewed as part
16387           of the API interface contract and thus all new code should always
16388           specify visibility when it is not the default; i.e., declarations
16389           only for use within the local DSO should always be marked
16390           explicitly as hidden as so to avoid PLT indirection
16391           overheads---making this abundantly clear also aids readability and
16392           self-documentation of the code.  Note that due to ISO C++
16393           specification requirements, "operator new" and "operator delete"
16394           must always be of default visibility.
16395
16396           Be aware that headers from outside your project, in particular
16397           system headers and headers from any other library you use, may not
16398           be expecting to be compiled with visibility other than the default.
16399           You may need to explicitly say "#pragma GCC visibility
16400           push(default)" before including any such headers.
16401
16402           "extern" declarations are not affected by -fvisibility, so a lot of
16403           code can be recompiled with -fvisibility=hidden with no
16404           modifications.  However, this means that calls to "extern"
16405           functions with no explicit visibility use the PLT, so it is more
16406           effective to use "__attribute ((visibility))" and/or "#pragma GCC
16407           visibility" to tell the compiler which "extern" declarations should
16408           be treated as hidden.
16409
16410           Note that -fvisibility does affect C++ vague linkage entities. This
16411           means that, for instance, an exception class that is be thrown
16412           between DSOs must be explicitly marked with default visibility so
16413           that the type_info nodes are unified between the DSOs.
16414
16415           An overview of these techniques, their benefits and how to use them
16416           is at <https://gcc.gnu.org/wiki/Visibility>.
16417
16418       -fstrict-volatile-bitfields
16419           This option should be used if accesses to volatile bit-fields (or
16420           other structure fields, although the compiler usually honors those
16421           types anyway) should use a single access of the width of the
16422           field's type, aligned to a natural alignment if possible.  For
16423           example, targets with memory-mapped peripheral registers might
16424           require all such accesses to be 16 bits wide; with this flag you
16425           can declare all peripheral bit-fields as "unsigned short" (assuming
16426           short is 16 bits on these targets) to force GCC to use 16-bit
16427           accesses instead of, perhaps, a more efficient 32-bit access.
16428
16429           If this option is disabled, the compiler uses the most efficient
16430           instruction.  In the previous example, that might be a 32-bit load
16431           instruction, even though that accesses bytes that do not contain
16432           any portion of the bit-field, or memory-mapped registers unrelated
16433           to the one being updated.
16434
16435           In some cases, such as when the "packed" attribute is applied to a
16436           structure field, it may not be possible to access the field with a
16437           single read or write that is correctly aligned for the target
16438           machine.  In this case GCC falls back to generating multiple
16439           accesses rather than code that will fault or truncate the result at
16440           run time.
16441
16442           Note:  Due to restrictions of the C/C++11 memory model, write
16443           accesses are not allowed to touch non bit-field members.  It is
16444           therefore recommended to define all bits of the field's type as
16445           bit-field members.
16446
16447           The default value of this option is determined by the application
16448           binary interface for the target processor.
16449
16450       -fsync-libcalls
16451           This option controls whether any out-of-line instance of the
16452           "__sync" family of functions may be used to implement the C++11
16453           "__atomic" family of functions.
16454
16455           The default value of this option is enabled, thus the only useful
16456           form of the option is -fno-sync-libcalls.  This option is used in
16457           the implementation of the libatomic runtime library.
16458
16459   GCC Developer Options
16460       This section describes command-line options that are primarily of
16461       interest to GCC developers, including options to support compiler
16462       testing and investigation of compiler bugs and compile-time performance
16463       problems.  This includes options that produce debug dumps at various
16464       points in the compilation; that print statistics such as memory use and
16465       execution time; and that print information about GCC's configuration,
16466       such as where it searches for libraries.  You should rarely need to use
16467       any of these options for ordinary compilation and linking tasks.
16468
16469       Many developer options that cause GCC to dump output to a file take an
16470       optional =filename suffix. You can specify stdout or - to dump to
16471       standard output, and stderr for standard error.
16472
16473       If =filename is omitted, a default dump file name is constructed by
16474       concatenating the base dump file name, a pass number, phase letter, and
16475       pass name.  The base dump file name is the name of output file produced
16476       by the compiler if explicitly specified and not an executable;
16477       otherwise it is the source file name.  The pass number is determined by
16478       the order passes are registered with the compiler's pass manager.  This
16479       is generally the same as the order of execution, but passes registered
16480       by plugins, target-specific passes, or passes that are otherwise
16481       registered late are numbered higher than the pass named final, even if
16482       they are executed earlier.  The phase letter is one of i (inter-
16483       procedural analysis), l (language-specific), r (RTL), or t (tree).  The
16484       files are created in the directory of the output file.
16485
16486       -fcallgraph-info
16487       -fcallgraph-info=MARKERS
16488           Makes the compiler output callgraph information for the program, on
16489           a per-object-file basis.  The information is generated in the
16490           common VCG format.  It can be decorated with additional, per-node
16491           and/or per-edge information, if a list of comma-separated markers
16492           is additionally specified.  When the "su" marker is specified, the
16493           callgraph is decorated with stack usage information; it is
16494           equivalent to -fstack-usage.  When the "da" marker is specified,
16495           the callgraph is decorated with information about dynamically
16496           allocated objects.
16497
16498           When compiling with -flto, no callgraph information is output along
16499           with the object file.  At LTO link time, -fcallgraph-info may
16500           generate multiple callgraph information files next to intermediate
16501           LTO output files.
16502
16503       -dletters
16504       -fdump-rtl-pass
16505       -fdump-rtl-pass=filename
16506           Says to make debugging dumps during compilation at times specified
16507           by letters.  This is used for debugging the RTL-based passes of the
16508           compiler.
16509
16510           Some -dletters switches have different meaning when -E is used for
16511           preprocessing.
16512
16513           Debug dumps can be enabled with a -fdump-rtl switch or some -d
16514           option letters.  Here are the possible letters for use in pass and
16515           letters, and their meanings:
16516
16517           -fdump-rtl-alignments
16518               Dump after branch alignments have been computed.
16519
16520           -fdump-rtl-asmcons
16521               Dump after fixing rtl statements that have unsatisfied in/out
16522               constraints.
16523
16524           -fdump-rtl-auto_inc_dec
16525               Dump after auto-inc-dec discovery.  This pass is only run on
16526               architectures that have auto inc or auto dec instructions.
16527
16528           -fdump-rtl-barriers
16529               Dump after cleaning up the barrier instructions.
16530
16531           -fdump-rtl-bbpart
16532               Dump after partitioning hot and cold basic blocks.
16533
16534           -fdump-rtl-bbro
16535               Dump after block reordering.
16536
16537           -fdump-rtl-btl1
16538           -fdump-rtl-btl2
16539               -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
16540               two branch target load optimization passes.
16541
16542           -fdump-rtl-bypass
16543               Dump after jump bypassing and control flow optimizations.
16544
16545           -fdump-rtl-combine
16546               Dump after the RTL instruction combination pass.
16547
16548           -fdump-rtl-compgotos
16549               Dump after duplicating the computed gotos.
16550
16551           -fdump-rtl-ce1
16552           -fdump-rtl-ce2
16553           -fdump-rtl-ce3
16554               -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
16555               dumping after the three if conversion passes.
16556
16557           -fdump-rtl-cprop_hardreg
16558               Dump after hard register copy propagation.
16559
16560           -fdump-rtl-csa
16561               Dump after combining stack adjustments.
16562
16563           -fdump-rtl-cse1
16564           -fdump-rtl-cse2
16565               -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
16566               two common subexpression elimination passes.
16567
16568           -fdump-rtl-dce
16569               Dump after the standalone dead code elimination passes.
16570
16571           -fdump-rtl-dbr
16572               Dump after delayed branch scheduling.
16573
16574           -fdump-rtl-dce1
16575           -fdump-rtl-dce2
16576               -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
16577               two dead store elimination passes.
16578
16579           -fdump-rtl-eh
16580               Dump after finalization of EH handling code.
16581
16582           -fdump-rtl-eh_ranges
16583               Dump after conversion of EH handling range regions.
16584
16585           -fdump-rtl-expand
16586               Dump after RTL generation.
16587
16588           -fdump-rtl-fwprop1
16589           -fdump-rtl-fwprop2
16590               -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
16591               the two forward propagation passes.
16592
16593           -fdump-rtl-gcse1
16594           -fdump-rtl-gcse2
16595               -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
16596               global common subexpression elimination.
16597
16598           -fdump-rtl-init-regs
16599               Dump after the initialization of the registers.
16600
16601           -fdump-rtl-initvals
16602               Dump after the computation of the initial value sets.
16603
16604           -fdump-rtl-into_cfglayout
16605               Dump after converting to cfglayout mode.
16606
16607           -fdump-rtl-ira
16608               Dump after iterated register allocation.
16609
16610           -fdump-rtl-jump
16611               Dump after the second jump optimization.
16612
16613           -fdump-rtl-loop2
16614               -fdump-rtl-loop2 enables dumping after the rtl loop
16615               optimization passes.
16616
16617           -fdump-rtl-mach
16618               Dump after performing the machine dependent reorganization
16619               pass, if that pass exists.
16620
16621           -fdump-rtl-mode_sw
16622               Dump after removing redundant mode switches.
16623
16624           -fdump-rtl-rnreg
16625               Dump after register renumbering.
16626
16627           -fdump-rtl-outof_cfglayout
16628               Dump after converting from cfglayout mode.
16629
16630           -fdump-rtl-peephole2
16631               Dump after the peephole pass.
16632
16633           -fdump-rtl-postreload
16634               Dump after post-reload optimizations.
16635
16636           -fdump-rtl-pro_and_epilogue
16637               Dump after generating the function prologues and epilogues.
16638
16639           -fdump-rtl-sched1
16640           -fdump-rtl-sched2
16641               -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
16642               the basic block scheduling passes.
16643
16644           -fdump-rtl-ree
16645               Dump after sign/zero extension elimination.
16646
16647           -fdump-rtl-seqabstr
16648               Dump after common sequence discovery.
16649
16650           -fdump-rtl-shorten
16651               Dump after shortening branches.
16652
16653           -fdump-rtl-sibling
16654               Dump after sibling call optimizations.
16655
16656           -fdump-rtl-split1
16657           -fdump-rtl-split2
16658           -fdump-rtl-split3
16659           -fdump-rtl-split4
16660           -fdump-rtl-split5
16661               These options enable dumping after five rounds of instruction
16662               splitting.
16663
16664           -fdump-rtl-sms
16665               Dump after modulo scheduling.  This pass is only run on some
16666               architectures.
16667
16668           -fdump-rtl-stack
16669               Dump after conversion from GCC's "flat register file" registers
16670               to the x87's stack-like registers.  This pass is only run on
16671               x86 variants.
16672
16673           -fdump-rtl-subreg1
16674           -fdump-rtl-subreg2
16675               -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
16676               the two subreg expansion passes.
16677
16678           -fdump-rtl-unshare
16679               Dump after all rtl has been unshared.
16680
16681           -fdump-rtl-vartrack
16682               Dump after variable tracking.
16683
16684           -fdump-rtl-vregs
16685               Dump after converting virtual registers to hard registers.
16686
16687           -fdump-rtl-web
16688               Dump after live range splitting.
16689
16690           -fdump-rtl-regclass
16691           -fdump-rtl-subregs_of_mode_init
16692           -fdump-rtl-subregs_of_mode_finish
16693           -fdump-rtl-dfinit
16694           -fdump-rtl-dfinish
16695               These dumps are defined but always produce empty files.
16696
16697           -da
16698           -fdump-rtl-all
16699               Produce all the dumps listed above.
16700
16701           -dA Annotate the assembler output with miscellaneous debugging
16702               information.
16703
16704           -dD Dump all macro definitions, at the end of preprocessing, in
16705               addition to normal output.
16706
16707           -dH Produce a core dump whenever an error occurs.
16708
16709           -dp Annotate the assembler output with a comment indicating which
16710               pattern and alternative is used.  The length and cost of each
16711               instruction are also printed.
16712
16713           -dP Dump the RTL in the assembler output as a comment before each
16714               instruction.  Also turns on -dp annotation.
16715
16716           -dx Just generate RTL for a function instead of compiling it.
16717               Usually used with -fdump-rtl-expand.
16718
16719       -fdump-debug
16720           Dump debugging information generated during the debug generation
16721           phase.
16722
16723       -fdump-earlydebug
16724           Dump debugging information generated during the early debug
16725           generation phase.
16726
16727       -fdump-noaddr
16728           When doing debugging dumps, suppress address output.  This makes it
16729           more feasible to use diff on debugging dumps for compiler
16730           invocations with different compiler binaries and/or different text
16731           / bss / data / heap / stack / dso start locations.
16732
16733       -freport-bug
16734           Collect and dump debug information into a temporary file if an
16735           internal compiler error (ICE) occurs.
16736
16737       -fdump-unnumbered
16738           When doing debugging dumps, suppress instruction numbers and
16739           address output.  This makes it more feasible to use diff on
16740           debugging dumps for compiler invocations with different options, in
16741           particular with and without -g.
16742
16743       -fdump-unnumbered-links
16744           When doing debugging dumps (see -d option above), suppress
16745           instruction numbers for the links to the previous and next
16746           instructions in a sequence.
16747
16748       -fdump-ipa-switch
16749       -fdump-ipa-switch-options
16750           Control the dumping at various stages of inter-procedural analysis
16751           language tree to a file.  The file name is generated by appending a
16752           switch specific suffix to the source file name, and the file is
16753           created in the same directory as the output file.  The following
16754           dumps are possible:
16755
16756           all Enables all inter-procedural analysis dumps.
16757
16758           cgraph
16759               Dumps information about call-graph optimization, unused
16760               function removal, and inlining decisions.
16761
16762           inline
16763               Dump after function inlining.
16764
16765           Additionally, the options -optimized, -missed, -note, and -all can
16766           be provided, with the same meaning as for -fopt-info, defaulting to
16767           -optimized.
16768
16769           For example, -fdump-ipa-inline-optimized-missed will emit
16770           information on callsites that were inlined, along with callsites
16771           that were not inlined.
16772
16773           By default, the dump will contain messages about successful
16774           optimizations (equivalent to -optimized) together with low-level
16775           details about the analysis.
16776
16777       -fdump-lang
16778           Dump language-specific information.  The file name is made by
16779           appending .lang to the source file name.
16780
16781       -fdump-lang-all
16782       -fdump-lang-switch
16783       -fdump-lang-switch-options
16784       -fdump-lang-switch-options=filename
16785           Control the dumping of language-specific information.  The options
16786           and filename portions behave as described in the -fdump-tree
16787           option.  The following switch values are accepted:
16788
16789           all Enable all language-specific dumps.
16790
16791           class
16792               Dump class hierarchy information.  Virtual table information is
16793               emitted unless 'slim' is specified.  This option is applicable
16794               to C++ only.
16795
16796           module
16797               Dump module information.  Options lineno (locations), graph
16798               (reachability), blocks (clusters), uid (serialization), alias
16799               (mergeable), asmname (Elrond), eh (mapper) & vops (macros) may
16800               provide additional information.  This option is applicable to
16801               C++ only.
16802
16803           raw Dump the raw internal tree data.  This option is applicable to
16804               C++ only.
16805
16806       -fdump-passes
16807           Print on stderr the list of optimization passes that are turned on
16808           and off by the current command-line options.
16809
16810       -fdump-statistics-option
16811           Enable and control dumping of pass statistics in a separate file.
16812           The file name is generated by appending a suffix ending in
16813           .statistics to the source file name, and the file is created in the
16814           same directory as the output file.  If the -option form is used,
16815           -stats causes counters to be summed over the whole compilation unit
16816           while -details dumps every event as the passes generate them.  The
16817           default with no option is to sum counters for each function
16818           compiled.
16819
16820       -fdump-tree-all
16821       -fdump-tree-switch
16822       -fdump-tree-switch-options
16823       -fdump-tree-switch-options=filename
16824           Control the dumping at various stages of processing the
16825           intermediate language tree to a file.  If the -options form is
16826           used, options is a list of - separated options which control the
16827           details of the dump.  Not all options are applicable to all dumps;
16828           those that are not meaningful are ignored.  The following options
16829           are available
16830
16831           address
16832               Print the address of each node.  Usually this is not meaningful
16833               as it changes according to the environment and source file.
16834               Its primary use is for tying up a dump file with a debug
16835               environment.
16836
16837           asmname
16838               If "DECL_ASSEMBLER_NAME" has been set for a given decl, use
16839               that in the dump instead of "DECL_NAME".  Its primary use is
16840               ease of use working backward from mangled names in the assembly
16841               file.
16842
16843           slim
16844               When dumping front-end intermediate representations, inhibit
16845               dumping of members of a scope or body of a function merely
16846               because that scope has been reached.  Only dump such items when
16847               they are directly reachable by some other path.
16848
16849               When dumping pretty-printed trees, this option inhibits dumping
16850               the bodies of control structures.
16851
16852               When dumping RTL, print the RTL in slim (condensed) form
16853               instead of the default LISP-like representation.
16854
16855           raw Print a raw representation of the tree.  By default, trees are
16856               pretty-printed into a C-like representation.
16857
16858           details
16859               Enable more detailed dumps (not honored by every dump option).
16860               Also include information from the optimization passes.
16861
16862           stats
16863               Enable dumping various statistics about the pass (not honored
16864               by every dump option).
16865
16866           blocks
16867               Enable showing basic block boundaries (disabled in raw dumps).
16868
16869           graph
16870               For each of the other indicated dump files (-fdump-rtl-pass),
16871               dump a representation of the control flow graph suitable for
16872               viewing with GraphViz to file.passid.pass.dot.  Each function
16873               in the file is pretty-printed as a subgraph, so that GraphViz
16874               can render them all in a single plot.
16875
16876               This option currently only works for RTL dumps, and the RTL is
16877               always dumped in slim form.
16878
16879           vops
16880               Enable showing virtual operands for every statement.
16881
16882           lineno
16883               Enable showing line numbers for statements.
16884
16885           uid Enable showing the unique ID ("DECL_UID") for each variable.
16886
16887           verbose
16888               Enable showing the tree dump for each statement.
16889
16890           eh  Enable showing the EH region number holding each statement.
16891
16892           scev
16893               Enable showing scalar evolution analysis details.
16894
16895           optimized
16896               Enable showing optimization information (only available in
16897               certain passes).
16898
16899           missed
16900               Enable showing missed optimization information (only available
16901               in certain passes).
16902
16903           note
16904               Enable other detailed optimization information (only available
16905               in certain passes).
16906
16907           all Turn on all options, except raw, slim, verbose and lineno.
16908
16909           optall
16910               Turn on all optimization options, i.e., optimized, missed, and
16911               note.
16912
16913           To determine what tree dumps are available or find the dump for a
16914           pass of interest follow the steps below.
16915
16916           1.  Invoke GCC with -fdump-passes and in the stderr output look for
16917               a code that corresponds to the pass you are interested in.  For
16918               example, the codes "tree-evrp", "tree-vrp1", and "tree-vrp2"
16919               correspond to the three Value Range Propagation passes.  The
16920               number at the end distinguishes distinct invocations of the
16921               same pass.
16922
16923           2.  To enable the creation of the dump file, append the pass code
16924               to the -fdump- option prefix and invoke GCC with it.  For
16925               example, to enable the dump from the Early Value Range
16926               Propagation pass, invoke GCC with the -fdump-tree-evrp option.
16927               Optionally, you may specify the name of the dump file.  If you
16928               don't specify one, GCC creates as described below.
16929
16930           3.  Find the pass dump in a file whose name is composed of three
16931               components separated by a period: the name of the source file
16932               GCC was invoked to compile, a numeric suffix indicating the
16933               pass number followed by the letter t for tree passes (and the
16934               letter r for RTL passes), and finally the pass code.  For
16935               example, the Early VRP pass dump might be in a file named
16936               myfile.c.038t.evrp in the current working directory.  Note that
16937               the numeric codes are not stable and may change from one
16938               version of GCC to another.
16939
16940       -fopt-info
16941       -fopt-info-options
16942       -fopt-info-options=filename
16943           Controls optimization dumps from various optimization passes. If
16944           the -options form is used, options is a list of - separated option
16945           keywords to select the dump details and optimizations.
16946
16947           The options can be divided into three groups:
16948
16949           1.  options describing what kinds of messages should be emitted,
16950
16951           2.  options describing the verbosity of the dump, and
16952
16953           3.  options describing which optimizations should be included.
16954
16955           The options from each group can be freely mixed as they are non-
16956           overlapping. However, in case of any conflicts, the later options
16957           override the earlier options on the command line.
16958
16959           The following options control which kinds of messages should be
16960           emitted:
16961
16962           optimized
16963               Print information when an optimization is successfully applied.
16964               It is up to a pass to decide which information is relevant. For
16965               example, the vectorizer passes print the source location of
16966               loops which are successfully vectorized.
16967
16968           missed
16969               Print information about missed optimizations. Individual passes
16970               control which information to include in the output.
16971
16972           note
16973               Print verbose information about optimizations, such as certain
16974               transformations, more detailed messages about decisions etc.
16975
16976           all Print detailed optimization information. This includes
16977               optimized, missed, and note.
16978
16979           The following option controls the dump verbosity:
16980
16981           internals
16982               By default, only "high-level" messages are emitted. This option
16983               enables additional, more detailed, messages, which are likely
16984               to only be of interest to GCC developers.
16985
16986           One or more of the following option keywords can be used to
16987           describe a group of optimizations:
16988
16989           ipa Enable dumps from all interprocedural optimizations.
16990
16991           loop
16992               Enable dumps from all loop optimizations.
16993
16994           inline
16995               Enable dumps from all inlining optimizations.
16996
16997           omp Enable dumps from all OMP (Offloading and Multi Processing)
16998               optimizations.
16999
17000           vec Enable dumps from all vectorization optimizations.
17001
17002           optall
17003               Enable dumps from all optimizations. This is a superset of the
17004               optimization groups listed above.
17005
17006           If options is omitted, it defaults to optimized-optall, which means
17007           to dump messages about successful optimizations from all the
17008           passes, omitting messages that are treated as "internals".
17009
17010           If the filename is provided, then the dumps from all the applicable
17011           optimizations are concatenated into the filename.  Otherwise the
17012           dump is output onto stderr. Though multiple -fopt-info options are
17013           accepted, only one of them can include a filename. If other
17014           filenames are provided then all but the first such option are
17015           ignored.
17016
17017           Note that the output filename is overwritten in case of multiple
17018           translation units. If a combined output from multiple translation
17019           units is desired, stderr should be used instead.
17020
17021           In the following example, the optimization info is output to
17022           stderr:
17023
17024                   gcc -O3 -fopt-info
17025
17026           This example:
17027
17028                   gcc -O3 -fopt-info-missed=missed.all
17029
17030           outputs missed optimization report from all the passes into
17031           missed.all, and this one:
17032
17033                   gcc -O2 -ftree-vectorize -fopt-info-vec-missed
17034
17035           prints information about missed optimization opportunities from
17036           vectorization passes on stderr.  Note that -fopt-info-vec-missed is
17037           equivalent to -fopt-info-missed-vec.  The order of the optimization
17038           group names and message types listed after -fopt-info does not
17039           matter.
17040
17041           As another example,
17042
17043                   gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
17044
17045           outputs information about missed optimizations as well as optimized
17046           locations from all the inlining passes into inline.txt.
17047
17048           Finally, consider:
17049
17050                   gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
17051
17052           Here the two output filenames vec.miss and loop.opt are in conflict
17053           since only one output file is allowed. In this case, only the first
17054           option takes effect and the subsequent options are ignored. Thus
17055           only vec.miss is produced which contains dumps from the vectorizer
17056           about missed opportunities.
17057
17058       -fsave-optimization-record
17059           Write a SRCFILE.opt-record.json.gz file detailing what
17060           optimizations were performed, for those optimizations that support
17061           -fopt-info.
17062
17063           This option is experimental and the format of the data within the
17064           compressed JSON file is subject to change.
17065
17066           It is roughly equivalent to a machine-readable version of
17067           -fopt-info-all, as a collection of messages with source file, line
17068           number and column number, with the following additional data for
17069           each message:
17070
17071           *   the execution count of the code being optimized, along with
17072               metadata about whether this was from actual profile data, or
17073               just an estimate, allowing consumers to prioritize messages by
17074               code hotness,
17075
17076           *   the function name of the code being optimized, where
17077               applicable,
17078
17079           *   the "inlining chain" for the code being optimized, so that when
17080               a function is inlined into several different places (which
17081               might themselves be inlined), the reader can distinguish
17082               between the copies,
17083
17084           *   objects identifying those parts of the message that refer to
17085               expressions, statements or symbol-table nodes, which of these
17086               categories they are, and, when available, their source code
17087               location,
17088
17089           *   the GCC pass that emitted the message, and
17090
17091           *   the location in GCC's own code from which the message was
17092               emitted
17093
17094           Additionally, some messages are logically nested within other
17095           messages, reflecting implementation details of the optimization
17096           passes.
17097
17098       -fsched-verbose=n
17099           On targets that use instruction scheduling, this option controls
17100           the amount of debugging output the scheduler prints to the dump
17101           files.
17102
17103           For n greater than zero, -fsched-verbose outputs the same
17104           information as -fdump-rtl-sched1 and -fdump-rtl-sched2.  For n
17105           greater than one, it also output basic block probabilities,
17106           detailed ready list information and unit/insn info.  For n greater
17107           than two, it includes RTL at abort point, control-flow and regions
17108           info.  And for n over four, -fsched-verbose also includes
17109           dependence info.
17110
17111       -fenable-kind-pass
17112       -fdisable-kind-pass=range-list
17113           This is a set of options that are used to explicitly disable/enable
17114           optimization passes.  These options are intended for use for
17115           debugging GCC.  Compiler users should use regular options for
17116           enabling/disabling passes instead.
17117
17118           -fdisable-ipa-pass
17119               Disable IPA pass pass. pass is the pass name.  If the same pass
17120               is statically invoked in the compiler multiple times, the pass
17121               name should be appended with a sequential number starting from
17122               1.
17123
17124           -fdisable-rtl-pass
17125           -fdisable-rtl-pass=range-list
17126               Disable RTL pass pass.  pass is the pass name.  If the same
17127               pass is statically invoked in the compiler multiple times, the
17128               pass name should be appended with a sequential number starting
17129               from 1.  range-list is a comma-separated list of function
17130               ranges or assembler names.  Each range is a number pair
17131               separated by a colon.  The range is inclusive in both ends.  If
17132               the range is trivial, the number pair can be simplified as a
17133               single number.  If the function's call graph node's uid falls
17134               within one of the specified ranges, the pass is disabled for
17135               that function.  The uid is shown in the function header of a
17136               dump file, and the pass names can be dumped by using option
17137               -fdump-passes.
17138
17139           -fdisable-tree-pass
17140           -fdisable-tree-pass=range-list
17141               Disable tree pass pass.  See -fdisable-rtl for the description
17142               of option arguments.
17143
17144           -fenable-ipa-pass
17145               Enable IPA pass pass.  pass is the pass name.  If the same pass
17146               is statically invoked in the compiler multiple times, the pass
17147               name should be appended with a sequential number starting from
17148               1.
17149
17150           -fenable-rtl-pass
17151           -fenable-rtl-pass=range-list
17152               Enable RTL pass pass.  See -fdisable-rtl for option argument
17153               description and examples.
17154
17155           -fenable-tree-pass
17156           -fenable-tree-pass=range-list
17157               Enable tree pass pass.  See -fdisable-rtl for the description
17158               of option arguments.
17159
17160           Here are some examples showing uses of these options.
17161
17162                   # disable ccp1 for all functions
17163                      -fdisable-tree-ccp1
17164                   # disable complete unroll for function whose cgraph node uid is 1
17165                      -fenable-tree-cunroll=1
17166                   # disable gcse2 for functions at the following ranges [1,1],
17167                   # [300,400], and [400,1000]
17168                   # disable gcse2 for functions foo and foo2
17169                      -fdisable-rtl-gcse2=foo,foo2
17170                   # disable early inlining
17171                      -fdisable-tree-einline
17172                   # disable ipa inlining
17173                      -fdisable-ipa-inline
17174                   # enable tree full unroll
17175                      -fenable-tree-unroll
17176
17177       -fchecking
17178       -fchecking=n
17179           Enable internal consistency checking.  The default depends on the
17180           compiler configuration.  -fchecking=2 enables further internal
17181           consistency checking that might affect code generation.
17182
17183       -frandom-seed=string
17184           This option provides a seed that GCC uses in place of random
17185           numbers in generating certain symbol names that have to be
17186           different in every compiled file.  It is also used to place unique
17187           stamps in coverage data files and the object files that produce
17188           them.  You can use the -frandom-seed option to produce reproducibly
17189           identical object files.
17190
17191           The string can either be a number (decimal, octal or hex) or an
17192           arbitrary string (in which case it's converted to a number by
17193           computing CRC32).
17194
17195           The string should be different for every file you compile.
17196
17197       -save-temps
17198           Store the usual "temporary" intermediate files permanently; name
17199           them as auxiliary output files, as specified described under
17200           -dumpbase and -dumpdir.
17201
17202           When used in combination with the -x command-line option,
17203           -save-temps is sensible enough to avoid overwriting an input source
17204           file with the same extension as an intermediate file.  The
17205           corresponding intermediate file may be obtained by renaming the
17206           source file before using -save-temps.
17207
17208       -save-temps=cwd
17209           Equivalent to -save-temps -dumpdir ./.
17210
17211       -save-temps=obj
17212           Equivalent to -save-temps -dumpdir outdir/, where outdir/ is the
17213           directory of the output file specified after the -o option,
17214           including any directory separators.  If the -o option is not used,
17215           the -save-temps=obj switch behaves like -save-temps=cwd.
17216
17217       -time[=file]
17218           Report the CPU time taken by each subprocess in the compilation
17219           sequence.  For C source files, this is the compiler proper and
17220           assembler (plus the linker if linking is done).
17221
17222           Without the specification of an output file, the output looks like
17223           this:
17224
17225                   # cc1 0.12 0.01
17226                   # as 0.00 0.01
17227
17228           The first number on each line is the "user time", that is time
17229           spent executing the program itself.  The second number is "system
17230           time", time spent executing operating system routines on behalf of
17231           the program.  Both numbers are in seconds.
17232
17233           With the specification of an output file, the output is appended to
17234           the named file, and it looks like this:
17235
17236                   0.12 0.01 cc1 <options>
17237                   0.00 0.01 as <options>
17238
17239           The "user time" and the "system time" are moved before the program
17240           name, and the options passed to the program are displayed, so that
17241           one can later tell what file was being compiled, and with which
17242           options.
17243
17244       -fdump-final-insns[=file]
17245           Dump the final internal representation (RTL) to file.  If the
17246           optional argument is omitted (or if file is "."), the name of the
17247           dump file is determined by appending ".gkd" to the dump base name,
17248           see -dumpbase.
17249
17250       -fcompare-debug[=opts]
17251           If no error occurs during compilation, run the compiler a second
17252           time, adding opts and -fcompare-debug-second to the arguments
17253           passed to the second compilation.  Dump the final internal
17254           representation in both compilations, and print an error if they
17255           differ.
17256
17257           If the equal sign is omitted, the default -gtoggle is used.
17258
17259           The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
17260           and nonzero, implicitly enables -fcompare-debug.  If
17261           GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
17262           it is used for opts, otherwise the default -gtoggle is used.
17263
17264           -fcompare-debug=, with the equal sign but without opts, is
17265           equivalent to -fno-compare-debug, which disables the dumping of the
17266           final representation and the second compilation, preventing even
17267           GCC_COMPARE_DEBUG from taking effect.
17268
17269           To verify full coverage during -fcompare-debug testing, set
17270           GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
17271           rejects as an invalid option in any actual compilation (rather than
17272           preprocessing, assembly or linking).  To get just a warning,
17273           setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
17274           will do.
17275
17276       -fcompare-debug-second
17277           This option is implicitly passed to the compiler for the second
17278           compilation requested by -fcompare-debug, along with options to
17279           silence warnings, and omitting other options that would cause the
17280           compiler to produce output to files or to standard output as a side
17281           effect.  Dump files and preserved temporary files are renamed so as
17282           to contain the ".gk" additional extension during the second
17283           compilation, to avoid overwriting those generated by the first.
17284
17285           When this option is passed to the compiler driver, it causes the
17286           first compilation to be skipped, which makes it useful for little
17287           other than debugging the compiler proper.
17288
17289       -gtoggle
17290           Turn off generation of debug info, if leaving out this option
17291           generates it, or turn it on at level 2 otherwise.  The position of
17292           this argument in the command line does not matter; it takes effect
17293           after all other options are processed, and it does so only once, no
17294           matter how many times it is given.  This is mainly intended to be
17295           used with -fcompare-debug.
17296
17297       -fvar-tracking-assignments-toggle
17298           Toggle -fvar-tracking-assignments, in the same way that -gtoggle
17299           toggles -g.
17300
17301       -Q  Makes the compiler print out each function name as it is compiled,
17302           and print some statistics about each pass when it finishes.
17303
17304       -ftime-report
17305           Makes the compiler print some statistics about the time consumed by
17306           each pass when it finishes.
17307
17308       -ftime-report-details
17309           Record the time consumed by infrastructure parts separately for
17310           each pass.
17311
17312       -fira-verbose=n
17313           Control the verbosity of the dump file for the integrated register
17314           allocator.  The default value is 5.  If the value n is greater or
17315           equal to 10, the dump output is sent to stderr using the same
17316           format as n minus 10.
17317
17318       -flto-report
17319           Prints a report with internal details on the workings of the link-
17320           time optimizer.  The contents of this report vary from version to
17321           version.  It is meant to be useful to GCC developers when
17322           processing object files in LTO mode (via -flto).
17323
17324           Disabled by default.
17325
17326       -flto-report-wpa
17327           Like -flto-report, but only print for the WPA phase of link-time
17328           optimization.
17329
17330       -fmem-report
17331           Makes the compiler print some statistics about permanent memory
17332           allocation when it finishes.
17333
17334       -fmem-report-wpa
17335           Makes the compiler print some statistics about permanent memory
17336           allocation for the WPA phase only.
17337
17338       -fpre-ipa-mem-report
17339       -fpost-ipa-mem-report
17340           Makes the compiler print some statistics about permanent memory
17341           allocation before or after interprocedural optimization.
17342
17343       -fmultiflags
17344           This option enables multilib-aware "TFLAGS" to be used to build
17345           target libraries with options different from those the compiler is
17346           configured to use by default, through the use of specs
17347
17348           Like "TFLAGS", this allows the target libraries to be built for
17349           portable baseline environments, while the compiler defaults to more
17350           demanding ones.  That's useful because users can easily override
17351           the defaults the compiler is configured to use to build their own
17352           programs, if the defaults are not ideal for their target
17353           environment, whereas rebuilding the runtime libraries is usually
17354           not as easy or desirable.
17355
17356           Unlike "TFLAGS", the use of specs enables different flags to be
17357           selected for different multilibs.  The way to accomplish that is to
17358           build with make TFLAGS=-fmultiflags, after configuring
17359           --with-specs=%{fmultiflags:...}.
17360
17361           This option is discarded by the driver once it's done processing
17362           driver self spec.
17363
17364           It is also useful to check that "TFLAGS" are being used to build
17365           all target libraries, by configuring a non-bootstrap compiler
17366           --with-specs='%{!fmultiflags:%emissing TFLAGS}' and building the
17367           compiler and target libraries.
17368
17369       -fprofile-report
17370           Makes the compiler print some statistics about consistency of the
17371           (estimated) profile and effect of individual passes.
17372
17373       -fstack-usage
17374           Makes the compiler output stack usage information for the program,
17375           on a per-function basis.  The filename for the dump is made by
17376           appending .su to the auxname.  auxname is generated from the name
17377           of the output file, if explicitly specified and it is not an
17378           executable, otherwise it is the basename of the source file.  An
17379           entry is made up of three fields:
17380
17381           *   The name of the function.
17382
17383           *   A number of bytes.
17384
17385           *   One or more qualifiers: "static", "dynamic", "bounded".
17386
17387           The qualifier "static" means that the function manipulates the
17388           stack statically: a fixed number of bytes are allocated for the
17389           frame on function entry and released on function exit; no stack
17390           adjustments are otherwise made in the function.  The second field
17391           is this fixed number of bytes.
17392
17393           The qualifier "dynamic" means that the function manipulates the
17394           stack dynamically: in addition to the static allocation described
17395           above, stack adjustments are made in the body of the function, for
17396           example to push/pop arguments around function calls.  If the
17397           qualifier "bounded" is also present, the amount of these
17398           adjustments is bounded at compile time and the second field is an
17399           upper bound of the total amount of stack used by the function.  If
17400           it is not present, the amount of these adjustments is not bounded
17401           at compile time and the second field only represents the bounded
17402           part.
17403
17404       -fstats
17405           Emit statistics about front-end processing at the end of the
17406           compilation.  This option is supported only by the C++ front end,
17407           and the information is generally only useful to the G++ development
17408           team.
17409
17410       -fdbg-cnt-list
17411           Print the name and the counter upper bound for all debug counters.
17412
17413       -fdbg-cnt=counter-value-list
17414           Set the internal debug counter lower and upper bound.  counter-
17415           value-list is a comma-separated list of
17416           name:lower_bound1-upper_bound1 [:lower_bound2-upper_bound2...]
17417           tuples which sets the name of the counter and list of closed
17418           intervals.  The lower_bound is optional and is zero initialized if
17419           not set.  For example, with -fdbg-cnt=dce:2-4:10-11,tail_call:10,
17420           dbg_cnt(dce) returns true only for second, third, fourth, tenth and
17421           eleventh invocation.  For dbg_cnt(tail_call) true is returned for
17422           first 10 invocations.
17423
17424       -print-file-name=library
17425           Print the full absolute name of the library file library that would
17426           be used when linking---and don't do anything else.  With this
17427           option, GCC does not compile or link anything; it just prints the
17428           file name.
17429
17430       -print-multi-directory
17431           Print the directory name corresponding to the multilib selected by
17432           any other switches present in the command line.  This directory is
17433           supposed to exist in GCC_EXEC_PREFIX.
17434
17435       -print-multi-lib
17436           Print the mapping from multilib directory names to compiler
17437           switches that enable them.  The directory name is separated from
17438           the switches by ;, and each switch starts with an @ instead of the
17439           -, without spaces between multiple switches.  This is supposed to
17440           ease shell processing.
17441
17442       -print-multi-os-directory
17443           Print the path to OS libraries for the selected multilib, relative
17444           to some lib subdirectory.  If OS libraries are present in the lib
17445           subdirectory and no multilibs are used, this is usually just ., if
17446           OS libraries are present in libsuffix sibling directories this
17447           prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
17448           present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
17449           or ev6.
17450
17451       -print-multiarch
17452           Print the path to OS libraries for the selected multiarch, relative
17453           to some lib subdirectory.
17454
17455       -print-prog-name=program
17456           Like -print-file-name, but searches for a program such as cpp.
17457
17458       -print-libgcc-file-name
17459           Same as -print-file-name=libgcc.a.
17460
17461           This is useful when you use -nostdlib or -nodefaultlibs but you do
17462           want to link with libgcc.a.  You can do:
17463
17464                   gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
17465
17466       -print-search-dirs
17467           Print the name of the configured installation directory and a list
17468           of program and library directories gcc searches---and don't do
17469           anything else.
17470
17471           This is useful when gcc prints the error message installation
17472           problem, cannot exec cpp0: No such file or directory.  To resolve
17473           this you either need to put cpp0 and the other compiler components
17474           where gcc expects to find them, or you can set the environment
17475           variable GCC_EXEC_PREFIX to the directory where you installed them.
17476           Don't forget the trailing /.
17477
17478       -print-sysroot
17479           Print the target sysroot directory that is used during compilation.
17480           This is the target sysroot specified either at configure time or
17481           using the --sysroot option, possibly with an extra suffix that
17482           depends on compilation options.  If no target sysroot is specified,
17483           the option prints nothing.
17484
17485       -print-sysroot-headers-suffix
17486           Print the suffix added to the target sysroot when searching for
17487           headers, or give an error if the compiler is not configured with
17488           such a suffix---and don't do anything else.
17489
17490       -dumpmachine
17491           Print the compiler's target machine (for example,
17492           i686-pc-linux-gnu)---and don't do anything else.
17493
17494       -dumpversion
17495           Print the compiler version (for example, 3.0, 6.3.0 or 7)---and
17496           don't do anything else.  This is the compiler version used in
17497           filesystem paths and specs. Depending on how the compiler has been
17498           configured it can be just a single number (major version), two
17499           numbers separated by a dot (major and minor version) or three
17500           numbers separated by dots (major, minor and patchlevel version).
17501
17502       -dumpfullversion
17503           Print the full compiler version---and don't do anything else. The
17504           output is always three numbers separated by dots, major, minor and
17505           patchlevel version.
17506
17507       -dumpspecs
17508           Print the compiler's built-in specs---and don't do anything else.
17509           (This is used when GCC itself is being built.)
17510
17511   Machine-Dependent Options
17512       Each target machine supported by GCC can have its own options---for
17513       example, to allow you to compile for a particular processor variant or
17514       ABI, or to control optimizations specific to that machine.  By
17515       convention, the names of machine-specific options start with -m.
17516
17517       Some configurations of the compiler also support additional target-
17518       specific options, usually for compatibility with other compilers on the
17519       same platform.
17520
17521       AArch64 Options
17522
17523       These options are defined for AArch64 implementations:
17524
17525       -mabi=name
17526           Generate code for the specified data model.  Permissible values are
17527           ilp32 for SysV-like data model where int, long int and pointers are
17528           32 bits, and lp64 for SysV-like data model where int is 32 bits,
17529           but long int and pointers are 64 bits.
17530
17531           The default depends on the specific target configuration.  Note
17532           that the LP64 and ILP32 ABIs are not link-compatible; you must
17533           compile your entire program with the same ABI, and link with a
17534           compatible set of libraries.
17535
17536       -mbig-endian
17537           Generate big-endian code.  This is the default when GCC is
17538           configured for an aarch64_be-*-* target.
17539
17540       -mgeneral-regs-only
17541           Generate code which uses only the general-purpose registers.  This
17542           will prevent the compiler from using floating-point and Advanced
17543           SIMD registers but will not impose any restrictions on the
17544           assembler.
17545
17546       -mlittle-endian
17547           Generate little-endian code.  This is the default when GCC is
17548           configured for an aarch64-*-* but not an aarch64_be-*-* target.
17549
17550       -mcmodel=tiny
17551           Generate code for the tiny code model.  The program and its
17552           statically defined symbols must be within 1MB of each other.
17553           Programs can be statically or dynamically linked.
17554
17555       -mcmodel=small
17556           Generate code for the small code model.  The program and its
17557           statically defined symbols must be within 4GB of each other.
17558           Programs can be statically or dynamically linked.  This is the
17559           default code model.
17560
17561       -mcmodel=large
17562           Generate code for the large code model.  This makes no assumptions
17563           about addresses and sizes of sections.  Programs can be statically
17564           linked only.  The -mcmodel=large option is incompatible with
17565           -mabi=ilp32, -fpic and -fPIC.
17566
17567       -mstrict-align
17568       -mno-strict-align
17569           Avoid or allow generating memory accesses that may not be aligned
17570           on a natural object boundary as described in the architecture
17571           specification.
17572
17573       -momit-leaf-frame-pointer
17574       -mno-omit-leaf-frame-pointer
17575           Omit or keep the frame pointer in leaf functions.  The former
17576           behavior is the default.
17577
17578       -mstack-protector-guard=guard
17579       -mstack-protector-guard-reg=reg
17580       -mstack-protector-guard-offset=offset
17581           Generate stack protection code using canary at guard.  Supported
17582           locations are global for a global canary or sysreg for a canary in
17583           an appropriate system register.
17584
17585           With the latter choice the options -mstack-protector-guard-reg=reg
17586           and -mstack-protector-guard-offset=offset furthermore specify which
17587           system register to use as base register for reading the canary, and
17588           from what offset from that base register. There is no default
17589           register or offset as this is entirely for use within the Linux
17590           kernel.
17591
17592       -mtls-dialect=desc
17593           Use TLS descriptors as the thread-local storage mechanism for
17594           dynamic accesses of TLS variables.  This is the default.
17595
17596       -mtls-dialect=traditional
17597           Use traditional TLS as the thread-local storage mechanism for
17598           dynamic accesses of TLS variables.
17599
17600       -mtls-size=size
17601           Specify bit size of immediate TLS offsets.  Valid values are 12,
17602           24, 32, 48.  This option requires binutils 2.26 or newer.
17603
17604       -mfix-cortex-a53-835769
17605       -mno-fix-cortex-a53-835769
17606           Enable or disable the workaround for the ARM Cortex-A53 erratum
17607           number 835769.  This involves inserting a NOP instruction between
17608           memory instructions and 64-bit integer multiply-accumulate
17609           instructions.
17610
17611       -mfix-cortex-a53-843419
17612       -mno-fix-cortex-a53-843419
17613           Enable or disable the workaround for the ARM Cortex-A53 erratum
17614           number 843419.  This erratum workaround is made at link time and
17615           this will only pass the corresponding flag to the linker.
17616
17617       -mlow-precision-recip-sqrt
17618       -mno-low-precision-recip-sqrt
17619           Enable or disable the reciprocal square root approximation.  This
17620           option only has an effect if -ffast-math or
17621           -funsafe-math-optimizations is used as well.  Enabling this reduces
17622           precision of reciprocal square root results to about 16 bits for
17623           single precision and to 32 bits for double precision.
17624
17625       -mlow-precision-sqrt
17626       -mno-low-precision-sqrt
17627           Enable or disable the square root approximation.  This option only
17628           has an effect if -ffast-math or -funsafe-math-optimizations is used
17629           as well.  Enabling this reduces precision of square root results to
17630           about 16 bits for single precision and to 32 bits for double
17631           precision.  If enabled, it implies -mlow-precision-recip-sqrt.
17632
17633       -mlow-precision-div
17634       -mno-low-precision-div
17635           Enable or disable the division approximation.  This option only has
17636           an effect if -ffast-math or -funsafe-math-optimizations is used as
17637           well.  Enabling this reduces precision of division results to about
17638           16 bits for single precision and to 32 bits for double precision.
17639
17640       -mtrack-speculation
17641       -mno-track-speculation
17642           Enable or disable generation of additional code to track
17643           speculative execution through conditional branches.  The tracking
17644           state can then be used by the compiler when expanding calls to
17645           "__builtin_speculation_safe_copy" to permit a more efficient code
17646           sequence to be generated.
17647
17648       -moutline-atomics
17649       -mno-outline-atomics
17650           Enable or disable calls to out-of-line helpers to implement atomic
17651           operations.  These helpers will, at runtime, determine if the LSE
17652           instructions from ARMv8.1-A can be used; if not, they will use the
17653           load/store-exclusive instructions that are present in the base
17654           ARMv8.0 ISA.
17655
17656           This option is only applicable when compiling for the base ARMv8.0
17657           instruction set.  If using a later revision, e.g. -march=armv8.1-a
17658           or -march=armv8-a+lse, the ARMv8.1-Atomics instructions will be
17659           used directly.  The same applies when using -mcpu= when the
17660           selected cpu supports the lse feature.  This option is on by
17661           default.
17662
17663       -march=name
17664           Specify the name of the target architecture and, optionally, one or
17665           more feature modifiers.  This option has the form
17666           -march=arch{+[no]feature}*.
17667
17668           The table below summarizes the permissible values for arch and the
17669           features that they enable by default:
17670
17671           arch value : Architecture : Includes by default
17672           armv8-a : Armv8-A : +fp, +simd
17673           armv8.1-a : Armv8.1-A : armv8-a, +crc, +lse, +rdma
17674           armv8.2-a : Armv8.2-A : armv8.1-a
17675           armv8.3-a : Armv8.3-A : armv8.2-a, +pauth
17676           armv8.4-a : Armv8.4-A : armv8.3-a, +flagm, +fp16fml, +dotprod
17677           armv8.5-a : Armv8.5-A : armv8.4-a, +sb, +ssbs, +predres
17678           armv8.6-a : Armv8.6-A : armv8.5-a, +bf16, +i8mm
17679           armv8.7-a : Armv8.7-A : armv8.6-a, +ls64
17680           armv8.8-a : Armv8.8-a : armv8.7-a, +mops
17681           armv9-a : Armv9-A : armv8.5-a, +sve, +sve2
17682           armv9.1-a : Armv9.1-A : armv9-a, +bf16, +i8mm
17683           armv9.2-a : Armv9.2-A : armv9.1-a, +ls64
17684           armv9.3-a : Armv9.3-A : armv9.2-a, +mops
17685           armv8-r : Armv8-R : armv8-r
17686
17687           The value native is available on native AArch64 GNU/Linux and
17688           causes the compiler to pick the architecture of the host system.
17689           This option has no effect if the compiler is unable to recognize
17690           the architecture of the host system,
17691
17692           The permissible values for feature are listed in the sub-section on
17693           aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
17694           Where conflicting feature modifiers are specified, the right-most
17695           feature is used.
17696
17697           GCC uses name to determine what kind of instructions it can emit
17698           when generating assembly code.  If -march is specified without
17699           either of -mtune or -mcpu also being specified, the code is tuned
17700           to perform well across a range of target processors implementing
17701           the target architecture.
17702
17703       -mtune=name
17704           Specify the name of the target processor for which GCC should tune
17705           the performance of the code.  Permissible values for this option
17706           are: generic, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
17707           cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae,
17708           cortex-a77, cortex-a65, cortex-a65ae, cortex-a34, cortex-a78,
17709           cortex-a78ae, cortex-a78c, ares, exynos-m1, emag, falkor,
17710           neoverse-512tvb, neoverse-e1, neoverse-n1, neoverse-n2,
17711           neoverse-v1, neoverse-v2, qdf24xx, saphira, phecda, xgene1, vulcan,
17712           octeontx, octeontx81,  octeontx83, octeontx2, octeontx2t98,
17713           octeontx2t96 octeontx2t93, octeontx2f95, octeontx2f95n,
17714           octeontx2f95mm, a64fx, thunderx, thunderxt88, thunderxt88p1,
17715           thunderxt81, tsv110, thunderxt83, thunderx2t99, thunderx3t110,
17716           zeus, cortex-a57.cortex-a53, cortex-a72.cortex-a53,
17717           cortex-a73.cortex-a35, cortex-a73.cortex-a53,
17718           cortex-a75.cortex-a55, cortex-a76.cortex-a55, cortex-r82,
17719           cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-a510,
17720           cortex-a710, cortex-a715, ampere1, ampere1a, and native.
17721
17722           The values cortex-a57.cortex-a53, cortex-a72.cortex-a53,
17723           cortex-a73.cortex-a35, cortex-a73.cortex-a53,
17724           cortex-a75.cortex-a55, cortex-a76.cortex-a55 specify that GCC
17725           should tune for a big.LITTLE system.
17726
17727           The value neoverse-512tvb specifies that GCC should tune for
17728           Neoverse cores that (a) implement SVE and (b) have a total vector
17729           bandwidth of 512 bits per cycle.  In other words, the option tells
17730           GCC to tune for Neoverse cores that can execute 4 128-bit Advanced
17731           SIMD arithmetic instructions a cycle and that can execute an
17732           equivalent number of SVE arithmetic instructions per cycle (2 for
17733           256-bit SVE, 4 for 128-bit SVE).  This is more general than tuning
17734           for a specific core like Neoverse V1 but is more specific than the
17735           default tuning described below.
17736
17737           Additionally on native AArch64 GNU/Linux systems the value native
17738           tunes performance to the host system.  This option has no effect if
17739           the compiler is unable to recognize the processor of the host
17740           system.
17741
17742           Where none of -mtune=, -mcpu= or -march= are specified, the code is
17743           tuned to perform well across a range of target processors.
17744
17745           This option cannot be suffixed by feature modifiers.
17746
17747       -mcpu=name
17748           Specify the name of the target processor, optionally suffixed by
17749           one or more feature modifiers.  This option has the form
17750           -mcpu=cpu{+[no]feature}*, where the permissible values for cpu are
17751           the same as those available for -mtune.  The permissible values for
17752           feature are documented in the sub-section on
17753           aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
17754           Where conflicting feature modifiers are specified, the right-most
17755           feature is used.
17756
17757           GCC uses name to determine what kind of instructions it can emit
17758           when generating assembly code (as if by -march) and to determine
17759           the target processor for which to tune for performance (as if by
17760           -mtune).  Where this option is used in conjunction with -march or
17761           -mtune, those options take precedence over the appropriate part of
17762           this option.
17763
17764           -mcpu=neoverse-512tvb is special in that it does not refer to a
17765           specific core, but instead refers to all Neoverse cores that (a)
17766           implement SVE and (b) have a total vector bandwidth of 512 bits a
17767           cycle.  Unless overridden by -march, -mcpu=neoverse-512tvb
17768           generates code that can run on a Neoverse V1 core, since Neoverse
17769           V1 is the first Neoverse core with these properties.  Unless
17770           overridden by -mtune, -mcpu=neoverse-512tvb tunes code in the same
17771           way as for -mtune=neoverse-512tvb.
17772
17773       -moverride=string
17774           Override tuning decisions made by the back-end in response to a
17775           -mtune= switch.  The syntax, semantics, and accepted values for
17776           string in this option are not guaranteed to be consistent across
17777           releases.
17778
17779           This option is only intended to be useful when developing GCC.
17780
17781       -mverbose-cost-dump
17782           Enable verbose cost model dumping in the debug dump files.  This
17783           option is provided for use in debugging the compiler.
17784
17785       -mpc-relative-literal-loads
17786       -mno-pc-relative-literal-loads
17787           Enable or disable PC-relative literal loads.  With this option
17788           literal pools are accessed using a single instruction and emitted
17789           after each function.  This limits the maximum size of functions to
17790           1MB.  This is enabled by default for -mcmodel=tiny.
17791
17792       -msign-return-address=scope
17793           Select the function scope on which return address signing will be
17794           applied.  Permissible values are none, which disables return
17795           address signing, non-leaf, which enables pointer signing for
17796           functions which are not leaf functions, and all, which enables
17797           pointer signing for all functions.  The default value is none. This
17798           option has been deprecated by -mbranch-protection.
17799
17800       -mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti
17801           Select the branch protection features to use.  none is the default
17802           and turns off all types of branch protection.  standard turns on
17803           all types of branch protection features.  If a feature has
17804           additional tuning options, then standard sets it to its standard
17805           level.  pac-ret[+leaf] turns on return address signing to its
17806           standard level: signing functions that save the return address to
17807           memory (non-leaf functions will practically always do this) using
17808           the a-key.  The optional argument leaf can be used to extend the
17809           signing to include leaf functions.  The optional argument b-key can
17810           be used to sign the functions with the B-key instead of the A-key.
17811           bti turns on branch target identification mechanism.
17812
17813       -mharden-sls=opts
17814           Enable compiler hardening against straight line speculation (SLS).
17815           opts is a comma-separated list of the following options:
17816
17817           retbr
17818           blr
17819
17820           In addition, -mharden-sls=all enables all SLS hardening while
17821           -mharden-sls=none disables all SLS hardening.
17822
17823       -msve-vector-bits=bits
17824           Specify the number of bits in an SVE vector register.  This option
17825           only has an effect when SVE is enabled.
17826
17827           GCC supports two forms of SVE code generation: "vector-length
17828           agnostic" output that works with any size of vector register and
17829           "vector-length specific" output that allows GCC to make assumptions
17830           about the vector length when it is useful for optimization reasons.
17831           The possible values of bits are: scalable, 128, 256, 512, 1024 and
17832           2048.  Specifying scalable selects vector-length agnostic output.
17833           At present -msve-vector-bits=128 also generates vector-length
17834           agnostic output for big-endian targets.  All other values generate
17835           vector-length specific code.  The behavior of these values may
17836           change in future releases and no value except scalable should be
17837           relied on for producing code that is portable across different
17838           hardware SVE vector lengths.
17839
17840           The default is -msve-vector-bits=scalable, which produces vector-
17841           length agnostic code.
17842
17843       -march and -mcpu Feature Modifiers
17844
17845       Feature modifiers used with -march and -mcpu can be any of the
17846       following and their inverses nofeature:
17847
17848       crc Enable CRC extension.  This is on by default for -march=armv8.1-a.
17849
17850       crypto
17851           Enable Crypto extension.  This also enables Advanced SIMD and
17852           floating-point instructions.
17853
17854       fp  Enable floating-point instructions.  This is on by default for all
17855           possible values for options -march and -mcpu.
17856
17857       simd
17858           Enable Advanced SIMD instructions.  This also enables floating-
17859           point instructions.  This is on by default for all possible values
17860           for options -march and -mcpu.
17861
17862       sve Enable Scalable Vector Extension instructions.  This also enables
17863           Advanced SIMD and floating-point instructions.
17864
17865       lse Enable Large System Extension instructions.  This is on by default
17866           for -march=armv8.1-a.
17867
17868       rdma
17869           Enable Round Double Multiply Accumulate instructions.  This is on
17870           by default for -march=armv8.1-a.
17871
17872       fp16
17873           Enable FP16 extension.  This also enables floating-point
17874           instructions.
17875
17876       fp16fml
17877           Enable FP16 fmla extension.  This also enables FP16 extensions and
17878           floating-point instructions. This option is enabled by default for
17879           -march=armv8.4-a. Use of this option with architectures prior to
17880           Armv8.2-A is not supported.
17881
17882       rcpc
17883           Enable the RCpc extension.  This enables the use of the LDAPR
17884           instructions for load-acquire atomic semantics, and passes it on to
17885           the assembler, enabling inline asm statements to use instructions
17886           from the RCpc extension.
17887
17888       dotprod
17889           Enable the Dot Product extension.  This also enables Advanced SIMD
17890           instructions.
17891
17892       aes Enable the Armv8-a aes and pmull crypto extension.  This also
17893           enables Advanced SIMD instructions.
17894
17895       sha2
17896           Enable the Armv8-a sha2 crypto extension.  This also enables
17897           Advanced SIMD instructions.
17898
17899       sha3
17900           Enable the sha512 and sha3 crypto extension.  This also enables
17901           Advanced SIMD instructions. Use of this option with architectures
17902           prior to Armv8.2-A is not supported.
17903
17904       sm4 Enable the sm3 and sm4 crypto extension.  This also enables
17905           Advanced SIMD instructions.  Use of this option with architectures
17906           prior to Armv8.2-A is not supported.
17907
17908       profile
17909           Enable the Statistical Profiling extension.  This option is only to
17910           enable the extension at the assembler level and does not affect
17911           code generation.
17912
17913       rng Enable the Armv8.5-a Random Number instructions.  This option is
17914           only to enable the extension at the assembler level and does not
17915           affect code generation.
17916
17917       memtag
17918           Enable the Armv8.5-a Memory Tagging Extensions.  Use of this option
17919           with architectures prior to Armv8.5-A is not supported.
17920
17921       sb  Enable the Armv8-a Speculation Barrier instruction.  This option is
17922           only to enable the extension at the assembler level and does not
17923           affect code generation.  This option is enabled by default for
17924           -march=armv8.5-a.
17925
17926       ssbs
17927           Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
17928           option is only to enable the extension at the assembler level and
17929           does not affect code generation.  This option is enabled by default
17930           for -march=armv8.5-a.
17931
17932       predres
17933           Enable the Armv8-a Execution and Data Prediction Restriction
17934           instructions.  This option is only to enable the extension at the
17935           assembler level and does not affect code generation.  This option
17936           is enabled by default for -march=armv8.5-a.
17937
17938       sve2
17939           Enable the Armv8-a Scalable Vector Extension 2.  This also enables
17940           SVE instructions.
17941
17942       sve2-bitperm
17943           Enable SVE2 bitperm instructions.  This also enables SVE2
17944           instructions.
17945
17946       sve2-sm4
17947           Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
17948
17949       sve2-aes
17950           Enable SVE2 aes instructions.  This also enables SVE2 instructions.
17951
17952       sve2-sha3
17953           Enable SVE2 sha3 instructions.  This also enables SVE2
17954           instructions.
17955
17956       tme Enable the Transactional Memory Extension.
17957
17958       i8mm
17959           Enable 8-bit Integer Matrix Multiply instructions.  This also
17960           enables Advanced SIMD and floating-point instructions.  This option
17961           is enabled by default for -march=armv8.6-a.  Use of this option
17962           with architectures prior to Armv8.2-A is not supported.
17963
17964       f32mm
17965           Enable 32-bit Floating point Matrix Multiply instructions.  This
17966           also enables SVE instructions.  Use of this option with
17967           architectures prior to Armv8.2-A is not supported.
17968
17969       f64mm
17970           Enable 64-bit Floating point Matrix Multiply instructions.  This
17971           also enables SVE instructions.  Use of this option with
17972           architectures prior to Armv8.2-A is not supported.
17973
17974       bf16
17975           Enable brain half-precision floating-point instructions.  This also
17976           enables Advanced SIMD and floating-point instructions.  This option
17977           is enabled by default for -march=armv8.6-a.  Use of this option
17978           with architectures prior to Armv8.2-A is not supported.
17979
17980       ls64
17981           Enable the 64-byte atomic load and store instructions for
17982           accelerators.  This option is enabled by default for
17983           -march=armv8.7-a.
17984
17985       mops
17986           Enable the instructions to accelerate memory operations like
17987           "memcpy", "memmove", "memset".  This option is enabled by default
17988           for -march=armv8.8-a
17989
17990       flagm
17991           Enable the Flag Manipulation instructions Extension.
17992
17993       pauth
17994           Enable the Pointer Authentication Extension.
17995
17996       cssc
17997           Enable the Common Short Sequence Compression instructions.
17998
17999       Feature crypto implies aes, sha2, and simd, which implies fp.
18000       Conversely, nofp implies nosimd, which implies nocrypto, noaes and
18001       nosha2.
18002
18003       Adapteva Epiphany Options
18004
18005       These -m options are defined for Adapteva Epiphany:
18006
18007       -mhalf-reg-file
18008           Don't allocate any register in the range "r32"..."r63".  That
18009           allows code to run on hardware variants that lack these registers.
18010
18011       -mprefer-short-insn-regs
18012           Preferentially allocate registers that allow short instruction
18013           generation.  This can result in increased instruction count, so
18014           this may either reduce or increase overall code size.
18015
18016       -mbranch-cost=num
18017           Set the cost of branches to roughly num "simple" instructions.
18018           This cost is only a heuristic and is not guaranteed to produce
18019           consistent results across releases.
18020
18021       -mcmove
18022           Enable the generation of conditional moves.
18023
18024       -mnops=num
18025           Emit num NOPs before every other generated instruction.
18026
18027       -mno-soft-cmpsf
18028           For single-precision floating-point comparisons, emit an "fsub"
18029           instruction and test the flags.  This is faster than a software
18030           comparison, but can get incorrect results in the presence of NaNs,
18031           or when two different small numbers are compared such that their
18032           difference is calculated as zero.  The default is -msoft-cmpsf,
18033           which uses slower, but IEEE-compliant, software comparisons.
18034
18035       -mstack-offset=num
18036           Set the offset between the top of the stack and the stack pointer.
18037           E.g., a value of 8 means that the eight bytes in the range
18038           "sp+0...sp+7" can be used by leaf functions without stack
18039           allocation.  Values other than 8 or 16 are untested and unlikely to
18040           work.  Note also that this option changes the ABI; compiling a
18041           program with a different stack offset than the libraries have been
18042           compiled with generally does not work.  This option can be useful
18043           if you want to evaluate if a different stack offset would give you
18044           better code, but to actually use a different stack offset to build
18045           working programs, it is recommended to configure the toolchain with
18046           the appropriate --with-stack-offset=num option.
18047
18048       -mno-round-nearest
18049           Make the scheduler assume that the rounding mode has been set to
18050           truncating.  The default is -mround-nearest.
18051
18052       -mlong-calls
18053           If not otherwise specified by an attribute, assume all calls might
18054           be beyond the offset range of the "b" / "bl" instructions, and
18055           therefore load the function address into a register before
18056           performing a (otherwise direct) call.  This is the default.
18057
18058       -mshort-calls
18059           If not otherwise specified by an attribute, assume all direct calls
18060           are in the range of the "b" / "bl" instructions, so use these
18061           instructions for direct calls.  The default is -mlong-calls.
18062
18063       -msmall16
18064           Assume addresses can be loaded as 16-bit unsigned values.  This
18065           does not apply to function addresses for which -mlong-calls
18066           semantics are in effect.
18067
18068       -mfp-mode=mode
18069           Set the prevailing mode of the floating-point unit.  This
18070           determines the floating-point mode that is provided and expected at
18071           function call and return time.  Making this mode match the mode you
18072           predominantly need at function start can make your programs smaller
18073           and faster by avoiding unnecessary mode switches.
18074
18075           mode can be set to one the following values:
18076
18077           caller
18078               Any mode at function entry is valid, and retained or restored
18079               when the function returns, and when it calls other functions.
18080               This mode is useful for compiling libraries or other
18081               compilation units you might want to incorporate into different
18082               programs with different prevailing FPU modes, and the
18083               convenience of being able to use a single object file outweighs
18084               the size and speed overhead for any extra mode switching that
18085               might be needed, compared with what would be needed with a more
18086               specific choice of prevailing FPU mode.
18087
18088           truncate
18089               This is the mode used for floating-point calculations with
18090               truncating (i.e. round towards zero) rounding mode.  That
18091               includes conversion from floating point to integer.
18092
18093           round-nearest
18094               This is the mode used for floating-point calculations with
18095               round-to-nearest-or-even rounding mode.
18096
18097           int This is the mode used to perform integer calculations in the
18098               FPU, e.g.  integer multiply, or integer multiply-and-
18099               accumulate.
18100
18101           The default is -mfp-mode=caller
18102
18103       -mno-split-lohi
18104       -mno-postinc
18105       -mno-postmodify
18106           Code generation tweaks that disable, respectively, splitting of
18107           32-bit loads, generation of post-increment addresses, and
18108           generation of post-modify addresses.  The defaults are msplit-lohi,
18109           -mpost-inc, and -mpost-modify.
18110
18111       -mnovect-double
18112           Change the preferred SIMD mode to SImode.  The default is
18113           -mvect-double, which uses DImode as preferred SIMD mode.
18114
18115       -max-vect-align=num
18116           The maximum alignment for SIMD vector mode types.  num may be 4 or
18117           8.  The default is 8.  Note that this is an ABI change, even though
18118           many library function interfaces are unaffected if they don't use
18119           SIMD vector modes in places that affect size and/or alignment of
18120           relevant types.
18121
18122       -msplit-vecmove-early
18123           Split vector moves into single word moves before reload.  In theory
18124           this can give better register allocation, but so far the reverse
18125           seems to be generally the case.
18126
18127       -m1reg-reg
18128           Specify a register to hold the constant -1, which makes loading
18129           small negative constants and certain bitmasks faster.  Allowable
18130           values for reg are r43 and r63, which specify use of that register
18131           as a fixed register, and none, which means that no register is used
18132           for this purpose.  The default is -m1reg-none.
18133
18134       AMD GCN Options
18135
18136       These options are defined specifically for the AMD GCN port.
18137
18138       -march=gpu
18139       -mtune=gpu
18140           Set architecture type or tuning for gpu. Supported values for gpu
18141           are
18142
18143           fiji
18144               Compile for GCN3 Fiji devices (gfx803).
18145
18146           gfx900
18147               Compile for GCN5 Vega 10 devices (gfx900).
18148
18149           gfx906
18150               Compile for GCN5 Vega 20 devices (gfx906).
18151
18152           gfx908
18153               Compile for CDNA1 Instinct MI100 series devices (gfx908).
18154
18155           gfx90a
18156               Compile for CDNA2 Instinct MI200 series devices (gfx90a).
18157
18158       -msram-ecc=on
18159       -msram-ecc=off
18160       -msram-ecc=any
18161           Compile binaries suitable for devices with the SRAM-ECC feature
18162           enabled, disabled, or either mode.  This feature can be enabled
18163           per-process on some devices.  The compiled code must match the
18164           device mode. The default is any, for devices that support it.
18165
18166       -mstack-size=bytes
18167           Specify how many bytes of stack space will be requested for each
18168           GPU thread (wave-front).  Beware that there may be many threads and
18169           limited memory available.  The size of the stack allocation may
18170           also have an impact on run-time performance.  The default is 32KB
18171           when using OpenACC or OpenMP, and 1MB otherwise.
18172
18173       -mxnack
18174           Compile binaries suitable for devices with the XNACK feature
18175           enabled.  Some devices always require XNACK and some allow the user
18176           to configure XNACK.  The compiled code must match the device mode.
18177           The default is -mno-xnack.  At present this option is a placeholder
18178           for support that is not yet implemented.
18179
18180       ARC Options
18181
18182       The following options control the architecture variant for which code
18183       is being compiled:
18184
18185       -mbarrel-shifter
18186           Generate instructions supported by barrel shifter.  This is the
18187           default unless -mcpu=ARC601 or -mcpu=ARCEM is in effect.
18188
18189       -mjli-always
18190           Force to call a function using jli_s instruction.  This option is
18191           valid only for ARCv2 architecture.
18192
18193       -mcpu=cpu
18194           Set architecture type, register usage, and instruction scheduling
18195           parameters for cpu.  There are also shortcut alias options
18196           available for backward compatibility and convenience.  Supported
18197           values for cpu are
18198
18199           arc600
18200               Compile for ARC600.  Aliases: -mA6, -mARC600.
18201
18202           arc601
18203               Compile for ARC601.  Alias: -mARC601.
18204
18205           arc700
18206               Compile for ARC700.  Aliases: -mA7, -mARC700.  This is the
18207               default when configured with --with-cpu=arc700.
18208
18209           arcem
18210               Compile for ARC EM.
18211
18212           archs
18213               Compile for ARC HS.
18214
18215           em  Compile for ARC EM CPU with no hardware extensions.
18216
18217           em4 Compile for ARC EM4 CPU.
18218
18219           em4_dmips
18220               Compile for ARC EM4 DMIPS CPU.
18221
18222           em4_fpus
18223               Compile for ARC EM4 DMIPS CPU with the single-precision
18224               floating-point extension.
18225
18226           em4_fpuda
18227               Compile for ARC EM4 DMIPS CPU with single-precision floating-
18228               point and double assist instructions.
18229
18230           hs  Compile for ARC HS CPU with no hardware extensions except the
18231               atomic instructions.
18232
18233           hs34
18234               Compile for ARC HS34 CPU.
18235
18236           hs38
18237               Compile for ARC HS38 CPU.
18238
18239           hs38_linux
18240               Compile for ARC HS38 CPU with all hardware extensions on.
18241
18242           hs4x
18243               Compile for ARC HS4x CPU.
18244
18245           hs4xd
18246               Compile for ARC HS4xD CPU.
18247
18248           hs4x_rel31
18249               Compile for ARC HS4x CPU release 3.10a.
18250
18251           arc600_norm
18252               Compile for ARC 600 CPU with "norm" instructions enabled.
18253
18254           arc600_mul32x16
18255               Compile for ARC 600 CPU with "norm" and 32x16-bit multiply
18256               instructions enabled.
18257
18258           arc600_mul64
18259               Compile for ARC 600 CPU with "norm" and "mul64"-family
18260               instructions enabled.
18261
18262           arc601_norm
18263               Compile for ARC 601 CPU with "norm" instructions enabled.
18264
18265           arc601_mul32x16
18266               Compile for ARC 601 CPU with "norm" and 32x16-bit multiply
18267               instructions enabled.
18268
18269           arc601_mul64
18270               Compile for ARC 601 CPU with "norm" and "mul64"-family
18271               instructions enabled.
18272
18273           nps400
18274               Compile for ARC 700 on NPS400 chip.
18275
18276           em_mini
18277               Compile for ARC EM minimalist configuration featuring reduced
18278               register set.
18279
18280       -mdpfp
18281       -mdpfp-compact
18282           Generate double-precision FPX instructions, tuned for the compact
18283           implementation.
18284
18285       -mdpfp-fast
18286           Generate double-precision FPX instructions, tuned for the fast
18287           implementation.
18288
18289       -mno-dpfp-lrsr
18290           Disable "lr" and "sr" instructions from using FPX extension aux
18291           registers.
18292
18293       -mea
18294           Generate extended arithmetic instructions.  Currently only "divaw",
18295           "adds", "subs", and "sat16" are supported.  Only valid for
18296           -mcpu=ARC700.
18297
18298       -mno-mpy
18299           Do not generate "mpy"-family instructions for ARC700.  This option
18300           is deprecated.
18301
18302       -mmul32x16
18303           Generate 32x16-bit multiply and multiply-accumulate instructions.
18304
18305       -mmul64
18306           Generate "mul64" and "mulu64" instructions.  Only valid for
18307           -mcpu=ARC600.
18308
18309       -mnorm
18310           Generate "norm" instructions.  This is the default if -mcpu=ARC700
18311           is in effect.
18312
18313       -mspfp
18314       -mspfp-compact
18315           Generate single-precision FPX instructions, tuned for the compact
18316           implementation.
18317
18318       -mspfp-fast
18319           Generate single-precision FPX instructions, tuned for the fast
18320           implementation.
18321
18322       -msimd
18323           Enable generation of ARC SIMD instructions via target-specific
18324           builtins.  Only valid for -mcpu=ARC700.
18325
18326       -msoft-float
18327           This option ignored; it is provided for compatibility purposes
18328           only.  Software floating-point code is emitted by default, and this
18329           default can overridden by FPX options; -mspfp, -mspfp-compact, or
18330           -mspfp-fast for single precision, and -mdpfp, -mdpfp-compact, or
18331           -mdpfp-fast for double precision.
18332
18333       -mswap
18334           Generate "swap" instructions.
18335
18336       -matomic
18337           This enables use of the locked load/store conditional extension to
18338           implement atomic memory built-in functions.  Not available for ARC
18339           6xx or ARC EM cores.
18340
18341       -mdiv-rem
18342           Enable "div" and "rem" instructions for ARCv2 cores.
18343
18344       -mcode-density
18345           Enable code density instructions for ARC EM.  This option is on by
18346           default for ARC HS.
18347
18348       -mll64
18349           Enable double load/store operations for ARC HS cores.
18350
18351       -mtp-regno=regno
18352           Specify thread pointer register number.
18353
18354       -mmpy-option=multo
18355           Compile ARCv2 code with a multiplier design option.  You can
18356           specify the option using either a string or numeric value for
18357           multo.  wlh1 is the default value.  The recognized values are:
18358
18359           0
18360           none
18361               No multiplier available.
18362
18363           1
18364           w   16x16 multiplier, fully pipelined.  The following instructions
18365               are enabled: "mpyw" and "mpyuw".
18366
18367           2
18368           wlh1
18369               32x32 multiplier, fully pipelined (1 stage).  The following
18370               instructions are additionally enabled: "mpy", "mpyu", "mpym",
18371               "mpymu", and "mpy_s".
18372
18373           3
18374           wlh2
18375               32x32 multiplier, fully pipelined (2 stages).  The following
18376               instructions are additionally enabled: "mpy", "mpyu", "mpym",
18377               "mpymu", and "mpy_s".
18378
18379           4
18380           wlh3
18381               Two 16x16 multipliers, blocking, sequential.  The following
18382               instructions are additionally enabled: "mpy", "mpyu", "mpym",
18383               "mpymu", and "mpy_s".
18384
18385           5
18386           wlh4
18387               One 16x16 multiplier, blocking, sequential.  The following
18388               instructions are additionally enabled: "mpy", "mpyu", "mpym",
18389               "mpymu", and "mpy_s".
18390
18391           6
18392           wlh5
18393               One 32x4 multiplier, blocking, sequential.  The following
18394               instructions are additionally enabled: "mpy", "mpyu", "mpym",
18395               "mpymu", and "mpy_s".
18396
18397           7
18398           plus_dmpy
18399               ARC HS SIMD support.
18400
18401           8
18402           plus_macd
18403               ARC HS SIMD support.
18404
18405           9
18406           plus_qmacw
18407               ARC HS SIMD support.
18408
18409           This option is only available for ARCv2 cores.
18410
18411       -mfpu=fpu
18412           Enables support for specific floating-point hardware extensions for
18413           ARCv2 cores.  Supported values for fpu are:
18414
18415           fpus
18416               Enables support for single-precision floating-point hardware
18417               extensions.
18418
18419           fpud
18420               Enables support for double-precision floating-point hardware
18421               extensions.  The single-precision floating-point extension is
18422               also enabled.  Not available for ARC EM.
18423
18424           fpuda
18425               Enables support for double-precision floating-point hardware
18426               extensions using double-precision assist instructions.  The
18427               single-precision floating-point extension is also enabled.
18428               This option is only available for ARC EM.
18429
18430           fpuda_div
18431               Enables support for double-precision floating-point hardware
18432               extensions using double-precision assist instructions.  The
18433               single-precision floating-point, square-root, and divide
18434               extensions are also enabled.  This option is only available for
18435               ARC EM.
18436
18437           fpuda_fma
18438               Enables support for double-precision floating-point hardware
18439               extensions using double-precision assist instructions.  The
18440               single-precision floating-point and fused multiply and add
18441               hardware extensions are also enabled.  This option is only
18442               available for ARC EM.
18443
18444           fpuda_all
18445               Enables support for double-precision floating-point hardware
18446               extensions using double-precision assist instructions.  All
18447               single-precision floating-point hardware extensions are also
18448               enabled.  This option is only available for ARC EM.
18449
18450           fpus_div
18451               Enables support for single-precision floating-point, square-
18452               root and divide hardware extensions.
18453
18454           fpud_div
18455               Enables support for double-precision floating-point, square-
18456               root and divide hardware extensions.  This option includes
18457               option fpus_div. Not available for ARC EM.
18458
18459           fpus_fma
18460               Enables support for single-precision floating-point and fused
18461               multiply and add hardware extensions.
18462
18463           fpud_fma
18464               Enables support for double-precision floating-point and fused
18465               multiply and add hardware extensions.  This option includes
18466               option fpus_fma.  Not available for ARC EM.
18467
18468           fpus_all
18469               Enables support for all single-precision floating-point
18470               hardware extensions.
18471
18472           fpud_all
18473               Enables support for all single- and double-precision floating-
18474               point hardware extensions.  Not available for ARC EM.
18475
18476       -mirq-ctrl-saved=register-range, blink, lp_count
18477           Specifies general-purposes registers that the processor
18478           automatically saves/restores on interrupt entry and exit.
18479           register-range is specified as two registers separated by a dash.
18480           The register range always starts with "r0", the upper limit is "fp"
18481           register.  blink and lp_count are optional.  This option is only
18482           valid for ARC EM and ARC HS cores.
18483
18484       -mrgf-banked-regs=number
18485           Specifies the number of registers replicated in second register
18486           bank on entry to fast interrupt.  Fast interrupts are interrupts
18487           with the highest priority level P0.  These interrupts save only PC
18488           and STATUS32 registers to avoid memory transactions during
18489           interrupt entry and exit sequences.  Use this option when you are
18490           using fast interrupts in an ARC V2 family processor.  Permitted
18491           values are 4, 8, 16, and 32.
18492
18493       -mlpc-width=width
18494           Specify the width of the "lp_count" register.  Valid values for
18495           width are 8, 16, 20, 24, 28 and 32 bits.  The default width is
18496           fixed to 32 bits.  If the width is less than 32, the compiler does
18497           not attempt to transform loops in your program to use the zero-
18498           delay loop mechanism unless it is known that the "lp_count"
18499           register can hold the required loop-counter value.  Depending on
18500           the width specified, the compiler and run-time library might
18501           continue to use the loop mechanism for various needs.  This option
18502           defines macro "__ARC_LPC_WIDTH__" with the value of width.
18503
18504       -mrf16
18505           This option instructs the compiler to generate code for a 16-entry
18506           register file.  This option defines the "__ARC_RF16__" preprocessor
18507           macro.
18508
18509       -mbranch-index
18510           Enable use of "bi" or "bih" instructions to implement jump tables.
18511
18512       The following options are passed through to the assembler, and also
18513       define preprocessor macro symbols.
18514
18515       -mdsp-packa
18516           Passed down to the assembler to enable the DSP Pack A extensions.
18517           Also sets the preprocessor symbol "__Xdsp_packa".  This option is
18518           deprecated.
18519
18520       -mdvbf
18521           Passed down to the assembler to enable the dual Viterbi butterfly
18522           extension.  Also sets the preprocessor symbol "__Xdvbf".  This
18523           option is deprecated.
18524
18525       -mlock
18526           Passed down to the assembler to enable the locked load/store
18527           conditional extension.  Also sets the preprocessor symbol
18528           "__Xlock".
18529
18530       -mmac-d16
18531           Passed down to the assembler.  Also sets the preprocessor symbol
18532           "__Xxmac_d16".  This option is deprecated.
18533
18534       -mmac-24
18535           Passed down to the assembler.  Also sets the preprocessor symbol
18536           "__Xxmac_24".  This option is deprecated.
18537
18538       -mrtsc
18539           Passed down to the assembler to enable the 64-bit time-stamp
18540           counter extension instruction.  Also sets the preprocessor symbol
18541           "__Xrtsc".  This option is deprecated.
18542
18543       -mswape
18544           Passed down to the assembler to enable the swap byte ordering
18545           extension instruction.  Also sets the preprocessor symbol
18546           "__Xswape".
18547
18548       -mtelephony
18549           Passed down to the assembler to enable dual- and single-operand
18550           instructions for telephony.  Also sets the preprocessor symbol
18551           "__Xtelephony".  This option is deprecated.
18552
18553       -mxy
18554           Passed down to the assembler to enable the XY memory extension.
18555           Also sets the preprocessor symbol "__Xxy".
18556
18557       The following options control how the assembly code is annotated:
18558
18559       -misize
18560           Annotate assembler instructions with estimated addresses.
18561
18562       -mannotate-align
18563           Explain what alignment considerations lead to the decision to make
18564           an instruction short or long.
18565
18566       The following options are passed through to the linker:
18567
18568       -marclinux
18569           Passed through to the linker, to specify use of the "arclinux"
18570           emulation.  This option is enabled by default in tool chains built
18571           for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
18572           profiling is not requested.
18573
18574       -marclinux_prof
18575           Passed through to the linker, to specify use of the "arclinux_prof"
18576           emulation.  This option is enabled by default in tool chains built
18577           for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
18578           profiling is requested.
18579
18580       The following options control the semantics of generated code:
18581
18582       -mlong-calls
18583           Generate calls as register indirect calls, thus providing access to
18584           the full 32-bit address range.
18585
18586       -mmedium-calls
18587           Don't use less than 25-bit addressing range for calls, which is the
18588           offset available for an unconditional branch-and-link instruction.
18589           Conditional execution of function calls is suppressed, to allow use
18590           of the 25-bit range, rather than the 21-bit range with conditional
18591           branch-and-link.  This is the default for tool chains built for
18592           "arc-linux-uclibc" and "arceb-linux-uclibc" targets.
18593
18594       -G num
18595           Put definitions of externally-visible data in a small data section
18596           if that data is no bigger than num bytes.  The default value of num
18597           is 4 for any ARC configuration, or 8 when we have double load/store
18598           operations.
18599
18600       -mno-sdata
18601           Do not generate sdata references.  This is the default for tool
18602           chains built for "arc-linux-uclibc" and "arceb-linux-uclibc"
18603           targets.
18604
18605       -mvolatile-cache
18606           Use ordinarily cached memory accesses for volatile references.
18607           This is the default.
18608
18609       -mno-volatile-cache
18610           Enable cache bypass for volatile references.
18611
18612       The following options fine tune code generation:
18613
18614       -malign-call
18615           Does nothing.  Preserved for backward compatibility.
18616
18617       -mauto-modify-reg
18618           Enable the use of pre/post modify with register displacement.
18619
18620       -mbbit-peephole
18621           Enable bbit peephole2.
18622
18623       -mno-brcc
18624           This option disables a target-specific pass in arc_reorg to
18625           generate compare-and-branch ("brcc") instructions.  It has no
18626           effect on generation of these instructions driven by the combiner
18627           pass.
18628
18629       -mcase-vector-pcrel
18630           Use PC-relative switch case tables to enable case table shortening.
18631           This is the default for -Os.
18632
18633       -mcompact-casesi
18634           Enable compact "casesi" pattern.  This is the default for -Os, and
18635           only available for ARCv1 cores.  This option is deprecated.
18636
18637       -mno-cond-exec
18638           Disable the ARCompact-specific pass to generate conditional
18639           execution instructions.
18640
18641           Due to delay slot scheduling and interactions between operand
18642           numbers, literal sizes, instruction lengths, and the support for
18643           conditional execution, the target-independent pass to generate
18644           conditional execution is often lacking, so the ARC port has kept a
18645           special pass around that tries to find more conditional execution
18646           generation opportunities after register allocation, branch
18647           shortening, and delay slot scheduling have been done.  This pass
18648           generally, but not always, improves performance and code size, at
18649           the cost of extra compilation time, which is why there is an option
18650           to switch it off.  If you have a problem with call instructions
18651           exceeding their allowable offset range because they are
18652           conditionalized, you should consider using -mmedium-calls instead.
18653
18654       -mearly-cbranchsi
18655           Enable pre-reload use of the "cbranchsi" pattern.
18656
18657       -mexpand-adddi
18658           Expand "adddi3" and "subdi3" at RTL generation time into "add.f",
18659           "adc" etc.  This option is deprecated.
18660
18661       -mindexed-loads
18662           Enable the use of indexed loads.  This can be problematic because
18663           some optimizers then assume that indexed stores exist, which is not
18664           the case.
18665
18666       -mlra
18667           Enable Local Register Allocation.  This is still experimental for
18668           ARC, so by default the compiler uses standard reload (i.e.
18669           -mno-lra).
18670
18671       -mlra-priority-none
18672           Don't indicate any priority for target registers.
18673
18674       -mlra-priority-compact
18675           Indicate target register priority for r0..r3 / r12..r15.
18676
18677       -mlra-priority-noncompact
18678           Reduce target register priority for r0..r3 / r12..r15.
18679
18680       -mmillicode
18681           When optimizing for size (using -Os), prologues and epilogues that
18682           have to save or restore a large number of registers are often
18683           shortened by using call to a special function in libgcc; this is
18684           referred to as a millicode call.  As these calls can pose
18685           performance issues, and/or cause linking issues when linking in a
18686           nonstandard way, this option is provided to turn on or off
18687           millicode call generation.
18688
18689       -mcode-density-frame
18690           This option enable the compiler to emit "enter" and "leave"
18691           instructions.  These instructions are only valid for CPUs with
18692           code-density feature.
18693
18694       -mmixed-code
18695           Does nothing.  Preserved for backward compatibility.
18696
18697       -mq-class
18698           Ths option is deprecated.  Enable q instruction alternatives.  This
18699           is the default for -Os.
18700
18701       -mRcq
18702           Does nothing.  Preserved for backward compatibility.
18703
18704       -mRcw
18705           Does nothing.  Preserved for backward compatibility.
18706
18707       -msize-level=level
18708           Fine-tune size optimization with regards to instruction lengths and
18709           alignment.  The recognized values for level are:
18710
18711           0   No size optimization.  This level is deprecated and treated
18712               like 1.
18713
18714           1   Short instructions are used opportunistically.
18715
18716           2   In addition, alignment of loops and of code after barriers are
18717               dropped.
18718
18719           3   In addition, optional data alignment is dropped, and the option
18720               Os is enabled.
18721
18722           This defaults to 3 when -Os is in effect.  Otherwise, the behavior
18723           when this is not set is equivalent to level 1.
18724
18725       -mtune=cpu
18726           Set instruction scheduling parameters for cpu, overriding any
18727           implied by -mcpu=.
18728
18729           Supported values for cpu are
18730
18731           ARC600
18732               Tune for ARC600 CPU.
18733
18734           ARC601
18735               Tune for ARC601 CPU.
18736
18737           ARC700
18738               Tune for ARC700 CPU with standard multiplier block.
18739
18740           ARC700-xmac
18741               Tune for ARC700 CPU with XMAC block.
18742
18743           ARC725D
18744               Tune for ARC725D CPU.
18745
18746           ARC750D
18747               Tune for ARC750D CPU.
18748
18749           core3
18750               Tune for ARCv2 core3 type CPU.  This option enable usage of
18751               "dbnz" instruction.
18752
18753           release31a
18754               Tune for ARC4x release 3.10a.
18755
18756       -mmultcost=num
18757           Cost to assume for a multiply instruction, with 4 being equal to a
18758           normal instruction.
18759
18760       -munalign-prob-threshold=probability
18761           Does nothing.  Preserved for backward compatibility.
18762
18763       The following options are maintained for backward compatibility, but
18764       are now deprecated and will be removed in a future release:
18765
18766       -margonaut
18767           Obsolete FPX.
18768
18769       -mbig-endian
18770       -EB Compile code for big-endian targets.  Use of these options is now
18771           deprecated.  Big-endian code is supported by configuring GCC to
18772           build "arceb-elf32" and "arceb-linux-uclibc" targets, for which big
18773           endian is the default.
18774
18775       -mlittle-endian
18776       -EL Compile code for little-endian targets.  Use of these options is
18777           now deprecated.  Little-endian code is supported by configuring GCC
18778           to build "arc-elf32" and "arc-linux-uclibc" targets, for which
18779           little endian is the default.
18780
18781       -mbarrel_shifter
18782           Replaced by -mbarrel-shifter.
18783
18784       -mdpfp_compact
18785           Replaced by -mdpfp-compact.
18786
18787       -mdpfp_fast
18788           Replaced by -mdpfp-fast.
18789
18790       -mdsp_packa
18791           Replaced by -mdsp-packa.
18792
18793       -mEA
18794           Replaced by -mea.
18795
18796       -mmac_24
18797           Replaced by -mmac-24.
18798
18799       -mmac_d16
18800           Replaced by -mmac-d16.
18801
18802       -mspfp_compact
18803           Replaced by -mspfp-compact.
18804
18805       -mspfp_fast
18806           Replaced by -mspfp-fast.
18807
18808       -mtune=cpu
18809           Values arc600, arc601, arc700 and arc700-xmac for cpu are replaced
18810           by ARC600, ARC601, ARC700 and ARC700-xmac respectively.
18811
18812       -multcost=num
18813           Replaced by -mmultcost.
18814
18815       ARM Options
18816
18817       These -m options are defined for the ARM port:
18818
18819       -mabi=name
18820           Generate code for the specified ABI.  Permissible values are: apcs-
18821           gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
18822
18823       -mapcs-frame
18824           Generate a stack frame that is compliant with the ARM Procedure
18825           Call Standard for all functions, even if this is not strictly
18826           necessary for correct execution of the code.  Specifying
18827           -fomit-frame-pointer with this option causes the stack frames not
18828           to be generated for leaf functions.  The default is
18829           -mno-apcs-frame.  This option is deprecated.
18830
18831       -mapcs
18832           This is a synonym for -mapcs-frame and is deprecated.
18833
18834       -mthumb-interwork
18835           Generate code that supports calling between the ARM and Thumb
18836           instruction sets.  Without this option, on pre-v5 architectures,
18837           the two instruction sets cannot be reliably used inside one
18838           program.  The default is -mno-thumb-interwork, since slightly
18839           larger code is generated when -mthumb-interwork is specified.  In
18840           AAPCS configurations this option is meaningless.
18841
18842       -mno-sched-prolog
18843           Prevent the reordering of instructions in the function prologue, or
18844           the merging of those instruction with the instructions in the
18845           function's body.  This means that all functions start with a
18846           recognizable set of instructions (or in fact one of a choice from a
18847           small set of different function prologues), and this information
18848           can be used to locate the start of functions inside an executable
18849           piece of code.  The default is -msched-prolog.
18850
18851       -mfloat-abi=name
18852           Specifies which floating-point ABI to use.  Permissible values are:
18853           soft, softfp and hard.
18854
18855           Specifying soft causes GCC to generate output containing library
18856           calls for floating-point operations.  softfp allows the generation
18857           of code using hardware floating-point instructions, but still uses
18858           the soft-float calling conventions.  hard allows generation of
18859           floating-point instructions and uses FPU-specific calling
18860           conventions.
18861
18862           The default depends on the specific target configuration.  Note
18863           that the hard-float and soft-float ABIs are not link-compatible;
18864           you must compile your entire program with the same ABI, and link
18865           with a compatible set of libraries.
18866
18867       -mgeneral-regs-only
18868           Generate code which uses only the general-purpose registers.  This
18869           will prevent the compiler from using floating-point and Advanced
18870           SIMD registers but will not impose any restrictions on the
18871           assembler.
18872
18873       -mlittle-endian
18874           Generate code for a processor running in little-endian mode.  This
18875           is the default for all standard configurations.
18876
18877       -mbig-endian
18878           Generate code for a processor running in big-endian mode; the
18879           default is to compile code for a little-endian processor.
18880
18881       -mbe8
18882       -mbe32
18883           When linking a big-endian image select between BE8 and BE32
18884           formats.  The option has no effect for little-endian images and is
18885           ignored.  The default is dependent on the selected target
18886           architecture.  For ARMv6 and later architectures the default is
18887           BE8, for older architectures the default is BE32.  BE32 format has
18888           been deprecated by ARM.
18889
18890       -march=name[+extension...]
18891           This specifies the name of the target ARM architecture.  GCC uses
18892           this name to determine what kind of instructions it can emit when
18893           generating assembly code.  This option can be used in conjunction
18894           with or instead of the -mcpu= option.
18895
18896           Permissible names are: armv4t, armv5t, armv5te, armv6, armv6j,
18897           armv6k, armv6kz, armv6t2, armv6z, armv6zk, armv7, armv7-a, armv7ve,
18898           armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a, armv8.5-a,
18899           armv8.6-a, armv9-a, armv7-r, armv8-r, armv6-m, armv6s-m, armv7-m,
18900           armv7e-m, armv8-m.base, armv8-m.main, armv8.1-m.main, armv9-a,
18901           iwmmxt and iwmmxt2.
18902
18903           Additionally, the following architectures, which lack support for
18904           the Thumb execution state, are recognized but support is
18905           deprecated: armv4.
18906
18907           Many of the architectures support extensions.  These can be added
18908           by appending +extension to the architecture name.  Extension
18909           options are processed in order and capabilities accumulate.  An
18910           extension will also enable any necessary base extensions upon which
18911           it depends.  For example, the +crypto extension will always enable
18912           the +simd extension.  The exception to the additive construction is
18913           for extensions that are prefixed with +no...: these extensions
18914           disable the specified option and any other extensions that may
18915           depend on the presence of that extension.
18916
18917           For example, -march=armv7-a+simd+nofp+vfpv4 is equivalent to
18918           writing -march=armv7-a+vfpv4 since the +simd option is entirely
18919           disabled by the +nofp option that follows it.
18920
18921           Most extension names are generically named, but have an effect that
18922           is dependent upon the architecture to which it is applied.  For
18923           example, the +simd option can be applied to both armv7-a and
18924           armv8-a architectures, but will enable the original ARMv7-A
18925           Advanced SIMD (Neon) extensions for armv7-a and the ARMv8-A variant
18926           for armv8-a.
18927
18928           The table below lists the supported extensions for each
18929           architecture.  Architectures not mentioned do not support any
18930           extensions.
18931
18932           armv5te
18933           armv6
18934           armv6j
18935           armv6k
18936           armv6kz
18937           armv6t2
18938           armv6z
18939           armv6zk
18940               +fp The VFPv2 floating-point instructions.  The extension
18941                   +vfpv2 can be used as an alias for this extension.
18942
18943               +nofp
18944                   Disable the floating-point instructions.
18945
18946           armv7
18947               The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
18948               architectures.
18949
18950               +fp The VFPv3 floating-point instructions, with 16 double-
18951                   precision registers.  The extension +vfpv3-d16 can be used
18952                   as an alias for this extension.  Note that floating-point
18953                   is not supported by the base ARMv7-M architecture, but is
18954                   compatible with both the ARMv7-A and ARMv7-R architectures.
18955
18956               +nofp
18957                   Disable the floating-point instructions.
18958
18959           armv7-a
18960               +mp The multiprocessing extension.
18961
18962               +sec
18963                   The security extension.
18964
18965               +fp The VFPv3 floating-point instructions, with 16 double-
18966                   precision registers.  The extension +vfpv3-d16 can be used
18967                   as an alias for this extension.
18968
18969               +simd
18970                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
18971                   instructions.  The extensions +neon and +neon-vfpv3 can be
18972                   used as aliases for this extension.
18973
18974               +vfpv3
18975                   The VFPv3 floating-point instructions, with 32 double-
18976                   precision registers.
18977
18978               +vfpv3-d16-fp16
18979                   The VFPv3 floating-point instructions, with 16 double-
18980                   precision registers and the half-precision floating-point
18981                   conversion operations.
18982
18983               +vfpv3-fp16
18984                   The VFPv3 floating-point instructions, with 32 double-
18985                   precision registers and the half-precision floating-point
18986                   conversion operations.
18987
18988               +vfpv4-d16
18989                   The VFPv4 floating-point instructions, with 16 double-
18990                   precision registers.
18991
18992               +vfpv4
18993                   The VFPv4 floating-point instructions, with 32 double-
18994                   precision registers.
18995
18996               +neon-fp16
18997                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
18998                   instructions, with the half-precision floating-point
18999                   conversion operations.
19000
19001               +neon-vfpv4
19002                   The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
19003                   instructions.
19004
19005               +nosimd
19006                   Disable the Advanced SIMD instructions (does not disable
19007                   floating point).
19008
19009               +nofp
19010                   Disable the floating-point and Advanced SIMD instructions.
19011
19012           armv7ve
19013               The extended version of the ARMv7-A architecture with support
19014               for virtualization.
19015
19016               +fp The VFPv4 floating-point instructions, with 16 double-
19017                   precision registers.  The extension +vfpv4-d16 can be used
19018                   as an alias for this extension.
19019
19020               +simd
19021                   The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
19022                   instructions.  The extension +neon-vfpv4 can be used as an
19023                   alias for this extension.
19024
19025               +vfpv3-d16
19026                   The VFPv3 floating-point instructions, with 16 double-
19027                   precision registers.
19028
19029               +vfpv3
19030                   The VFPv3 floating-point instructions, with 32 double-
19031                   precision registers.
19032
19033               +vfpv3-d16-fp16
19034                   The VFPv3 floating-point instructions, with 16 double-
19035                   precision registers and the half-precision floating-point
19036                   conversion operations.
19037
19038               +vfpv3-fp16
19039                   The VFPv3 floating-point instructions, with 32 double-
19040                   precision registers and the half-precision floating-point
19041                   conversion operations.
19042
19043               +vfpv4-d16
19044                   The VFPv4 floating-point instructions, with 16 double-
19045                   precision registers.
19046
19047               +vfpv4
19048                   The VFPv4 floating-point instructions, with 32 double-
19049                   precision registers.
19050
19051               +neon
19052                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
19053                   instructions.  The extension +neon-vfpv3 can be used as an
19054                   alias for this extension.
19055
19056               +neon-fp16
19057                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
19058                   instructions, with the half-precision floating-point
19059                   conversion operations.
19060
19061               +nosimd
19062                   Disable the Advanced SIMD instructions (does not disable
19063                   floating point).
19064
19065               +nofp
19066                   Disable the floating-point and Advanced SIMD instructions.
19067
19068           armv8-a
19069               +crc
19070                   The Cyclic Redundancy Check (CRC) instructions.
19071
19072               +simd
19073                   The ARMv8-A Advanced SIMD and floating-point instructions.
19074
19075               +crypto
19076                   The cryptographic instructions.
19077
19078               +nocrypto
19079                   Disable the cryptographic instructions.
19080
19081               +nofp
19082                   Disable the floating-point, Advanced SIMD and cryptographic
19083                   instructions.
19084
19085               +sb Speculation Barrier Instruction.
19086
19087               +predres
19088                   Execution and Data Prediction Restriction Instructions.
19089
19090           armv8.1-a
19091               +simd
19092                   The ARMv8.1-A Advanced SIMD and floating-point
19093                   instructions.
19094
19095               +crypto
19096                   The cryptographic instructions.  This also enables the
19097                   Advanced SIMD and floating-point instructions.
19098
19099               +nocrypto
19100                   Disable the cryptographic instructions.
19101
19102               +nofp
19103                   Disable the floating-point, Advanced SIMD and cryptographic
19104                   instructions.
19105
19106               +sb Speculation Barrier Instruction.
19107
19108               +predres
19109                   Execution and Data Prediction Restriction Instructions.
19110
19111           armv8.2-a
19112           armv8.3-a
19113               +fp16
19114                   The half-precision floating-point data processing
19115                   instructions.  This also enables the Advanced SIMD and
19116                   floating-point instructions.
19117
19118               +fp16fml
19119                   The half-precision floating-point fmla extension.  This
19120                   also enables the half-precision floating-point extension
19121                   and Advanced SIMD and floating-point instructions.
19122
19123               +simd
19124                   The ARMv8.1-A Advanced SIMD and floating-point
19125                   instructions.
19126
19127               +crypto
19128                   The cryptographic instructions.  This also enables the
19129                   Advanced SIMD and floating-point instructions.
19130
19131               +dotprod
19132                   Enable the Dot Product extension.  This also enables
19133                   Advanced SIMD instructions.
19134
19135               +nocrypto
19136                   Disable the cryptographic extension.
19137
19138               +nofp
19139                   Disable the floating-point, Advanced SIMD and cryptographic
19140                   instructions.
19141
19142               +sb Speculation Barrier Instruction.
19143
19144               +predres
19145                   Execution and Data Prediction Restriction Instructions.
19146
19147               +i8mm
19148                   8-bit Integer Matrix Multiply instructions.  This also
19149                   enables Advanced SIMD and floating-point instructions.
19150
19151               +bf16
19152                   Brain half-precision floating-point instructions.  This
19153                   also enables Advanced SIMD and floating-point instructions.
19154
19155           armv8.4-a
19156               +fp16
19157                   The half-precision floating-point data processing
19158                   instructions.  This also enables the Advanced SIMD and
19159                   floating-point instructions as well as the Dot Product
19160                   extension and the half-precision floating-point fmla
19161                   extension.
19162
19163               +simd
19164                   The ARMv8.3-A Advanced SIMD and floating-point instructions
19165                   as well as the Dot Product extension.
19166
19167               +crypto
19168                   The cryptographic instructions.  This also enables the
19169                   Advanced SIMD and floating-point instructions as well as
19170                   the Dot Product extension.
19171
19172               +nocrypto
19173                   Disable the cryptographic extension.
19174
19175               +nofp
19176                   Disable the floating-point, Advanced SIMD and cryptographic
19177                   instructions.
19178
19179               +sb Speculation Barrier Instruction.
19180
19181               +predres
19182                   Execution and Data Prediction Restriction Instructions.
19183
19184               +i8mm
19185                   8-bit Integer Matrix Multiply instructions.  This also
19186                   enables Advanced SIMD and floating-point instructions.
19187
19188               +bf16
19189                   Brain half-precision floating-point instructions.  This
19190                   also enables Advanced SIMD and floating-point instructions.
19191
19192           armv8.5-a
19193               +fp16
19194                   The half-precision floating-point data processing
19195                   instructions.  This also enables the Advanced SIMD and
19196                   floating-point instructions as well as the Dot Product
19197                   extension and the half-precision floating-point fmla
19198                   extension.
19199
19200               +simd
19201                   The ARMv8.3-A Advanced SIMD and floating-point instructions
19202                   as well as the Dot Product extension.
19203
19204               +crypto
19205                   The cryptographic instructions.  This also enables the
19206                   Advanced SIMD and floating-point instructions as well as
19207                   the Dot Product extension.
19208
19209               +nocrypto
19210                   Disable the cryptographic extension.
19211
19212               +nofp
19213                   Disable the floating-point, Advanced SIMD and cryptographic
19214                   instructions.
19215
19216               +i8mm
19217                   8-bit Integer Matrix Multiply instructions.  This also
19218                   enables Advanced SIMD and floating-point instructions.
19219
19220               +bf16
19221                   Brain half-precision floating-point instructions.  This
19222                   also enables Advanced SIMD and floating-point instructions.
19223
19224           armv8.6-a
19225               +fp16
19226                   The half-precision floating-point data processing
19227                   instructions.  This also enables the Advanced SIMD and
19228                   floating-point instructions as well as the Dot Product
19229                   extension and the half-precision floating-point fmla
19230                   extension.
19231
19232               +simd
19233                   The ARMv8.3-A Advanced SIMD and floating-point instructions
19234                   as well as the Dot Product extension.
19235
19236               +crypto
19237                   The cryptographic instructions.  This also enables the
19238                   Advanced SIMD and floating-point instructions as well as
19239                   the Dot Product extension.
19240
19241               +nocrypto
19242                   Disable the cryptographic extension.
19243
19244               +nofp
19245                   Disable the floating-point, Advanced SIMD and cryptographic
19246                   instructions.
19247
19248               +i8mm
19249                   8-bit Integer Matrix Multiply instructions.  This also
19250                   enables Advanced SIMD and floating-point instructions.
19251
19252               +bf16
19253                   Brain half-precision floating-point instructions.  This
19254                   also enables Advanced SIMD and floating-point instructions.
19255
19256           armv7-r
19257               +fp.sp
19258                   The single-precision VFPv3 floating-point instructions.
19259                   The extension +vfpv3xd can be used as an alias for this
19260                   extension.
19261
19262               +fp The VFPv3 floating-point instructions with 16 double-
19263                   precision registers.  The extension +vfpv3-d16 can be used
19264                   as an alias for this extension.
19265
19266               +vfpv3xd-d16-fp16
19267                   The single-precision VFPv3 floating-point instructions with
19268                   16 double-precision registers and the half-precision
19269                   floating-point conversion operations.
19270
19271               +vfpv3-d16-fp16
19272                   The VFPv3 floating-point instructions with 16 double-
19273                   precision registers and the half-precision floating-point
19274                   conversion operations.
19275
19276               +nofp
19277                   Disable the floating-point extension.
19278
19279               +idiv
19280                   The ARM-state integer division instructions.
19281
19282               +noidiv
19283                   Disable the ARM-state integer division extension.
19284
19285           armv7e-m
19286               +fp The single-precision VFPv4 floating-point instructions.
19287
19288               +fpv5
19289                   The single-precision FPv5 floating-point instructions.
19290
19291               +fp.dp
19292                   The single- and double-precision FPv5 floating-point
19293                   instructions.
19294
19295               +nofp
19296                   Disable the floating-point extensions.
19297
19298           armv8.1-m.main
19299               +dsp
19300                   The DSP instructions.
19301
19302               +mve
19303                   The M-Profile Vector Extension (MVE) integer instructions.
19304
19305               +mve.fp
19306                   The M-Profile Vector Extension (MVE) integer and single
19307                   precision floating-point instructions.
19308
19309               +fp The single-precision floating-point instructions.
19310
19311               +fp.dp
19312                   The single- and double-precision floating-point
19313                   instructions.
19314
19315               +nofp
19316                   Disable the floating-point extension.
19317
19318               +cdecp0, +cdecp1, ... , +cdecp7
19319                   Enable the Custom Datapath Extension (CDE) on selected
19320                   coprocessors according to the numbers given in the options
19321                   in the range 0 to 7.
19322
19323               +pacbti
19324                   Enable the Pointer Authentication and Branch Target
19325                   Identification Extension.
19326
19327           armv8-m.main
19328               +dsp
19329                   The DSP instructions.
19330
19331               +nodsp
19332                   Disable the DSP extension.
19333
19334               +fp The single-precision floating-point instructions.
19335
19336               +fp.dp
19337                   The single- and double-precision floating-point
19338                   instructions.
19339
19340               +nofp
19341                   Disable the floating-point extension.
19342
19343               +cdecp0, +cdecp1, ... , +cdecp7
19344                   Enable the Custom Datapath Extension (CDE) on selected
19345                   coprocessors according to the numbers given in the options
19346                   in the range 0 to 7.
19347
19348           armv8-r
19349               +crc
19350                   The Cyclic Redundancy Check (CRC) instructions.
19351
19352               +fp.sp
19353                   The single-precision FPv5 floating-point instructions.
19354
19355               +simd
19356                   The ARMv8-A Advanced SIMD and floating-point instructions.
19357
19358               +crypto
19359                   The cryptographic instructions.
19360
19361               +nocrypto
19362                   Disable the cryptographic instructions.
19363
19364               +nofp
19365                   Disable the floating-point, Advanced SIMD and cryptographic
19366                   instructions.
19367
19368           -march=native causes the compiler to auto-detect the architecture
19369           of the build computer.  At present, this feature is only supported
19370           on GNU/Linux, and not all architectures are recognized.  If the
19371           auto-detect is unsuccessful the option has no effect.
19372
19373       -mtune=name
19374           This option specifies the name of the target ARM processor for
19375           which GCC should tune the performance of the code.  For some ARM
19376           implementations better performance can be obtained by using this
19377           option.  Permissible names are: arm7tdmi, arm7tdmi-s, arm710t,
19378           arm720t, arm740t, strongarm, strongarm110, strongarm1100,
19379           strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t,
19380           arm946e-s, arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi,
19381           arm10tdmi, arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e,
19382           arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
19383           arm1156t2f-s, arm1176jz-s, arm1176jzf-s, generic-armv7-a,
19384           cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a12, cortex-a15,
19385           cortex-a17, cortex-a32, cortex-a35, cortex-a53, cortex-a55,
19386           cortex-a57, cortex-a72, cortex-a73, cortex-a75, cortex-a76,
19387           cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c,
19388           cortex-a710, ares, cortex-r4, cortex-r4f, cortex-r5, cortex-r7,
19389           cortex-r8, cortex-r52, cortex-r52plus, cortex-m0, cortex-m0plus,
19390           cortex-m1, cortex-m3, cortex-m4, cortex-m7, cortex-m23, cortex-m33,
19391           cortex-m35p, cortex-m55, cortex-m85, cortex-x1, cortex-x1c,
19392           cortex-m1.small-multiply, cortex-m0.small-multiply,
19393           cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, neoverse-n1,
19394           neoverse-n2, neoverse-v1, xscale, iwmmxt, iwmmxt2, ep9312, fa526,
19395           fa626, fa606te, fa626te, fmp626, fa726te, star-mc1, xgene1.
19396
19397           Additionally, this option can specify that GCC should tune the
19398           performance of the code for a big.LITTLE system.  Permissible names
19399           are: cortex-a15.cortex-a7, cortex-a17.cortex-a7,
19400           cortex-a57.cortex-a53, cortex-a72.cortex-a53,
19401           cortex-a72.cortex-a35, cortex-a73.cortex-a53,
19402           cortex-a75.cortex-a55, cortex-a76.cortex-a55.
19403
19404           -mtune=generic-arch specifies that GCC should tune the performance
19405           for a blend of processors within architecture arch.  The aim is to
19406           generate code that run well on the current most popular processors,
19407           balancing between optimizations that benefit some CPUs in the
19408           range, and avoiding performance pitfalls of other CPUs.  The
19409           effects of this option may change in future GCC versions as CPU
19410           models come and go.
19411
19412           -mtune permits the same extension options as -mcpu, but the
19413           extension options do not affect the tuning of the generated code.
19414
19415           -mtune=native causes the compiler to auto-detect the CPU of the
19416           build computer.  At present, this feature is only supported on
19417           GNU/Linux, and not all architectures are recognized.  If the auto-
19418           detect is unsuccessful the option has no effect.
19419
19420       -mcpu=name[+extension...]
19421           This specifies the name of the target ARM processor.  GCC uses this
19422           name to derive the name of the target ARM architecture (as if
19423           specified by -march) and the ARM processor type for which to tune
19424           for performance (as if specified by -mtune).  Where this option is
19425           used in conjunction with -march or -mtune, those options take
19426           precedence over the appropriate part of this option.
19427
19428           Many of the supported CPUs implement optional architectural
19429           extensions.  Where this is so the architectural extensions are
19430           normally enabled by default.  If implementations that lack the
19431           extension exist, then the extension syntax can be used to disable
19432           those extensions that have been omitted.  For floating-point and
19433           Advanced SIMD (Neon) instructions, the settings of the options
19434           -mfloat-abi and -mfpu must also be considered: floating-point and
19435           Advanced SIMD instructions will only be used if -mfloat-abi is not
19436           set to soft; and any setting of -mfpu other than auto will override
19437           the available floating-point and SIMD extension instructions.
19438
19439           For example, cortex-a9 can be found in three major configurations:
19440           integer only, with just a floating-point unit or with floating-
19441           point and Advanced SIMD.  The default is to enable all the
19442           instructions, but the extensions +nosimd and +nofp can be used to
19443           disable just the SIMD or both the SIMD and floating-point
19444           instructions respectively.
19445
19446           Permissible names for this option are the same as those for -mtune.
19447
19448           The following extension options are common to the listed CPUs:
19449
19450           +nodsp
19451               Disable the DSP instructions on cortex-m33, cortex-m35p,
19452               cortex-m55 and cortex-m85. Also disable the M-Profile Vector
19453               Extension (MVE) integer and single precision floating-point
19454               instructions on cortex-m55 and cortex-m85.
19455
19456           +nopacbti
19457               Disable the Pointer Authentication and Branch Target
19458               Identification Extension on cortex-m85.
19459
19460           +nomve
19461               Disable the M-Profile Vector Extension (MVE) integer and single
19462               precision floating-point instructions on cortex-m55 and
19463               cortex-m85.
19464
19465           +nomve.fp
19466               Disable the M-Profile Vector Extension (MVE) single precision
19467               floating-point instructions on cortex-m55 and cortex-m85.
19468
19469           +cdecp0, +cdecp1, ... , +cdecp7
19470               Enable the Custom Datapath Extension (CDE) on selected
19471               coprocessors according to the numbers given in the options in
19472               the range 0 to 7 on cortex-m55.
19473
19474           +nofp
19475               Disables the floating-point instructions on arm9e, arm946e-s,
19476               arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s,
19477               arm1026ej-s, cortex-r5, cortex-r7, cortex-r8, cortex-m4,
19478               cortex-m7, cortex-m33, cortex-m35p cortex-m4, cortex-m7,
19479               cortex-m33, cortex-m35p, cortex-m55 and cortex-m85.  Disables
19480               the floating-point and SIMD instructions on generic-armv7-a,
19481               cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a12,
19482               cortex-a15, cortex-a17, cortex-a15.cortex-a7,
19483               cortex-a17.cortex-a7, cortex-a32, cortex-a35, cortex-a53 and
19484               cortex-a55.
19485
19486           +nofp.dp
19487               Disables the double-precision component of the floating-point
19488               instructions on cortex-r5, cortex-r7, cortex-r8, cortex-r52,
19489               cortex-r52plus and cortex-m7.
19490
19491           +nosimd
19492               Disables the SIMD (but not floating-point) instructions on
19493               generic-armv7-a, cortex-a5, cortex-a7 and cortex-a9.
19494
19495           +crypto
19496               Enables the cryptographic instructions on cortex-a32,
19497               cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72,
19498               cortex-a73, cortex-a75, exynos-m1, xgene1,
19499               cortex-a57.cortex-a53, cortex-a72.cortex-a53,
19500               cortex-a73.cortex-a35, cortex-a73.cortex-a53 and
19501               cortex-a75.cortex-a55.
19502
19503           Additionally the generic-armv7-a pseudo target defaults to VFPv3
19504           with 16 double-precision registers.  It supports the following
19505           extension options: mp, sec, vfpv3-d16, vfpv3, vfpv3-d16-fp16,
19506           vfpv3-fp16, vfpv4-d16, vfpv4, neon, neon-vfpv3, neon-fp16,
19507           neon-vfpv4.  The meanings are the same as for the extensions to
19508           -march=armv7-a.
19509
19510           -mcpu=generic-arch is also permissible, and is equivalent to
19511           -march=arch -mtune=generic-arch.  See -mtune for more information.
19512
19513           -mcpu=native causes the compiler to auto-detect the CPU of the
19514           build computer.  At present, this feature is only supported on
19515           GNU/Linux, and not all architectures are recognized.  If the auto-
19516           detect is unsuccessful the option has no effect.
19517
19518       -mfpu=name
19519           This specifies what floating-point hardware (or hardware emulation)
19520           is available on the target.  Permissible names are: auto, vfpv2,
19521           vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd,
19522           vfpv3xd-fp16, neon-vfpv3, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16,
19523           neon-vfpv4, fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 and
19524           crypto-neon-fp-armv8.  Note that neon is an alias for neon-vfpv3
19525           and vfp is an alias for vfpv2.
19526
19527           The setting auto is the default and is special.  It causes the
19528           compiler to select the floating-point and Advanced SIMD
19529           instructions based on the settings of -mcpu and -march.
19530
19531           If the selected floating-point hardware includes the NEON extension
19532           (e.g. -mfpu=neon), note that floating-point operations are not
19533           generated by GCC's auto-vectorization pass unless
19534           -funsafe-math-optimizations is also specified.  This is because
19535           NEON hardware does not fully implement the IEEE 754 standard for
19536           floating-point arithmetic (in particular denormal values are
19537           treated as zero), so the use of NEON instructions may lead to a
19538           loss of precision.
19539
19540           You can also set the fpu name at function level by using the
19541           target("fpu=") function attributes or pragmas.
19542
19543       -mfp16-format=name
19544           Specify the format of the "__fp16" half-precision floating-point
19545           type.  Permissible names are none, ieee, and alternative; the
19546           default is none, in which case the "__fp16" type is not defined.
19547
19548       -mstructure-size-boundary=n
19549           The sizes of all structures and unions are rounded up to a multiple
19550           of the number of bits set by this option.  Permissible values are
19551           8, 32 and 64.  The default value varies for different toolchains.
19552           For the COFF targeted toolchain the default value is 8.  A value of
19553           64 is only allowed if the underlying ABI supports it.
19554
19555           Specifying a larger number can produce faster, more efficient code,
19556           but can also increase the size of the program.  Different values
19557           are potentially incompatible.  Code compiled with one value cannot
19558           necessarily expect to work with code or libraries compiled with
19559           another value, if they exchange information using structures or
19560           unions.
19561
19562           This option is deprecated.
19563
19564       -mabort-on-noreturn
19565           Generate a call to the function "abort" at the end of a "noreturn"
19566           function.  It is executed if the function tries to return.
19567
19568       -mlong-calls
19569       -mno-long-calls
19570           Tells the compiler to perform function calls by first loading the
19571           address of the function into a register and then performing a
19572           subroutine call on this register.  This switch is needed if the
19573           target function lies outside of the 64-megabyte addressing range of
19574           the offset-based version of subroutine call instruction.
19575
19576           Even if this switch is enabled, not all function calls are turned
19577           into long calls.  The heuristic is that static functions, functions
19578           that have the "short_call" attribute, functions that are inside the
19579           scope of a "#pragma no_long_calls" directive, and functions whose
19580           definitions have already been compiled within the current
19581           compilation unit are not turned into long calls.  The exceptions to
19582           this rule are that weak function definitions, functions with the
19583           "long_call" attribute or the "section" attribute, and functions
19584           that are within the scope of a "#pragma long_calls" directive are
19585           always turned into long calls.
19586
19587           This feature is not enabled by default.  Specifying -mno-long-calls
19588           restores the default behavior, as does placing the function calls
19589           within the scope of a "#pragma long_calls_off" directive.  Note
19590           these switches have no effect on how the compiler generates code to
19591           handle function calls via function pointers.
19592
19593       -msingle-pic-base
19594           Treat the register used for PIC addressing as read-only, rather
19595           than loading it in the prologue for each function.  The runtime
19596           system is responsible for initializing this register with an
19597           appropriate value before execution begins.
19598
19599       -mpic-register=reg
19600           Specify the register to be used for PIC addressing.  For standard
19601           PIC base case, the default is any suitable register determined by
19602           compiler.  For single PIC base case, the default is R9 if target is
19603           EABI based or stack-checking is enabled, otherwise the default is
19604           R10.
19605
19606       -mpic-data-is-text-relative
19607           Assume that the displacement between the text and data segments is
19608           fixed at static link time.  This permits using PC-relative
19609           addressing operations to access data known to be in the data
19610           segment.  For non-VxWorks RTP targets, this option is enabled by
19611           default.  When disabled on such targets, it will enable
19612           -msingle-pic-base by default.
19613
19614       -mpoke-function-name
19615           Write the name of each function into the text section, directly
19616           preceding the function prologue.  The generated code is similar to
19617           this:
19618
19619                        t0
19620                            .ascii "arm_poke_function_name", 0
19621                            .align
19622                        t1
19623                            .word 0xff000000 + (t1 - t0)
19624                        arm_poke_function_name
19625                            mov     ip, sp
19626                            stmfd   sp!, {fp, ip, lr, pc}
19627                            sub     fp, ip, #4
19628
19629           When performing a stack backtrace, code can inspect the value of
19630           "pc" stored at "fp + 0".  If the trace function then looks at
19631           location "pc - 12" and the top 8 bits are set, then we know that
19632           there is a function name embedded immediately preceding this
19633           location and has length "((pc[-3]) & 0xff000000)".
19634
19635       -mthumb
19636       -marm
19637           Select between generating code that executes in ARM and Thumb
19638           states.  The default for most configurations is to generate code
19639           that executes in ARM state, but the default can be changed by
19640           configuring GCC with the --with-mode=state configure option.
19641
19642           You can also override the ARM and Thumb mode for each function by
19643           using the target("thumb") and target("arm") function attributes or
19644           pragmas.
19645
19646       -mflip-thumb
19647           Switch ARM/Thumb modes on alternating functions.  This option is
19648           provided for regression testing of mixed Thumb/ARM code generation,
19649           and is not intended for ordinary use in compiling code.
19650
19651       -mtpcs-frame
19652           Generate a stack frame that is compliant with the Thumb Procedure
19653           Call Standard for all non-leaf functions.  (A leaf function is one
19654           that does not call any other functions.)  The default is
19655           -mno-tpcs-frame.
19656
19657       -mtpcs-leaf-frame
19658           Generate a stack frame that is compliant with the Thumb Procedure
19659           Call Standard for all leaf functions.  (A leaf function is one that
19660           does not call any other functions.)  The default is
19661           -mno-apcs-leaf-frame.
19662
19663       -mcallee-super-interworking
19664           Gives all externally visible functions in the file being compiled
19665           an ARM instruction set header which switches to Thumb mode before
19666           executing the rest of the function.  This allows these functions to
19667           be called from non-interworking code.  This option is not valid in
19668           AAPCS configurations because interworking is enabled by default.
19669
19670       -mcaller-super-interworking
19671           Allows calls via function pointers (including virtual functions) to
19672           execute correctly regardless of whether the target code has been
19673           compiled for interworking or not.  There is a small overhead in the
19674           cost of executing a function pointer if this option is enabled.
19675           This option is not valid in AAPCS configurations because
19676           interworking is enabled by default.
19677
19678       -mtp=name
19679           Specify the access model for the thread local storage pointer.  The
19680           valid models are soft, which generates calls to "__aeabi_read_tp",
19681           cp15, which fetches the thread pointer from "cp15" directly
19682           (supported in the arm6k architecture), and auto, which uses the
19683           best available method for the selected processor.  The default
19684           setting is auto.
19685
19686       -mtls-dialect=dialect
19687           Specify the dialect to use for accessing thread local storage.  Two
19688           dialects are supported---gnu and gnu2.  The gnu dialect selects the
19689           original GNU scheme for supporting local and global dynamic TLS
19690           models.  The gnu2 dialect selects the GNU descriptor scheme, which
19691           provides better performance for shared libraries.  The GNU
19692           descriptor scheme is compatible with the original scheme, but does
19693           require new assembler, linker and library support.  Initial and
19694           local exec TLS models are unaffected by this option and always use
19695           the original scheme.
19696
19697       -mword-relocations
19698           Only generate absolute relocations on word-sized values (i.e.
19699           R_ARM_ABS32).  This is enabled by default on targets (uClinux,
19700           SymbianOS) where the runtime loader imposes this restriction, and
19701           when -fpic or -fPIC is specified. This option conflicts with
19702           -mslow-flash-data.
19703
19704       -mfix-cortex-m3-ldrd
19705           Some Cortex-M3 cores can cause data corruption when "ldrd"
19706           instructions with overlapping destination and base registers are
19707           used.  This option avoids generating these instructions.  This
19708           option is enabled by default when -mcpu=cortex-m3 is specified.
19709
19710       -mfix-cortex-a57-aes-1742098
19711       -mno-fix-cortex-a57-aes-1742098
19712       -mfix-cortex-a72-aes-1655431
19713       -mno-fix-cortex-a72-aes-1655431
19714           Enable (disable) mitigation for an erratum on Cortex-A57 and
19715           Cortex-A72 that affects the AES cryptographic instructions.  This
19716           option is enabled by default when either -mcpu=cortex-a57 or
19717           -mcpu=cortex-a72 is specified.
19718
19719       -munaligned-access
19720       -mno-unaligned-access
19721           Enables (or disables) reading and writing of 16- and 32- bit values
19722           from addresses that are not 16- or 32- bit aligned.  By default
19723           unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
19724           ARMv8-M Baseline architectures, and enabled for all other
19725           architectures.  If unaligned access is not enabled then words in
19726           packed data structures are accessed a byte at a time.
19727
19728           The ARM attribute "Tag_CPU_unaligned_access" is set in the
19729           generated object file to either true or false, depending upon the
19730           setting of this option.  If unaligned access is enabled then the
19731           preprocessor symbol "__ARM_FEATURE_UNALIGNED" is also defined.
19732
19733       -mneon-for-64bits
19734           This option is deprecated and has no effect.
19735
19736       -mslow-flash-data
19737           Assume loading data from flash is slower than fetching instruction.
19738           Therefore literal load is minimized for better performance.  This
19739           option is only supported when compiling for ARMv7 M-profile and off
19740           by default. It conflicts with -mword-relocations.
19741
19742       -masm-syntax-unified
19743           Assume inline assembler is using unified asm syntax.  The default
19744           is currently off which implies divided syntax.  This option has no
19745           impact on Thumb2. However, this may change in future releases of
19746           GCC.  Divided syntax should be considered deprecated.
19747
19748       -mrestrict-it
19749           Restricts generation of IT blocks to conform to the rules of
19750           ARMv8-A.  IT blocks can only contain a single 16-bit instruction
19751           from a select set of instructions. This option is on by default for
19752           ARMv8-A Thumb mode.
19753
19754       -mprint-tune-info
19755           Print CPU tuning information as comment in assembler file.  This is
19756           an option used only for regression testing of the compiler and not
19757           intended for ordinary use in compiling code.  This option is
19758           disabled by default.
19759
19760       -mverbose-cost-dump
19761           Enable verbose cost model dumping in the debug dump files.  This
19762           option is provided for use in debugging the compiler.
19763
19764       -mpure-code
19765           Do not allow constant data to be placed in code sections.
19766           Additionally, when compiling for ELF object format give all text
19767           sections the ELF processor-specific section attribute
19768           "SHF_ARM_PURECODE".  This option is only available when generating
19769           non-pic code for M-profile targets.
19770
19771       -mcmse
19772           Generate secure code as per the "ARMv8-M Security Extensions:
19773           Requirements on Development Tools Engineering Specification", which
19774           can be found on
19775           <https://developer.arm.com/documentation/ecm0359818/latest/>.
19776
19777       -mfix-cmse-cve-2021-35465
19778           Mitigate against a potential security issue with the "VLLDM"
19779           instruction in some M-profile devices when using CMSE
19780           (CVE-2021-365465).  This option is enabled by default when the
19781           option -mcpu= is used with "cortex-m33", "cortex-m35p",
19782           "cortex-m55", "cortex-m85" or "star-mc1". The option
19783           -mno-fix-cmse-cve-2021-35465 can be used to disable the mitigation.
19784
19785       -mstack-protector-guard=guard
19786       -mstack-protector-guard-offset=offset
19787           Generate stack protection code using canary at guard.  Supported
19788           locations are global for a global canary or tls for a canary
19789           accessible via the TLS register. The option
19790           -mstack-protector-guard-offset= is for use with
19791           -fstack-protector-guard=tls and not for use in user-land code.
19792
19793       -mfdpic
19794       -mno-fdpic
19795           Select the FDPIC ABI, which uses 64-bit function descriptors to
19796           represent pointers to functions.  When the compiler is configured
19797           for "arm-*-uclinuxfdpiceabi" targets, this option is on by default
19798           and implies -fPIE if none of the PIC/PIE-related options is
19799           provided.  On other targets, it only enables the FDPIC-specific
19800           code generation features, and the user should explicitly provide
19801           the PIC/PIE-related options as needed.
19802
19803           Note that static linking is not supported because it would still
19804           involve the dynamic linker when the program self-relocates.  If
19805           such behavior is acceptable, use -static and -Wl,-dynamic-linker
19806           options.
19807
19808           The opposite -mno-fdpic option is useful (and required) to build
19809           the Linux kernel using the same ("arm-*-uclinuxfdpiceabi")
19810           toolchain as the one used to build the userland programs.
19811
19812       -mbranch-protection=none|standard|pac-ret[+leaf][+bti]|bti[+pac-
19813       ret[+leaf]]
19814           Enable branch protection features (armv8.1-m.main only).  none
19815           generate code without branch protection or return address signing.
19816           standard[+leaf] generate code with all branch protection features
19817           enabled at their standard level.  pac-ret[+leaf] generate code with
19818           return address signing set to its standard level, which is to sign
19819           all functions that save the return address to memory.  leaf When
19820           return address signing is enabled, also sign leaf functions even if
19821           they do not write the return address to memory.  +bti Add landing-
19822           pad instructions at the permitted targets of indirect branch
19823           instructions.
19824
19825           If the +pacbti architecture extension is not enabled, then all
19826           branch protection and return address signing operations are
19827           constrained to use only the instructions defined in the
19828           architectural-NOP space. The generated code will remain backwards-
19829           compatible with earlier versions of the architecture, but the
19830           additional security can be enabled at run time on processors that
19831           support the PACBTI extension.
19832
19833           Branch target enforcement using BTI can only be enabled at runtime
19834           if all code in the application has been compiled with at least
19835           -mbranch-protection=bti.
19836
19837           Any setting other than none is supported only on armv8-m.main or
19838           later.
19839
19840           The default is to generate code without branch protection or return
19841           address signing.
19842
19843       AVR Options
19844
19845       These options are defined for AVR implementations:
19846
19847       -mmcu=mcu
19848           Specify Atmel AVR instruction set architectures (ISA) or MCU type.
19849
19850           The default for this option is avr2.
19851
19852           GCC supports the following AVR devices and ISAs:
19853
19854           "avr2"
19855               "Classic" devices with up to 8 KiB of program memory.  mcu =
19856               "attiny22", "attiny26", "at90s2313", "at90s2323", "at90s2333",
19857               "at90s2343", "at90s4414", "at90s4433", "at90s4434",
19858               "at90c8534", "at90s8515", "at90s8535".
19859
19860           "avr25"
19861               "Classic" devices with up to 8 KiB of program memory and with
19862               the "MOVW" instruction.  mcu = "attiny13", "attiny13a",
19863               "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
19864               "attiny2313", "attiny2313a", "attiny43u", "attiny44",
19865               "attiny44a", "attiny45", "attiny48", "attiny441", "attiny461",
19866               "attiny461a", "attiny4313", "attiny84", "attiny84a",
19867               "attiny85", "attiny87", "attiny88", "attiny828", "attiny841",
19868               "attiny861", "attiny861a", "ata5272", "ata6616c", "at86rf401".
19869
19870           "avr3"
19871               "Classic" devices with 16 KiB up to 64 KiB of program memory.
19872               mcu = "at76c711", "at43usb355".
19873
19874           "avr31"
19875               "Classic" devices with 128 KiB of program memory.  mcu =
19876               "atmega103", "at43usb320".
19877
19878           "avr35"
19879               "Classic" devices with 16 KiB up to 64 KiB of program memory
19880               and with the "MOVW" instruction.  mcu = "attiny167",
19881               "attiny1634", "atmega8u2", "atmega16u2", "atmega32u2",
19882               "ata5505", "ata6617c", "ata664251", "at90usb82", "at90usb162".
19883
19884           "avr4"
19885               "Enhanced" devices with up to 8 KiB of program memory.  mcu =
19886               "atmega48", "atmega48a", "atmega48p", "atmega48pa",
19887               "atmega48pb", "atmega8", "atmega8a", "atmega8hva", "atmega88",
19888               "atmega88a", "atmega88p", "atmega88pa", "atmega88pb",
19889               "atmega8515", "atmega8535", "ata6285", "ata6286", "ata6289",
19890               "ata6612c", "at90pwm1", "at90pwm2", "at90pwm2b", "at90pwm3",
19891               "at90pwm3b", "at90pwm81".
19892
19893           "avr5"
19894               "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
19895               mcu = "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
19896               "atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4",
19897               "atmega161", "atmega162", "atmega163", "atmega164a",
19898               "atmega164p", "atmega164pa", "atmega165", "atmega165a",
19899               "atmega165p", "atmega165pa", "atmega168", "atmega168a",
19900               "atmega168p", "atmega168pa", "atmega168pb", "atmega169",
19901               "atmega169a", "atmega169p", "atmega169pa", "atmega32",
19902               "atmega32a", "atmega32c1", "atmega32hvb", "atmega32hvbrevb",
19903               "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
19904               "atmega324a", "atmega324p", "atmega324pa", "atmega324pb",
19905               "atmega325", "atmega325a", "atmega325p", "atmega325pa",
19906               "atmega328", "atmega328p", "atmega328pb", "atmega329",
19907               "atmega329a", "atmega329p", "atmega329pa", "atmega3250",
19908               "atmega3250a", "atmega3250p", "atmega3250pa", "atmega3290",
19909               "atmega3290a", "atmega3290p", "atmega3290pa", "atmega406",
19910               "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
19911               "atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640",
19912               "atmega644", "atmega644a", "atmega644p", "atmega644pa",
19913               "atmega644rfr2", "atmega645", "atmega645a", "atmega645p",
19914               "atmega649", "atmega649a", "atmega649p", "atmega6450",
19915               "atmega6450a", "atmega6450p", "atmega6490", "atmega6490a",
19916               "atmega6490p", "ata5795", "ata5790", "ata5790n", "ata5791",
19917               "ata6613c", "ata6614q", "ata5782", "ata5831", "ata8210",
19918               "ata8510", "ata5702m322", "at90pwm161", "at90pwm216",
19919               "at90pwm316", "at90can32", "at90can64", "at90scr100",
19920               "at90usb646", "at90usb647", "at94k", "m3000".
19921
19922           "avr51"
19923               "Enhanced" devices with 128 KiB of program memory.  mcu =
19924               "atmega128", "atmega128a", "atmega128rfa1", "atmega128rfr2",
19925               "atmega1280", "atmega1281", "atmega1284", "atmega1284p",
19926               "atmega1284rfr2", "at90can128", "at90usb1286", "at90usb1287".
19927
19928           "avr6"
19929               "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
19930               of program memory.  mcu = "atmega256rfr2", "atmega2560",
19931               "atmega2561", "atmega2564rfr2".
19932
19933           "avrxmega2"
19934               "XMEGA" devices with more than 8 KiB and up to 64 KiB of
19935               program memory.  mcu = "atxmega8e5", "atxmega16a4",
19936               "atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16e5",
19937               "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
19938               "atxmega32d3", "atxmega32d4", "atxmega32e5", "avr64da28",
19939               "avr64da32", "avr64da48", "avr64da64", "avr64db28",
19940               "avr64db32", "avr64db48", "avr64db64".
19941
19942           "avrxmega3"
19943               "XMEGA" devices with up to 64 KiB of combined program memory
19944               and RAM, and with program memory visible in the RAM address
19945               space.  mcu = "attiny202", "attiny204", "attiny212",
19946               "attiny214", "attiny402", "attiny404", "attiny406",
19947               "attiny412", "attiny414", "attiny416", "attiny417",
19948               "attiny804", "attiny806", "attiny807", "attiny814",
19949               "attiny816", "attiny817", "attiny1604", "attiny1606",
19950               "attiny1607", "attiny1614", "attiny1616", "attiny1617",
19951               "attiny3214", "attiny3216", "attiny3217", "atmega808",
19952               "atmega809", "atmega1608", "atmega1609", "atmega3208",
19953               "atmega3209", "atmega4808", "atmega4809", "avr32da28",
19954               "avr32da32", "avr32da48", "avr32db28", "avr32db32",
19955               "avr32db48".
19956
19957           "avrxmega4"
19958               "XMEGA" devices with more than 64 KiB and up to 128 KiB of
19959               program memory.  mcu = "atxmega64a3", "atxmega64a3u",
19960               "atxmega64a4u", "atxmega64b1", "atxmega64b3", "atxmega64c3",
19961               "atxmega64d3", "atxmega64d4", "avr128da28", "avr128da32",
19962               "avr128da48", "avr128da64", "avr128db28", "avr128db32",
19963               "avr128db48", "avr128db64".
19964
19965           "avrxmega5"
19966               "XMEGA" devices with more than 64 KiB and up to 128 KiB of
19967               program memory and more than 64 KiB of RAM.  mcu =
19968               "atxmega64a1", "atxmega64a1u".
19969
19970           "avrxmega6"
19971               "XMEGA" devices with more than 128 KiB of program memory.  mcu
19972               = "atxmega128a3", "atxmega128a3u", "atxmega128b1",
19973               "atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4",
19974               "atxmega192a3", "atxmega192a3u", "atxmega192c3",
19975               "atxmega192d3", "atxmega256a3", "atxmega256a3b",
19976               "atxmega256a3bu", "atxmega256a3u", "atxmega256c3",
19977               "atxmega256d3", "atxmega384c3", "atxmega384d3".
19978
19979           "avrxmega7"
19980               "XMEGA" devices with more than 128 KiB of program memory and
19981               more than 64 KiB of RAM.  mcu = "atxmega128a1",
19982               "atxmega128a1u", "atxmega128a4u".
19983
19984           "avrtiny"
19985               "TINY" Tiny core devices with 512 B up to 4 KiB of program
19986               memory.  mcu = "attiny4", "attiny5", "attiny9", "attiny10",
19987               "attiny20", "attiny40".
19988
19989           "avr1"
19990               This ISA is implemented by the minimal AVR core and supported
19991               for assembler only.  mcu = "attiny11", "attiny12", "attiny15",
19992               "attiny28", "at90s1200".
19993
19994       -mabsdata
19995           Assume that all data in static storage can be accessed by LDS / STS
19996           instructions.  This option has only an effect on reduced Tiny
19997           devices like ATtiny40.  See also the "absdata" AVR Variable
19998           Attributes,variable attribute.
19999
20000       -maccumulate-args
20001           Accumulate outgoing function arguments and acquire/release the
20002           needed stack space for outgoing function arguments once in function
20003           prologue/epilogue.  Without this option, outgoing arguments are
20004           pushed before calling a function and popped afterwards.
20005
20006           Popping the arguments after the function call can be expensive on
20007           AVR so that accumulating the stack space might lead to smaller
20008           executables because arguments need not be removed from the stack
20009           after such a function call.
20010
20011           This option can lead to reduced code size for functions that
20012           perform several calls to functions that get their arguments on the
20013           stack like calls to printf-like functions.
20014
20015       -mbranch-cost=cost
20016           Set the branch costs for conditional branch instructions to cost.
20017           Reasonable values for cost are small, non-negative integers. The
20018           default branch cost is 0.
20019
20020       -mcall-prologues
20021           Functions prologues/epilogues are expanded as calls to appropriate
20022           subroutines.  Code size is smaller.
20023
20024       -mdouble=bits
20025       -mlong-double=bits
20026           Set the size (in bits) of the "double" or "long double" type,
20027           respectively.  Possible values for bits are 32 and 64.  Whether or
20028           not a specific value for bits is allowed depends on the
20029           "--with-double=" and "--with-long-double=" configure options
20030           ("https://gcc.gnu.org/install/configure.html#avr"), and the same
20031           applies for the default values of the options.
20032
20033       -mgas-isr-prologues
20034           Interrupt service routines (ISRs) may use the "__gcc_isr" pseudo
20035           instruction supported by GNU Binutils.  If this option is on, the
20036           feature can still be disabled for individual ISRs by means of the
20037           AVR Function Attributes,,"no_gccisr" function attribute.  This
20038           feature is activated per default if optimization is on (but not
20039           with -Og, @pxref{Optimize Options}), and if GNU Binutils support
20040           PR21683 ("https://sourceware.org/PR21683").
20041
20042       -mint8
20043           Assume "int" to be 8-bit integer.  This affects the sizes of all
20044           types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
20045           and "long long" is 4 bytes.  Please note that this option does not
20046           conform to the C standards, but it results in smaller code size.
20047
20048       -mmain-is-OS_task
20049           Do not save registers in "main".  The effect is the same like
20050           attaching attribute AVR Function Attributes,,"OS_task" to "main".
20051           It is activated per default if optimization is on.
20052
20053       -mn-flash=num
20054           Assume that the flash memory has a size of num times 64 KiB.
20055
20056       -mno-interrupts
20057           Generated code is not compatible with hardware interrupts.  Code
20058           size is smaller.
20059
20060       -mrelax
20061           Try to replace "CALL" resp. "JMP" instruction by the shorter
20062           "RCALL" resp. "RJMP" instruction if applicable.  Setting -mrelax
20063           just adds the --mlink-relax option to the assembler's command line
20064           and the --relax option to the linker's command line.
20065
20066           Jump relaxing is performed by the linker because jump offsets are
20067           not known before code is located. Therefore, the assembler code
20068           generated by the compiler is the same, but the instructions in the
20069           executable may differ from instructions in the assembler code.
20070
20071           Relaxing must be turned on if linker stubs are needed, see the
20072           section on "EIND" and linker stubs below.
20073
20074       -mrmw
20075           Assume that the device supports the Read-Modify-Write instructions
20076           "XCH", "LAC", "LAS" and "LAT".
20077
20078       -mshort-calls
20079           Assume that "RJMP" and "RCALL" can target the whole program memory.
20080
20081           This option is used internally for multilib selection.  It is not
20082           an optimization option, and you don't need to set it by hand.
20083
20084       -msp8
20085           Treat the stack pointer register as an 8-bit register, i.e. assume
20086           the high byte of the stack pointer is zero.  In general, you don't
20087           need to set this option by hand.
20088
20089           This option is used internally by the compiler to select and build
20090           multilibs for architectures "avr2" and "avr25".  These
20091           architectures mix devices with and without "SPH".  For any setting
20092           other than -mmcu=avr2 or -mmcu=avr25 the compiler driver adds or
20093           removes this option from the compiler proper's command line,
20094           because the compiler then knows if the device or architecture has
20095           an 8-bit stack pointer and thus no "SPH" register or not.
20096
20097       -mstrict-X
20098           Use address register "X" in a way proposed by the hardware.  This
20099           means that "X" is only used in indirect, post-increment or pre-
20100           decrement addressing.
20101
20102           Without this option, the "X" register may be used in the same way
20103           as "Y" or "Z" which then is emulated by additional instructions.
20104           For example, loading a value with "X+const" addressing with a small
20105           non-negative "const < 64" to a register Rn is performed as
20106
20107                   adiw r26, const   ; X += const
20108                   ld   <Rn>, X        ; <Rn> = *X
20109                   sbiw r26, const   ; X -= const
20110
20111       -mtiny-stack
20112           Only change the lower 8 bits of the stack pointer.
20113
20114       -mfract-convert-truncate
20115           Allow to use truncation instead of rounding towards zero for
20116           fractional fixed-point types.
20117
20118       -nodevicelib
20119           Don't link against AVR-LibC's device specific library "lib<mcu>.a".
20120
20121       -nodevicespecs
20122           Don't add -specs=device-specs/specs-mcu to the compiler driver's
20123           command line.  The user takes responsibility for supplying the sub-
20124           processes like compiler proper, assembler and linker with
20125           appropriate command line options.  This means that the user has to
20126           supply her private device specs file by means of -specs=path-to-
20127           specs-file.  There is no more need for option -mmcu=mcu.
20128
20129           This option can also serve as a replacement for the older way of
20130           specifying custom device-specs files that needed -B some-path to
20131           point to a directory which contains a folder named "device-specs"
20132           which contains a specs file named "specs-mcu", where mcu was
20133           specified by -mmcu=mcu.
20134
20135       -Waddr-space-convert
20136           Warn about conversions between address spaces in the case where the
20137           resulting address space is not contained in the incoming address
20138           space.
20139
20140       -Wmisspelled-isr
20141           Warn if the ISR is misspelled, i.e. without __vector prefix.
20142           Enabled by default.
20143
20144       "EIND" and Devices with More Than 128 Ki Bytes of Flash
20145
20146       Pointers in the implementation are 16 bits wide.  The address of a
20147       function or label is represented as word address so that indirect jumps
20148       and calls can target any code address in the range of 64 Ki words.
20149
20150       In order to facilitate indirect jump on devices with more than 128 Ki
20151       bytes of program memory space, there is a special function register
20152       called "EIND" that serves as most significant part of the target
20153       address when "EICALL" or "EIJMP" instructions are used.
20154
20155       Indirect jumps and calls on these devices are handled as follows by the
20156       compiler and are subject to some limitations:
20157
20158       *   The compiler never sets "EIND".
20159
20160       *   The compiler uses "EIND" implicitly in "EICALL"/"EIJMP"
20161           instructions or might read "EIND" directly in order to emulate an
20162           indirect call/jump by means of a "RET" instruction.
20163
20164       *   The compiler assumes that "EIND" never changes during the startup
20165           code or during the application. In particular, "EIND" is not
20166           saved/restored in function or interrupt service routine
20167           prologue/epilogue.
20168
20169       *   For indirect calls to functions and computed goto, the linker
20170           generates stubs. Stubs are jump pads sometimes also called
20171           trampolines. Thus, the indirect call/jump jumps to such a stub.
20172           The stub contains a direct jump to the desired address.
20173
20174       *   Linker relaxation must be turned on so that the linker generates
20175           the stubs correctly in all situations. See the compiler option
20176           -mrelax and the linker option --relax.  There are corner cases
20177           where the linker is supposed to generate stubs but aborts without
20178           relaxation and without a helpful error message.
20179
20180       *   The default linker script is arranged for code with "EIND = 0".  If
20181           code is supposed to work for a setup with "EIND != 0", a custom
20182           linker script has to be used in order to place the sections whose
20183           name start with ".trampolines" into the segment where "EIND" points
20184           to.
20185
20186       *   The startup code from libgcc never sets "EIND".  Notice that
20187           startup code is a blend of code from libgcc and AVR-LibC.  For the
20188           impact of AVR-LibC on "EIND", see the AVR-LibC user manual
20189           ("https://www.nongnu.org/avr-libc/user-manual/").
20190
20191       *   It is legitimate for user-specific startup code to set up "EIND"
20192           early, for example by means of initialization code located in
20193           section ".init3". Such code runs prior to general startup code that
20194           initializes RAM and calls constructors, but after the bit of
20195           startup code from AVR-LibC that sets "EIND" to the segment where
20196           the vector table is located.
20197
20198                   #include <avr/io.h>
20199
20200                   static void
20201                   __attribute__((section(".init3"),naked,used,no_instrument_function))
20202                   init3_set_eind (void)
20203                   {
20204                     __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
20205                                     "out %i0,r24" :: "n" (&EIND) : "r24","memory");
20206                   }
20207
20208           The "__trampolines_start" symbol is defined in the linker script.
20209
20210       *   Stubs are generated automatically by the linker if the following
20211           two conditions are met:
20212
20213           -<The address of a label is taken by means of the "gs" modifier>
20214               (short for generate stubs) like so:
20215
20216                       LDI r24, lo8(gs(<func>))
20217                       LDI r25, hi8(gs(<func>))
20218
20219           -<The final location of that label is in a code segment>
20220               outside the segment where the stubs are located.
20221
20222       *   The compiler emits such "gs" modifiers for code labels in the
20223           following situations:
20224
20225           -<Taking address of a function or code label.>
20226           -<Computed goto.>
20227           -<If prologue-save function is used, see -mcall-prologues>
20228               command-line option.
20229
20230           -<Switch/case dispatch tables. If you do not want such dispatch>
20231               tables you can specify the -fno-jump-tables command-line
20232               option.
20233
20234           -<C and C++ constructors/destructors called during
20235           startup/shutdown.>
20236           -<If the tools hit a gs() modifier explained above.>
20237       *   Jumping to non-symbolic addresses like so is not supported:
20238
20239                   int main (void)
20240                   {
20241                       /* Call function at word address 0x2 */
20242                       return ((int(*)(void)) 0x2)();
20243                   }
20244
20245           Instead, a stub has to be set up, i.e. the function has to be
20246           called through a symbol ("func_4" in the example):
20247
20248                   int main (void)
20249                   {
20250                       extern int func_4 (void);
20251
20252                       /* Call function at byte address 0x4 */
20253                       return func_4();
20254                   }
20255
20256           and the application be linked with -Wl,--defsym,func_4=0x4.
20257           Alternatively, "func_4" can be defined in the linker script.
20258
20259       Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
20260       Registers
20261
20262       Some AVR devices support memories larger than the 64 KiB range that can
20263       be accessed with 16-bit pointers.  To access memory locations outside
20264       this 64 KiB range, the content of a "RAMP" register is used as high
20265       part of the address: The "X", "Y", "Z" address register is concatenated
20266       with the "RAMPX", "RAMPY", "RAMPZ" special function register,
20267       respectively, to get a wide address. Similarly, "RAMPD" is used
20268       together with direct addressing.
20269
20270       *   The startup code initializes the "RAMP" special function registers
20271           with zero.
20272
20273       *   If a AVR Named Address Spaces,named address space other than
20274           generic or "__flash" is used, then "RAMPZ" is set as needed before
20275           the operation.
20276
20277       *   If the device supports RAM larger than 64 KiB and the compiler
20278           needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
20279           reset to zero after the operation.
20280
20281       *   If the device comes with a specific "RAMP" register, the ISR
20282           prologue/epilogue saves/restores that SFR and initializes it with
20283           zero in case the ISR code might (implicitly) use it.
20284
20285       *   RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
20286           you use inline assembler to read from locations outside the 16-bit
20287           address range and change one of the "RAMP" registers, you must
20288           reset it to zero after the access.
20289
20290       AVR Built-in Macros
20291
20292       GCC defines several built-in macros so that the user code can test for
20293       the presence or absence of features.  Almost any of the following
20294       built-in macros are deduced from device capabilities and thus triggered
20295       by the -mmcu= command-line option.
20296
20297       For even more AVR-specific built-in macros see AVR Named Address Spaces
20298       and AVR Built-in Functions.
20299
20300       "__AVR_ARCH__"
20301           Build-in macro that resolves to a decimal number that identifies
20302           the architecture and depends on the -mmcu=mcu option.  Possible
20303           values are:
20304
20305           2, 25, 3, 31, 35, 4, 5, 51, 6
20306
20307           for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
20308           "avr51", "avr6",
20309
20310           respectively and
20311
20312           100, 102, 103, 104, 105, 106, 107
20313
20314           for mcu="avrtiny", "avrxmega2", "avrxmega3", "avrxmega4",
20315           "avrxmega5", "avrxmega6", "avrxmega7", respectively.  If mcu
20316           specifies a device, this built-in macro is set accordingly. For
20317           example, with -mmcu=atmega8 the macro is defined to 4.
20318
20319       "__AVR_Device__"
20320           Setting -mmcu=device defines this built-in macro which reflects the
20321           device's name. For example, -mmcu=atmega8 defines the built-in
20322           macro "__AVR_ATmega8__", -mmcu=attiny261a defines
20323           "__AVR_ATtiny261A__", etc.
20324
20325           The built-in macros' names follow the scheme "__AVR_Device__" where
20326           Device is the device name as from the AVR user manual. The
20327           difference between Device in the built-in macro and device in
20328           -mmcu=device is that the latter is always lowercase.
20329
20330           If device is not a device but only a core architecture like avr51,
20331           this macro is not defined.
20332
20333       "__AVR_DEVICE_NAME__"
20334           Setting -mmcu=device defines this built-in macro to the device's
20335           name. For example, with -mmcu=atmega8 the macro is defined to
20336           "atmega8".
20337
20338           If device is not a device but only a core architecture like avr51,
20339           this macro is not defined.
20340
20341       "__AVR_XMEGA__"
20342           The device / architecture belongs to the XMEGA family of devices.
20343
20344       "__AVR_HAVE_ELPM__"
20345           The device has the "ELPM" instruction.
20346
20347       "__AVR_HAVE_ELPMX__"
20348           The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
20349
20350       "__AVR_HAVE_MOVW__"
20351           The device has the "MOVW" instruction to perform 16-bit register-
20352           register moves.
20353
20354       "__AVR_HAVE_LPMX__"
20355           The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
20356
20357       "__AVR_HAVE_MUL__"
20358           The device has a hardware multiplier.
20359
20360       "__AVR_HAVE_JMP_CALL__"
20361           The device has the "JMP" and "CALL" instructions.  This is the case
20362           for devices with more than 8 KiB of program memory.
20363
20364       "__AVR_HAVE_EIJMP_EICALL__"
20365       "__AVR_3_BYTE_PC__"
20366           The device has the "EIJMP" and "EICALL" instructions.  This is the
20367           case for devices with more than 128 KiB of program memory.  This
20368           also means that the program counter (PC) is 3 bytes wide.
20369
20370       "__AVR_2_BYTE_PC__"
20371           The program counter (PC) is 2 bytes wide. This is the case for
20372           devices with up to 128 KiB of program memory.
20373
20374       "__AVR_HAVE_8BIT_SP__"
20375       "__AVR_HAVE_16BIT_SP__"
20376           The stack pointer (SP) register is treated as 8-bit respectively
20377           16-bit register by the compiler.  The definition of these macros is
20378           affected by -mtiny-stack.
20379
20380       "__AVR_HAVE_SPH__"
20381       "__AVR_SP8__"
20382           The device has the SPH (high part of stack pointer) special
20383           function register or has an 8-bit stack pointer, respectively.  The
20384           definition of these macros is affected by -mmcu= and in the cases
20385           of -mmcu=avr2 and -mmcu=avr25 also by -msp8.
20386
20387       "__AVR_HAVE_RAMPD__"
20388       "__AVR_HAVE_RAMPX__"
20389       "__AVR_HAVE_RAMPY__"
20390       "__AVR_HAVE_RAMPZ__"
20391           The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
20392           function register, respectively.
20393
20394       "__NO_INTERRUPTS__"
20395           This macro reflects the -mno-interrupts command-line option.
20396
20397       "__AVR_ERRATA_SKIP__"
20398       "__AVR_ERRATA_SKIP_JMP_CALL__"
20399           Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
20400           instructions because of a hardware erratum.  Skip instructions are
20401           "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE".  The second macro is
20402           only defined if "__AVR_HAVE_JMP_CALL__" is also set.
20403
20404       "__AVR_ISA_RMW__"
20405           The device has Read-Modify-Write instructions (XCH, LAC, LAS and
20406           LAT).
20407
20408       "__AVR_SFR_OFFSET__=offset"
20409           Instructions that can address I/O special function registers
20410           directly like "IN", "OUT", "SBI", etc. may use a different address
20411           as if addressed by an instruction to access RAM like "LD" or "STS".
20412           This offset depends on the device architecture and has to be
20413           subtracted from the RAM address in order to get the respective I/O
20414           address.
20415
20416       "__AVR_SHORT_CALLS__"
20417           The -mshort-calls command line option is set.
20418
20419       "__AVR_PM_BASE_ADDRESS__=addr"
20420           Some devices support reading from flash memory by means of "LD*"
20421           instructions.  The flash memory is seen in the data address space
20422           at an offset of "__AVR_PM_BASE_ADDRESS__".  If this macro is not
20423           defined, this feature is not available.  If defined, the address
20424           space is linear and there is no need to put ".rodata" into RAM.
20425           This is handled by the default linker description file, and is
20426           currently available for "avrtiny" and "avrxmega3".  Even more
20427           convenient, there is no need to use address spaces like "__flash"
20428           or features like attribute "progmem" and "pgm_read_*".
20429
20430       "__WITH_AVRLIBC__"
20431           The compiler is configured to be used together with AVR-Libc.  See
20432           the --with-avrlibc configure option.
20433
20434       "__HAVE_DOUBLE_MULTILIB__"
20435           Defined if -mdouble= acts as a multilib option.
20436
20437       "__HAVE_DOUBLE32__"
20438       "__HAVE_DOUBLE64__"
20439           Defined if the compiler supports 32-bit double resp. 64-bit double.
20440           The actual layout is specified by option -mdouble=.
20441
20442       "__DEFAULT_DOUBLE__"
20443           The size in bits of "double" if -mdouble= is not set.  To test the
20444           layout of "double" in a program, use the built-in macro
20445           "__SIZEOF_DOUBLE__".
20446
20447       "__HAVE_LONG_DOUBLE32__"
20448       "__HAVE_LONG_DOUBLE64__"
20449       "__HAVE_LONG_DOUBLE_MULTILIB__"
20450       "__DEFAULT_LONG_DOUBLE__"
20451           Same as above, but for "long double" instead of "double".
20452
20453       "__WITH_DOUBLE_COMPARISON__"
20454           Reflects the "--with-double-comparison={tristate|bool|libf7}"
20455           configure option ("https://gcc.gnu.org/install/configure.html#avr")
20456           and is defined to 2 or 3.
20457
20458       "__WITH_LIBF7_LIBGCC__"
20459       "__WITH_LIBF7_MATH__"
20460       "__WITH_LIBF7_MATH_SYMBOLS__"
20461           Reflects the "--with-libf7={libgcc|math|math-symbols}"
20462           configure option
20463           ("https://gcc.gnu.org/install/configure.html#avr").
20464
20465       Blackfin Options
20466
20467       -mcpu=cpu[-sirevision]
20468           Specifies the name of the target Blackfin processor.  Currently,
20469           cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
20470           bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
20471           bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
20472           bf547m, bf548m, bf549m, bf561, bf592.
20473
20474           The optional sirevision specifies the silicon revision of the
20475           target Blackfin processor.  Any workarounds available for the
20476           targeted silicon revision are enabled.  If sirevision is none, no
20477           workarounds are enabled.  If sirevision is any, all workarounds for
20478           the targeted processor are enabled.  The "__SILICON_REVISION__"
20479           macro is defined to two hexadecimal digits representing the major
20480           and minor numbers in the silicon revision.  If sirevision is none,
20481           the "__SILICON_REVISION__" is not defined.  If sirevision is any,
20482           the "__SILICON_REVISION__" is defined to be 0xffff.  If this
20483           optional sirevision is not used, GCC assumes the latest known
20484           silicon revision of the targeted Blackfin processor.
20485
20486           GCC defines a preprocessor macro for the specified cpu.  For the
20487           bfin-elf toolchain, this option causes the hardware BSP provided by
20488           libgloss to be linked in if -msim is not given.
20489
20490           Without this option, bf532 is used as the processor by default.
20491
20492           Note that support for bf561 is incomplete.  For bf561, only the
20493           preprocessor macro is defined.
20494
20495       -msim
20496           Specifies that the program will be run on the simulator.  This
20497           causes the simulator BSP provided by libgloss to be linked in.
20498           This option has effect only for bfin-elf toolchain.  Certain other
20499           options, such as -mid-shared-library and -mfdpic, imply -msim.
20500
20501       -momit-leaf-frame-pointer
20502           Don't keep the frame pointer in a register for leaf functions.
20503           This avoids the instructions to save, set up and restore frame
20504           pointers and makes an extra register available in leaf functions.
20505
20506       -mspecld-anomaly
20507           When enabled, the compiler ensures that the generated code does not
20508           contain speculative loads after jump instructions. If this option
20509           is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
20510
20511       -mno-specld-anomaly
20512           Don't generate extra code to prevent speculative loads from
20513           occurring.
20514
20515       -mcsync-anomaly
20516           When enabled, the compiler ensures that the generated code does not
20517           contain CSYNC or SSYNC instructions too soon after conditional
20518           branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
20519           is defined.
20520
20521       -mno-csync-anomaly
20522           Don't generate extra code to prevent CSYNC or SSYNC instructions
20523           from occurring too soon after a conditional branch.
20524
20525       -mlow64k
20526           When enabled, the compiler is free to take advantage of the
20527           knowledge that the entire program fits into the low 64k of memory.
20528
20529       -mno-low64k
20530           Assume that the program is arbitrarily large.  This is the default.
20531
20532       -mstack-check-l1
20533           Do stack checking using information placed into L1 scratchpad
20534           memory by the uClinux kernel.
20535
20536       -mid-shared-library
20537           Generate code that supports shared libraries via the library ID
20538           method.  This allows for execute in place and shared libraries in
20539           an environment without virtual memory management.  This option
20540           implies -fPIC.  With a bfin-elf target, this option implies -msim.
20541
20542       -mno-id-shared-library
20543           Generate code that doesn't assume ID-based shared libraries are
20544           being used.  This is the default.
20545
20546       -mleaf-id-shared-library
20547           Generate code that supports shared libraries via the library ID
20548           method, but assumes that this library or executable won't link
20549           against any other ID shared libraries.  That allows the compiler to
20550           use faster code for jumps and calls.
20551
20552       -mno-leaf-id-shared-library
20553           Do not assume that the code being compiled won't link against any
20554           ID shared libraries.  Slower code is generated for jump and call
20555           insns.
20556
20557       -mshared-library-id=n
20558           Specifies the identification number of the ID-based shared library
20559           being compiled.  Specifying a value of 0 generates more compact
20560           code; specifying other values forces the allocation of that number
20561           to the current library but is no more space- or time-efficient than
20562           omitting this option.
20563
20564       -msep-data
20565           Generate code that allows the data segment to be located in a
20566           different area of memory from the text segment.  This allows for
20567           execute in place in an environment without virtual memory
20568           management by eliminating relocations against the text section.
20569
20570       -mno-sep-data
20571           Generate code that assumes that the data segment follows the text
20572           segment.  This is the default.
20573
20574       -mlong-calls
20575       -mno-long-calls
20576           Tells the compiler to perform function calls by first loading the
20577           address of the function into a register and then performing a
20578           subroutine call on this register.  This switch is needed if the
20579           target function lies outside of the 24-bit addressing range of the
20580           offset-based version of subroutine call instruction.
20581
20582           This feature is not enabled by default.  Specifying -mno-long-calls
20583           restores the default behavior.  Note these switches have no effect
20584           on how the compiler generates code to handle function calls via
20585           function pointers.
20586
20587       -mfast-fp
20588           Link with the fast floating-point library. This library relaxes
20589           some of the IEEE floating-point standard's rules for checking
20590           inputs against Not-a-Number (NAN), in the interest of performance.
20591
20592       -minline-plt
20593           Enable inlining of PLT entries in function calls to functions that
20594           are not known to bind locally.  It has no effect without -mfdpic.
20595
20596       -mmulticore
20597           Build a standalone application for multicore Blackfin processors.
20598           This option causes proper start files and link scripts supporting
20599           multicore to be used, and defines the macro "__BFIN_MULTICORE".  It
20600           can only be used with -mcpu=bf561[-sirevision].
20601
20602           This option can be used with -mcorea or -mcoreb, which selects the
20603           one-application-per-core programming model.  Without -mcorea or
20604           -mcoreb, the single-application/dual-core programming model is
20605           used. In this model, the main function of Core B should be named as
20606           "coreb_main".
20607
20608           If this option is not used, the single-core application programming
20609           model is used.
20610
20611       -mcorea
20612           Build a standalone application for Core A of BF561 when using the
20613           one-application-per-core programming model. Proper start files and
20614           link scripts are used to support Core A, and the macro
20615           "__BFIN_COREA" is defined.  This option can only be used in
20616           conjunction with -mmulticore.
20617
20618       -mcoreb
20619           Build a standalone application for Core B of BF561 when using the
20620           one-application-per-core programming model. Proper start files and
20621           link scripts are used to support Core B, and the macro
20622           "__BFIN_COREB" is defined. When this option is used, "coreb_main"
20623           should be used instead of "main".  This option can only be used in
20624           conjunction with -mmulticore.
20625
20626       -msdram
20627           Build a standalone application for SDRAM. Proper start files and
20628           link scripts are used to put the application into SDRAM, and the
20629           macro "__BFIN_SDRAM" is defined.  The loader should initialize
20630           SDRAM before loading the application.
20631
20632       -micplb
20633           Assume that ICPLBs are enabled at run time.  This has an effect on
20634           certain anomaly workarounds.  For Linux targets, the default is to
20635           assume ICPLBs are enabled; for standalone applications the default
20636           is off.
20637
20638       C6X Options
20639
20640       -march=name
20641           This specifies the name of the target architecture.  GCC uses this
20642           name to determine what kind of instructions it can emit when
20643           generating assembly code.  Permissible names are: c62x, c64x,
20644           c64x+, c67x, c67x+, c674x.
20645
20646       -mbig-endian
20647           Generate code for a big-endian target.
20648
20649       -mlittle-endian
20650           Generate code for a little-endian target.  This is the default.
20651
20652       -msim
20653           Choose startup files and linker script suitable for the simulator.
20654
20655       -msdata=default
20656           Put small global and static data in the ".neardata" section, which
20657           is pointed to by register "B14".  Put small uninitialized global
20658           and static data in the ".bss" section, which is adjacent to the
20659           ".neardata" section.  Put small read-only data into the ".rodata"
20660           section.  The corresponding sections used for large pieces of data
20661           are ".fardata", ".far" and ".const".
20662
20663       -msdata=all
20664           Put all data, not just small objects, into the sections reserved
20665           for small data, and use addressing relative to the "B14" register
20666           to access them.
20667
20668       -msdata=none
20669           Make no use of the sections reserved for small data, and use
20670           absolute addresses to access all data.  Put all initialized global
20671           and static data in the ".fardata" section, and all uninitialized
20672           data in the ".far" section.  Put all constant data into the
20673           ".const" section.
20674
20675       CRIS Options
20676
20677       These options are defined specifically for the CRIS ports.
20678
20679       -march=architecture-type
20680       -mcpu=architecture-type
20681           Generate code for the specified architecture.  The choices for
20682           architecture-type are v3, v8 and v10 for respectively ETRAX 4,
20683           ETRAX 100, and ETRAX 100 LX.  Default is v0.
20684
20685       -mtune=architecture-type
20686           Tune to architecture-type everything applicable about the generated
20687           code, except for the ABI and the set of available instructions.
20688           The choices for architecture-type are the same as for
20689           -march=architecture-type.
20690
20691       -mmax-stack-frame=n
20692           Warn when the stack frame of a function exceeds n bytes.
20693
20694       -metrax4
20695       -metrax100
20696           The options -metrax4 and -metrax100 are synonyms for -march=v3 and
20697           -march=v8 respectively.
20698
20699       -mmul-bug-workaround
20700       -mno-mul-bug-workaround
20701           Work around a bug in the "muls" and "mulu" instructions for CPU
20702           models where it applies.  This option is disabled by default.
20703
20704       -mpdebug
20705           Enable CRIS-specific verbose debug-related information in the
20706           assembly code.  This option also has the effect of turning off the
20707           #NO_APP formatted-code indicator to the assembler at the beginning
20708           of the assembly file.
20709
20710       -mcc-init
20711           Do not use condition-code results from previous instruction; always
20712           emit compare and test instructions before use of condition codes.
20713
20714       -mno-side-effects
20715           Do not emit instructions with side effects in addressing modes
20716           other than post-increment.
20717
20718       -mstack-align
20719       -mno-stack-align
20720       -mdata-align
20721       -mno-data-align
20722       -mconst-align
20723       -mno-const-align
20724           These options (no- options) arrange (eliminate arrangements) for
20725           the stack frame, individual data and constants to be aligned for
20726           the maximum single data access size for the chosen CPU model.  The
20727           default is to arrange for 32-bit alignment.  ABI details such as
20728           structure layout are not affected by these options.
20729
20730       -m32-bit
20731       -m16-bit
20732       -m8-bit
20733           Similar to the stack- data- and const-align options above, these
20734           options arrange for stack frame, writable data and constants to all
20735           be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
20736           alignment.
20737
20738       -mno-prologue-epilogue
20739       -mprologue-epilogue
20740           With -mno-prologue-epilogue, the normal function prologue and
20741           epilogue which set up the stack frame are omitted and no return
20742           instructions or return sequences are generated in the code.  Use
20743           this option only together with visual inspection of the compiled
20744           code: no warnings or errors are generated when call-saved registers
20745           must be saved, or storage for local variables needs to be
20746           allocated.
20747
20748       -melf
20749           Legacy no-op option.
20750
20751       -sim
20752           This option arranges to link with input-output functions from a
20753           simulator library.  Code, initialized data and zero-initialized
20754           data are allocated consecutively.
20755
20756       -sim2
20757           Like -sim, but pass linker options to locate initialized data at
20758           0x40000000 and zero-initialized data at 0x80000000.
20759
20760       C-SKY Options
20761
20762       GCC supports these options when compiling for C-SKY V2 processors.
20763
20764       -march=arch
20765           Specify the C-SKY target architecture.  Valid values for arch are:
20766           ck801, ck802, ck803, ck807, and ck810.  The default is ck810.
20767
20768       -mcpu=cpu
20769           Specify the C-SKY target processor.  Valid values for cpu are:
20770           ck801, ck801t, ck802, ck802t, ck802j, ck803, ck803h, ck803t,
20771           ck803ht, ck803f, ck803fh, ck803e, ck803eh, ck803et, ck803eht,
20772           ck803ef, ck803efh, ck803ft, ck803eft, ck803efht, ck803r1, ck803hr1,
20773           ck803tr1, ck803htr1, ck803fr1, ck803fhr1, ck803er1, ck803ehr1,
20774           ck803etr1, ck803ehtr1, ck803efr1, ck803efhr1, ck803ftr1,
20775           ck803eftr1, ck803efhtr1, ck803s, ck803st, ck803se, ck803sf,
20776           ck803sef, ck803seft, ck807e, ck807ef, ck807, ck807f, ck810e,
20777           ck810et, ck810ef, ck810eft, ck810, ck810v, ck810f, ck810t, ck810fv,
20778           ck810tv, ck810ft, and ck810ftv.
20779
20780       -mbig-endian
20781       -EB
20782       -mlittle-endian
20783       -EL Select big- or little-endian code.  The default is little-endian.
20784
20785       -mfloat-abi=name
20786           Specifies which floating-point ABI to use.  Permissible values are:
20787           soft, softfp and hard.
20788
20789           Specifying soft causes GCC to generate output containing library
20790           calls for floating-point operations.  softfp allows the generation
20791           of code using hardware floating-point instructions, but still uses
20792           the soft-float calling conventions.  hard allows generation of
20793           floating-point instructions and uses FPU-specific calling
20794           conventions.
20795
20796           The default depends on the specific target configuration.  Note
20797           that the hard-float and soft-float ABIs are not link-compatible;
20798           you must compile your entire program with the same ABI, and link
20799           with a compatible set of libraries.
20800
20801       -mhard-float
20802       -msoft-float
20803           Select hardware or software floating-point implementations.  The
20804           default is soft float.
20805
20806       -mdouble-float
20807       -mno-double-float
20808           When -mhard-float is in effect, enable generation of double-
20809           precision float instructions.  This is the default except when
20810           compiling for CK803.
20811
20812       -mfdivdu
20813       -mno-fdivdu
20814           When -mhard-float is in effect, enable generation of "frecipd",
20815           "fsqrtd", and "fdivd" instructions.  This is the default except
20816           when compiling for CK803.
20817
20818       -mfpu=fpu
20819           Select the floating-point processor.  This option can only be used
20820           with -mhard-float.  Values for fpu are fpv2_sf (equivalent to
20821           -mno-double-float -mno-fdivdu), fpv2 (-mdouble-float -mno-divdu),
20822           and fpv2_divd (-mdouble-float -mdivdu).
20823
20824       -melrw
20825       -mno-elrw
20826           Enable the extended "lrw" instruction.  This option defaults to on
20827           for CK801 and off otherwise.
20828
20829       -mistack
20830       -mno-istack
20831           Enable interrupt stack instructions; the default is off.
20832
20833           The -mistack option is required to handle the "interrupt" and "isr"
20834           function attributes.
20835
20836       -mmp
20837           Enable multiprocessor instructions; the default is off.
20838
20839       -mcp
20840           Enable coprocessor instructions; the default is off.
20841
20842       -mcache
20843           Enable coprocessor instructions; the default is off.
20844
20845       -msecurity
20846           Enable C-SKY security instructions; the default is off.
20847
20848       -mtrust
20849           Enable C-SKY trust instructions; the default is off.
20850
20851       -mdsp
20852       -medsp
20853       -mvdsp
20854           Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
20855           respectively.  All of these options default to off.
20856
20857       -mdiv
20858       -mno-div
20859           Generate divide instructions.  Default is off.
20860
20861       -msmart
20862       -mno-smart
20863           Generate code for Smart Mode, using only registers numbered 0-7 to
20864           allow use of 16-bit instructions.  This option is ignored for CK801
20865           where this is the required behavior, and it defaults to on for
20866           CK802.  For other targets, the default is off.
20867
20868       -mhigh-registers
20869       -mno-high-registers
20870           Generate code using the high registers numbered 16-31.  This option
20871           is not supported on CK801, CK802, or CK803, and is enabled by
20872           default for other processors.
20873
20874       -manchor
20875       -mno-anchor
20876           Generate code using global anchor symbol addresses.
20877
20878       -mpushpop
20879       -mno-pushpop
20880           Generate code using "push" and "pop" instructions.  This option
20881           defaults to on.
20882
20883       -mmultiple-stld
20884       -mstm
20885       -mno-multiple-stld
20886       -mno-stm
20887           Generate code using "stm" and "ldm" instructions.  This option
20888           isn't supported on CK801 but is enabled by default on other
20889           processors.
20890
20891       -mconstpool
20892       -mno-constpool
20893           Create constant pools in the compiler instead of deferring it to
20894           the assembler.  This option is the default and required for correct
20895           code generation on CK801 and CK802, and is optional on other
20896           processors.
20897
20898       -mstack-size
20899       -mno-stack-size
20900           Emit ".stack_size" directives for each function in the assembly
20901           output.  This option defaults to off.
20902
20903       -mccrt
20904       -mno-ccrt
20905           Generate code for the C-SKY compiler runtime instead of libgcc.
20906           This option defaults to off.
20907
20908       -mbranch-cost=n
20909           Set the branch costs to roughly "n" instructions.  The default is
20910           1.
20911
20912       -msched-prolog
20913       -mno-sched-prolog
20914           Permit scheduling of function prologue and epilogue sequences.
20915           Using this option can result in code that is not compliant with the
20916           C-SKY V2 ABI prologue requirements and that cannot be debugged or
20917           backtraced.  It is disabled by default.
20918
20919       -msim
20920           Links the library libsemi.a which is in compatible with simulator.
20921           Applicable to ELF compiler only.
20922
20923       Darwin Options
20924
20925       These options are defined for all architectures running the Darwin
20926       operating system.
20927
20928       FSF GCC on Darwin does not create "fat" object files; it creates an
20929       object file for the single architecture that GCC was built to target.
20930       Apple's GCC on Darwin does create "fat" files if multiple -arch options
20931       are used; it does so by running the compiler or linker multiple times
20932       and joining the results together with lipo.
20933
20934       The subtype of the file created (like ppc7400 or ppc970 or i686) is
20935       determined by the flags that specify the ISA that GCC is targeting,
20936       like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to
20937       override this.
20938
20939       The Darwin tools vary in their behavior when presented with an ISA
20940       mismatch.  The assembler, as, only permits instructions to be used that
20941       are valid for the subtype of the file it is generating, so you cannot
20942       put 64-bit instructions in a ppc750 object file.  The linker for shared
20943       libraries, /usr/bin/libtool, fails and prints an error if asked to
20944       create a shared library with a less restrictive subtype than its input
20945       files (for instance, trying to put a ppc970 object file in a ppc7400
20946       library).  The linker for executables, ld, quietly gives the executable
20947       the most restrictive subtype of any of its input files.
20948
20949       -Fdir
20950           Add the framework directory dir to the head of the list of
20951           directories to be searched for header files.  These directories are
20952           interleaved with those specified by -I options and are scanned in a
20953           left-to-right order.
20954
20955           A framework directory is a directory with frameworks in it.  A
20956           framework is a directory with a Headers and/or PrivateHeaders
20957           directory contained directly in it that ends in .framework.  The
20958           name of a framework is the name of this directory excluding the
20959           .framework.  Headers associated with the framework are found in one
20960           of those two directories, with Headers being searched first.  A
20961           subframework is a framework directory that is in a framework's
20962           Frameworks directory.  Includes of subframework headers can only
20963           appear in a header of a framework that contains the subframework,
20964           or in a sibling subframework header.  Two subframeworks are
20965           siblings if they occur in the same framework.  A subframework
20966           should not have the same name as a framework; a warning is issued
20967           if this is violated.  Currently a subframework cannot have
20968           subframeworks; in the future, the mechanism may be extended to
20969           support this.  The standard frameworks can be found in
20970           /System/Library/Frameworks and /Library/Frameworks.  An example
20971           include looks like "#include <Framework/header.h>", where Framework
20972           denotes the name of the framework and header.h is found in the
20973           PrivateHeaders or Headers directory.
20974
20975       -iframeworkdir
20976           Like -F except the directory is a treated as a system directory.
20977           The main difference between this -iframework and -F is that with
20978           -iframework the compiler does not warn about constructs contained
20979           within header files found via dir.  This option is valid only for
20980           the C family of languages.
20981
20982       -gused
20983           Emit debugging information for symbols that are used.  For stabs
20984           debugging format, this enables -feliminate-unused-debug-symbols.
20985           This is by default ON.
20986
20987       -gfull
20988           Emit debugging information for all symbols and types.
20989
20990       -fconstant-cfstrings
20991           The -fconstant-cfstrings is an alias for -mconstant-cfstrings.
20992
20993       -mconstant-cfstrings
20994           When the NeXT runtime is being used (the default on these systems),
20995           override any -fconstant-string-class setting and cause "@"...""
20996           literals to be laid out as constant CoreFoundation strings.
20997
20998       -mmacosx-version-min=version
20999           The earliest version of MacOS X that this executable will run on is
21000           version.  Typical values supported for version include 12, 10.12,
21001           and 10.5.8.
21002
21003           If the compiler was built to use the system's headers by default,
21004           then the default for this option is the system version on which the
21005           compiler is running, otherwise the default is to make choices that
21006           are compatible with as many systems and code bases as possible.
21007
21008       -mkernel
21009           Enable kernel development mode.  The -mkernel option sets -static,
21010           -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
21011           -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
21012           where applicable.  This mode also sets -mno-altivec, -msoft-float,
21013           -fno-builtin and -mlong-branch for PowerPC targets.
21014
21015       -mone-byte-bool
21016           Override the defaults for "bool" so that "sizeof(bool)==1".  By
21017           default sizeof(bool) is 4 when compiling for Darwin/PowerPC and 1
21018           when compiling for Darwin/x86, so this option has no effect on x86.
21019
21020           Warning: The -mone-byte-bool switch causes GCC to generate code
21021           that is not binary compatible with code generated without that
21022           switch.  Using this switch may require recompiling all other
21023           modules in a program, including system libraries.  Use this switch
21024           to conform to a non-default data model.
21025
21026       -mfix-and-continue
21027       -ffix-and-continue
21028       -findirect-data
21029           Generate code suitable for fast turnaround development, such as to
21030           allow GDB to dynamically load .o files into already-running
21031           programs.  -findirect-data and -ffix-and-continue are provided for
21032           backwards compatibility.
21033
21034       -all_load
21035           Loads all members of static archive libraries.  See man ld(1) for
21036           more information.
21037
21038       -arch_errors_fatal
21039           Cause the errors having to do with files that have the wrong
21040           architecture to be fatal.
21041
21042       -bind_at_load
21043           Causes the output file to be marked such that the dynamic linker
21044           will bind all undefined references when the file is loaded or
21045           launched.
21046
21047       -bundle
21048           Produce a Mach-o bundle format file.  See man ld(1) for more
21049           information.
21050
21051       -bundle_loader executable
21052           This option specifies the executable that will load the build
21053           output file being linked.  See man ld(1) for more information.
21054
21055       -dynamiclib
21056           When passed this option, GCC produces a dynamic library instead of
21057           an executable when linking, using the Darwin libtool command.
21058
21059       -force_cpusubtype_ALL
21060           This causes GCC's output file to have the ALL subtype, instead of
21061           one controlled by the -mcpu or -march option.
21062
21063       -allowable_client  client_name
21064       -client_name
21065       -compatibility_version
21066       -current_version
21067       -dead_strip
21068       -dependency-file
21069       -dylib_file
21070       -dylinker_install_name
21071       -dynamic
21072       -exported_symbols_list
21073       -filelist
21074       -flat_namespace
21075       -force_flat_namespace
21076       -headerpad_max_install_names
21077       -image_base
21078       -init
21079       -install_name
21080       -keep_private_externs
21081       -multi_module
21082       -multiply_defined
21083       -multiply_defined_unused
21084       -noall_load
21085       -no_dead_strip_inits_and_terms
21086       -nofixprebinding
21087       -nomultidefs
21088       -noprebind
21089       -noseglinkedit
21090       -pagezero_size
21091       -prebind
21092       -prebind_all_twolevel_modules
21093       -private_bundle
21094       -read_only_relocs
21095       -sectalign
21096       -sectobjectsymbols
21097       -whyload
21098       -seg1addr
21099       -sectcreate
21100       -sectobjectsymbols
21101       -sectorder
21102       -segaddr
21103       -segs_read_only_addr
21104       -segs_read_write_addr
21105       -seg_addr_table
21106       -seg_addr_table_filename
21107       -seglinkedit
21108       -segprot
21109       -segs_read_only_addr
21110       -segs_read_write_addr
21111       -single_module
21112       -static
21113       -sub_library
21114       -sub_umbrella
21115       -twolevel_namespace
21116       -umbrella
21117       -undefined
21118       -unexported_symbols_list
21119       -weak_reference_mismatches
21120       -whatsloaded
21121           These options are passed to the Darwin linker.  The Darwin linker
21122           man page describes them in detail.
21123
21124       DEC Alpha Options
21125
21126       These -m options are defined for the DEC Alpha implementations:
21127
21128       -mno-soft-float
21129       -msoft-float
21130           Use (do not use) the hardware floating-point instructions for
21131           floating-point operations.  When -msoft-float is specified,
21132           functions in libgcc.a are used to perform floating-point
21133           operations.  Unless they are replaced by routines that emulate the
21134           floating-point operations, or compiled in such a way as to call
21135           such emulations routines, these routines issue floating-point
21136           operations.   If you are compiling for an Alpha without floating-
21137           point operations, you must ensure that the library is built so as
21138           not to call them.
21139
21140           Note that Alpha implementations without floating-point operations
21141           are required to have floating-point registers.
21142
21143       -mfp-reg
21144       -mno-fp-regs
21145           Generate code that uses (does not use) the floating-point register
21146           set.  -mno-fp-regs implies -msoft-float.  If the floating-point
21147           register set is not used, floating-point operands are passed in
21148           integer registers as if they were integers and floating-point
21149           results are passed in $0 instead of $f0.  This is a non-standard
21150           calling sequence, so any function with a floating-point argument or
21151           return value called by code compiled with -mno-fp-regs must also be
21152           compiled with that option.
21153
21154           A typical use of this option is building a kernel that does not
21155           use, and hence need not save and restore, any floating-point
21156           registers.
21157
21158       -mieee
21159           The Alpha architecture implements floating-point hardware optimized
21160           for maximum performance.  It is mostly compliant with the IEEE
21161           floating-point standard.  However, for full compliance, software
21162           assistance is required.  This option generates code fully IEEE-
21163           compliant code except that the inexact-flag is not maintained (see
21164           below).  If this option is turned on, the preprocessor macro
21165           "_IEEE_FP" is defined during compilation.  The resulting code is
21166           less efficient but is able to correctly support denormalized
21167           numbers and exceptional IEEE values such as not-a-number and
21168           plus/minus infinity.  Other Alpha compilers call this option
21169           -ieee_with_no_inexact.
21170
21171       -mieee-with-inexact
21172           This is like -mieee except the generated code also maintains the
21173           IEEE inexact-flag.  Turning on this option causes the generated
21174           code to implement fully-compliant IEEE math.  In addition to
21175           "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
21176           On some Alpha implementations the resulting code may execute
21177           significantly slower than the code generated by default.  Since
21178           there is very little code that depends on the inexact-flag, you
21179           should normally not specify this option.  Other Alpha compilers
21180           call this option -ieee_with_inexact.
21181
21182       -mfp-trap-mode=trap-mode
21183           This option controls what floating-point related traps are enabled.
21184           Other Alpha compilers call this option -fptm trap-mode.  The trap
21185           mode can be set to one of four values:
21186
21187           n   This is the default (normal) setting.  The only traps that are
21188               enabled are the ones that cannot be disabled in software (e.g.,
21189               division by zero trap).
21190
21191           u   In addition to the traps enabled by n, underflow traps are
21192               enabled as well.
21193
21194           su  Like u, but the instructions are marked to be safe for software
21195               completion (see Alpha architecture manual for details).
21196
21197           sui Like su, but inexact traps are enabled as well.
21198
21199       -mfp-rounding-mode=rounding-mode
21200           Selects the IEEE rounding mode.  Other Alpha compilers call this
21201           option -fprm rounding-mode.  The rounding-mode can be one of:
21202
21203           n   Normal IEEE rounding mode.  Floating-point numbers are rounded
21204               towards the nearest machine number or towards the even machine
21205               number in case of a tie.
21206
21207           m   Round towards minus infinity.
21208
21209           c   Chopped rounding mode.  Floating-point numbers are rounded
21210               towards zero.
21211
21212           d   Dynamic rounding mode.  A field in the floating-point control
21213               register (fpcr, see Alpha architecture reference manual)
21214               controls the rounding mode in effect.  The C library
21215               initializes this register for rounding towards plus infinity.
21216               Thus, unless your program modifies the fpcr, d corresponds to
21217               round towards plus infinity.
21218
21219       -mtrap-precision=trap-precision
21220           In the Alpha architecture, floating-point traps are imprecise.
21221           This means without software assistance it is impossible to recover
21222           from a floating trap and program execution normally needs to be
21223           terminated.  GCC can generate code that can assist operating system
21224           trap handlers in determining the exact location that caused a
21225           floating-point trap.  Depending on the requirements of an
21226           application, different levels of precisions can be selected:
21227
21228           p   Program precision.  This option is the default and means a trap
21229               handler can only identify which program caused a floating-point
21230               exception.
21231
21232           f   Function precision.  The trap handler can determine the
21233               function that caused a floating-point exception.
21234
21235           i   Instruction precision.  The trap handler can determine the
21236               exact instruction that caused a floating-point exception.
21237
21238           Other Alpha compilers provide the equivalent options called
21239           -scope_safe and -resumption_safe.
21240
21241       -mieee-conformant
21242           This option marks the generated code as IEEE conformant.  You must
21243           not use this option unless you also specify -mtrap-precision=i and
21244           either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is
21245           to emit the line .eflag 48 in the function prologue of the
21246           generated assembly file.
21247
21248       -mbuild-constants
21249           Normally GCC examines a 32- or 64-bit integer constant to see if it
21250           can construct it from smaller constants in two or three
21251           instructions.  If it cannot, it outputs the constant as a literal
21252           and generates code to load it from the data segment at run time.
21253
21254           Use this option to require GCC to construct all integer constants
21255           using code, even if it takes more instructions (the maximum is
21256           six).
21257
21258           You typically use this option to build a shared library dynamic
21259           loader.  Itself a shared library, it must relocate itself in memory
21260           before it can find the variables and constants in its own data
21261           segment.
21262
21263       -mbwx
21264       -mno-bwx
21265       -mcix
21266       -mno-cix
21267       -mfix
21268       -mno-fix
21269       -mmax
21270       -mno-max
21271           Indicate whether GCC should generate code to use the optional BWX,
21272           CIX, FIX and MAX instruction sets.  The default is to use the
21273           instruction sets supported by the CPU type specified via -mcpu=
21274           option or that of the CPU on which GCC was built if none is
21275           specified.
21276
21277       -mfloat-vax
21278       -mfloat-ieee
21279           Generate code that uses (does not use) VAX F and G floating-point
21280           arithmetic instead of IEEE single and double precision.
21281
21282       -mexplicit-relocs
21283       -mno-explicit-relocs
21284           Older Alpha assemblers provided no way to generate symbol
21285           relocations except via assembler macros.  Use of these macros does
21286           not allow optimal instruction scheduling.  GNU binutils as of
21287           version 2.12 supports a new syntax that allows the compiler to
21288           explicitly mark which relocations should apply to which
21289           instructions.  This option is mostly useful for debugging, as GCC
21290           detects the capabilities of the assembler when it is built and sets
21291           the default accordingly.
21292
21293       -msmall-data
21294       -mlarge-data
21295           When -mexplicit-relocs is in effect, static data is accessed via
21296           gp-relative relocations.  When -msmall-data is used, objects 8
21297           bytes long or smaller are placed in a small data area (the ".sdata"
21298           and ".sbss" sections) and are accessed via 16-bit relocations off
21299           of the $gp register.  This limits the size of the small data area
21300           to 64KB, but allows the variables to be directly accessed via a
21301           single instruction.
21302
21303           The default is -mlarge-data.  With this option the data area is
21304           limited to just below 2GB.  Programs that require more than 2GB of
21305           data must use "malloc" or "mmap" to allocate the data in the heap
21306           instead of in the program's data segment.
21307
21308           When generating code for shared libraries, -fpic implies
21309           -msmall-data and -fPIC implies -mlarge-data.
21310
21311       -msmall-text
21312       -mlarge-text
21313           When -msmall-text is used, the compiler assumes that the code of
21314           the entire program (or shared library) fits in 4MB, and is thus
21315           reachable with a branch instruction.  When -msmall-data is used,
21316           the compiler can assume that all local symbols share the same $gp
21317           value, and thus reduce the number of instructions required for a
21318           function call from 4 to 1.
21319
21320           The default is -mlarge-text.
21321
21322       -mcpu=cpu_type
21323           Set the instruction set and instruction scheduling parameters for
21324           machine type cpu_type.  You can specify either the EV style name or
21325           the corresponding chip number.  GCC supports scheduling parameters
21326           for the EV4, EV5 and EV6 family of processors and chooses the
21327           default values for the instruction set from the processor you
21328           specify.  If you do not specify a processor type, GCC defaults to
21329           the processor on which the compiler was built.
21330
21331           Supported values for cpu_type are
21332
21333           ev4
21334           ev45
21335           21064
21336               Schedules as an EV4 and has no instruction set extensions.
21337
21338           ev5
21339           21164
21340               Schedules as an EV5 and has no instruction set extensions.
21341
21342           ev56
21343           21164a
21344               Schedules as an EV5 and supports the BWX extension.
21345
21346           pca56
21347           21164pc
21348           21164PC
21349               Schedules as an EV5 and supports the BWX and MAX extensions.
21350
21351           ev6
21352           21264
21353               Schedules as an EV6 and supports the BWX, FIX, and MAX
21354               extensions.
21355
21356           ev67
21357           21264a
21358               Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
21359               extensions.
21360
21361           Native toolchains also support the value native, which selects the
21362           best architecture option for the host processor.  -mcpu=native has
21363           no effect if GCC does not recognize the processor.
21364
21365       -mtune=cpu_type
21366           Set only the instruction scheduling parameters for machine type
21367           cpu_type.  The instruction set is not changed.
21368
21369           Native toolchains also support the value native, which selects the
21370           best architecture option for the host processor.  -mtune=native has
21371           no effect if GCC does not recognize the processor.
21372
21373       -mmemory-latency=time
21374           Sets the latency the scheduler should assume for typical memory
21375           references as seen by the application.  This number is highly
21376           dependent on the memory access patterns used by the application and
21377           the size of the external cache on the machine.
21378
21379           Valid options for time are
21380
21381           number
21382               A decimal number representing clock cycles.
21383
21384           L1
21385           L2
21386           L3
21387           main
21388               The compiler contains estimates of the number of clock cycles
21389               for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
21390               (also called Dcache, Scache, and Bcache), as well as to main
21391               memory.  Note that L3 is only valid for EV5.
21392
21393       eBPF Options
21394
21395       -mframe-limit=bytes
21396           This specifies the hard limit for frame sizes, in bytes.
21397           Currently, the value that can be specified should be less than or
21398           equal to 32767.  Defaults to whatever limit is imposed by the
21399           version of the Linux kernel targeted.
21400
21401       -mkernel=version
21402           This specifies the minimum version of the kernel that will run the
21403           compiled program.  GCC uses this version to determine which
21404           instructions to use, what kernel helpers to allow, etc.  Currently,
21405           version can be one of 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8,
21406           4.9, 4.10, 4.11, 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19,
21407           4.20, 5.0, 5.1, 5.2, latest and native.
21408
21409       -mbig-endian
21410           Generate code for a big-endian target.
21411
21412       -mlittle-endian
21413           Generate code for a little-endian target.  This is the default.
21414
21415       -mjmpext
21416           Enable generation of extra conditional-branch instructions.
21417           Enabled for CPU v2 and above.
21418
21419       -mjmp32
21420           Enable 32-bit jump instructions. Enabled for CPU v3 and above.
21421
21422       -malu32
21423           Enable 32-bit ALU instructions. Enabled for CPU v3 and above.
21424
21425       -mcpu=version
21426           This specifies which version of the eBPF ISA to target. Newer
21427           versions may not be supported by all kernels. The default is v3.
21428
21429           Supported values for version are:
21430
21431           v1  The first stable eBPF ISA with no special features or
21432               extensions.
21433
21434           v2  Supports the jump extensions, as in -mjmpext.
21435
21436           v3  All features of v2, plus:
21437
21438               -<32-bit jump operations, as in -mjmp32>
21439               -<32-bit ALU operations, as in -malu32>
21440       -mco-re
21441           Enable BPF Compile Once - Run Everywhere (CO-RE) support. Requires
21442           and is implied by -gbtf.
21443
21444       -mno-co-re
21445           Disable BPF Compile Once - Run Everywhere (CO-RE) support. BPF CO-
21446           RE support is enabled by default when generating BTF debug
21447           information for the BPF target.
21448
21449       -mxbpf
21450           Generate code for an expanded version of BPF, which relaxes some of
21451           the restrictions imposed by the BPF architecture:
21452
21453           -<Save and restore callee-saved registers at function entry and>
21454               exit, respectively.
21455
21456       FR30 Options
21457
21458       These options are defined specifically for the FR30 port.
21459
21460       -msmall-model
21461           Use the small address space model.  This can produce smaller code,
21462           but it does assume that all symbolic values and addresses fit into
21463           a 20-bit range.
21464
21465       -mno-lsim
21466           Assume that runtime support has been provided and so there is no
21467           need to include the simulator library (libsim.a) on the linker
21468           command line.
21469
21470       FT32 Options
21471
21472       These options are defined specifically for the FT32 port.
21473
21474       -msim
21475           Specifies that the program will be run on the simulator.  This
21476           causes an alternate runtime startup and library to be linked.  You
21477           must not use this option when generating programs that will run on
21478           real hardware; you must provide your own runtime library for
21479           whatever I/O functions are needed.
21480
21481       -mlra
21482           Enable Local Register Allocation.  This is still experimental for
21483           FT32, so by default the compiler uses standard reload.
21484
21485       -mnodiv
21486           Do not use div and mod instructions.
21487
21488       -mft32b
21489           Enable use of the extended instructions of the FT32B processor.
21490
21491       -mcompress
21492           Compress all code using the Ft32B code compression scheme.
21493
21494       -mnopm
21495           Do not generate code that reads program memory.
21496
21497       FRV Options
21498
21499       -mgpr-32
21500           Only use the first 32 general-purpose registers.
21501
21502       -mgpr-64
21503           Use all 64 general-purpose registers.
21504
21505       -mfpr-32
21506           Use only the first 32 floating-point registers.
21507
21508       -mfpr-64
21509           Use all 64 floating-point registers.
21510
21511       -mhard-float
21512           Use hardware instructions for floating-point operations.
21513
21514       -msoft-float
21515           Use library routines for floating-point operations.
21516
21517       -malloc-cc
21518           Dynamically allocate condition code registers.
21519
21520       -mfixed-cc
21521           Do not try to dynamically allocate condition code registers, only
21522           use "icc0" and "fcc0".
21523
21524       -mdword
21525           Change ABI to use double word insns.
21526
21527       -mno-dword
21528           Do not use double word instructions.
21529
21530       -mdouble
21531           Use floating-point double instructions.
21532
21533       -mno-double
21534           Do not use floating-point double instructions.
21535
21536       -mmedia
21537           Use media instructions.
21538
21539       -mno-media
21540           Do not use media instructions.
21541
21542       -mmuladd
21543           Use multiply and add/subtract instructions.
21544
21545       -mno-muladd
21546           Do not use multiply and add/subtract instructions.
21547
21548       -mfdpic
21549           Select the FDPIC ABI, which uses function descriptors to represent
21550           pointers to functions.  Without any PIC/PIE-related options, it
21551           implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and
21552           small data are within a 12-bit range from the GOT base address;
21553           with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a
21554           bfin-elf target, this option implies -msim.
21555
21556       -minline-plt
21557           Enable inlining of PLT entries in function calls to functions that
21558           are not known to bind locally.  It has no effect without -mfdpic.
21559           It's enabled by default if optimizing for speed and compiling for
21560           shared libraries (i.e., -fPIC or -fpic), or when an optimization
21561           option such as -O3 or above is present in the command line.
21562
21563       -mTLS
21564           Assume a large TLS segment when generating thread-local code.
21565
21566       -mtls
21567           Do not assume a large TLS segment when generating thread-local
21568           code.
21569
21570       -mgprel-ro
21571           Enable the use of "GPREL" relocations in the FDPIC ABI for data
21572           that is known to be in read-only sections.  It's enabled by
21573           default, except for -fpic or -fpie: even though it may help make
21574           the global offset table smaller, it trades 1 instruction for 4.
21575           With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
21576           may be shared by multiple symbols, and it avoids the need for a GOT
21577           entry for the referenced symbol, so it's more likely to be a win.
21578           If it is not, -mno-gprel-ro can be used to disable it.
21579
21580       -multilib-library-pic
21581           Link with the (library, not FD) pic libraries.  It's implied by
21582           -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You
21583           should never have to use it explicitly.
21584
21585       -mlinked-fp
21586           Follow the EABI requirement of always creating a frame pointer
21587           whenever a stack frame is allocated.  This option is enabled by
21588           default and can be disabled with -mno-linked-fp.
21589
21590       -mlong-calls
21591           Use indirect addressing to call functions outside the current
21592           compilation unit.  This allows the functions to be placed anywhere
21593           within the 32-bit address space.
21594
21595       -malign-labels
21596           Try to align labels to an 8-byte boundary by inserting NOPs into
21597           the previous packet.  This option only has an effect when VLIW
21598           packing is enabled.  It doesn't create new packets; it merely adds
21599           NOPs to existing ones.
21600
21601       -mlibrary-pic
21602           Generate position-independent EABI code.
21603
21604       -macc-4
21605           Use only the first four media accumulator registers.
21606
21607       -macc-8
21608           Use all eight media accumulator registers.
21609
21610       -mpack
21611           Pack VLIW instructions.
21612
21613       -mno-pack
21614           Do not pack VLIW instructions.
21615
21616       -mno-eflags
21617           Do not mark ABI switches in e_flags.
21618
21619       -mcond-move
21620           Enable the use of conditional-move instructions (default).
21621
21622           This switch is mainly for debugging the compiler and will likely be
21623           removed in a future version.
21624
21625       -mno-cond-move
21626           Disable the use of conditional-move instructions.
21627
21628           This switch is mainly for debugging the compiler and will likely be
21629           removed in a future version.
21630
21631       -mscc
21632           Enable the use of conditional set instructions (default).
21633
21634           This switch is mainly for debugging the compiler and will likely be
21635           removed in a future version.
21636
21637       -mno-scc
21638           Disable the use of conditional set instructions.
21639
21640           This switch is mainly for debugging the compiler and will likely be
21641           removed in a future version.
21642
21643       -mcond-exec
21644           Enable the use of conditional execution (default).
21645
21646           This switch is mainly for debugging the compiler and will likely be
21647           removed in a future version.
21648
21649       -mno-cond-exec
21650           Disable the use of conditional execution.
21651
21652           This switch is mainly for debugging the compiler and will likely be
21653           removed in a future version.
21654
21655       -mvliw-branch
21656           Run a pass to pack branches into VLIW instructions (default).
21657
21658           This switch is mainly for debugging the compiler and will likely be
21659           removed in a future version.
21660
21661       -mno-vliw-branch
21662           Do not run a pass to pack branches into VLIW instructions.
21663
21664           This switch is mainly for debugging the compiler and will likely be
21665           removed in a future version.
21666
21667       -mmulti-cond-exec
21668           Enable optimization of "&&" and "||" in conditional execution
21669           (default).
21670
21671           This switch is mainly for debugging the compiler and will likely be
21672           removed in a future version.
21673
21674       -mno-multi-cond-exec
21675           Disable optimization of "&&" and "||" in conditional execution.
21676
21677           This switch is mainly for debugging the compiler and will likely be
21678           removed in a future version.
21679
21680       -mnested-cond-exec
21681           Enable nested conditional execution optimizations (default).
21682
21683           This switch is mainly for debugging the compiler and will likely be
21684           removed in a future version.
21685
21686       -mno-nested-cond-exec
21687           Disable nested conditional execution optimizations.
21688
21689           This switch is mainly for debugging the compiler and will likely be
21690           removed in a future version.
21691
21692       -moptimize-membar
21693           This switch removes redundant "membar" instructions from the
21694           compiler-generated code.  It is enabled by default.
21695
21696       -mno-optimize-membar
21697           This switch disables the automatic removal of redundant "membar"
21698           instructions from the generated code.
21699
21700       -mtomcat-stats
21701           Cause gas to print out tomcat statistics.
21702
21703       -mcpu=cpu
21704           Select the processor type for which to generate code.  Possible
21705           values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
21706           and simple.
21707
21708       GNU/Linux Options
21709
21710       These -m options are defined for GNU/Linux targets:
21711
21712       -mglibc
21713           Use the GNU C library.  This is the default except on
21714           *-*-linux-*uclibc*, *-*-linux-*musl* and *-*-linux-*android*
21715           targets.
21716
21717       -muclibc
21718           Use uClibc C library.  This is the default on *-*-linux-*uclibc*
21719           targets.
21720
21721       -mmusl
21722           Use the musl C library.  This is the default on *-*-linux-*musl*
21723           targets.
21724
21725       -mbionic
21726           Use Bionic C library.  This is the default on *-*-linux-*android*
21727           targets.
21728
21729       -mandroid
21730           Compile code compatible with Android platform.  This is the default
21731           on *-*-linux-*android* targets.
21732
21733           When compiling, this option enables -mbionic, -fPIC,
21734           -fno-exceptions and -fno-rtti by default.  When linking, this
21735           option makes the GCC driver pass Android-specific options to the
21736           linker.  Finally, this option causes the preprocessor macro
21737           "__ANDROID__" to be defined.
21738
21739       -tno-android-cc
21740           Disable compilation effects of -mandroid, i.e., do not enable
21741           -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
21742
21743       -tno-android-ld
21744           Disable linking effects of -mandroid, i.e., pass standard Linux
21745           linking options to the linker.
21746
21747       H8/300 Options
21748
21749       These -m options are defined for the H8/300 implementations:
21750
21751       -mrelax
21752           Shorten some address references at link time, when possible; uses
21753           the linker option -relax.
21754
21755       -mh Generate code for the H8/300H.
21756
21757       -ms Generate code for the H8S.
21758
21759       -mn Generate code for the H8S and H8/300H in the normal mode.  This
21760           switch must be used either with -mh or -ms.
21761
21762       -ms2600
21763           Generate code for the H8S/2600.  This switch must be used with -ms.
21764
21765       -mexr
21766           Extended registers are stored on stack before execution of function
21767           with monitor attribute. Default option is -mexr.  This option is
21768           valid only for H8S targets.
21769
21770       -mno-exr
21771           Extended registers are not stored on stack before execution of
21772           function with monitor attribute. Default option is -mno-exr.  This
21773           option is valid only for H8S targets.
21774
21775       -mint32
21776           Make "int" data 32 bits by default.
21777
21778       -malign-300
21779           On the H8/300H and H8S, use the same alignment rules as for the
21780           H8/300.  The default for the H8/300H and H8S is to align longs and
21781           floats on 4-byte boundaries.  -malign-300 causes them to be aligned
21782           on 2-byte boundaries.  This option has no effect on the H8/300.
21783
21784       HPPA Options
21785
21786       These -m options are defined for the HPPA family of computers:
21787
21788       -march=architecture-type
21789           Generate code for the specified architecture.  The choices for
21790           architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
21791           PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX
21792           system to determine the proper architecture option for your
21793           machine.  Code compiled for lower numbered architectures runs on
21794           higher numbered architectures, but not the other way around.
21795
21796       -mpa-risc-1-0
21797       -mpa-risc-1-1
21798       -mpa-risc-2-0
21799           Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
21800
21801       -matomic-libcalls
21802           Generate libcalls for atomic loads and stores when sync libcalls
21803           are disabled.  This option is enabled by default.  It only affects
21804           the generation of atomic libcalls by the HPPA backend.
21805
21806           Both the sync and libatomic libcall implementations use locking.
21807           As a result, processor stores are not atomic with respect to other
21808           atomic operations.  Processor loads up to DImode are atomic with
21809           respect to other atomic operations provided they are implemented as
21810           a single access.
21811
21812           The PA-RISC architecture does not support any atomic operations in
21813           hardware except for the "ldcw" instruction.  Thus, all atomic
21814           support is implemented using sync and atomic libcalls.  Sync
21815           libcall support is in libgcc.a.  Atomic libcall support is in
21816           libatomic.
21817
21818           This option generates "__atomic_exchange" calls for atomic stores.
21819           It also provides special handling for atomic DImode accesses on
21820           32-bit targets.
21821
21822       -mbig-switch
21823           Does nothing.  Preserved for backward compatibility.
21824
21825       -mcaller-copies
21826           The caller copies function arguments passed by hidden reference.
21827           This option should be used with care as it is not compatible with
21828           the default 32-bit runtime.  However, only aggregates larger than
21829           eight bytes are passed by hidden reference and the option provides
21830           better compatibility with OpenMP.
21831
21832       -mcoherent-ldcw
21833           Use ldcw/ldcd coherent cache-control hint.
21834
21835       -mdisable-fpregs
21836           Disable floating-point registers.  Equivalent to "-msoft-float".
21837
21838       -mdisable-indexing
21839           Prevent the compiler from using indexing address modes.  This
21840           avoids some rather obscure problems when compiling MIG generated
21841           code under MACH.
21842
21843       -mfast-indirect-calls
21844           Generate code that assumes calls never cross space boundaries.
21845           This allows GCC to emit code that performs faster indirect calls.
21846
21847           This option does not work in the presence of shared libraries or
21848           nested functions.
21849
21850       -mfixed-range=register-range
21851           Generate code treating the given register range as fixed registers.
21852           A fixed register is one that the register allocator cannot use.
21853           This is useful when compiling kernel code.  A register range is
21854           specified as two registers separated by a dash.  Multiple register
21855           ranges can be specified separated by a comma.
21856
21857       -mgas
21858           Enable the use of assembler directives only GAS understands.
21859
21860       -mgnu-ld
21861           Use options specific to GNU ld.  This passes -shared to ld when
21862           building a shared library.  It is the default when GCC is
21863           configured, explicitly or implicitly, with the GNU linker.  This
21864           option does not affect which ld is called; it only changes what
21865           parameters are passed to that ld.  The ld that is called is
21866           determined by the --with-ld configure option, GCC's program search
21867           path, and finally by the user's PATH.  The linker used by GCC can
21868           be printed using which `gcc -print-prog-name=ld`.  This option is
21869           only available on the 64-bit HP-UX GCC, i.e. configured with
21870           hppa*64*-*-hpux*.
21871
21872       -mhp-ld
21873           Use options specific to HP ld.  This passes -b to ld when building
21874           a shared library and passes +Accept TypeMismatch to ld on all
21875           links.  It is the default when GCC is configured, explicitly or
21876           implicitly, with the HP linker.  This option does not affect which
21877           ld is called; it only changes what parameters are passed to that
21878           ld.  The ld that is called is determined by the --with-ld configure
21879           option, GCC's program search path, and finally by the user's PATH.
21880           The linker used by GCC can be printed using which `gcc
21881           -print-prog-name=ld`.  This option is only available on the 64-bit
21882           HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
21883
21884       -mlinker-opt
21885           Enable the optimization pass in the HP-UX linker.  Note this makes
21886           symbolic debugging impossible.  It also triggers a bug in the HP-UX
21887           8 and HP-UX 9 linkers in which they give bogus error messages when
21888           linking some programs.
21889
21890       -mlong-calls
21891           Generate code that uses long call sequences.  This ensures that a
21892           call is always able to reach linker generated stubs.  The default
21893           is to generate long calls only when the distance from the call site
21894           to the beginning of the function or translation unit, as the case
21895           may be, exceeds a predefined limit set by the branch type being
21896           used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
21897           respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
21898           always limited at 240,000 bytes.
21899
21900           Distances are measured from the beginning of functions when using
21901           the -ffunction-sections option, or when using the -mgas and
21902           -mno-portable-runtime options together under HP-UX with the SOM
21903           linker.
21904
21905           It is normally not desirable to use this option as it degrades
21906           performance.  However, it may be useful in large applications,
21907           particularly when partial linking is used to build the application.
21908
21909           The types of long calls used depends on the capabilities of the
21910           assembler and linker, and the type of code being generated.  The
21911           impact on systems that support long absolute calls, and long pic
21912           symbol-difference or pc-relative calls should be relatively small.
21913           However, an indirect call is used on 32-bit ELF systems in pic code
21914           and it is quite long.
21915
21916       -mlong-load-store
21917           Generate 3-instruction load and store sequences as sometimes
21918           required by the HP-UX 10 linker.  This is equivalent to the +k
21919           option to the HP compilers.
21920
21921       -mjump-in-delay
21922           This option is ignored and provided for compatibility purposes
21923           only.
21924
21925       -mno-space-regs
21926           Generate code that assumes the target has no space registers.  This
21927           allows GCC to generate faster indirect calls and use unscaled index
21928           address modes.
21929
21930           Such code is suitable for level 0 PA systems and kernels.
21931
21932       -mordered
21933           Assume memory references are ordered and barriers are not needed.
21934
21935       -mportable-runtime
21936           Use the portable calling conventions proposed by HP for ELF
21937           systems.
21938
21939       -mschedule=cpu-type
21940           Schedule code according to the constraints for the machine type
21941           cpu-type.  The choices for cpu-type are 700 7100, 7100LC, 7200,
21942           7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system
21943           to determine the proper scheduling option for your machine.  The
21944           default scheduling is 8000.
21945
21946       -msio
21947           Generate the predefine, "_SIO", for server IO.  The default is
21948           -mwsio.  This generates the predefines, "__hp9000s700",
21949           "__hp9000s700__" and "_WSIO", for workstation IO.  These options
21950           are available under HP-UX and HI-UX.
21951
21952       -msoft-float
21953           Generate output containing library calls for floating point.
21954           Warning: the requisite libraries are not available for all HPPA
21955           targets.  Normally the facilities of the machine's usual C compiler
21956           are used, but this cannot be done directly in cross-compilation.
21957           You must make your own arrangements to provide suitable library
21958           functions for cross-compilation.
21959
21960           -msoft-float changes the calling convention in the output file;
21961           therefore, it is only useful if you compile all of a program with
21962           this option.  In particular, you need to compile libgcc.a, the
21963           library that comes with GCC, with -msoft-float in order for this to
21964           work.
21965
21966       -msoft-mult
21967           Use software integer multiplication.
21968
21969           This disables the use of the "xmpyu" instruction.
21970
21971       -munix=unix-std
21972           Generate compiler predefines and select a startfile for the
21973           specified UNIX standard.  The choices for unix-std are 93, 95 and
21974           98.  93 is supported on all HP-UX versions.  95 is available on HP-
21975           UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The
21976           default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
21977           11.00, and 98 for HP-UX 11.11 and later.
21978
21979           -munix=93 provides the same predefines as GCC 3.3 and 3.4.
21980           -munix=95 provides additional predefines for "XOPEN_UNIX" and
21981           "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o.  -munix=98
21982           provides additional predefines for "_XOPEN_UNIX",
21983           "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
21984           "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
21985
21986           It is important to note that this option changes the interfaces for
21987           various library routines.  It also affects the operational behavior
21988           of the C library.  Thus, extreme care is needed in using this
21989           option.
21990
21991           Library code that is intended to operate with more than one UNIX
21992           standard must test, set and restore the variable
21993           "__xpg4_extended_mask" as appropriate.  Most GNU software doesn't
21994           provide this capability.
21995
21996       -nolibdld
21997           Suppress the generation of link options to search libdld.sl when
21998           the -static option is specified on HP-UX 10 and later.
21999
22000       -static
22001           The HP-UX implementation of setlocale in libc has a dependency on
22002           libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
22003           when the -static option is specified, special link options are
22004           needed to resolve this dependency.
22005
22006           On HP-UX 10 and later, the GCC driver adds the necessary options to
22007           link with libdld.sl when the -static option is specified.  This
22008           causes the resulting binary to be dynamic.  On the 64-bit port, the
22009           linkers generate dynamic binaries by default in any case.  The
22010           -nolibdld option can be used to prevent the GCC driver from adding
22011           these link options.
22012
22013       -threads
22014           Add support for multithreading with the dce thread library under
22015           HP-UX.  This option sets flags for both the preprocessor and
22016           linker.
22017
22018       IA-64 Options
22019
22020       These are the -m options defined for the Intel IA-64 architecture.
22021
22022       -mbig-endian
22023           Generate code for a big-endian target.  This is the default for HP-
22024           UX.
22025
22026       -mlittle-endian
22027           Generate code for a little-endian target.  This is the default for
22028           AIX5 and GNU/Linux.
22029
22030       -mgnu-as
22031       -mno-gnu-as
22032           Generate (or don't) code for the GNU assembler.  This is the
22033           default.
22034
22035       -mgnu-ld
22036       -mno-gnu-ld
22037           Generate (or don't) code for the GNU linker.  This is the default.
22038
22039       -mno-pic
22040           Generate code that does not use a global pointer register.  The
22041           result is not position independent code, and violates the IA-64
22042           ABI.
22043
22044       -mvolatile-asm-stop
22045       -mno-volatile-asm-stop
22046           Generate (or don't) a stop bit immediately before and after
22047           volatile asm statements.
22048
22049       -mregister-names
22050       -mno-register-names
22051           Generate (or don't) in, loc, and out register names for the stacked
22052           registers.  This may make assembler output more readable.
22053
22054       -mno-sdata
22055       -msdata
22056           Disable (or enable) optimizations that use the small data section.
22057           This may be useful for working around optimizer bugs.
22058
22059       -mconstant-gp
22060           Generate code that uses a single constant global pointer value.
22061           This is useful when compiling kernel code.
22062
22063       -mauto-pic
22064           Generate code that is self-relocatable.  This implies
22065           -mconstant-gp.  This is useful when compiling firmware code.
22066
22067       -minline-float-divide-min-latency
22068           Generate code for inline divides of floating-point values using the
22069           minimum latency algorithm.
22070
22071       -minline-float-divide-max-throughput
22072           Generate code for inline divides of floating-point values using the
22073           maximum throughput algorithm.
22074
22075       -mno-inline-float-divide
22076           Do not generate inline code for divides of floating-point values.
22077
22078       -minline-int-divide-min-latency
22079           Generate code for inline divides of integer values using the
22080           minimum latency algorithm.
22081
22082       -minline-int-divide-max-throughput
22083           Generate code for inline divides of integer values using the
22084           maximum throughput algorithm.
22085
22086       -mno-inline-int-divide
22087           Do not generate inline code for divides of integer values.
22088
22089       -minline-sqrt-min-latency
22090           Generate code for inline square roots using the minimum latency
22091           algorithm.
22092
22093       -minline-sqrt-max-throughput
22094           Generate code for inline square roots using the maximum throughput
22095           algorithm.
22096
22097       -mno-inline-sqrt
22098           Do not generate inline code for "sqrt".
22099
22100       -mfused-madd
22101       -mno-fused-madd
22102           Do (don't) generate code that uses the fused multiply/add or
22103           multiply/subtract instructions.  The default is to use these
22104           instructions.
22105
22106       -mno-dwarf2-asm
22107       -mdwarf2-asm
22108           Don't (or do) generate assembler code for the DWARF line number
22109           debugging info.  This may be useful when not using the GNU
22110           assembler.
22111
22112       -mearly-stop-bits
22113       -mno-early-stop-bits
22114           Allow stop bits to be placed earlier than immediately preceding the
22115           instruction that triggered the stop bit.  This can improve
22116           instruction scheduling, but does not always do so.
22117
22118       -mfixed-range=register-range
22119           Generate code treating the given register range as fixed registers.
22120           A fixed register is one that the register allocator cannot use.
22121           This is useful when compiling kernel code.  A register range is
22122           specified as two registers separated by a dash.  Multiple register
22123           ranges can be specified separated by a comma.
22124
22125       -mtls-size=tls-size
22126           Specify bit size of immediate TLS offsets.  Valid values are 14,
22127           22, and 64.
22128
22129       -mtune=cpu-type
22130           Tune the instruction scheduling for a particular CPU, Valid values
22131           are itanium, itanium1, merced, itanium2, and mckinley.
22132
22133       -milp32
22134       -mlp64
22135           Generate code for a 32-bit or 64-bit environment.  The 32-bit
22136           environment sets int, long and pointer to 32 bits.  The 64-bit
22137           environment sets int to 32 bits and long and pointer to 64 bits.
22138           These are HP-UX specific flags.
22139
22140       -mno-sched-br-data-spec
22141       -msched-br-data-spec
22142           (Dis/En)able data speculative scheduling before reload.  This
22143           results in generation of "ld.a" instructions and the corresponding
22144           check instructions ("ld.c" / "chk.a").  The default setting is
22145           disabled.
22146
22147       -msched-ar-data-spec
22148       -mno-sched-ar-data-spec
22149           (En/Dis)able data speculative scheduling after reload.  This
22150           results in generation of "ld.a" instructions and the corresponding
22151           check instructions ("ld.c" / "chk.a").  The default setting is
22152           enabled.
22153
22154       -mno-sched-control-spec
22155       -msched-control-spec
22156           (Dis/En)able control speculative scheduling.  This feature is
22157           available only during region scheduling (i.e. before reload).  This
22158           results in generation of the "ld.s" instructions and the
22159           corresponding check instructions "chk.s".  The default setting is
22160           disabled.
22161
22162       -msched-br-in-data-spec
22163       -mno-sched-br-in-data-spec
22164           (En/Dis)able speculative scheduling of the instructions that are
22165           dependent on the data speculative loads before reload.  This is
22166           effective only with -msched-br-data-spec enabled.  The default
22167           setting is enabled.
22168
22169       -msched-ar-in-data-spec
22170       -mno-sched-ar-in-data-spec
22171           (En/Dis)able speculative scheduling of the instructions that are
22172           dependent on the data speculative loads after reload.  This is
22173           effective only with -msched-ar-data-spec enabled.  The default
22174           setting is enabled.
22175
22176       -msched-in-control-spec
22177       -mno-sched-in-control-spec
22178           (En/Dis)able speculative scheduling of the instructions that are
22179           dependent on the control speculative loads.  This is effective only
22180           with -msched-control-spec enabled.  The default setting is enabled.
22181
22182       -mno-sched-prefer-non-data-spec-insns
22183       -msched-prefer-non-data-spec-insns
22184           If enabled, data-speculative instructions are chosen for schedule
22185           only if there are no other choices at the moment.  This makes the
22186           use of the data speculation much more conservative.  The default
22187           setting is disabled.
22188
22189       -mno-sched-prefer-non-control-spec-insns
22190       -msched-prefer-non-control-spec-insns
22191           If enabled, control-speculative instructions are chosen for
22192           schedule only if there are no other choices at the moment.  This
22193           makes the use of the control speculation much more conservative.
22194           The default setting is disabled.
22195
22196       -mno-sched-count-spec-in-critical-path
22197       -msched-count-spec-in-critical-path
22198           If enabled, speculative dependencies are considered during
22199           computation of the instructions priorities.  This makes the use of
22200           the speculation a bit more conservative.  The default setting is
22201           disabled.
22202
22203       -msched-spec-ldc
22204           Use a simple data speculation check.  This option is on by default.
22205
22206       -msched-control-spec-ldc
22207           Use a simple check for control speculation.  This option is on by
22208           default.
22209
22210       -msched-stop-bits-after-every-cycle
22211           Place a stop bit after every cycle when scheduling.  This option is
22212           on by default.
22213
22214       -msched-fp-mem-deps-zero-cost
22215           Assume that floating-point stores and loads are not likely to cause
22216           a conflict when placed into the same instruction group.  This
22217           option is disabled by default.
22218
22219       -msel-sched-dont-check-control-spec
22220           Generate checks for control speculation in selective scheduling.
22221           This flag is disabled by default.
22222
22223       -msched-max-memory-insns=max-insns
22224           Limit on the number of memory insns per instruction group, giving
22225           lower priority to subsequent memory insns attempting to schedule in
22226           the same instruction group. Frequently useful to prevent cache bank
22227           conflicts.  The default value is 1.
22228
22229       -msched-max-memory-insns-hard-limit
22230           Makes the limit specified by msched-max-memory-insns a hard limit,
22231           disallowing more than that number in an instruction group.
22232           Otherwise, the limit is "soft", meaning that non-memory operations
22233           are preferred when the limit is reached, but memory operations may
22234           still be scheduled.
22235
22236       LM32 Options
22237
22238       These -m options are defined for the LatticeMico32 architecture:
22239
22240       -mbarrel-shift-enabled
22241           Enable barrel-shift instructions.
22242
22243       -mdivide-enabled
22244           Enable divide and modulus instructions.
22245
22246       -mmultiply-enabled
22247           Enable multiply instructions.
22248
22249       -msign-extend-enabled
22250           Enable sign extend instructions.
22251
22252       -muser-enabled
22253           Enable user-defined instructions.
22254
22255       LoongArch Options
22256
22257       These command-line options are defined for LoongArch targets:
22258
22259       -march=cpu-type
22260           Generate instructions for the machine type cpu-type.  In contrast
22261           to -mtune=cpu-type, which merely tunes the generated code for the
22262           specified cpu-type, -march=cpu-type allows GCC to generate code
22263           that may not run at all on processors other than the one indicated.
22264           Specifying -march=cpu-type implies -mtune=cpu-type, except where
22265           noted otherwise.
22266
22267           The choices for cpu-type are:
22268
22269           native
22270               This selects the CPU to generate code for at compilation time
22271               by determining the processor type of the compiling machine.
22272               Using -march=native enables all instruction subsets supported
22273               by the local machine (hence the result might not run on
22274               different machines).  Using -mtune=native produces code
22275               optimized for the local machine under the constraints of the
22276               selected instruction set.
22277
22278           loongarch64
22279               A generic CPU with 64-bit extensions.
22280
22281           la464
22282               LoongArch LA464 CPU with LBT, LSX, LASX, LVZ.
22283
22284       -mtune=cpu-type
22285           Optimize the output for the given processor, specified by
22286           microarchitecture name.
22287
22288       -mabi=base-abi-type
22289           Generate code for the specified calling convention.  base-abi-type
22290           can be one of:
22291
22292           lp64d
22293               Uses 64-bit general purpose registers and 32/64-bit floating-
22294               point registers for parameter passing.  Data model is LP64,
22295               where int is 32 bits, while long int and pointers are 64 bits.
22296
22297           lp64f
22298               Uses 64-bit general purpose registers and 32-bit floating-point
22299               registers for parameter passing.  Data model is LP64, where int
22300               is 32 bits, while long int and pointers are 64 bits.
22301
22302           lp64s
22303               Uses 64-bit general purpose registers and no floating-point
22304               registers for parameter passing.  Data model is LP64, where int
22305               is 32 bits, while long int and pointers are 64 bits.
22306
22307       -mfpu=fpu-type
22308           Generate code for the specified FPU type, which can be one of:
22309
22310           64  Allow the use of hardware floating-point instructions for
22311               32-bit and 64-bit operations.
22312
22313           32  Allow the use of hardware floating-point instructions for
22314               32-bit operations.
22315
22316           none
22317           0   Prevent the use of hardware floating-point instructions.
22318
22319       -msoft-float
22320           Force -mfpu=none and prevents the use of floating-point registers
22321           for parameter passing.  This option may change the target ABI.
22322
22323       -msingle-float
22324           Force -mfpu=32 and allow the use of 32-bit floating-point registers
22325           for parameter passing.  This option may change the target ABI.
22326
22327       -mdouble-float
22328           Force -mfpu=64 and allow the use of 32/64-bit floating-point
22329           registers for parameter passing.  This option may change the target
22330           ABI.
22331
22332       -mbranch-cost=n
22333           Set the cost of branches to roughly n instructions.
22334
22335       -mcheck-zero-division
22336       -mno-check-zero-divison
22337           Trap (do not trap) on integer division by zero.  The default is
22338           -mcheck-zero-division for -O0 or -Og, and -mno-check-zero-division
22339           for other optimization levels.
22340
22341       -mcond-move-int
22342       -mno-cond-move-int
22343           Conditional moves for integral data in general-purpose registers
22344           are enabled (disabled).  The default is -mcond-move-int.
22345
22346       -mcond-move-float
22347       -mno-cond-move-float
22348           Conditional moves for floating-point registers are enabled
22349           (disabled).  The default is -mcond-move-float.
22350
22351       -mmemcpy
22352       -mno-memcpy
22353           Force (do not force) the use of "memcpy" for non-trivial block
22354           moves.  The default is -mno-memcpy, which allows GCC to inline most
22355           constant-sized copies.  Setting optimization level to -Os also
22356           forces the use of "memcpy", but -mno-memcpy may override this
22357           behavior if explicitly specified, regardless of the order these
22358           options on the command line.
22359
22360       -mstrict-align
22361       -mno-strict-align
22362           Avoid or allow generating memory accesses that may not be aligned
22363           on a natural object boundary as described in the architecture
22364           specification. The default is -mno-strict-align.
22365
22366       -msmall-data-limit=number
22367           Put global and static data smaller than number bytes into a special
22368           section (on some targets).  The default value is 0.
22369
22370       -mmax-inline-memcpy-size=n
22371           Inline all block moves (such as calls to "memcpy" or structure
22372           copies) less than or equal to n bytes.  The default value of n is
22373           1024.
22374
22375       -mcmodel=code-model
22376           Set the code model to one of:
22377
22378           tiny-static (Not implemented yet)
22379           tiny (Not implemented yet)
22380           normal
22381               The text segment must be within 128MB addressing space.  The
22382               data segment must be within 2GB addressing space.
22383
22384           medium
22385               The text segment and data segment must be within 2GB addressing
22386               space.
22387
22388           large (Not implemented yet)
22389           extreme
22390               This mode does not limit the size of the code segment and data
22391               segment.  The -mcmodel=extreme option is incompatible with
22392               -fplt and -mno-explicit-relocs.
22393
22394           The default code model is "normal".
22395
22396       -mexplicit-relocs
22397       -mno-explicit-relocs
22398           Use or do not use assembler relocation operators when dealing with
22399           symbolic addresses.  The alternative is to use assembler macros
22400           instead, which may limit optimization.  The default value for the
22401           option is determined during GCC build-time by detecting
22402           corresponding assembler support: "-mexplicit-relocs" if said
22403           support is present, "-mno-explicit-relocs" otherwise.  This option
22404           is mostly useful for debugging, or interoperation with assemblers
22405           different from the build-time one.
22406
22407       -mdirect-extern-access
22408       -mno-direct-extern-access
22409           Do not use or use GOT to access external symbols.  The default is
22410           -mno-direct-extern-access: GOT is used for external symbols with
22411           default visibility, but not used for other external symbols.
22412
22413           With -mdirect-extern-access, GOT is not used and all external
22414           symbols are PC-relatively addressed.  It is only suitable for
22415           environments where no dynamic link is performed, like firmwares, OS
22416           kernels, executables linked with -static or -static-pie.
22417           -mdirect-extern-access is not compatible with -fPIC or -fpic.
22418
22419       M32C Options
22420
22421       -mcpu=name
22422           Select the CPU for which code is generated.  name may be one of r8c
22423           for the R8C/Tiny series, m16c for the M16C (up to /60) series,
22424           m32cm for the M16C/80 series, or m32c for the M32C/80 series.
22425
22426       -msim
22427           Specifies that the program will be run on the simulator.  This
22428           causes an alternate runtime library to be linked in which supports,
22429           for example, file I/O.  You must not use this option when
22430           generating programs that will run on real hardware; you must
22431           provide your own runtime library for whatever I/O functions are
22432           needed.
22433
22434       -memregs=number
22435           Specifies the number of memory-based pseudo-registers GCC uses
22436           during code generation.  These pseudo-registers are used like real
22437           registers, so there is a tradeoff between GCC's ability to fit the
22438           code into available registers, and the performance penalty of using
22439           memory instead of registers.  Note that all modules in a program
22440           must be compiled with the same value for this option.  Because of
22441           that, you must not use this option with GCC's default runtime
22442           libraries.
22443
22444       M32R/D Options
22445
22446       These -m options are defined for Renesas M32R/D architectures:
22447
22448       -m32r2
22449           Generate code for the M32R/2.
22450
22451       -m32rx
22452           Generate code for the M32R/X.
22453
22454       -m32r
22455           Generate code for the M32R.  This is the default.
22456
22457       -mmodel=small
22458           Assume all objects live in the lower 16MB of memory (so that their
22459           addresses can be loaded with the "ld24" instruction), and assume
22460           all subroutines are reachable with the "bl" instruction.  This is
22461           the default.
22462
22463           The addressability of a particular object can be set with the
22464           "model" attribute.
22465
22466       -mmodel=medium
22467           Assume objects may be anywhere in the 32-bit address space (the
22468           compiler generates "seth/add3" instructions to load their
22469           addresses), and assume all subroutines are reachable with the "bl"
22470           instruction.
22471
22472       -mmodel=large
22473           Assume objects may be anywhere in the 32-bit address space (the
22474           compiler generates "seth/add3" instructions to load their
22475           addresses), and assume subroutines may not be reachable with the
22476           "bl" instruction (the compiler generates the much slower
22477           "seth/add3/jl" instruction sequence).
22478
22479       -msdata=none
22480           Disable use of the small data area.  Variables are put into one of
22481           ".data", ".bss", or ".rodata" (unless the "section" attribute has
22482           been specified).  This is the default.
22483
22484           The small data area consists of sections ".sdata" and ".sbss".
22485           Objects may be explicitly put in the small data area with the
22486           "section" attribute using one of these sections.
22487
22488       -msdata=sdata
22489           Put small global and static data in the small data area, but do not
22490           generate special code to reference them.
22491
22492       -msdata=use
22493           Put small global and static data in the small data area, and
22494           generate special instructions to reference them.
22495
22496       -G num
22497           Put global and static objects less than or equal to num bytes into
22498           the small data or BSS sections instead of the normal data or BSS
22499           sections.  The default value of num is 8.  The -msdata option must
22500           be set to one of sdata or use for this option to have any effect.
22501
22502           All modules should be compiled with the same -G num value.
22503           Compiling with different values of num may or may not work; if it
22504           doesn't the linker gives an error message---incorrect code is not
22505           generated.
22506
22507       -mdebug
22508           Makes the M32R-specific code in the compiler display some
22509           statistics that might help in debugging programs.
22510
22511       -malign-loops
22512           Align all loops to a 32-byte boundary.
22513
22514       -mno-align-loops
22515           Do not enforce a 32-byte alignment for loops.  This is the default.
22516
22517       -missue-rate=number
22518           Issue number instructions per cycle.  number can only be 1 or 2.
22519
22520       -mbranch-cost=number
22521           number can only be 1 or 2.  If it is 1 then branches are preferred
22522           over conditional code, if it is 2, then the opposite applies.
22523
22524       -mflush-trap=number
22525           Specifies the trap number to use to flush the cache.  The default
22526           is 12.  Valid numbers are between 0 and 15 inclusive.
22527
22528       -mno-flush-trap
22529           Specifies that the cache cannot be flushed by using a trap.
22530
22531       -mflush-func=name
22532           Specifies the name of the operating system function to call to
22533           flush the cache.  The default is _flush_cache, but a function call
22534           is only used if a trap is not available.
22535
22536       -mno-flush-func
22537           Indicates that there is no OS function for flushing the cache.
22538
22539       M680x0 Options
22540
22541       These are the -m options defined for M680x0 and ColdFire processors.
22542       The default settings depend on which architecture was selected when the
22543       compiler was configured; the defaults for the most common choices are
22544       given below.
22545
22546       -march=arch
22547           Generate code for a specific M680x0 or ColdFire instruction set
22548           architecture.  Permissible values of arch for M680x0 architectures
22549           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  ColdFire
22550           architectures are selected according to Freescale's ISA
22551           classification and the permissible values are: isaa, isaaplus, isab
22552           and isac.
22553
22554           GCC defines a macro "__mcfarch__" whenever it is generating code
22555           for a ColdFire target.  The arch in this macro is one of the -march
22556           arguments given above.
22557
22558           When used together, -march and -mtune select code that runs on a
22559           family of similar processors but that is optimized for a particular
22560           microarchitecture.
22561
22562       -mcpu=cpu
22563           Generate code for a specific M680x0 or ColdFire processor.  The
22564           M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
22565           68332 and cpu32.  The ColdFire cpus are given by the table below,
22566           which also classifies the CPUs into families:
22567
22568           Family : -mcpu arguments
22569           51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
22570           5206 : 5202 5204 5206
22571           5206e : 5206e
22572           5208 : 5207 5208
22573           5211a : 5210a 5211a
22574           5213 : 5211 5212 5213
22575           5216 : 5214 5216
22576           52235 : 52230 52231 52232 52233 52234 52235
22577           5225 : 5224 5225
22578           52259 : 52252 52254 52255 52256 52258 52259
22579           5235 : 5232 5233 5234 5235 523x
22580           5249 : 5249
22581           5250 : 5250
22582           5271 : 5270 5271
22583           5272 : 5272
22584           5275 : 5274 5275
22585           5282 : 5280 5281 5282 528x
22586           53017 : 53011 53012 53013 53014 53015 53016 53017
22587           5307 : 5307
22588           5329 : 5327 5328 5329 532x
22589           5373 : 5372 5373 537x
22590           5407 : 5407
22591           5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
22592           5485
22593
22594           -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
22595           Other combinations of -mcpu and -march are rejected.
22596
22597           GCC defines the macro "__mcf_cpu_cpu" when ColdFire target cpu is
22598           selected.  It also defines "__mcf_family_family", where the value
22599           of family is given by the table above.
22600
22601       -mtune=tune
22602           Tune the code for a particular microarchitecture within the
22603           constraints set by -march and -mcpu.  The M680x0 microarchitectures
22604           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  The
22605           ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
22606
22607           You can also use -mtune=68020-40 for code that needs to run
22608           relatively well on 68020, 68030 and 68040 targets.  -mtune=68020-60
22609           is similar but includes 68060 targets as well.  These two options
22610           select the same tuning decisions as -m68020-40 and -m68020-60
22611           respectively.
22612
22613           GCC defines the macros "__mcarch" and "__mcarch__" when tuning for
22614           680x0 architecture arch.  It also defines "mcarch" unless either
22615           -ansi or a non-GNU -std option is used.  If GCC is tuning for a
22616           range of architectures, as selected by -mtune=68020-40 or
22617           -mtune=68020-60, it defines the macros for every architecture in
22618           the range.
22619
22620           GCC also defines the macro "__muarch__" when tuning for ColdFire
22621           microarchitecture uarch, where uarch is one of the arguments given
22622           above.
22623
22624       -m68000
22625       -mc68000
22626           Generate output for a 68000.  This is the default when the compiler
22627           is configured for 68000-based systems.  It is equivalent to
22628           -march=68000.
22629
22630           Use this option for microcontrollers with a 68000 or EC000 core,
22631           including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
22632
22633       -m68010
22634           Generate output for a 68010.  This is the default when the compiler
22635           is configured for 68010-based systems.  It is equivalent to
22636           -march=68010.
22637
22638       -m68020
22639       -mc68020
22640           Generate output for a 68020.  This is the default when the compiler
22641           is configured for 68020-based systems.  It is equivalent to
22642           -march=68020.
22643
22644       -m68030
22645           Generate output for a 68030.  This is the default when the compiler
22646           is configured for 68030-based systems.  It is equivalent to
22647           -march=68030.
22648
22649       -m68040
22650           Generate output for a 68040.  This is the default when the compiler
22651           is configured for 68040-based systems.  It is equivalent to
22652           -march=68040.
22653
22654           This option inhibits the use of 68881/68882 instructions that have
22655           to be emulated by software on the 68040.  Use this option if your
22656           68040 does not have code to emulate those instructions.
22657
22658       -m68060
22659           Generate output for a 68060.  This is the default when the compiler
22660           is configured for 68060-based systems.  It is equivalent to
22661           -march=68060.
22662
22663           This option inhibits the use of 68020 and 68881/68882 instructions
22664           that have to be emulated by software on the 68060.  Use this option
22665           if your 68060 does not have code to emulate those instructions.
22666
22667       -mcpu32
22668           Generate output for a CPU32.  This is the default when the compiler
22669           is configured for CPU32-based systems.  It is equivalent to
22670           -march=cpu32.
22671
22672           Use this option for microcontrollers with a CPU32 or CPU32+ core,
22673           including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
22674           68341, 68349 and 68360.
22675
22676       -m5200
22677           Generate output for a 520X ColdFire CPU.  This is the default when
22678           the compiler is configured for 520X-based systems.  It is
22679           equivalent to -mcpu=5206, and is now deprecated in favor of that
22680           option.
22681
22682           Use this option for microcontroller with a 5200 core, including the
22683           MCF5202, MCF5203, MCF5204 and MCF5206.
22684
22685       -m5206e
22686           Generate output for a 5206e ColdFire CPU.  The option is now
22687           deprecated in favor of the equivalent -mcpu=5206e.
22688
22689       -m528x
22690           Generate output for a member of the ColdFire 528X family.  The
22691           option is now deprecated in favor of the equivalent -mcpu=528x.
22692
22693       -m5307
22694           Generate output for a ColdFire 5307 CPU.  The option is now
22695           deprecated in favor of the equivalent -mcpu=5307.
22696
22697       -m5407
22698           Generate output for a ColdFire 5407 CPU.  The option is now
22699           deprecated in favor of the equivalent -mcpu=5407.
22700
22701       -mcfv4e
22702           Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
22703           This includes use of hardware floating-point instructions.  The
22704           option is equivalent to -mcpu=547x, and is now deprecated in favor
22705           of that option.
22706
22707       -m68020-40
22708           Generate output for a 68040, without using any of the new
22709           instructions.  This results in code that can run relatively
22710           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
22711           generated code does use the 68881 instructions that are emulated on
22712           the 68040.
22713
22714           The option is equivalent to -march=68020 -mtune=68020-40.
22715
22716       -m68020-60
22717           Generate output for a 68060, without using any of the new
22718           instructions.  This results in code that can run relatively
22719           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
22720           generated code does use the 68881 instructions that are emulated on
22721           the 68060.
22722
22723           The option is equivalent to -march=68020 -mtune=68020-60.
22724
22725       -mhard-float
22726       -m68881
22727           Generate floating-point instructions.  This is the default for
22728           68020 and above, and for ColdFire devices that have an FPU.  It
22729           defines the macro "__HAVE_68881__" on M680x0 targets and
22730           "__mcffpu__" on ColdFire targets.
22731
22732       -msoft-float
22733           Do not generate floating-point instructions; use library calls
22734           instead.  This is the default for 68000, 68010, and 68832 targets.
22735           It is also the default for ColdFire devices that have no FPU.
22736
22737       -mdiv
22738       -mno-div
22739           Generate (do not generate) ColdFire hardware divide and remainder
22740           instructions.  If -march is used without -mcpu, the default is "on"
22741           for ColdFire architectures and "off" for M680x0 architectures.
22742           Otherwise, the default is taken from the target CPU (either the
22743           default CPU, or the one specified by -mcpu).  For example, the
22744           default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
22745
22746           GCC defines the macro "__mcfhwdiv__" when this option is enabled.
22747
22748       -mshort
22749           Consider type "int" to be 16 bits wide, like "short int".
22750           Additionally, parameters passed on the stack are also aligned to a
22751           16-bit boundary even on targets whose API mandates promotion to
22752           32-bit.
22753
22754       -mno-short
22755           Do not consider type "int" to be 16 bits wide.  This is the
22756           default.
22757
22758       -mnobitfield
22759       -mno-bitfield
22760           Do not use the bit-field instructions.  The -m68000, -mcpu32 and
22761           -m5200 options imply -mnobitfield.
22762
22763       -mbitfield
22764           Do use the bit-field instructions.  The -m68020 option implies
22765           -mbitfield.  This is the default if you use a configuration
22766           designed for a 68020.
22767
22768       -mrtd
22769           Use a different function-calling convention, in which functions
22770           that take a fixed number of arguments return with the "rtd"
22771           instruction, which pops their arguments while returning.  This
22772           saves one instruction in the caller since there is no need to pop
22773           the arguments there.
22774
22775           This calling convention is incompatible with the one normally used
22776           on Unix, so you cannot use it if you need to call libraries
22777           compiled with the Unix compiler.
22778
22779           Also, you must provide function prototypes for all functions that
22780           take variable numbers of arguments (including "printf"); otherwise
22781           incorrect code is generated for calls to those functions.
22782
22783           In addition, seriously incorrect code results if you call a
22784           function with too many arguments.  (Normally, extra arguments are
22785           harmlessly ignored.)
22786
22787           The "rtd" instruction is supported by the 68010, 68020, 68030,
22788           68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
22789
22790           The default is -mno-rtd.
22791
22792       -malign-int
22793       -mno-align-int
22794           Control whether GCC aligns "int", "long", "long long", "float",
22795           "double", and "long double" variables on a 32-bit boundary
22796           (-malign-int) or a 16-bit boundary (-mno-align-int).  Aligning
22797           variables on 32-bit boundaries produces code that runs somewhat
22798           faster on processors with 32-bit busses at the expense of more
22799           memory.
22800
22801           Warning: if you use the -malign-int switch, GCC aligns structures
22802           containing the above types differently than most published
22803           application binary interface specifications for the m68k.
22804
22805           Use the pc-relative addressing mode of the 68000 directly, instead
22806           of using a global offset table.  At present, this option implies
22807           -fpic, allowing at most a 16-bit offset for pc-relative addressing.
22808           -fPIC is not presently supported with -mpcrel, though this could be
22809           supported for 68020 and higher processors.
22810
22811       -mno-strict-align
22812       -mstrict-align
22813           Do not (do) assume that unaligned memory references are handled by
22814           the system.
22815
22816       -msep-data
22817           Generate code that allows the data segment to be located in a
22818           different area of memory from the text segment.  This allows for
22819           execute-in-place in an environment without virtual memory
22820           management.  This option implies -fPIC.
22821
22822       -mno-sep-data
22823           Generate code that assumes that the data segment follows the text
22824           segment.  This is the default.
22825
22826       -mid-shared-library
22827           Generate code that supports shared libraries via the library ID
22828           method.  This allows for execute-in-place and shared libraries in
22829           an environment without virtual memory management.  This option
22830           implies -fPIC.
22831
22832       -mno-id-shared-library
22833           Generate code that doesn't assume ID-based shared libraries are
22834           being used.  This is the default.
22835
22836       -mshared-library-id=n
22837           Specifies the identification number of the ID-based shared library
22838           being compiled.  Specifying a value of 0 generates more compact
22839           code; specifying other values forces the allocation of that number
22840           to the current library, but is no more space- or time-efficient
22841           than omitting this option.
22842
22843       -mxgot
22844       -mno-xgot
22845           When generating position-independent code for ColdFire, generate
22846           code that works if the GOT has more than 8192 entries.  This code
22847           is larger and slower than code generated without this option.  On
22848           M680x0 processors, this option is not needed; -fPIC suffices.
22849
22850           GCC normally uses a single instruction to load values from the GOT.
22851           While this is relatively efficient, it only works if the GOT is
22852           smaller than about 64k.  Anything larger causes the linker to
22853           report an error such as:
22854
22855                   relocation truncated to fit: R_68K_GOT16O foobar
22856
22857           If this happens, you should recompile your code with -mxgot.  It
22858           should then work with very large GOTs.  However, code generated
22859           with -mxgot is less efficient, since it takes 4 instructions to
22860           fetch the value of a global symbol.
22861
22862           Note that some linkers, including newer versions of the GNU linker,
22863           can create multiple GOTs and sort GOT entries.  If you have such a
22864           linker, you should only need to use -mxgot when compiling a single
22865           object file that accesses more than 8192 GOT entries.  Very few do.
22866
22867           These options have no effect unless GCC is generating position-
22868           independent code.
22869
22870       -mlong-jump-table-offsets
22871           Use 32-bit offsets in "switch" tables.  The default is to use
22872           16-bit offsets.
22873
22874       MCore Options
22875
22876       These are the -m options defined for the Motorola M*Core processors.
22877
22878       -mhardlit
22879       -mno-hardlit
22880           Inline constants into the code stream if it can be done in two
22881           instructions or less.
22882
22883       -mdiv
22884       -mno-div
22885           Use the divide instruction.  (Enabled by default).
22886
22887       -mrelax-immediate
22888       -mno-relax-immediate
22889           Allow arbitrary-sized immediates in bit operations.
22890
22891       -mwide-bitfields
22892       -mno-wide-bitfields
22893           Always treat bit-fields as "int"-sized.
22894
22895       -m4byte-functions
22896       -mno-4byte-functions
22897           Force all functions to be aligned to a 4-byte boundary.
22898
22899       -mcallgraph-data
22900       -mno-callgraph-data
22901           Emit callgraph information.
22902
22903       -mslow-bytes
22904       -mno-slow-bytes
22905           Prefer word access when reading byte quantities.
22906
22907       -mlittle-endian
22908       -mbig-endian
22909           Generate code for a little-endian target.
22910
22911       -m210
22912       -m340
22913           Generate code for the 210 processor.
22914
22915       -mno-lsim
22916           Assume that runtime support has been provided and so omit the
22917           simulator library (libsim.a) from the linker command line.
22918
22919       -mstack-increment=size
22920           Set the maximum amount for a single stack increment operation.
22921           Large values can increase the speed of programs that contain
22922           functions that need a large amount of stack space, but they can
22923           also trigger a segmentation fault if the stack is extended too
22924           much.  The default value is 0x1000.
22925
22926       MicroBlaze Options
22927
22928       -msoft-float
22929           Use software emulation for floating point (default).
22930
22931       -mhard-float
22932           Use hardware floating-point instructions.
22933
22934       -mmemcpy
22935           Do not optimize block moves, use "memcpy".
22936
22937       -mno-clearbss
22938           This option is deprecated.  Use -fno-zero-initialized-in-bss
22939           instead.
22940
22941       -mcpu=cpu-type
22942           Use features of, and schedule code for, the given CPU.  Supported
22943           values are in the format vX.YY.Z, where X is a major version, YY is
22944           the minor version, and Z is compatibility code.  Example values are
22945           v3.00.a, v4.00.b, v5.00.a, v5.00.b, v6.00.a.
22946
22947       -mxl-soft-mul
22948           Use software multiply emulation (default).
22949
22950       -mxl-soft-div
22951           Use software emulation for divides (default).
22952
22953       -mxl-barrel-shift
22954           Use the hardware barrel shifter.
22955
22956       -mxl-pattern-compare
22957           Use pattern compare instructions.
22958
22959       -msmall-divides
22960           Use table lookup optimization for small signed integer divisions.
22961
22962       -mxl-stack-check
22963           This option is deprecated.  Use -fstack-check instead.
22964
22965       -mxl-gp-opt
22966           Use GP-relative ".sdata"/".sbss" sections.
22967
22968       -mxl-multiply-high
22969           Use multiply high instructions for high part of 32x32 multiply.
22970
22971       -mxl-float-convert
22972           Use hardware floating-point conversion instructions.
22973
22974       -mxl-float-sqrt
22975           Use hardware floating-point square root instruction.
22976
22977       -mbig-endian
22978           Generate code for a big-endian target.
22979
22980       -mlittle-endian
22981           Generate code for a little-endian target.
22982
22983       -mxl-reorder
22984           Use reorder instructions (swap and byte reversed load/store).
22985
22986       -mxl-mode-app-model
22987           Select application model app-model.  Valid models are
22988
22989           executable
22990               normal executable (default), uses startup code crt0.o.
22991
22992           xmdstub
22993               for use with Xilinx Microprocessor Debugger (XMD) based
22994               software intrusive debug agent called xmdstub. This uses
22995               startup file crt1.o and sets the start address of the program
22996               to 0x800.
22997
22998           bootstrap
22999               for applications that are loaded using a bootloader.  This
23000               model uses startup file crt2.o which does not contain a
23001               processor reset vector handler. This is suitable for
23002               transferring control on a processor reset to the bootloader
23003               rather than the application.
23004
23005           novectors
23006               for applications that do not require any of the MicroBlaze
23007               vectors. This option may be useful for applications running
23008               within a monitoring application. This model uses crt3.o as a
23009               startup file.
23010
23011           Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
23012           model.
23013
23014       -mpic-data-is-text-relative
23015           Assume that the displacement between the text and data segments is
23016           fixed at static link time.  This allows data to be referenced by
23017           offset from start of text address instead of GOT since PC-relative
23018           addressing is not supported.
23019
23020       MIPS Options
23021
23022       -EB Generate big-endian code.
23023
23024       -EL Generate little-endian code.  This is the default for mips*el-*-*
23025           configurations.
23026
23027       -march=arch
23028           Generate code that runs on arch, which can be the name of a generic
23029           MIPS ISA, or the name of a particular processor.  The ISA names
23030           are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips32r3,
23031           mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5 and
23032           mips64r6.  The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
23033           4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
23034           24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
23035           74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, i6400, i6500,
23036           interaptiv, loongson2e, loongson2f, loongson3a, gs464, gs464e,
23037           gs264e, m4k, m14k, m14kc, m14ke, m14kec, m5100, m5101, octeon,
23038           octeon+, octeon2, octeon3, orion, p5600, p6600, r2000, r3000,
23039           r3900, r4000, r4400, r4600, r4650, r4700, r5900, r6000, r8000,
23040           rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
23041           vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr
23042           and xlp.  The special value from-abi selects the most compatible
23043           architecture for the selected ABI (that is, mips1 for 32-bit ABIs
23044           and mips3 for 64-bit ABIs).
23045
23046           The native Linux/GNU toolchain also supports the value native,
23047           which selects the best architecture option for the host processor.
23048           -march=native has no effect if GCC does not recognize the
23049           processor.
23050
23051           In processor names, a final 000 can be abbreviated as k (for
23052           example, -march=r2k).  Prefixes are optional, and vr may be written
23053           r.
23054
23055           Names of the form nf2_1 refer to processors with FPUs clocked at
23056           half the rate of the core, names of the form nf1_1 refer to
23057           processors with FPUs clocked at the same rate as the core, and
23058           names of the form nf3_2 refer to processors with FPUs clocked a
23059           ratio of 3:2 with respect to the core.  For compatibility reasons,
23060           nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
23061           as synonyms for nf1_1.
23062
23063           GCC defines two macros based on the value of this option.  The
23064           first is "_MIPS_ARCH", which gives the name of target architecture,
23065           as a string.  The second has the form "_MIPS_ARCH_foo", where foo
23066           is the capitalized value of "_MIPS_ARCH".  For example,
23067           -march=r2000 sets "_MIPS_ARCH" to "r2000" and defines the macro
23068           "_MIPS_ARCH_R2000".
23069
23070           Note that the "_MIPS_ARCH" macro uses the processor names given
23071           above.  In other words, it has the full prefix and does not
23072           abbreviate 000 as k.  In the case of from-abi, the macro names the
23073           resolved architecture (either "mips1" or "mips3").  It names the
23074           default architecture when no -march option is given.
23075
23076       -mtune=arch
23077           Optimize for arch.  Among other things, this option controls the
23078           way instructions are scheduled, and the perceived cost of
23079           arithmetic operations.  The list of arch values is the same as for
23080           -march.
23081
23082           When this option is not used, GCC optimizes for the processor
23083           specified by -march.  By using -march and -mtune together, it is
23084           possible to generate code that runs on a family of processors, but
23085           optimize the code for one particular member of that family.
23086
23087           -mtune defines the macros "_MIPS_TUNE" and "_MIPS_TUNE_foo", which
23088           work in the same way as the -march ones described above.
23089
23090       -mips1
23091           Equivalent to -march=mips1.
23092
23093       -mips2
23094           Equivalent to -march=mips2.
23095
23096       -mips3
23097           Equivalent to -march=mips3.
23098
23099       -mips4
23100           Equivalent to -march=mips4.
23101
23102       -mips32
23103           Equivalent to -march=mips32.
23104
23105       -mips32r3
23106           Equivalent to -march=mips32r3.
23107
23108       -mips32r5
23109           Equivalent to -march=mips32r5.
23110
23111       -mips32r6
23112           Equivalent to -march=mips32r6.
23113
23114       -mips64
23115           Equivalent to -march=mips64.
23116
23117       -mips64r2
23118           Equivalent to -march=mips64r2.
23119
23120       -mips64r3
23121           Equivalent to -march=mips64r3.
23122
23123       -mips64r5
23124           Equivalent to -march=mips64r5.
23125
23126       -mips64r6
23127           Equivalent to -march=mips64r6.
23128
23129       -mips16
23130       -mno-mips16
23131           Generate (do not generate) MIPS16 code.  If GCC is targeting a
23132           MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
23133
23134           MIPS16 code generation can also be controlled on a per-function
23135           basis by means of "mips16" and "nomips16" attributes.
23136
23137       -mflip-mips16
23138           Generate MIPS16 code on alternating functions.  This option is
23139           provided for regression testing of mixed MIPS16/non-MIPS16 code
23140           generation, and is not intended for ordinary use in compiling user
23141           code.
23142
23143       -minterlink-compressed
23144       -mno-interlink-compressed
23145           Require (do not require) that code using the standard
23146           (uncompressed) MIPS ISA be link-compatible with MIPS16 and
23147           microMIPS code, and vice versa.
23148
23149           For example, code using the standard ISA encoding cannot jump
23150           directly to MIPS16 or microMIPS code; it must either use a call or
23151           an indirect jump.  -minterlink-compressed therefore disables direct
23152           jumps unless GCC knows that the target of the jump is not
23153           compressed.
23154
23155       -minterlink-mips16
23156       -mno-interlink-mips16
23157           Aliases of -minterlink-compressed and -mno-interlink-compressed.
23158           These options predate the microMIPS ASE and are retained for
23159           backwards compatibility.
23160
23161       -mabi=32
23162       -mabi=o64
23163       -mabi=n32
23164       -mabi=64
23165       -mabi=eabi
23166           Generate code for the given ABI.
23167
23168           Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
23169           generates 64-bit code when you select a 64-bit architecture, but
23170           you can use -mgp32 to get 32-bit code instead.
23171
23172           For information about the O64 ABI, see
23173           <https://gcc.gnu.org/projects/mipso64-abi.html>.
23174
23175           GCC supports a variant of the o32 ABI in which floating-point
23176           registers are 64 rather than 32 bits wide.  You can select this
23177           combination with -mabi=32 -mfp64.  This ABI relies on the "mthc1"
23178           and "mfhc1" instructions and is therefore only supported for
23179           MIPS32R2, MIPS32R3 and MIPS32R5 processors.
23180
23181           The register assignments for arguments and return values remain the
23182           same, but each scalar value is passed in a single 64-bit register
23183           rather than a pair of 32-bit registers.  For example, scalar
23184           floating-point values are returned in $f0 only, not a $f0/$f1 pair.
23185           The set of call-saved registers also remains the same in that the
23186           even-numbered double-precision registers are saved.
23187
23188           Two additional variants of the o32 ABI are supported to enable a
23189           transition from 32-bit to 64-bit registers.  These are FPXX
23190           (-mfpxx) and FP64A (-mfp64 -mno-odd-spreg).  The FPXX extension
23191           mandates that all code must execute correctly when run using 32-bit
23192           or 64-bit registers.  The code can be interlinked with either FP32
23193           or FP64, but not both.  The FP64A extension is similar to the FP64
23194           extension but forbids the use of odd-numbered single-precision
23195           registers.  This can be used in conjunction with the "FRE" mode of
23196           FPUs in MIPS32R5 processors and allows both FP32 and FP64A code to
23197           interlink and run in the same process without changing FPU modes.
23198
23199       -mabicalls
23200       -mno-abicalls
23201           Generate (do not generate) code that is suitable for SVR4-style
23202           dynamic objects.  -mabicalls is the default for SVR4-based systems.
23203
23204       -mshared
23205       -mno-shared
23206           Generate (do not generate) code that is fully position-independent,
23207           and that can therefore be linked into shared libraries.  This
23208           option only affects -mabicalls.
23209
23210           All -mabicalls code has traditionally been position-independent,
23211           regardless of options like -fPIC and -fpic.  However, as an
23212           extension, the GNU toolchain allows executables to use absolute
23213           accesses for locally-binding symbols.  It can also use shorter GP
23214           initialization sequences and generate direct calls to locally-
23215           defined functions.  This mode is selected by -mno-shared.
23216
23217           -mno-shared depends on binutils 2.16 or higher and generates
23218           objects that can only be linked by the GNU linker.  However, the
23219           option does not affect the ABI of the final executable; it only
23220           affects the ABI of relocatable objects.  Using -mno-shared
23221           generally makes executables both smaller and quicker.
23222
23223           -mshared is the default.
23224
23225       -mplt
23226       -mno-plt
23227           Assume (do not assume) that the static and dynamic linkers support
23228           PLTs and copy relocations.  This option only affects -mno-shared
23229           -mabicalls.  For the n64 ABI, this option has no effect without
23230           -msym32.
23231
23232           You can make -mplt the default by configuring GCC with
23233           --with-mips-plt.  The default is -mno-plt otherwise.
23234
23235       -mxgot
23236       -mno-xgot
23237           Lift (do not lift) the usual restrictions on the size of the global
23238           offset table.
23239
23240           GCC normally uses a single instruction to load values from the GOT.
23241           While this is relatively efficient, it only works if the GOT is
23242           smaller than about 64k.  Anything larger causes the linker to
23243           report an error such as:
23244
23245                   relocation truncated to fit: R_MIPS_GOT16 foobar
23246
23247           If this happens, you should recompile your code with -mxgot.  This
23248           works with very large GOTs, although the code is also less
23249           efficient, since it takes three instructions to fetch the value of
23250           a global symbol.
23251
23252           Note that some linkers can create multiple GOTs.  If you have such
23253           a linker, you should only need to use -mxgot when a single object
23254           file accesses more than 64k's worth of GOT entries.  Very few do.
23255
23256           These options have no effect unless GCC is generating position
23257           independent code.
23258
23259       -mgp32
23260           Assume that general-purpose registers are 32 bits wide.
23261
23262       -mgp64
23263           Assume that general-purpose registers are 64 bits wide.
23264
23265       -mfp32
23266           Assume that floating-point registers are 32 bits wide.
23267
23268       -mfp64
23269           Assume that floating-point registers are 64 bits wide.
23270
23271       -mfpxx
23272           Do not assume the width of floating-point registers.
23273
23274       -mhard-float
23275           Use floating-point coprocessor instructions.
23276
23277       -msoft-float
23278           Do not use floating-point coprocessor instructions.  Implement
23279           floating-point calculations using library calls instead.
23280
23281       -mno-float
23282           Equivalent to -msoft-float, but additionally asserts that the
23283           program being compiled does not perform any floating-point
23284           operations.  This option is presently supported only by some bare-
23285           metal MIPS configurations, where it may select a special set of
23286           libraries that lack all floating-point support (including, for
23287           example, the floating-point "printf" formats).  If code compiled
23288           with -mno-float accidentally contains floating-point operations, it
23289           is likely to suffer a link-time or run-time failure.
23290
23291       -msingle-float
23292           Assume that the floating-point coprocessor only supports single-
23293           precision operations.
23294
23295       -mdouble-float
23296           Assume that the floating-point coprocessor supports double-
23297           precision operations.  This is the default.
23298
23299       -modd-spreg
23300       -mno-odd-spreg
23301           Enable the use of odd-numbered single-precision floating-point
23302           registers for the o32 ABI.  This is the default for processors that
23303           are known to support these registers.  When using the o32 FPXX ABI,
23304           -mno-odd-spreg is set by default.
23305
23306       -mabs=2008
23307       -mabs=legacy
23308           These options control the treatment of the special not-a-number
23309           (NaN) IEEE 754 floating-point data with the "abs.fmt" and "neg.fmt"
23310           machine instructions.
23311
23312           By default or when -mabs=legacy is used the legacy treatment is
23313           selected.  In this case these instructions are considered
23314           arithmetic and avoided where correct operation is required and the
23315           input operand might be a NaN.  A longer sequence of instructions
23316           that manipulate the sign bit of floating-point datum manually is
23317           used instead unless the -ffinite-math-only option has also been
23318           specified.
23319
23320           The -mabs=2008 option selects the IEEE 754-2008 treatment.  In this
23321           case these instructions are considered non-arithmetic and therefore
23322           operating correctly in all cases, including in particular where the
23323           input operand is a NaN.  These instructions are therefore always
23324           used for the respective operations.
23325
23326       -mnan=2008
23327       -mnan=legacy
23328           These options control the encoding of the special not-a-number
23329           (NaN) IEEE 754 floating-point data.
23330
23331           The -mnan=legacy option selects the legacy encoding.  In this case
23332           quiet NaNs (qNaNs) are denoted by the first bit of their trailing
23333           significand field being 0, whereas signaling NaNs (sNaNs) are
23334           denoted by the first bit of their trailing significand field being
23335           1.
23336
23337           The -mnan=2008 option selects the IEEE 754-2008 encoding.  In this
23338           case qNaNs are denoted by the first bit of their trailing
23339           significand field being 1, whereas sNaNs are denoted by the first
23340           bit of their trailing significand field being 0.
23341
23342           The default is -mnan=legacy unless GCC has been configured with
23343           --with-nan=2008.
23344
23345       -mllsc
23346       -mno-llsc
23347           Use (do not use) ll, sc, and sync instructions to implement atomic
23348           memory built-in functions.  When neither option is specified, GCC
23349           uses the instructions if the target architecture supports them.
23350
23351           -mllsc is useful if the runtime environment can emulate the
23352           instructions and -mno-llsc can be useful when compiling for
23353           nonstandard ISAs.  You can make either option the default by
23354           configuring GCC with --with-llsc and --without-llsc respectively.
23355           --with-llsc is the default for some configurations; see the
23356           installation documentation for details.
23357
23358       -mdsp
23359       -mno-dsp
23360           Use (do not use) revision 1 of the MIPS DSP ASE.
23361             This option defines the preprocessor macro "__mips_dsp".  It also
23362           defines "__mips_dsp_rev" to 1.
23363
23364       -mdspr2
23365       -mno-dspr2
23366           Use (do not use) revision 2 of the MIPS DSP ASE.
23367             This option defines the preprocessor macros "__mips_dsp" and
23368           "__mips_dspr2".  It also defines "__mips_dsp_rev" to 2.
23369
23370       -msmartmips
23371       -mno-smartmips
23372           Use (do not use) the MIPS SmartMIPS ASE.
23373
23374       -mpaired-single
23375       -mno-paired-single
23376           Use (do not use) paired-single floating-point instructions.
23377             This option requires hardware floating-point support to be
23378           enabled.
23379
23380       -mdmx
23381       -mno-mdmx
23382           Use (do not use) MIPS Digital Media Extension instructions.  This
23383           option can only be used when generating 64-bit code and requires
23384           hardware floating-point support to be enabled.
23385
23386       -mips3d
23387       -mno-mips3d
23388           Use (do not use) the MIPS-3D ASE.  The option -mips3d implies
23389           -mpaired-single.
23390
23391       -mmicromips
23392       -mno-micromips
23393           Generate (do not generate) microMIPS code.
23394
23395           MicroMIPS code generation can also be controlled on a per-function
23396           basis by means of "micromips" and "nomicromips" attributes.
23397
23398       -mmt
23399       -mno-mt
23400           Use (do not use) MT Multithreading instructions.
23401
23402       -mmcu
23403       -mno-mcu
23404           Use (do not use) the MIPS MCU ASE instructions.
23405
23406       -meva
23407       -mno-eva
23408           Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
23409
23410       -mvirt
23411       -mno-virt
23412           Use (do not use) the MIPS Virtualization (VZ) instructions.
23413
23414       -mxpa
23415       -mno-xpa
23416           Use (do not use) the MIPS eXtended Physical Address (XPA)
23417           instructions.
23418
23419       -mcrc
23420       -mno-crc
23421           Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
23422           instructions.
23423
23424       -mginv
23425       -mno-ginv
23426           Use (do not use) the MIPS Global INValidate (GINV) instructions.
23427
23428       -mloongson-mmi
23429       -mno-loongson-mmi
23430           Use (do not use) the MIPS Loongson MultiMedia extensions
23431           Instructions (MMI).
23432
23433       -mloongson-ext
23434       -mno-loongson-ext
23435           Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
23436
23437       -mloongson-ext2
23438       -mno-loongson-ext2
23439           Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
23440           instructions.
23441
23442       -mlong64
23443           Force "long" types to be 64 bits wide.  See -mlong32 for an
23444           explanation of the default and the way that the pointer size is
23445           determined.
23446
23447       -mlong32
23448           Force "long", "int", and pointer types to be 32 bits wide.
23449
23450           The default size of "int"s, "long"s and pointers depends on the
23451           ABI.  All the supported ABIs use 32-bit "int"s.  The n64 ABI uses
23452           64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
23453           "long"s.  Pointers are the same size as "long"s, or the same size
23454           as integer registers, whichever is smaller.
23455
23456       -msym32
23457       -mno-sym32
23458           Assume (do not assume) that all symbols have 32-bit values,
23459           regardless of the selected ABI.  This option is useful in
23460           combination with -mabi=64 and -mno-abicalls because it allows GCC
23461           to generate shorter and faster references to symbolic addresses.
23462
23463       -G num
23464           Put definitions of externally-visible data in a small data section
23465           if that data is no bigger than num bytes.  GCC can then generate
23466           more efficient accesses to the data; see -mgpopt for details.
23467
23468           The default -G option depends on the configuration.
23469
23470       -mlocal-sdata
23471       -mno-local-sdata
23472           Extend (do not extend) the -G behavior to local data too, such as
23473           to static variables in C.  -mlocal-sdata is the default for all
23474           configurations.
23475
23476           If the linker complains that an application is using too much small
23477           data, you might want to try rebuilding the less performance-
23478           critical parts with -mno-local-sdata.  You might also want to build
23479           large libraries with -mno-local-sdata, so that the libraries leave
23480           more room for the main program.
23481
23482       -mextern-sdata
23483       -mno-extern-sdata
23484           Assume (do not assume) that externally-defined data is in a small
23485           data section if the size of that data is within the -G limit.
23486           -mextern-sdata is the default for all configurations.
23487
23488           If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
23489           Mod references a variable Var that is no bigger than num bytes, you
23490           must make sure that Var is placed in a small data section.  If Var
23491           is defined by another module, you must either compile that module
23492           with a high-enough -G setting or attach a "section" attribute to
23493           Var's definition.  If Var is common, you must link the application
23494           with a high-enough -G setting.
23495
23496           The easiest way of satisfying these restrictions is to compile and
23497           link every module with the same -G option.  However, you may wish
23498           to build a library that supports several different small data
23499           limits.  You can do this by compiling the library with the highest
23500           supported -G setting and additionally using -mno-extern-sdata to
23501           stop the library from making assumptions about externally-defined
23502           data.
23503
23504       -mgpopt
23505       -mno-gpopt
23506           Use (do not use) GP-relative accesses for symbols that are known to
23507           be in a small data section; see -G, -mlocal-sdata and
23508           -mextern-sdata.  -mgpopt is the default for all configurations.
23509
23510           -mno-gpopt is useful for cases where the $gp register might not
23511           hold the value of "_gp".  For example, if the code is part of a
23512           library that might be used in a boot monitor, programs that call
23513           boot monitor routines pass an unknown value in $gp.  (In such
23514           situations, the boot monitor itself is usually compiled with -G0.)
23515
23516           -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
23517
23518       -membedded-data
23519       -mno-embedded-data
23520           Allocate variables to the read-only data section first if possible,
23521           then next in the small data section if possible, otherwise in data.
23522           This gives slightly slower code than the default, but reduces the
23523           amount of RAM required when executing, and thus may be preferred
23524           for some embedded systems.
23525
23526       -muninit-const-in-rodata
23527       -mno-uninit-const-in-rodata
23528           Put uninitialized "const" variables in the read-only data section.
23529           This option is only meaningful in conjunction with -membedded-data.
23530
23531       -mcode-readable=setting
23532           Specify whether GCC may generate code that reads from executable
23533           sections.  There are three possible settings:
23534
23535           -mcode-readable=yes
23536               Instructions may freely access executable sections.  This is
23537               the default setting.
23538
23539           -mcode-readable=pcrel
23540               MIPS16 PC-relative load instructions can access executable
23541               sections, but other instructions must not do so.  This option
23542               is useful on 4KSc and 4KSd processors when the code TLBs have
23543               the Read Inhibit bit set.  It is also useful on processors that
23544               can be configured to have a dual instruction/data SRAM
23545               interface and that, like the M4K, automatically redirect PC-
23546               relative loads to the instruction RAM.
23547
23548           -mcode-readable=no
23549               Instructions must not access executable sections.  This option
23550               can be useful on targets that are configured to have a dual
23551               instruction/data SRAM interface but that (unlike the M4K) do
23552               not automatically redirect PC-relative loads to the instruction
23553               RAM.
23554
23555       -msplit-addresses
23556       -mno-split-addresses
23557           Enable (disable) use of the %hi() and %lo() assembler relocation
23558           operators.  This option has been superseded by -mexplicit-relocs
23559           but is retained for backwards compatibility.
23560
23561       -mexplicit-relocs
23562       -mno-explicit-relocs
23563           Use (do not use) assembler relocation operators when dealing with
23564           symbolic addresses.  The alternative, selected by
23565           -mno-explicit-relocs, is to use assembler macros instead.
23566
23567           -mexplicit-relocs is the default if GCC was configured to use an
23568           assembler that supports relocation operators.
23569
23570       -mcheck-zero-division
23571       -mno-check-zero-division
23572           Trap (do not trap) on integer division by zero.
23573
23574           The default is -mcheck-zero-division.
23575
23576       -mdivide-traps
23577       -mdivide-breaks
23578           MIPS systems check for division by zero by generating either a
23579           conditional trap or a break instruction.  Using traps results in
23580           smaller code, but is only supported on MIPS II and later.  Also,
23581           some versions of the Linux kernel have a bug that prevents trap
23582           from generating the proper signal ("SIGFPE").  Use -mdivide-traps
23583           to allow conditional traps on architectures that support them and
23584           -mdivide-breaks to force the use of breaks.
23585
23586           The default is usually -mdivide-traps, but this can be overridden
23587           at configure time using --with-divide=breaks.  Divide-by-zero
23588           checks can be completely disabled using -mno-check-zero-division.
23589
23590       -mload-store-pairs
23591       -mno-load-store-pairs
23592           Enable (disable) an optimization that pairs consecutive load or
23593           store instructions to enable load/store bonding.  This option is
23594           enabled by default but only takes effect when the selected
23595           architecture is known to support bonding.
23596
23597       -munaligned-access
23598       -mno-unaligned-access
23599           Enable (disable) direct unaligned access for MIPS Release 6.
23600           MIPSr6 requires load/store unaligned-access support, by hardware or
23601           trap&emulate.  So -mno-unaligned-access may be needed by kernel.
23602
23603       -mmemcpy
23604       -mno-memcpy
23605           Force (do not force) the use of "memcpy" for non-trivial block
23606           moves.  The default is -mno-memcpy, which allows GCC to inline most
23607           constant-sized copies.
23608
23609       -mlong-calls
23610       -mno-long-calls
23611           Disable (do not disable) use of the "jal" instruction.  Calling
23612           functions using "jal" is more efficient but requires the caller and
23613           callee to be in the same 256 megabyte segment.
23614
23615           This option has no effect on abicalls code.  The default is
23616           -mno-long-calls.
23617
23618       -mmad
23619       -mno-mad
23620           Enable (disable) use of the "mad", "madu" and "mul" instructions,
23621           as provided by the R4650 ISA.
23622
23623       -mimadd
23624       -mno-imadd
23625           Enable (disable) use of the "madd" and "msub" integer instructions.
23626           The default is -mimadd on architectures that support "madd" and
23627           "msub" except for the 74k architecture where it was found to
23628           generate slower code.
23629
23630       -mfused-madd
23631       -mno-fused-madd
23632           Enable (disable) use of the floating-point multiply-accumulate
23633           instructions, when they are available.  The default is
23634           -mfused-madd.
23635
23636           On the R8000 CPU when multiply-accumulate instructions are used,
23637           the intermediate product is calculated to infinite precision and is
23638           not subject to the FCSR Flush to Zero bit.  This may be undesirable
23639           in some circumstances.  On other processors the result is
23640           numerically identical to the equivalent computation using separate
23641           multiply, add, subtract and negate instructions.
23642
23643       -nocpp
23644           Tell the MIPS assembler to not run its preprocessor over user
23645           assembler files (with a .s suffix) when assembling them.
23646
23647       -mfix-24k
23648       -mno-fix-24k
23649           Work around the 24K E48 (lost data on stores during refill) errata.
23650           The workarounds are implemented by the assembler rather than by
23651           GCC.
23652
23653       -mfix-r4000
23654       -mno-fix-r4000
23655           Work around certain R4000 CPU errata:
23656
23657           -   A double-word or a variable shift may give an incorrect result
23658               if executed immediately after starting an integer division.
23659
23660           -   A double-word or a variable shift may give an incorrect result
23661               if executed while an integer multiplication is in progress.
23662
23663           -   An integer division may give an incorrect result if started in
23664               a delay slot of a taken branch or a jump.
23665
23666       -mfix-r4400
23667       -mno-fix-r4400
23668           Work around certain R4400 CPU errata:
23669
23670           -   A double-word or a variable shift may give an incorrect result
23671               if executed immediately after starting an integer division.
23672
23673       -mfix-r10000
23674       -mno-fix-r10000
23675           Work around certain R10000 errata:
23676
23677           -   "ll"/"sc" sequences may not behave atomically on revisions
23678               prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
23679
23680           This option can only be used if the target architecture supports
23681           branch-likely instructions.  -mfix-r10000 is the default when
23682           -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
23683
23684       -mfix-r5900
23685       -mno-fix-r5900
23686           Do not attempt to schedule the preceding instruction into the delay
23687           slot of a branch instruction placed at the end of a short loop of
23688           six instructions or fewer and always schedule a "nop" instruction
23689           there instead.  The short loop bug under certain conditions causes
23690           loops to execute only once or twice, due to a hardware bug in the
23691           R5900 chip.  The workaround is implemented by the assembler rather
23692           than by GCC.
23693
23694       -mfix-rm7000
23695       -mno-fix-rm7000
23696           Work around the RM7000 "dmult"/"dmultu" errata.  The workarounds
23697           are implemented by the assembler rather than by GCC.
23698
23699       -mfix-vr4120
23700       -mno-fix-vr4120
23701           Work around certain VR4120 errata:
23702
23703           -   "dmultu" does not always produce the correct result.
23704
23705           -   "div" and "ddiv" do not always produce the correct result if
23706               one of the operands is negative.
23707
23708           The workarounds for the division errata rely on special functions
23709           in libgcc.a.  At present, these functions are only provided by the
23710           "mips64vr*-elf" configurations.
23711
23712           Other VR4120 errata require a NOP to be inserted between certain
23713           pairs of instructions.  These errata are handled by the assembler,
23714           not by GCC itself.
23715
23716       -mfix-vr4130
23717           Work around the VR4130 "mflo"/"mfhi" errata.  The workarounds are
23718           implemented by the assembler rather than by GCC, although GCC
23719           avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
23720           "dmacc" and "dmacchi" instructions are available instead.
23721
23722       -mfix-sb1
23723       -mno-fix-sb1
23724           Work around certain SB-1 CPU core errata.  (This flag currently
23725           works around the SB-1 revision 2 "F1" and "F2" floating-point
23726           errata.)
23727
23728       -mr10k-cache-barrier=setting
23729           Specify whether GCC should insert cache barriers to avoid the side
23730           effects of speculation on R10K processors.
23731
23732           In common with many processors, the R10K tries to predict the
23733           outcome of a conditional branch and speculatively executes
23734           instructions from the "taken" branch.  It later aborts these
23735           instructions if the predicted outcome is wrong.  However, on the
23736           R10K, even aborted instructions can have side effects.
23737
23738           This problem only affects kernel stores and, depending on the
23739           system, kernel loads.  As an example, a speculatively-executed
23740           store may load the target memory into cache and mark the cache line
23741           as dirty, even if the store itself is later aborted.  If a DMA
23742           operation writes to the same area of memory before the "dirty" line
23743           is flushed, the cached data overwrites the DMA-ed data.  See the
23744           R10K processor manual for a full description, including other
23745           potential problems.
23746
23747           One workaround is to insert cache barrier instructions before every
23748           memory access that might be speculatively executed and that might
23749           have side effects even if aborted.  -mr10k-cache-barrier=setting
23750           controls GCC's implementation of this workaround.  It assumes that
23751           aborted accesses to any byte in the following regions does not have
23752           side effects:
23753
23754           1.  the memory occupied by the current function's stack frame;
23755
23756           2.  the memory occupied by an incoming stack argument;
23757
23758           3.  the memory occupied by an object with a link-time-constant
23759               address.
23760
23761           It is the kernel's responsibility to ensure that speculative
23762           accesses to these regions are indeed safe.
23763
23764           If the input program contains a function declaration such as:
23765
23766                   void foo (void);
23767
23768           then the implementation of "foo" must allow "j foo" and "jal foo"
23769           to be executed speculatively.  GCC honors this restriction for
23770           functions it compiles itself.  It expects non-GCC functions (such
23771           as hand-written assembly code) to do the same.
23772
23773           The option has three forms:
23774
23775           -mr10k-cache-barrier=load-store
23776               Insert a cache barrier before a load or store that might be
23777               speculatively executed and that might have side effects even if
23778               aborted.
23779
23780           -mr10k-cache-barrier=store
23781               Insert a cache barrier before a store that might be
23782               speculatively executed and that might have side effects even if
23783               aborted.
23784
23785           -mr10k-cache-barrier=none
23786               Disable the insertion of cache barriers.  This is the default
23787               setting.
23788
23789       -mflush-func=func
23790       -mno-flush-func
23791           Specifies the function to call to flush the I and D caches, or to
23792           not call any such function.  If called, the function must take the
23793           same arguments as the common "_flush_func", that is, the address of
23794           the memory range for which the cache is being flushed, the size of
23795           the memory range, and the number 3 (to flush both caches).  The
23796           default depends on the target GCC was configured for, but commonly
23797           is either "_flush_func" or "__cpu_flush".
23798
23799       mbranch-cost=num
23800           Set the cost of branches to roughly num "simple" instructions.
23801           This cost is only a heuristic and is not guaranteed to produce
23802           consistent results across releases.  A zero cost redundantly
23803           selects the default, which is based on the -mtune setting.
23804
23805       -mbranch-likely
23806       -mno-branch-likely
23807           Enable or disable use of Branch Likely instructions, regardless of
23808           the default for the selected architecture.  By default, Branch
23809           Likely instructions may be generated if they are supported by the
23810           selected architecture.  An exception is for the MIPS32 and MIPS64
23811           architectures and processors that implement those architectures;
23812           for those, Branch Likely instructions are not be generated by
23813           default because the MIPS32 and MIPS64 architectures specifically
23814           deprecate their use.
23815
23816       -mcompact-branches=never
23817       -mcompact-branches=optimal
23818       -mcompact-branches=always
23819           These options control which form of branches will be generated.
23820           The default is -mcompact-branches=optimal.
23821
23822           The -mcompact-branches=never option ensures that compact branch
23823           instructions will never be generated.
23824
23825           The -mcompact-branches=always option ensures that a compact branch
23826           instruction will be generated if available for MIPS Release 6
23827           onwards.  If a compact branch instruction is not available (or
23828           pre-R6), a delay slot form of the branch will be used instead.
23829
23830           If it is used for MIPS16/microMIPS targets, it will be just ignored
23831           now.  The behaviour for MIPS16/microMIPS may change in future,
23832           since they do have some compact branch instructions.
23833
23834           The -mcompact-branches=optimal option will cause a delay slot
23835           branch to be used if one is available in the current ISA and the
23836           delay slot is successfully filled.  If the delay slot is not
23837           filled, a compact branch will be chosen if one is available.
23838
23839       -mfp-exceptions
23840       -mno-fp-exceptions
23841           Specifies whether FP exceptions are enabled.  This affects how FP
23842           instructions are scheduled for some processors.  The default is
23843           that FP exceptions are enabled.
23844
23845           For instance, on the SB-1, if FP exceptions are disabled, and we
23846           are emitting 64-bit code, then we can use both FP pipes.
23847           Otherwise, we can only use one FP pipe.
23848
23849       -mvr4130-align
23850       -mno-vr4130-align
23851           The VR4130 pipeline is two-way superscalar, but can only issue two
23852           instructions together if the first one is 8-byte aligned.  When
23853           this option is enabled, GCC aligns pairs of instructions that it
23854           thinks should execute in parallel.
23855
23856           This option only has an effect when optimizing for the VR4130.  It
23857           normally makes code faster, but at the expense of making it bigger.
23858           It is enabled by default at optimization level -O3.
23859
23860       -msynci
23861       -mno-synci
23862           Enable (disable) generation of "synci" instructions on
23863           architectures that support it.  The "synci" instructions (if
23864           enabled) are generated when "__builtin___clear_cache" is compiled.
23865
23866           This option defaults to -mno-synci, but the default can be
23867           overridden by configuring GCC with --with-synci.
23868
23869           When compiling code for single processor systems, it is generally
23870           safe to use "synci".  However, on many multi-core (SMP) systems, it
23871           does not invalidate the instruction caches on all cores and may
23872           lead to undefined behavior.
23873
23874       -mrelax-pic-calls
23875       -mno-relax-pic-calls
23876           Try to turn PIC calls that are normally dispatched via register $25
23877           into direct calls.  This is only possible if the linker can resolve
23878           the destination at link time and if the destination is within range
23879           for a direct call.
23880
23881           -mrelax-pic-calls is the default if GCC was configured to use an
23882           assembler and a linker that support the ".reloc" assembly directive
23883           and -mexplicit-relocs is in effect.  With -mno-explicit-relocs,
23884           this optimization can be performed by the assembler and the linker
23885           alone without help from the compiler.
23886
23887       -mmcount-ra-address
23888       -mno-mcount-ra-address
23889           Emit (do not emit) code that allows "_mcount" to modify the calling
23890           function's return address.  When enabled, this option extends the
23891           usual "_mcount" interface with a new ra-address parameter, which
23892           has type "intptr_t *" and is passed in register $12.  "_mcount" can
23893           then modify the return address by doing both of the following:
23894
23895           *   Returning the new address in register $31.
23896
23897           *   Storing the new address in "*ra-address", if ra-address is
23898               nonnull.
23899
23900           The default is -mno-mcount-ra-address.
23901
23902       -mframe-header-opt
23903       -mno-frame-header-opt
23904           Enable (disable) frame header optimization in the o32 ABI.  When
23905           using the o32 ABI, calling functions will allocate 16 bytes on the
23906           stack for the called function to write out register arguments.
23907           When enabled, this optimization will suppress the allocation of the
23908           frame header if it can be determined that it is unused.
23909
23910           This optimization is off by default at all optimization levels.
23911
23912       -mlxc1-sxc1
23913       -mno-lxc1-sxc1
23914           When applicable, enable (disable) the generation of "lwxc1",
23915           "swxc1", "ldxc1", "sdxc1" instructions.  Enabled by default.
23916
23917       -mmadd4
23918       -mno-madd4
23919           When applicable, enable (disable) the generation of 4-operand
23920           "madd.s", "madd.d" and related instructions.  Enabled by default.
23921
23922       MMIX Options
23923
23924       These options are defined for the MMIX:
23925
23926       -mlibfuncs
23927       -mno-libfuncs
23928           Specify that intrinsic library functions are being compiled,
23929           passing all values in registers, no matter the size.
23930
23931       -mepsilon
23932       -mno-epsilon
23933           Generate floating-point comparison instructions that compare with
23934           respect to the "rE" epsilon register.
23935
23936       -mabi=mmixware
23937       -mabi=gnu
23938           Generate code that passes function parameters and return values
23939           that (in the called function) are seen as registers $0 and up, as
23940           opposed to the GNU ABI which uses global registers $231 and up.
23941
23942       -mzero-extend
23943       -mno-zero-extend
23944           When reading data from memory in sizes shorter than 64 bits, use
23945           (do not use) zero-extending load instructions by default, rather
23946           than sign-extending ones.
23947
23948       -mknuthdiv
23949       -mno-knuthdiv
23950           Make the result of a division yielding a remainder have the same
23951           sign as the divisor.  With the default, -mno-knuthdiv, the sign of
23952           the remainder follows the sign of the dividend.  Both methods are
23953           arithmetically valid, the latter being almost exclusively used.
23954
23955       -mtoplevel-symbols
23956       -mno-toplevel-symbols
23957           Prepend (do not prepend) a : to all global symbols, so the assembly
23958           code can be used with the "PREFIX" assembly directive.
23959
23960       -melf
23961           Generate an executable in the ELF format, rather than the default
23962           mmo format used by the mmix simulator.
23963
23964       -mbranch-predict
23965       -mno-branch-predict
23966           Use (do not use) the probable-branch instructions, when static
23967           branch prediction indicates a probable branch.
23968
23969       -mbase-addresses
23970       -mno-base-addresses
23971           Generate (do not generate) code that uses base addresses.  Using a
23972           base address automatically generates a request (handled by the
23973           assembler and the linker) for a constant to be set up in a global
23974           register.  The register is used for one or more base address
23975           requests within the range 0 to 255 from the value held in the
23976           register.  The generally leads to short and fast code, but the
23977           number of different data items that can be addressed is limited.
23978           This means that a program that uses lots of static data may require
23979           -mno-base-addresses.
23980
23981       -msingle-exit
23982       -mno-single-exit
23983           Force (do not force) generated code to have a single exit point in
23984           each function.
23985
23986       MN10300 Options
23987
23988       These -m options are defined for Matsushita MN10300 architectures:
23989
23990       -mmult-bug
23991           Generate code to avoid bugs in the multiply instructions for the
23992           MN10300 processors.  This is the default.
23993
23994       -mno-mult-bug
23995           Do not generate code to avoid bugs in the multiply instructions for
23996           the MN10300 processors.
23997
23998       -mam33
23999           Generate code using features specific to the AM33 processor.
24000
24001       -mno-am33
24002           Do not generate code using features specific to the AM33 processor.
24003           This is the default.
24004
24005       -mam33-2
24006           Generate code using features specific to the AM33/2.0 processor.
24007
24008       -mam34
24009           Generate code using features specific to the AM34 processor.
24010
24011       -mtune=cpu-type
24012           Use the timing characteristics of the indicated CPU type when
24013           scheduling instructions.  This does not change the targeted
24014           processor type.  The CPU type must be one of mn10300, am33, am33-2
24015           or am34.
24016
24017       -mreturn-pointer-on-d0
24018           When generating a function that returns a pointer, return the
24019           pointer in both "a0" and "d0".  Otherwise, the pointer is returned
24020           only in "a0", and attempts to call such functions without a
24021           prototype result in errors.  Note that this option is on by
24022           default; use -mno-return-pointer-on-d0 to disable it.
24023
24024       -mno-crt0
24025           Do not link in the C run-time initialization object file.
24026
24027       -mrelax
24028           Indicate to the linker that it should perform a relaxation
24029           optimization pass to shorten branches, calls and absolute memory
24030           addresses.  This option only has an effect when used on the command
24031           line for the final link step.
24032
24033           This option makes symbolic debugging impossible.
24034
24035       -mliw
24036           Allow the compiler to generate Long Instruction Word instructions
24037           if the target is the AM33 or later.  This is the default.  This
24038           option defines the preprocessor macro "__LIW__".
24039
24040       -mno-liw
24041           Do not allow the compiler to generate Long Instruction Word
24042           instructions.  This option defines the preprocessor macro
24043           "__NO_LIW__".
24044
24045       -msetlb
24046           Allow the compiler to generate the SETLB and Lcc instructions if
24047           the target is the AM33 or later.  This is the default.  This option
24048           defines the preprocessor macro "__SETLB__".
24049
24050       -mno-setlb
24051           Do not allow the compiler to generate SETLB or Lcc instructions.
24052           This option defines the preprocessor macro "__NO_SETLB__".
24053
24054       Moxie Options
24055
24056       -meb
24057           Generate big-endian code.  This is the default for moxie-*-*
24058           configurations.
24059
24060       -mel
24061           Generate little-endian code.
24062
24063       -mmul.x
24064           Generate mul.x and umul.x instructions.  This is the default for
24065           moxiebox-*-* configurations.
24066
24067       -mno-crt0
24068           Do not link in the C run-time initialization object file.
24069
24070       MSP430 Options
24071
24072       These options are defined for the MSP430:
24073
24074       -masm-hex
24075           Force assembly output to always use hex constants.  Normally such
24076           constants are signed decimals, but this option is available for
24077           testsuite and/or aesthetic purposes.
24078
24079       -mmcu=
24080           Select the MCU to target.  This is used to create a C preprocessor
24081           symbol based upon the MCU name, converted to upper case and pre-
24082           and post-fixed with __.  This in turn is used by the msp430.h
24083           header file to select an MCU-specific supplementary header file.
24084
24085           The option also sets the ISA to use.  If the MCU name is one that
24086           is known to only support the 430 ISA then that is selected,
24087           otherwise the 430X ISA is selected.  A generic MCU name of msp430
24088           can also be used to select the 430 ISA.  Similarly the generic
24089           msp430x MCU name selects the 430X ISA.
24090
24091           In addition an MCU-specific linker script is added to the linker
24092           command line.  The script's name is the name of the MCU with .ld
24093           appended.  Thus specifying -mmcu=xxx on the gcc command line
24094           defines the C preprocessor symbol "__XXX__" and cause the linker to
24095           search for a script called xxx.ld.
24096
24097           The ISA and hardware multiply supported for the different MCUs is
24098           hard-coded into GCC.  However, an external devices.csv file can be
24099           used to extend device support beyond those that have been hard-
24100           coded.
24101
24102           GCC searches for the devices.csv file using the following methods
24103           in the given precedence order, where the first method takes
24104           precendence over the second which takes precedence over the third.
24105
24106           Include path specified with "-I" and "-L"
24107               devices.csv will be searched for in each of the directories
24108               specified by include paths and linker library search paths.
24109
24110           Path specified by the environment variable MSP430_GCC_INCLUDE_DIR
24111               Define the value of the global environment variable
24112               MSP430_GCC_INCLUDE_DIR to the full path to the directory
24113               containing devices.csv, and GCC will search this directory for
24114               devices.csv.  If devices.csv is found, this directory will also
24115               be registered as an include path, and linker library path.
24116               Header files and linker scripts in this directory can therefore
24117               be used without manually specifying "-I" and "-L" on the
24118               command line.
24119
24120           The msp430-elf{,bare}/include/devices directory
24121               Finally, GCC will examine msp430-elf{,bare}/include/devices
24122               from the toolchain root directory.  This directory does not
24123               exist in a default installation, but if the user has created it
24124               and copied devices.csv there, then the MCU data will be read.
24125               As above, this directory will also be registered as an include
24126               path, and linker library path.
24127
24128           If none of the above search methods find devices.csv, then the
24129           hard-coded MCU data is used.
24130
24131       -mwarn-mcu
24132       -mno-warn-mcu
24133           This option enables or disables warnings about conflicts between
24134           the MCU name specified by the -mmcu option and the ISA set by the
24135           -mcpu option and/or the hardware multiply support set by the
24136           -mhwmult option.  It also toggles warnings about unrecognized MCU
24137           names.  This option is on by default.
24138
24139       -mcpu=
24140           Specifies the ISA to use.  Accepted values are msp430, msp430x and
24141           msp430xv2.  This option is deprecated.  The -mmcu= option should be
24142           used to select the ISA.
24143
24144       -msim
24145           Link to the simulator runtime libraries and linker script.
24146           Overrides any scripts that would be selected by the -mmcu= option.
24147
24148       -mlarge
24149           Use large-model addressing (20-bit pointers, 20-bit "size_t").
24150
24151       -msmall
24152           Use small-model addressing (16-bit pointers, 16-bit "size_t").
24153
24154       -mrelax
24155           This option is passed to the assembler and linker, and allows the
24156           linker to perform certain optimizations that cannot be done until
24157           the final link.
24158
24159       mhwmult=
24160           Describes the type of hardware multiply supported by the target.
24161           Accepted values are none for no hardware multiply, 16bit for the
24162           original 16-bit-only multiply supported by early MCUs.  32bit for
24163           the 16/32-bit multiply supported by later MCUs and f5series for the
24164           16/32-bit multiply supported by F5-series MCUs.  A value of auto
24165           can also be given.  This tells GCC to deduce the hardware multiply
24166           support based upon the MCU name provided by the -mmcu option.  If
24167           no -mmcu option is specified or if the MCU name is not recognized
24168           then no hardware multiply support is assumed.  "auto" is the
24169           default setting.
24170
24171           Hardware multiplies are normally performed by calling a library
24172           routine.  This saves space in the generated code.  When compiling
24173           at -O3 or higher however the hardware multiplier is invoked inline.
24174           This makes for bigger, but faster code.
24175
24176           The hardware multiply routines disable interrupts whilst running
24177           and restore the previous interrupt state when they finish.  This
24178           makes them safe to use inside interrupt handlers as well as in
24179           normal code.
24180
24181       -minrt
24182           Enable the use of a minimum runtime environment - no static
24183           initializers or constructors.  This is intended for memory-
24184           constrained devices.  The compiler includes special symbols in some
24185           objects that tell the linker and runtime which code fragments are
24186           required.
24187
24188       -mtiny-printf
24189           Enable reduced code size "printf" and "puts" library functions.
24190           The tiny implementations of these functions are not reentrant, so
24191           must be used with caution in multi-threaded applications.
24192
24193           Support for streams has been removed and the string to be printed
24194           will always be sent to stdout via the "write" syscall.  The string
24195           is not buffered before it is sent to write.
24196
24197           This option requires Newlib Nano IO, so GCC must be configured with
24198           --enable-newlib-nano-formatted-io.
24199
24200       -mmax-inline-shift=
24201           This option takes an integer between 0 and 64 inclusive, and sets
24202           the maximum number of inline shift instructions which should be
24203           emitted to perform a shift operation by a constant amount.  When
24204           this value needs to be exceeded, an mspabi helper function is used
24205           instead.  The default value is 4.
24206
24207           This only affects cases where a shift by multiple positions cannot
24208           be completed with a single instruction (e.g. all shifts >1 on the
24209           430 ISA).
24210
24211           Shifts of a 32-bit value are at least twice as costly, so the value
24212           passed for this option is divided by 2 and the resulting value used
24213           instead.
24214
24215       -mcode-region=
24216       -mdata-region=
24217           These options tell the compiler where to place functions and data
24218           that do not have one of the "lower", "upper", "either" or "section"
24219           attributes.  Possible values are "lower", "upper", "either" or
24220           "any".  The first three behave like the corresponding attribute.
24221           The fourth possible value - "any" - is the default.  It leaves
24222           placement entirely up to the linker script and how it assigns the
24223           standard sections (".text", ".data", etc) to the memory regions.
24224
24225       -msilicon-errata=
24226           This option passes on a request to assembler to enable the fixes
24227           for the named silicon errata.
24228
24229       -msilicon-errata-warn=
24230           This option passes on a request to the assembler to enable warning
24231           messages when a silicon errata might need to be applied.
24232
24233       -mwarn-devices-csv
24234       -mno-warn-devices-csv
24235           Warn if devices.csv is not found or there are problem parsing it
24236           (default: on).
24237
24238       NDS32 Options
24239
24240       These options are defined for NDS32 implementations:
24241
24242       -mbig-endian
24243           Generate code in big-endian mode.
24244
24245       -mlittle-endian
24246           Generate code in little-endian mode.
24247
24248       -mreduced-regs
24249           Use reduced-set registers for register allocation.
24250
24251       -mfull-regs
24252           Use full-set registers for register allocation.
24253
24254       -mcmov
24255           Generate conditional move instructions.
24256
24257       -mno-cmov
24258           Do not generate conditional move instructions.
24259
24260       -mext-perf
24261           Generate performance extension instructions.
24262
24263       -mno-ext-perf
24264           Do not generate performance extension instructions.
24265
24266       -mext-perf2
24267           Generate performance extension 2 instructions.
24268
24269       -mno-ext-perf2
24270           Do not generate performance extension 2 instructions.
24271
24272       -mext-string
24273           Generate string extension instructions.
24274
24275       -mno-ext-string
24276           Do not generate string extension instructions.
24277
24278       -mv3push
24279           Generate v3 push25/pop25 instructions.
24280
24281       -mno-v3push
24282           Do not generate v3 push25/pop25 instructions.
24283
24284       -m16-bit
24285           Generate 16-bit instructions.
24286
24287       -mno-16-bit
24288           Do not generate 16-bit instructions.
24289
24290       -misr-vector-size=num
24291           Specify the size of each interrupt vector, which must be 4 or 16.
24292
24293       -mcache-block-size=num
24294           Specify the size of each cache block, which must be a power of 2
24295           between 4 and 512.
24296
24297       -march=arch
24298           Specify the name of the target architecture.
24299
24300       -mcmodel=code-model
24301           Set the code model to one of
24302
24303           small
24304               All the data and read-only data segments must be within 512KB
24305               addressing space.  The text segment must be within 16MB
24306               addressing space.
24307
24308           medium
24309               The data segment must be within 512KB while the read-only data
24310               segment can be within 4GB addressing space.  The text segment
24311               should be still within 16MB addressing space.
24312
24313           large
24314               All the text and data segments can be within 4GB addressing
24315               space.
24316
24317       -mctor-dtor
24318           Enable constructor/destructor feature.
24319
24320       -mrelax
24321           Guide linker to relax instructions.
24322
24323       Nios II Options
24324
24325       These are the options defined for the Altera Nios II processor.
24326
24327       -G num
24328           Put global and static objects less than or equal to num bytes into
24329           the small data or BSS sections instead of the normal data or BSS
24330           sections.  The default value of num is 8.
24331
24332       -mgpopt=option
24333       -mgpopt
24334       -mno-gpopt
24335           Generate (do not generate) GP-relative accesses.  The following
24336           option names are recognized:
24337
24338           none
24339               Do not generate GP-relative accesses.
24340
24341           local
24342               Generate GP-relative accesses for small data objects that are
24343               not external, weak, or uninitialized common symbols.  Also use
24344               GP-relative addressing for objects that have been explicitly
24345               placed in a small data section via a "section" attribute.
24346
24347           global
24348               As for local, but also generate GP-relative accesses for small
24349               data objects that are external, weak, or common.  If you use
24350               this option, you must ensure that all parts of your program
24351               (including libraries) are compiled with the same -G setting.
24352
24353           data
24354               Generate GP-relative accesses for all data objects in the
24355               program.  If you use this option, the entire data and BSS
24356               segments of your program must fit in 64K of memory and you must
24357               use an appropriate linker script to allocate them within the
24358               addressable range of the global pointer.
24359
24360           all Generate GP-relative addresses for function pointers as well as
24361               data pointers.  If you use this option, the entire text, data,
24362               and BSS segments of your program must fit in 64K of memory and
24363               you must use an appropriate linker script to allocate them
24364               within the addressable range of the global pointer.
24365
24366           -mgpopt is equivalent to -mgpopt=local, and -mno-gpopt is
24367           equivalent to -mgpopt=none.
24368
24369           The default is -mgpopt except when -fpic or -fPIC is specified to
24370           generate position-independent code.  Note that the Nios II ABI does
24371           not permit GP-relative accesses from shared libraries.
24372
24373           You may need to specify -mno-gpopt explicitly when building
24374           programs that include large amounts of small data, including large
24375           GOT data sections.  In this case, the 16-bit offset for GP-relative
24376           addressing may not be large enough to allow access to the entire
24377           small data section.
24378
24379       -mgprel-sec=regexp
24380           This option specifies additional section names that can be accessed
24381           via GP-relative addressing.  It is most useful in conjunction with
24382           "section" attributes on variable declarations and a custom linker
24383           script.  The regexp is a POSIX Extended Regular Expression.
24384
24385           This option does not affect the behavior of the -G option, and the
24386           specified sections are in addition to the standard ".sdata" and
24387           ".sbss" small-data sections that are recognized by -mgpopt.
24388
24389       -mr0rel-sec=regexp
24390           This option specifies names of sections that can be accessed via a
24391           16-bit offset from "r0"; that is, in the low 32K or high 32K of the
24392           32-bit address space.  It is most useful in conjunction with
24393           "section" attributes on variable declarations and a custom linker
24394           script.  The regexp is a POSIX Extended Regular Expression.
24395
24396           In contrast to the use of GP-relative addressing for small data,
24397           zero-based addressing is never generated by default and there are
24398           no conventional section names used in standard linker scripts for
24399           sections in the low or high areas of memory.
24400
24401       -mel
24402       -meb
24403           Generate little-endian (default) or big-endian (experimental) code,
24404           respectively.
24405
24406       -march=arch
24407           This specifies the name of the target Nios II architecture.  GCC
24408           uses this name to determine what kind of instructions it can emit
24409           when generating assembly code.  Permissible names are: r1, r2.
24410
24411           The preprocessor macro "__nios2_arch__" is available to programs,
24412           with value 1 or 2, indicating the targeted ISA level.
24413
24414       -mbypass-cache
24415       -mno-bypass-cache
24416           Force all load and store instructions to always bypass cache by
24417           using I/O variants of the instructions. The default is not to
24418           bypass the cache.
24419
24420       -mno-cache-volatile
24421       -mcache-volatile
24422           Volatile memory access bypass the cache using the I/O variants of
24423           the load and store instructions. The default is not to bypass the
24424           cache.
24425
24426       -mno-fast-sw-div
24427       -mfast-sw-div
24428           Do not use table-based fast divide for small numbers. The default
24429           is to use the fast divide at -O3 and above.
24430
24431       -mno-hw-mul
24432       -mhw-mul
24433       -mno-hw-mulx
24434       -mhw-mulx
24435       -mno-hw-div
24436       -mhw-div
24437           Enable or disable emitting "mul", "mulx" and "div" family of
24438           instructions by the compiler. The default is to emit "mul" and not
24439           emit "div" and "mulx".
24440
24441       -mbmx
24442       -mno-bmx
24443       -mcdx
24444       -mno-cdx
24445           Enable or disable generation of Nios II R2 BMX (bit manipulation)
24446           and CDX (code density) instructions.  Enabling these instructions
24447           also requires -march=r2.  Since these instructions are optional
24448           extensions to the R2 architecture, the default is not to emit them.
24449
24450       -mcustom-insn=N
24451       -mno-custom-insn
24452           Each -mcustom-insn=N option enables use of a custom instruction
24453           with encoding N when generating code that uses insn.  For example,
24454           -mcustom-fadds=253 generates custom instruction 253 for single-
24455           precision floating-point add operations instead of the default
24456           behavior of using a library call.
24457
24458           The following values of insn are supported.  Except as otherwise
24459           noted, floating-point operations are expected to be implemented
24460           with normal IEEE 754 semantics and correspond directly to the C
24461           operators or the equivalent GCC built-in functions.
24462
24463           Single-precision floating point:
24464
24465           fadds, fsubs, fdivs, fmuls
24466               Binary arithmetic operations.
24467
24468           fnegs
24469               Unary negation.
24470
24471           fabss
24472               Unary absolute value.
24473
24474           fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
24475               Comparison operations.
24476
24477           fmins, fmaxs
24478               Floating-point minimum and maximum.  These instructions are
24479               only generated if -ffinite-math-only is specified.
24480
24481           fsqrts
24482               Unary square root operation.
24483
24484           fcoss, fsins, ftans, fatans, fexps, flogs
24485               Floating-point trigonometric and exponential functions.  These
24486               instructions are only generated if -funsafe-math-optimizations
24487               is also specified.
24488
24489           Double-precision floating point:
24490
24491           faddd, fsubd, fdivd, fmuld
24492               Binary arithmetic operations.
24493
24494           fnegd
24495               Unary negation.
24496
24497           fabsd
24498               Unary absolute value.
24499
24500           fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
24501               Comparison operations.
24502
24503           fmind, fmaxd
24504               Double-precision minimum and maximum.  These instructions are
24505               only generated if -ffinite-math-only is specified.
24506
24507           fsqrtd
24508               Unary square root operation.
24509
24510           fcosd, fsind, ftand, fatand, fexpd, flogd
24511               Double-precision trigonometric and exponential functions.
24512               These instructions are only generated if
24513               -funsafe-math-optimizations is also specified.
24514
24515           Conversions:
24516
24517           fextsd
24518               Conversion from single precision to double precision.
24519
24520           ftruncds
24521               Conversion from double precision to single precision.
24522
24523           fixsi, fixsu, fixdi, fixdu
24524               Conversion from floating point to signed or unsigned integer
24525               types, with truncation towards zero.
24526
24527           round
24528               Conversion from single-precision floating point to signed
24529               integer, rounding to the nearest integer and ties away from
24530               zero.  This corresponds to the "__builtin_lroundf" function
24531               when -fno-math-errno is used.
24532
24533           floatis, floatus, floatid, floatud
24534               Conversion from signed or unsigned integer types to floating-
24535               point types.
24536
24537           In addition, all of the following transfer instructions for
24538           internal registers X and Y must be provided to use any of the
24539           double-precision floating-point instructions.  Custom instructions
24540           taking two double-precision source operands expect the first
24541           operand in the 64-bit register X.  The other operand (or only
24542           operand of a unary operation) is given to the custom arithmetic
24543           instruction with the least significant half in source register src1
24544           and the most significant half in src2.  A custom instruction that
24545           returns a double-precision result returns the most significant 32
24546           bits in the destination register and the other half in 32-bit
24547           register Y.  GCC automatically generates the necessary code
24548           sequences to write register X and/or read register Y when double-
24549           precision floating-point instructions are used.
24550
24551           fwrx
24552               Write src1 into the least significant half of X and src2 into
24553               the most significant half of X.
24554
24555           fwry
24556               Write src1 into Y.
24557
24558           frdxhi, frdxlo
24559               Read the most or least (respectively) significant half of X and
24560               store it in dest.
24561
24562           frdy
24563               Read the value of Y and store it into dest.
24564
24565           Note that you can gain more local control over generation of Nios
24566           II custom instructions by using the target("custom-insn=N") and
24567           target("no-custom-insn") function attributes or pragmas.
24568
24569       -mcustom-fpu-cfg=name
24570           This option enables a predefined, named set of custom instruction
24571           encodings (see -mcustom-insn above).  Currently, the following sets
24572           are defined:
24573
24574           -mcustom-fpu-cfg=60-1 is equivalent to: -mcustom-fmuls=252
24575           -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-precision-constant
24576
24577           -mcustom-fpu-cfg=60-2 is equivalent to: -mcustom-fmuls=252
24578           -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255
24579           -fsingle-precision-constant
24580
24581           -mcustom-fpu-cfg=72-3 is equivalent to: -mcustom-floatus=243
24582           -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246
24583           -mcustom-fcmples=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251
24584           -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
24585           -mcustom-fdivs=255 -fsingle-precision-constant
24586
24587           -mcustom-fpu-cfg=fph2 is equivalent to: -mcustom-fabss=224
24588           -mcustom-fnegs=225 -mcustom-fcmpnes=226 -mcustom-fcmpeqs=227
24589           -mcustom-fcmpges=228 -mcustom-fcmpgts=229 -mcustom-fcmples=230
24590           -mcustom-fcmplts=231 -mcustom-fmaxs=232 -mcustom-fmins=233
24591           -mcustom-round=248 -mcustom-fixsi=249 -mcustom-floatis=250
24592           -mcustom-fsqrts=251 -mcustom-fmuls=252 -mcustom-fadds=253
24593           -mcustom-fsubs=254 -mcustom-fdivs=255
24594
24595           Custom instruction assignments given by individual -mcustom-insn=
24596           options override those given by -mcustom-fpu-cfg=, regardless of
24597           the order of the options on the command line.
24598
24599           Note that you can gain more local control over selection of a FPU
24600           configuration by using the target("custom-fpu-cfg=name") function
24601           attribute or pragma.
24602
24603           The name fph2 is an abbreviation for Nios II Floating Point
24604           Hardware 2 Component.  Please note that the custom instructions
24605           enabled by -mcustom-fmins=233 and -mcustom-fmaxs=234 are only
24606           generated if -ffinite-math-only is specified.  The custom
24607           instruction enabled by -mcustom-round=248 is only generated if
24608           -fno-math-errno is specified.  In contrast to the other
24609           configurations, -fsingle-precision-constant is not set.
24610
24611       These additional -m options are available for the Altera Nios II ELF
24612       (bare-metal) target:
24613
24614       -mhal
24615           Link with HAL BSP.  This suppresses linking with the GCC-provided C
24616           runtime startup and termination code, and is typically used in
24617           conjunction with -msys-crt0= to specify the location of the
24618           alternate startup code provided by the HAL BSP.
24619
24620       -msmallc
24621           Link with a limited version of the C library, -lsmallc, rather than
24622           Newlib.
24623
24624       -msys-crt0=startfile
24625           startfile is the file name of the startfile (crt0) to use when
24626           linking.  This option is only useful in conjunction with -mhal.
24627
24628       -msys-lib=systemlib
24629           systemlib is the library name of the library that provides low-
24630           level system calls required by the C library, e.g. "read" and
24631           "write".  This option is typically used to link with a library
24632           provided by a HAL BSP.
24633
24634       Nvidia PTX Options
24635
24636       These options are defined for Nvidia PTX:
24637
24638       -m64
24639           Ignored, but preserved for backward compatibility.  Only 64-bit ABI
24640           is supported.
24641
24642       -march=architecture-string
24643           Generate code for the specified PTX ISA target architecture (e.g.
24644           sm_35).  Valid architecture strings are sm_30, sm_35, sm_53, sm_70,
24645           sm_75 and sm_80.  The default depends on how the compiler has been
24646           configured, see --with-arch.
24647
24648           This option sets the value of the preprocessor macro "__PTX_SM__";
24649           for instance, for sm_35, it has the value 350.
24650
24651       -misa=architecture-string
24652           Alias of -march=.
24653
24654       -march-map=architecture-string
24655           Select the closest available -march= value that is not more
24656           capable.  For instance, for -march-map=sm_50 select -march=sm_35,
24657           and for -march-map=sm_53 select -march=sm_53.
24658
24659       -mptx=version-string
24660           Generate code for the specified PTX ISA version (e.g. 7.0).  Valid
24661           version strings include 3.1, 6.0, 6.3, and 7.0.  The default PTX
24662           ISA version is 6.0, unless a higher version is required for
24663           specified PTX ISA target architecture via option -march=.
24664
24665           This option sets the values of the preprocessor macros
24666           "__PTX_ISA_VERSION_MAJOR__" and "__PTX_ISA_VERSION_MINOR__"; for
24667           instance, for 3.1 the macros have the values 3 and 1, respectively.
24668
24669       -mmainkernel
24670           Link in code for a __main kernel.  This is for stand-alone instead
24671           of offloading execution.
24672
24673       -moptimize
24674           Apply partitioned execution optimizations.  This is the default
24675           when any level of optimization is selected.
24676
24677       -msoft-stack
24678           Generate code that does not use ".local" memory directly for stack
24679           storage. Instead, a per-warp stack pointer is maintained
24680           explicitly. This enables variable-length stack allocation (with
24681           variable-length arrays or "alloca"), and when global memory is used
24682           for underlying storage, makes it possible to access automatic
24683           variables from other threads, or with atomic instructions. This
24684           code generation variant is used for OpenMP offloading, but the
24685           option is exposed on its own for the purpose of testing the
24686           compiler; to generate code suitable for linking into programs using
24687           OpenMP offloading, use option -mgomp.
24688
24689       -muniform-simt
24690           Switch to code generation variant that allows to execute all
24691           threads in each warp, while maintaining memory state and side
24692           effects as if only one thread in each warp was active outside of
24693           OpenMP SIMD regions.  All atomic operations and calls to runtime
24694           (malloc, free, vprintf) are conditionally executed (iff current
24695           lane index equals the master lane index), and the register being
24696           assigned is copied via a shuffle instruction from the master lane.
24697           Outside of SIMD regions lane 0 is the master; inside, each thread
24698           sees itself as the master.  Shared memory array "int __nvptx_uni[]"
24699           stores all-zeros or all-ones bitmasks for each warp, indicating
24700           current mode (0 outside of SIMD regions).  Each thread can bitwise-
24701           and the bitmask at position "tid.y" with current lane index to
24702           compute the master lane index.
24703
24704       -mgomp
24705           Generate code for use in OpenMP offloading: enables -msoft-stack
24706           and -muniform-simt options, and selects corresponding multilib
24707           variant.
24708
24709       OpenRISC Options
24710
24711       These options are defined for OpenRISC:
24712
24713       -mboard=name
24714           Configure a board specific runtime.  This will be passed to the
24715           linker for newlib board library linking.  The default is "or1ksim".
24716
24717       -mnewlib
24718           This option is ignored; it is for compatibility purposes only.
24719           This used to select linker and preprocessor options for use with
24720           newlib.
24721
24722       -msoft-div
24723       -mhard-div
24724           Select software or hardware divide ("l.div", "l.divu")
24725           instructions.  This default is hardware divide.
24726
24727       -msoft-mul
24728       -mhard-mul
24729           Select software or hardware multiply ("l.mul", "l.muli")
24730           instructions.  This default is hardware multiply.
24731
24732       -msoft-float
24733       -mhard-float
24734           Select software or hardware for floating point operations.  The
24735           default is software.
24736
24737       -mdouble-float
24738           When -mhard-float is selected, enables generation of double-
24739           precision floating point instructions.  By default functions from
24740           libgcc are used to perform double-precision floating point
24741           operations.
24742
24743       -munordered-float
24744           When -mhard-float is selected, enables generation of unordered
24745           floating point compare and set flag ("lf.sfun*") instructions.  By
24746           default functions from libgcc are used to perform unordered
24747           floating point compare and set flag operations.
24748
24749       -mcmov
24750           Enable generation of conditional move ("l.cmov") instructions.  By
24751           default the equivalent will be generated using set and branch.
24752
24753       -mror
24754           Enable generation of rotate right ("l.ror") instructions.  By
24755           default functions from libgcc are used to perform rotate right
24756           operations.
24757
24758       -mrori
24759           Enable generation of rotate right with immediate ("l.rori")
24760           instructions.  By default functions from libgcc are used to perform
24761           rotate right with immediate operations.
24762
24763       -msext
24764           Enable generation of sign extension ("l.ext*") instructions.  By
24765           default memory loads are used to perform sign extension.
24766
24767       -msfimm
24768           Enable generation of compare and set flag with immediate ("l.sf*i")
24769           instructions.  By default extra instructions will be generated to
24770           store the immediate to a register first.
24771
24772       -mshftimm
24773           Enable generation of shift with immediate ("l.srai", "l.srli",
24774           "l.slli") instructions.  By default extra instructions will be
24775           generated to store the immediate to a register first.
24776
24777       -mcmodel=small
24778           Generate OpenRISC code for the small model: The GOT is limited to
24779           64k. This is the default model.
24780
24781       -mcmodel=large
24782           Generate OpenRISC code for the large model: The GOT may grow up to
24783           4G in size.
24784
24785       PDP-11 Options
24786
24787       These options are defined for the PDP-11:
24788
24789       -mfpu
24790           Use hardware FPP floating point.  This is the default.  (FIS
24791           floating point on the PDP-11/40 is not supported.)  Implies -m45.
24792
24793       -msoft-float
24794           Do not use hardware floating point.
24795
24796       -mac0
24797           Return floating-point results in ac0 (fr0 in Unix assembler
24798           syntax).
24799
24800       -mno-ac0
24801           Return floating-point results in memory.  This is the default.
24802
24803       -m40
24804           Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
24805
24806       -m45
24807           Generate code for a PDP-11/45.  This is the default.
24808
24809       -m10
24810           Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
24811
24812       -mint16
24813       -mno-int32
24814           Use 16-bit "int".  This is the default.
24815
24816       -mint32
24817       -mno-int16
24818           Use 32-bit "int".
24819
24820       -msplit
24821           Target has split instruction and data space.  Implies -m45.
24822
24823       -munix-asm
24824           Use Unix assembler syntax.
24825
24826       -mdec-asm
24827           Use DEC assembler syntax.
24828
24829       -mgnu-asm
24830           Use GNU assembler syntax.  This is the default.
24831
24832       -mlra
24833           Use the new LRA register allocator.  By default, the old "reload"
24834           allocator is used.
24835
24836       PowerPC Options
24837
24838       These are listed under
24839
24840       PRU Options
24841
24842       These command-line options are defined for PRU target:
24843
24844       -minrt
24845           Link with a minimum runtime environment, with no support for static
24846           initializers and constructors.  Using this option can significantly
24847           reduce the size of the final ELF binary.  Beware that the compiler
24848           could still generate code with static initializers and
24849           constructors.  It is up to the programmer to ensure that the source
24850           program will not use those features.
24851
24852       -mmcu=mcu
24853           Specify the PRU MCU variant to use.  Check Newlib for the exact
24854           list of supported MCUs.
24855
24856       -mno-relax
24857           Make GCC pass the --no-relax command-line option to the linker
24858           instead of the --relax option.
24859
24860       -mloop
24861           Allow (or do not allow) GCC to use the LOOP instruction.
24862
24863       -mabi=variant
24864           Specify the ABI variant to output code for.  -mabi=ti selects the
24865           unmodified TI ABI while -mabi=gnu selects a GNU variant that copes
24866           more naturally with certain GCC assumptions.  These are the
24867           differences:
24868
24869           Function Pointer Size
24870               TI ABI specifies that function (code) pointers are 16-bit,
24871               whereas GNU supports only 32-bit data and code pointers.
24872
24873           Optional Return Value Pointer
24874               Function return values larger than 64 bits are passed by using
24875               a hidden pointer as the first argument of the function.  TI
24876               ABI, though, mandates that the pointer can be NULL in case the
24877               caller is not using the returned value.  GNU always passes and
24878               expects a valid return value pointer.
24879
24880           The current -mabi=ti implementation simply raises a compile error
24881           when any of the above code constructs is detected.  As a
24882           consequence the standard C library cannot be built and it is
24883           omitted when linking with -mabi=ti.
24884
24885           Relaxation is a GNU feature and for safety reasons is disabled when
24886           using -mabi=ti.  The TI toolchain does not emit relocations for
24887           QBBx instructions, so the GNU linker cannot adjust them when
24888           shortening adjacent LDI32 pseudo instructions.
24889
24890       RISC-V Options
24891
24892       These command-line options are defined for RISC-V targets:
24893
24894       -mbranch-cost=n
24895           Set the cost of branches to roughly n instructions.
24896
24897       -mplt
24898       -mno-plt
24899           When generating PIC code, do or don't allow the use of PLTs.
24900           Ignored for non-PIC.  The default is -mplt.
24901
24902       -mabi=ABI-string
24903           Specify integer and floating-point calling convention.  ABI-string
24904           contains two parts: the size of integer types and the registers
24905           used for floating-point types.  For example -march=rv64ifd
24906           -mabi=lp64d means that long and pointers are 64-bit (implicitly
24907           defining int to be 32-bit), and that floating-point values up to 64
24908           bits wide are passed in F registers.  Contrast this with
24909           -march=rv64ifd -mabi=lp64f, which still allows the compiler to
24910           generate code that uses the F and D extensions but only allows
24911           floating-point values up to 32 bits long to be passed in registers;
24912           or -march=rv64ifd -mabi=lp64, in which no floating-point arguments
24913           will be passed in registers.
24914
24915           The default for this argument is system dependent, users who want a
24916           specific calling convention should specify one explicitly.  The
24917           valid calling conventions are: ilp32, ilp32f, ilp32d, lp64, lp64f,
24918           and lp64d.  Some calling conventions are impossible to implement on
24919           some ISAs: for example, -march=rv32if -mabi=ilp32d is invalid
24920           because the ABI requires 64-bit values be passed in F registers,
24921           but F registers are only 32 bits wide.  There is also the ilp32e
24922           ABI that can only be used with the rv32e architecture.  This ABI is
24923           not well specified at present, and is subject to change.
24924
24925       -mfdiv
24926       -mno-fdiv
24927           Do or don't use hardware floating-point divide and square root
24928           instructions.  This requires the F or D extensions for floating-
24929           point registers.  The default is to use them if the specified
24930           architecture has these instructions.
24931
24932       -mdiv
24933       -mno-div
24934           Do or don't use hardware instructions for integer division.  This
24935           requires the M extension.  The default is to use them if the
24936           specified architecture has these instructions.
24937
24938       -misa-spec=ISA-spec-string
24939           Specify the version of the RISC-V Unprivileged (formerly User-
24940           Level) ISA specification to produce code conforming to.  The
24941           possibilities for ISA-spec-string are:
24942
24943           2.2 Produce code conforming to version 2.2.
24944
24945           20190608
24946               Produce code conforming to version 20190608.
24947
24948           20191213
24949               Produce code conforming to version 20191213.
24950
24951           The default is -misa-spec=20191213 unless GCC has been configured
24952           with --with-isa-spec= specifying a different default version.
24953
24954       -march=ISA-string
24955           Generate code for given RISC-V ISA (e.g. rv64im).  ISA strings must
24956           be lower-case.  Examples include rv64i, rv32g, rv32e, and rv32imaf.
24957
24958           When -march= is not specified, use the setting from -mcpu.
24959
24960           If both -march and -mcpu= are not specified, the default for this
24961           argument is system dependent, users who want a specific
24962           architecture extensions should specify one explicitly.
24963
24964       -mcpu=processor-string
24965           Use architecture of and optimize the output for the given
24966           processor, specified by particular CPU name.  Permissible values
24967           for this option are: sifive-e20, sifive-e21, sifive-e24,
24968           sifive-e31, sifive-e34, sifive-e76, sifive-s21, sifive-s51,
24969           sifive-s54, sifive-s76, sifive-u54, and sifive-u74.
24970
24971       -mtune=processor-string
24972           Optimize the output for the given processor, specified by
24973           microarchitecture or particular CPU name.  Permissible values for
24974           this option are: rocket, sifive-3-series, sifive-5-series,
24975           sifive-7-series, thead-c906, size, and all valid options for
24976           -mcpu=.
24977
24978           When -mtune= is not specified, use the setting from -mcpu, the
24979           default is rocket if both are not specified.
24980
24981           The size choice is not intended for use by end-users.  This is used
24982           when -Os is specified.  It overrides the instruction cost info
24983           provided by -mtune=, but does not override the pipeline info.  This
24984           helps reduce code size while still giving good performance.
24985
24986       -mpreferred-stack-boundary=num
24987           Attempt to keep the stack boundary aligned to a 2 raised to num
24988           byte boundary.  If -mpreferred-stack-boundary is not specified, the
24989           default is 4 (16 bytes or 128-bits).
24990
24991           Warning: If you use this switch, then you must build all modules
24992           with the same value, including any libraries.  This includes the
24993           system libraries and startup modules.
24994
24995       -msmall-data-limit=n
24996           Put global and static data smaller than n bytes into a special
24997           section (on some targets).
24998
24999       -msave-restore
25000       -mno-save-restore
25001           Do or don't use smaller but slower prologue and epilogue code that
25002           uses library function calls.  The default is to use fast inline
25003           prologues and epilogues.
25004
25005       -minline-atomics
25006       -mno-inline-atomics
25007           Do or don't use smaller but slower subword atomic emulation code
25008           that uses libatomic function calls.  The default is to use fast
25009           inline subword atomics that do not require libatomic.
25010
25011       -mshorten-memrefs
25012       -mno-shorten-memrefs
25013           Do or do not attempt to make more use of compressed load/store
25014           instructions by replacing a load/store of 'base register + large
25015           offset' with a new load/store of 'new base + small offset'.  If the
25016           new base gets stored in a compressed register, then the new
25017           load/store can be compressed.  Currently targets 32-bit integer
25018           load/stores only.
25019
25020       -mstrict-align
25021       -mno-strict-align
25022           Do not or do generate unaligned memory accesses.  The default is
25023           set depending on whether the processor we are optimizing for
25024           supports fast unaligned access or not.
25025
25026       -mcmodel=medlow
25027           Generate code for the medium-low code model. The program and its
25028           statically defined symbols must lie within a single 2 GiB address
25029           range and must lie between absolute addresses -2 GiB and +2 GiB.
25030           Programs can be statically or dynamically linked. This is the
25031           default code model.
25032
25033       -mcmodel=medany
25034           Generate code for the medium-any code model. The program and its
25035           statically defined symbols must be within any single 2 GiB address
25036           range. Programs can be statically or dynamically linked.
25037
25038           The code generated by the medium-any code model is position-
25039           independent, but is not guaranteed to function correctly when
25040           linked into position-independent executables or libraries.
25041
25042       -mexplicit-relocs
25043       -mno-exlicit-relocs
25044           Use or do not use assembler relocation operators when dealing with
25045           symbolic addresses.  The alternative is to use assembler macros
25046           instead, which may limit optimization.
25047
25048       -mrelax
25049       -mno-relax
25050           Take advantage of linker relaxations to reduce the number of
25051           instructions required to materialize symbol addresses. The default
25052           is to take advantage of linker relaxations.
25053
25054       -mriscv-attribute
25055       -mno-riscv-attribute
25056           Emit (do not emit) RISC-V attribute to record extra information
25057           into ELF objects.  This feature requires at least binutils 2.32.
25058
25059       -mcsr-check
25060       -mno-csr-check
25061           Enables or disables the CSR checking.
25062
25063       -malign-data=type
25064           Control how GCC aligns variables and constants of array, structure,
25065           or union types.  Supported values for type are xlen which uses x
25066           register width as the alignment value, and natural which uses
25067           natural alignment.  xlen is the default.
25068
25069       -mbig-endian
25070           Generate big-endian code.  This is the default when GCC is
25071           configured for a riscv64be-*-* or riscv32be-*-* target.
25072
25073       -mlittle-endian
25074           Generate little-endian code.  This is the default when GCC is
25075           configured for a riscv64-*-* or riscv32-*-* but not a riscv64be-*-*
25076           or riscv32be-*-* target.
25077
25078       -mstack-protector-guard=guard
25079       -mstack-protector-guard-reg=reg
25080       -mstack-protector-guard-offset=offset
25081           Generate stack protection code using canary at guard.  Supported
25082           locations are global for a global canary or tls for per-thread
25083           canary in the TLS block.
25084
25085           With the latter choice the options -mstack-protector-guard-reg=reg
25086           and -mstack-protector-guard-offset=offset furthermore specify which
25087           register to use as base register for reading the canary, and from
25088           what offset from that base register. There is no default register
25089           or offset as this is entirely for use within the Linux kernel.
25090
25091       RL78 Options
25092
25093       -msim
25094           Links in additional target libraries to support operation within a
25095           simulator.
25096
25097       -mmul=none
25098       -mmul=g10
25099       -mmul=g13
25100       -mmul=g14
25101       -mmul=rl78
25102           Specifies the type of hardware multiplication and division support
25103           to be used.  The simplest is "none", which uses software for both
25104           multiplication and division.  This is the default.  The "g13" value
25105           is for the hardware multiply/divide peripheral found on the
25106           RL78/G13 (S2 core) targets.  The "g14" value selects the use of the
25107           multiplication and division instructions supported by the RL78/G14
25108           (S3 core) parts.  The value "rl78" is an alias for "g14" and the
25109           value "mg10" is an alias for "none".
25110
25111           In addition a C preprocessor macro is defined, based upon the
25112           setting of this option.  Possible values are: "__RL78_MUL_NONE__",
25113           "__RL78_MUL_G13__" or "__RL78_MUL_G14__".
25114
25115       -mcpu=g10
25116       -mcpu=g13
25117       -mcpu=g14
25118       -mcpu=rl78
25119           Specifies the RL78 core to target.  The default is the G14 core,
25120           also known as an S3 core or just RL78.  The G13 or S2 core does not
25121           have multiply or divide instructions, instead it uses a hardware
25122           peripheral for these operations.  The G10 or S1 core does not have
25123           register banks, so it uses a different calling convention.
25124
25125           If this option is set it also selects the type of hardware multiply
25126           support to use, unless this is overridden by an explicit -mmul=none
25127           option on the command line.  Thus specifying -mcpu=g13 enables the
25128           use of the G13 hardware multiply peripheral and specifying
25129           -mcpu=g10 disables the use of hardware multiplications altogether.
25130
25131           Note, although the RL78/G14 core is the default target, specifying
25132           -mcpu=g14 or -mcpu=rl78 on the command line does change the
25133           behavior of the toolchain since it also enables G14 hardware
25134           multiply support.  If these options are not specified on the
25135           command line then software multiplication routines will be used
25136           even though the code targets the RL78 core.  This is for backwards
25137           compatibility with older toolchains which did not have hardware
25138           multiply and divide support.
25139
25140           In addition a C preprocessor macro is defined, based upon the
25141           setting of this option.  Possible values are: "__RL78_G10__",
25142           "__RL78_G13__" or "__RL78_G14__".
25143
25144       -mg10
25145       -mg13
25146       -mg14
25147       -mrl78
25148           These are aliases for the corresponding -mcpu= option.  They are
25149           provided for backwards compatibility.
25150
25151       -mallregs
25152           Allow the compiler to use all of the available registers.  By
25153           default registers "r24..r31" are reserved for use in interrupt
25154           handlers.  With this option enabled these registers can be used in
25155           ordinary functions as well.
25156
25157       -m64bit-doubles
25158       -m32bit-doubles
25159           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
25160           (-m32bit-doubles) in size.  The default is -m32bit-doubles.
25161
25162       -msave-mduc-in-interrupts
25163       -mno-save-mduc-in-interrupts
25164           Specifies that interrupt handler functions should preserve the MDUC
25165           registers.  This is only necessary if normal code might use the
25166           MDUC registers, for example because it performs multiplication and
25167           division operations.  The default is to ignore the MDUC registers
25168           as this makes the interrupt handlers faster.  The target option
25169           -mg13 needs to be passed for this to work as this feature is only
25170           available on the G13 target (S2 core).  The MDUC registers will
25171           only be saved if the interrupt handler performs a multiplication or
25172           division operation or it calls another function.
25173
25174       IBM RS/6000 and PowerPC Options
25175
25176       These -m options are defined for the IBM RS/6000 and PowerPC:
25177
25178       -mpowerpc-gpopt
25179       -mno-powerpc-gpopt
25180       -mpowerpc-gfxopt
25181       -mno-powerpc-gfxopt
25182       -mpowerpc64
25183       -mno-powerpc64
25184       -mmfcrf
25185       -mno-mfcrf
25186       -mpopcntb
25187       -mno-popcntb
25188       -mpopcntd
25189       -mno-popcntd
25190       -mfprnd
25191       -mno-fprnd
25192       -mcmpb
25193       -mno-cmpb
25194       -mhard-dfp
25195       -mno-hard-dfp
25196           You use these options to specify which instructions are available
25197           on the processor you are using.  The default value of these options
25198           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
25199           overrides the specification of these options.  We recommend you use
25200           the -mcpu=cpu_type option rather than the options listed above.
25201
25202           Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
25203           architecture instructions in the General Purpose group, including
25204           floating-point square root.  Specifying -mpowerpc-gfxopt allows GCC
25205           to use the optional PowerPC architecture instructions in the
25206           Graphics group, including floating-point select.
25207
25208           The -mmfcrf option allows GCC to generate the move from condition
25209           register field instruction implemented on the POWER4 processor and
25210           other processors that support the PowerPC V2.01 architecture.  The
25211           -mpopcntb option allows GCC to generate the popcount and double-
25212           precision FP reciprocal estimate instruction implemented on the
25213           POWER5 processor and other processors that support the PowerPC
25214           V2.02 architecture.  The -mpopcntd option allows GCC to generate
25215           the popcount instruction implemented on the POWER7 processor and
25216           other processors that support the PowerPC V2.06 architecture.  The
25217           -mfprnd option allows GCC to generate the FP round to integer
25218           instructions implemented on the POWER5+ processor and other
25219           processors that support the PowerPC V2.03 architecture.  The -mcmpb
25220           option allows GCC to generate the compare bytes instruction
25221           implemented on the POWER6 processor and other processors that
25222           support the PowerPC V2.05 architecture.  The -mhard-dfp option
25223           allows GCC to generate the decimal floating-point instructions
25224           implemented on some POWER processors.
25225
25226           The -mpowerpc64 option allows GCC to generate the additional 64-bit
25227           instructions that are found in the full PowerPC64 architecture and
25228           to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
25229           -mno-powerpc64.
25230
25231       -mcpu=cpu_type
25232           Set architecture type, register usage, and instruction scheduling
25233           parameters for machine type cpu_type.  Supported values for
25234           cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
25235           476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
25236           7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
25237           e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
25238           power4, power5, power5+, power6, power6x, power7, power8, power9,
25239           power10, powerpc, powerpc64, powerpc64le, rs64, and native.
25240
25241           -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
25242           32-bit PowerPC (either endian), 64-bit big endian PowerPC and
25243           64-bit little endian PowerPC architecture machine types, with an
25244           appropriate, generic processor model assumed for scheduling
25245           purposes.
25246
25247           Specifying native as cpu type detects and selects the architecture
25248           option that corresponds to the host processor of the system
25249           performing the compilation.  -mcpu=native has no effect if GCC does
25250           not recognize the processor.
25251
25252           The other options specify a specific processor.  Code generated
25253           under those options runs best on that processor, and may not run at
25254           all on others.
25255
25256           The -mcpu options automatically enable or disable the following
25257           options:
25258
25259           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple -mpopcntb
25260           -mpopcntd  -mpowerpc64 -mpowerpc-gpopt  -mpowerpc-gfxopt -mmulhw
25261           -mdlmzb  -mmfpgpr  -mvsx -mcrypto  -mhtm  -mpower8-fusion
25262           -mpower8-vector -mquad-memory  -mquad-memory-atomic  -mfloat128
25263           -mfloat128-hardware -mprefixed -mpcrel -mmma -mrop-protect
25264
25265           The particular options set for any particular CPU varies between
25266           compiler versions, depending on what setting seems to produce
25267           optimal code for that CPU; it doesn't necessarily reflect the
25268           actual hardware's capabilities.  If you wish to set an individual
25269           option to a particular value, you may specify it after the -mcpu
25270           option, like -mcpu=970 -mno-altivec.
25271
25272           On AIX, the -maltivec and -mpowerpc64 options are not enabled or
25273           disabled by the -mcpu option at present because AIX does not have
25274           full support for these options.  You may still enable or disable
25275           them individually if you're sure it'll work in your environment.
25276
25277       -mtune=cpu_type
25278           Set the instruction scheduling parameters for machine type
25279           cpu_type, but do not set the architecture type or register usage,
25280           as -mcpu=cpu_type does.  The same values for cpu_type are used for
25281           -mtune as for -mcpu.  If both are specified, the code generated
25282           uses the architecture and registers set by -mcpu, but the
25283           scheduling parameters set by -mtune.
25284
25285       -mcmodel=small
25286           Generate PowerPC64 code for the small model: The TOC is limited to
25287           64k.
25288
25289       -mcmodel=medium
25290           Generate PowerPC64 code for the medium model: The TOC and other
25291           static data may be up to a total of 4G in size.  This is the
25292           default for 64-bit Linux.
25293
25294       -mcmodel=large
25295           Generate PowerPC64 code for the large model: The TOC may be up to
25296           4G in size.  Other data and code is only limited by the 64-bit
25297           address space.
25298
25299       -maltivec
25300       -mno-altivec
25301           Generate code that uses (does not use) AltiVec instructions, and
25302           also enable the use of built-in functions that allow more direct
25303           access to the AltiVec instruction set.  You may also need to set
25304           -mabi=altivec to adjust the current ABI with AltiVec ABI
25305           enhancements.
25306
25307           When -maltivec is used, the element order for AltiVec intrinsics
25308           such as "vec_splat", "vec_extract", and "vec_insert" match array
25309           element order corresponding to the endianness of the target.  That
25310           is, element zero identifies the leftmost element in a vector
25311           register when targeting a big-endian platform, and identifies the
25312           rightmost element in a vector register when targeting a little-
25313           endian platform.
25314
25315       -mvrsave
25316       -mno-vrsave
25317           Generate VRSAVE instructions when generating AltiVec code.
25318
25319       -msecure-plt
25320           Generate code that allows ld and ld.so to build executables and
25321           shared libraries with non-executable ".plt" and ".got" sections.
25322           This is a PowerPC 32-bit SYSV ABI option.
25323
25324       -mbss-plt
25325           Generate code that uses a BSS ".plt" section that ld.so fills in,
25326           and requires ".plt" and ".got" sections that are both writable and
25327           executable.  This is a PowerPC 32-bit SYSV ABI option.
25328
25329       -misel
25330       -mno-isel
25331           This switch enables or disables the generation of ISEL
25332           instructions.
25333
25334       -mvsx
25335       -mno-vsx
25336           Generate code that uses (does not use) vector/scalar (VSX)
25337           instructions, and also enable the use of built-in functions that
25338           allow more direct access to the VSX instruction set.
25339
25340       -mcrypto
25341       -mno-crypto
25342           Enable the use (disable) of the built-in functions that allow
25343           direct access to the cryptographic instructions that were added in
25344           version 2.07 of the PowerPC ISA.
25345
25346       -mhtm
25347       -mno-htm
25348           Enable (disable) the use of the built-in functions that allow
25349           direct access to the Hardware Transactional Memory (HTM)
25350           instructions that were added in version 2.07 of the PowerPC ISA.
25351
25352       -mpower8-fusion
25353       -mno-power8-fusion
25354           Generate code that keeps (does not keeps) some integer operations
25355           adjacent so that the instructions can be fused together on power8
25356           and later processors.
25357
25358       -mpower8-vector
25359       -mno-power8-vector
25360           Generate code that uses (does not use) the vector and scalar
25361           instructions that were added in version 2.07 of the PowerPC ISA.
25362           Also enable the use of built-in functions that allow more direct
25363           access to the vector instructions.
25364
25365       -mquad-memory
25366       -mno-quad-memory
25367           Generate code that uses (does not use) the non-atomic quad word
25368           memory instructions.  The -mquad-memory option requires use of
25369           64-bit mode.
25370
25371       -mquad-memory-atomic
25372       -mno-quad-memory-atomic
25373           Generate code that uses (does not use) the atomic quad word memory
25374           instructions.  The -mquad-memory-atomic option requires use of
25375           64-bit mode.
25376
25377       -mfloat128
25378       -mno-float128
25379           Enable/disable the __float128 keyword for IEEE 128-bit floating
25380           point and use either software emulation for IEEE 128-bit floating
25381           point or hardware instructions.
25382
25383           The VSX instruction set (-mvsx) must be enabled to use the IEEE
25384           128-bit floating point support.  The IEEE 128-bit floating point is
25385           only supported on Linux.
25386
25387           The default for -mfloat128 is enabled on PowerPC Linux systems
25388           using the VSX instruction set, and disabled on other systems.
25389
25390           If you use the ISA 3.0 instruction set (-mpower9-vector or
25391           -mcpu=power9) on a 64-bit system, the IEEE 128-bit floating point
25392           support will also enable the generation of ISA 3.0 IEEE 128-bit
25393           floating point instructions.  Otherwise, if you do not specify to
25394           generate ISA 3.0 instructions or you are targeting a 32-bit big
25395           endian system, IEEE 128-bit floating point will be done with
25396           software emulation.
25397
25398       -mfloat128-hardware
25399       -mno-float128-hardware
25400           Enable/disable using ISA 3.0 hardware instructions to support the
25401           __float128 data type.
25402
25403           The default for -mfloat128-hardware is enabled on PowerPC Linux
25404           systems using the ISA 3.0 instruction set, and disabled on other
25405           systems.
25406
25407       -m32
25408       -m64
25409           Generate code for 32-bit or 64-bit environments of Darwin and SVR4
25410           targets (including GNU/Linux).  The 32-bit environment sets int,
25411           long and pointer to 32 bits and generates code that runs on any
25412           PowerPC variant.  The 64-bit environment sets int to 32 bits and
25413           long and pointer to 64 bits, and generates code for PowerPC64, as
25414           for -mpowerpc64.
25415
25416       -mfull-toc
25417       -mno-fp-in-toc
25418       -mno-sum-in-toc
25419       -mminimal-toc
25420           Modify generation of the TOC (Table Of Contents), which is created
25421           for every executable file.  The -mfull-toc option is selected by
25422           default.  In that case, GCC allocates at least one TOC entry for
25423           each unique non-automatic variable reference in your program.  GCC
25424           also places floating-point constants in the TOC.  However, only
25425           16,384 entries are available in the TOC.
25426
25427           If you receive a linker error message that saying you have
25428           overflowed the available TOC space, you can reduce the amount of
25429           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
25430           -mno-fp-in-toc prevents GCC from putting floating-point constants
25431           in the TOC and -mno-sum-in-toc forces GCC to generate code to
25432           calculate the sum of an address and a constant at run time instead
25433           of putting that sum into the TOC.  You may specify one or both of
25434           these options.  Each causes GCC to produce very slightly slower and
25435           larger code at the expense of conserving TOC space.
25436
25437           If you still run out of space in the TOC even when you specify both
25438           of these options, specify -mminimal-toc instead.  This option
25439           causes GCC to make only one TOC entry for every file.  When you
25440           specify this option, GCC produces code that is slower and larger
25441           but which uses extremely little TOC space.  You may wish to use
25442           this option only on files that contain less frequently-executed
25443           code.
25444
25445       -maix64
25446       -maix32
25447           Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
25448           64-bit "long" type, and the infrastructure needed to support them.
25449           Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
25450           64-bit ABI and implies -mno-powerpc64.  GCC defaults to -maix32.
25451
25452       -mxl-compat
25453       -mno-xl-compat
25454           Produce code that conforms more closely to IBM XL compiler
25455           semantics when using AIX-compatible ABI.  Pass floating-point
25456           arguments to prototyped functions beyond the register save area
25457           (RSA) on the stack in addition to argument FPRs.  Do not assume
25458           that most significant double in 128-bit long double value is
25459           properly rounded when comparing values and converting to double.
25460           Use XL symbol names for long double support routines.
25461
25462           The AIX calling convention was extended but not initially
25463           documented to handle an obscure K&R C case of calling a function
25464           that takes the address of its arguments with fewer arguments than
25465           declared.  IBM XL compilers access floating-point arguments that do
25466           not fit in the RSA from the stack when a subroutine is compiled
25467           without optimization.  Because always storing floating-point
25468           arguments on the stack is inefficient and rarely needed, this
25469           option is not enabled by default and only is necessary when calling
25470           subroutines compiled by IBM XL compilers without optimization.
25471
25472       -mpe
25473           Support IBM RS/6000 SP Parallel Environment (PE).  Link an
25474           application written to use message passing with special startup
25475           code to enable the application to run.  The system must have PE
25476           installed in the standard location (/usr/lpp/ppe.poe/), or the
25477           specs file must be overridden with the -specs= option to specify
25478           the appropriate directory location.  The Parallel Environment does
25479           not support threads, so the -mpe option and the -pthread option are
25480           incompatible.
25481
25482       -malign-natural
25483       -malign-power
25484           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
25485           -malign-natural overrides the ABI-defined alignment of larger
25486           types, such as floating-point doubles, on their natural size-based
25487           boundary.  The option -malign-power instructs GCC to follow the
25488           ABI-specified alignment rules.  GCC defaults to the standard
25489           alignment defined in the ABI.
25490
25491           On 64-bit Darwin, natural alignment is the default, and
25492           -malign-power is not supported.
25493
25494       -msoft-float
25495       -mhard-float
25496           Generate code that does not use (uses) the floating-point register
25497           set.  Software floating-point emulation is provided if you use the
25498           -msoft-float option, and pass the option to GCC when linking.
25499
25500       -mmultiple
25501       -mno-multiple
25502           Generate code that uses (does not use) the load multiple word
25503           instructions and the store multiple word instructions.  These
25504           instructions are generated by default on POWER systems, and not
25505           generated on PowerPC systems.  Do not use -mmultiple on little-
25506           endian PowerPC systems, since those instructions do not work when
25507           the processor is in little-endian mode.  The exceptions are PPC740
25508           and PPC750 which permit these instructions in little-endian mode.
25509
25510       -mupdate
25511       -mno-update
25512           Generate code that uses (does not use) the load or store
25513           instructions that update the base register to the address of the
25514           calculated memory location.  These instructions are generated by
25515           default.  If you use -mno-update, there is a small window between
25516           the time that the stack pointer is updated and the address of the
25517           previous frame is stored, which means code that walks the stack
25518           frame across interrupts or signals may get corrupted data.
25519
25520       -mavoid-indexed-addresses
25521       -mno-avoid-indexed-addresses
25522           Generate code that tries to avoid (not avoid) the use of indexed
25523           load or store instructions. These instructions can incur a
25524           performance penalty on Power6 processors in certain situations,
25525           such as when stepping through large arrays that cross a 16M
25526           boundary.  This option is enabled by default when targeting Power6
25527           and disabled otherwise.
25528
25529       -mfused-madd
25530       -mno-fused-madd
25531           Generate code that uses (does not use) the floating-point multiply
25532           and accumulate instructions.  These instructions are generated by
25533           default if hardware floating point is used.  The machine-dependent
25534           -mfused-madd option is now mapped to the machine-independent
25535           -ffp-contract=fast option, and -mno-fused-madd is mapped to
25536           -ffp-contract=off.
25537
25538       -mmulhw
25539       -mno-mulhw
25540           Generate code that uses (does not use) the half-word multiply and
25541           multiply-accumulate instructions on the IBM 405, 440, 464 and 476
25542           processors.  These instructions are generated by default when
25543           targeting those processors.
25544
25545       -mdlmzb
25546       -mno-dlmzb
25547           Generate code that uses (does not use) the string-search dlmzb
25548           instruction on the IBM 405, 440, 464 and 476 processors.  This
25549           instruction is generated by default when targeting those
25550           processors.
25551
25552       -mno-bit-align
25553       -mbit-align
25554           On System V.4 and embedded PowerPC systems do not (do) force
25555           structures and unions that contain bit-fields to be aligned to the
25556           base type of the bit-field.
25557
25558           For example, by default a structure containing nothing but 8
25559           "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
25560           and has a size of 4 bytes.  By using -mno-bit-align, the structure
25561           is aligned to a 1-byte boundary and is 1 byte in size.
25562
25563       -mno-strict-align
25564       -mstrict-align
25565           On System V.4 and embedded PowerPC systems do not (do) assume that
25566           unaligned memory references are handled by the system.
25567
25568       -mrelocatable
25569       -mno-relocatable
25570           Generate code that allows (does not allow) a static executable to
25571           be relocated to a different address at run time.  A simple embedded
25572           PowerPC system loader should relocate the entire contents of
25573           ".got2" and 4-byte locations listed in the ".fixup" section, a
25574           table of 32-bit addresses generated by this option.  For this to
25575           work, all objects linked together must be compiled with
25576           -mrelocatable or -mrelocatable-lib.  -mrelocatable code aligns the
25577           stack to an 8-byte boundary.
25578
25579       -mrelocatable-lib
25580       -mno-relocatable-lib
25581           Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
25582           to allow static executables to be relocated at run time, but
25583           -mrelocatable-lib does not use the smaller stack alignment of
25584           -mrelocatable.  Objects compiled with -mrelocatable-lib may be
25585           linked with objects compiled with any combination of the
25586           -mrelocatable options.
25587
25588       -mno-toc
25589       -mtoc
25590           On System V.4 and embedded PowerPC systems do not (do) assume that
25591           register 2 contains a pointer to a global area pointing to the
25592           addresses used in the program.
25593
25594       -mlittle
25595       -mlittle-endian
25596           On System V.4 and embedded PowerPC systems compile code for the
25597           processor in little-endian mode.  The -mlittle-endian option is the
25598           same as -mlittle.
25599
25600       -mbig
25601       -mbig-endian
25602           On System V.4 and embedded PowerPC systems compile code for the
25603           processor in big-endian mode.  The -mbig-endian option is the same
25604           as -mbig.
25605
25606       -mdynamic-no-pic
25607           On Darwin and Mac OS X systems, compile code so that it is not
25608           relocatable, but that its external references are relocatable.  The
25609           resulting code is suitable for applications, but not shared
25610           libraries.
25611
25612       -msingle-pic-base
25613           Treat the register used for PIC addressing as read-only, rather
25614           than loading it in the prologue for each function.  The runtime
25615           system is responsible for initializing this register with an
25616           appropriate value before execution begins.
25617
25618       -mprioritize-restricted-insns=priority
25619           This option controls the priority that is assigned to dispatch-slot
25620           restricted instructions during the second scheduling pass.  The
25621           argument priority takes the value 0, 1, or 2 to assign no, highest,
25622           or second-highest (respectively) priority to dispatch-slot
25623           restricted instructions.
25624
25625       -msched-costly-dep=dependence_type
25626           This option controls which dependences are considered costly by the
25627           target during instruction scheduling.  The argument dependence_type
25628           takes one of the following values:
25629
25630           no  No dependence is costly.
25631
25632           all All dependences are costly.
25633
25634           true_store_to_load
25635               A true dependence from store to load is costly.
25636
25637           store_to_load
25638               Any dependence from store to load is costly.
25639
25640           number
25641               Any dependence for which the latency is greater than or equal
25642               to number is costly.
25643
25644       -minsert-sched-nops=scheme
25645           This option controls which NOP insertion scheme is used during the
25646           second scheduling pass.  The argument scheme takes one of the
25647           following values:
25648
25649           no  Don't insert NOPs.
25650
25651           pad Pad with NOPs any dispatch group that has vacant issue slots,
25652               according to the scheduler's grouping.
25653
25654           regroup_exact
25655               Insert NOPs to force costly dependent insns into separate
25656               groups.  Insert exactly as many NOPs as needed to force an insn
25657               to a new group, according to the estimated processor grouping.
25658
25659           number
25660               Insert NOPs to force costly dependent insns into separate
25661               groups.  Insert number NOPs to force an insn to a new group.
25662
25663       -mcall-sysv
25664           On System V.4 and embedded PowerPC systems compile code using
25665           calling conventions that adhere to the March 1995 draft of the
25666           System V Application Binary Interface, PowerPC processor
25667           supplement.  This is the default unless you configured GCC using
25668           powerpc-*-eabiaix.
25669
25670       -mcall-sysv-eabi
25671       -mcall-eabi
25672           Specify both -mcall-sysv and -meabi options.
25673
25674       -mcall-sysv-noeabi
25675           Specify both -mcall-sysv and -mno-eabi options.
25676
25677       -mcall-aixdesc
25678           On System V.4 and embedded PowerPC systems compile code for the AIX
25679           operating system.
25680
25681       -mcall-linux
25682           On System V.4 and embedded PowerPC systems compile code for the
25683           Linux-based GNU system.
25684
25685       -mcall-freebsd
25686           On System V.4 and embedded PowerPC systems compile code for the
25687           FreeBSD operating system.
25688
25689       -mcall-netbsd
25690           On System V.4 and embedded PowerPC systems compile code for the
25691           NetBSD operating system.
25692
25693       -mcall-openbsd
25694           On System V.4 and embedded PowerPC systems compile code for the
25695           OpenBSD operating system.
25696
25697       -mtraceback=traceback_type
25698           Select the type of traceback table. Valid values for traceback_type
25699           are full, part, and no.
25700
25701       -maix-struct-return
25702           Return all structures in memory (as specified by the AIX ABI).
25703
25704       -msvr4-struct-return
25705           Return structures smaller than 8 bytes in registers (as specified
25706           by the SVR4 ABI).
25707
25708       -mabi=abi-type
25709           Extend the current ABI with a particular extension, or remove such
25710           extension.  Valid values are: altivec, no-altivec, ibmlongdouble,
25711           ieeelongdouble, elfv1, elfv2, and for AIX: vec-extabi, vec-default.
25712
25713       -mabi=ibmlongdouble
25714           Change the current ABI to use IBM extended-precision long double.
25715           This is not likely to work if your system defaults to using IEEE
25716           extended-precision long double.  If you change the long double type
25717           from IEEE extended-precision, the compiler will issue a warning
25718           unless you use the -Wno-psabi option.  Requires -mlong-double-128
25719           to be enabled.
25720
25721       -mabi=ieeelongdouble
25722           Change the current ABI to use IEEE extended-precision long double.
25723           This is not likely to work if your system defaults to using IBM
25724           extended-precision long double.  If you change the long double type
25725           from IBM extended-precision, the compiler will issue a warning
25726           unless you use the -Wno-psabi option.  Requires -mlong-double-128
25727           to be enabled.
25728
25729       -mabi=elfv1
25730           Change the current ABI to use the ELFv1 ABI.  This is the default
25731           ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
25732           ABI requires special system support and is likely to fail in
25733           spectacular ways.
25734
25735       -mabi=elfv2
25736           Change the current ABI to use the ELFv2 ABI.  This is the default
25737           ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
25738           ABI requires special system support and is likely to fail in
25739           spectacular ways.
25740
25741       -mgnu-attribute
25742       -mno-gnu-attribute
25743           Emit .gnu_attribute assembly directives to set tag/value pairs in a
25744           .gnu.attributes section that specify ABI variations in function
25745           parameters or return values.
25746
25747       -mprototype
25748       -mno-prototype
25749           On System V.4 and embedded PowerPC systems assume that all calls to
25750           variable argument functions are properly prototyped.  Otherwise,
25751           the compiler must insert an instruction before every non-prototyped
25752           call to set or clear bit 6 of the condition code register ("CR") to
25753           indicate whether floating-point values are passed in the floating-
25754           point registers in case the function takes variable arguments.
25755           With -mprototype, only calls to prototyped variable argument
25756           functions set or clear the bit.
25757
25758       -msim
25759           On embedded PowerPC systems, assume that the startup module is
25760           called sim-crt0.o and that the standard C libraries are libsim.a
25761           and libc.a.  This is the default for powerpc-*-eabisim
25762           configurations.
25763
25764       -mmvme
25765           On embedded PowerPC systems, assume that the startup module is
25766           called crt0.o and the standard C libraries are libmvme.a and
25767           libc.a.
25768
25769       -mads
25770           On embedded PowerPC systems, assume that the startup module is
25771           called crt0.o and the standard C libraries are libads.a and libc.a.
25772
25773       -myellowknife
25774           On embedded PowerPC systems, assume that the startup module is
25775           called crt0.o and the standard C libraries are libyk.a and libc.a.
25776
25777       -mvxworks
25778           On System V.4 and embedded PowerPC systems, specify that you are
25779           compiling for a VxWorks system.
25780
25781       -memb
25782           On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
25783           header to indicate that eabi extended relocations are used.
25784
25785       -meabi
25786       -mno-eabi
25787           On System V.4 and embedded PowerPC systems do (do not) adhere to
25788           the Embedded Applications Binary Interface (EABI), which is a set
25789           of modifications to the System V.4 specifications.  Selecting
25790           -meabi means that the stack is aligned to an 8-byte boundary, a
25791           function "__eabi" is called from "main" to set up the EABI
25792           environment, and the -msdata option can use both "r2" and "r13" to
25793           point to two separate small data areas.  Selecting -mno-eabi means
25794           that the stack is aligned to a 16-byte boundary, no EABI
25795           initialization function is called from "main", and the -msdata
25796           option only uses "r13" to point to a single small data area.  The
25797           -meabi option is on by default if you configured GCC using one of
25798           the powerpc*-*-eabi* options.
25799
25800       -msdata=eabi
25801           On System V.4 and embedded PowerPC systems, put small initialized
25802           "const" global and static data in the ".sdata2" section, which is
25803           pointed to by register "r2".  Put small initialized non-"const"
25804           global and static data in the ".sdata" section, which is pointed to
25805           by register "r13".  Put small uninitialized global and static data
25806           in the ".sbss" section, which is adjacent to the ".sdata" section.
25807           The -msdata=eabi option is incompatible with the -mrelocatable
25808           option.  The -msdata=eabi option also sets the -memb option.
25809
25810       -msdata=sysv
25811           On System V.4 and embedded PowerPC systems, put small global and
25812           static data in the ".sdata" section, which is pointed to by
25813           register "r13".  Put small uninitialized global and static data in
25814           the ".sbss" section, which is adjacent to the ".sdata" section.
25815           The -msdata=sysv option is incompatible with the -mrelocatable
25816           option.
25817
25818       -msdata=default
25819       -msdata
25820           On System V.4 and embedded PowerPC systems, if -meabi is used,
25821           compile code the same as -msdata=eabi, otherwise compile code the
25822           same as -msdata=sysv.
25823
25824       -msdata=data
25825           On System V.4 and embedded PowerPC systems, put small global data
25826           in the ".sdata" section.  Put small uninitialized global data in
25827           the ".sbss" section.  Do not use register "r13" to address small
25828           data however.  This is the default behavior unless other -msdata
25829           options are used.
25830
25831       -msdata=none
25832       -mno-sdata
25833           On embedded PowerPC systems, put all initialized global and static
25834           data in the ".data" section, and all uninitialized data in the
25835           ".bss" section.
25836
25837       -mreadonly-in-sdata
25838           Put read-only objects in the ".sdata" section as well.  This is the
25839           default.
25840
25841       -mblock-move-inline-limit=num
25842           Inline all block moves (such as calls to "memcpy" or structure
25843           copies) less than or equal to num bytes.  The minimum value for num
25844           is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
25845           default value is target-specific.
25846
25847       -mblock-compare-inline-limit=num
25848           Generate non-looping inline code for all block compares (such as
25849           calls to "memcmp" or structure compares) less than or equal to num
25850           bytes. If num is 0, all inline expansion (non-loop and loop) of
25851           block compare is disabled. The default value is target-specific.
25852
25853       -mblock-compare-inline-loop-limit=num
25854           Generate an inline expansion using loop code for all block compares
25855           that are less than or equal to num bytes, but greater than the
25856           limit for non-loop inline block compare expansion. If the block
25857           length is not constant, at most num bytes will be compared before
25858           "memcmp" is called to compare the remainder of the block. The
25859           default value is target-specific.
25860
25861       -mstring-compare-inline-limit=num
25862           Compare at most num string bytes with inline code.  If the
25863           difference or end of string is not found at the end of the inline
25864           compare a call to "strcmp" or "strncmp" will take care of the rest
25865           of the comparison. The default is 64 bytes.
25866
25867       -G num
25868           On embedded PowerPC systems, put global and static items less than
25869           or equal to num bytes into the small data or BSS sections instead
25870           of the normal data or BSS section.  By default, num is 8.  The -G
25871           num switch is also passed to the linker.  All modules should be
25872           compiled with the same -G num value.
25873
25874       -mregnames
25875       -mno-regnames
25876           On System V.4 and embedded PowerPC systems do (do not) emit
25877           register names in the assembly language output using symbolic
25878           forms.
25879
25880       -mlongcall
25881       -mno-longcall
25882           By default assume that all calls are far away so that a longer and
25883           more expensive calling sequence is required.  This is required for
25884           calls farther than 32 megabytes (33,554,432 bytes) from the current
25885           location.  A short call is generated if the compiler knows the call
25886           cannot be that far away.  This setting can be overridden by the
25887           "shortcall" function attribute, or by #pragma longcall(0).
25888
25889           Some linkers are capable of detecting out-of-range calls and
25890           generating glue code on the fly.  On these systems, long calls are
25891           unnecessary and generate slower code.  As of this writing, the AIX
25892           linker can do this, as can the GNU linker for PowerPC/64.  It is
25893           planned to add this feature to the GNU linker for 32-bit PowerPC
25894           systems as well.
25895
25896           On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
25897           linkers, GCC can generate long calls using an inline PLT call
25898           sequence (see -mpltseq).  PowerPC with -mbss-plt and PowerPC64
25899           ELFv1 (big-endian) do not support inline PLT calls.
25900
25901           On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
25902           L42", plus a branch island (glue code).  The two target addresses
25903           represent the callee and the branch island.  The Darwin/PPC linker
25904           prefers the first address and generates a "bl callee" if the PPC
25905           "bl" instruction reaches the callee directly; otherwise, the linker
25906           generates "bl L42" to call the branch island.  The branch island is
25907           appended to the body of the calling function; it computes the full
25908           32-bit address of the callee and jumps to it.
25909
25910           On Mach-O (Darwin) systems, this option directs the compiler emit
25911           to the glue for every direct call, and the Darwin linker decides
25912           whether to use or discard it.
25913
25914           In the future, GCC may ignore all longcall specifications when the
25915           linker is known to generate glue.
25916
25917       -mpltseq
25918       -mno-pltseq
25919           Implement (do not implement) -fno-plt and long calls using an
25920           inline PLT call sequence that supports lazy linking and long calls
25921           to functions in dlopen'd shared libraries.  Inline PLT calls are
25922           only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
25923           newer GNU linkers, and are enabled by default if the support is
25924           detected when configuring GCC, and, in the case of 32-bit PowerPC,
25925           if GCC is configured with --enable-secureplt.  -mpltseq code and
25926           -mbss-plt 32-bit PowerPC relocatable objects may not be linked
25927           together.
25928
25929       -mtls-markers
25930       -mno-tls-markers
25931           Mark (do not mark) calls to "__tls_get_addr" with a relocation
25932           specifying the function argument.  The relocation allows the linker
25933           to reliably associate function call with argument setup
25934           instructions for TLS optimization, which in turn allows GCC to
25935           better schedule the sequence.
25936
25937       -mrecip
25938       -mno-recip
25939           This option enables use of the reciprocal estimate and reciprocal
25940           square root estimate instructions with additional Newton-Raphson
25941           steps to increase precision instead of doing a divide or square
25942           root and divide for floating-point arguments.  You should use the
25943           -ffast-math option when using -mrecip (or at least
25944           -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
25945           and -fno-trapping-math).  Note that while the throughput of the
25946           sequence is generally higher than the throughput of the non-
25947           reciprocal instruction, the precision of the sequence can be
25948           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
25949           0.99999994) for reciprocal square roots.
25950
25951       -mrecip=opt
25952           This option controls which reciprocal estimate instructions may be
25953           used.  opt is a comma-separated list of options, which may be
25954           preceded by a "!" to invert the option:
25955
25956           all Enable all estimate instructions.
25957
25958           default
25959               Enable the default instructions, equivalent to -mrecip.
25960
25961           none
25962               Disable all estimate instructions, equivalent to -mno-recip.
25963
25964           div Enable the reciprocal approximation instructions for both
25965               single and double precision.
25966
25967           divf
25968               Enable the single-precision reciprocal approximation
25969               instructions.
25970
25971           divd
25972               Enable the double-precision reciprocal approximation
25973               instructions.
25974
25975           rsqrt
25976               Enable the reciprocal square root approximation instructions
25977               for both single and double precision.
25978
25979           rsqrtf
25980               Enable the single-precision reciprocal square root
25981               approximation instructions.
25982
25983           rsqrtd
25984               Enable the double-precision reciprocal square root
25985               approximation instructions.
25986
25987           So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
25988           estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
25989           "XVRSQRTEDP" instructions which handle the double-precision
25990           reciprocal square root calculations.
25991
25992       -mrecip-precision
25993       -mno-recip-precision
25994           Assume (do not assume) that the reciprocal estimate instructions
25995           provide higher-precision estimates than is mandated by the PowerPC
25996           ABI.  Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
25997           automatically selects -mrecip-precision.  The double-precision
25998           square root estimate instructions are not generated by default on
25999           low-precision machines, since they do not provide an estimate that
26000           converges after three steps.
26001
26002       -mveclibabi=type
26003           Specifies the ABI type to use for vectorizing intrinsics using an
26004           external library.  The only type supported at present is mass,
26005           which specifies to use IBM's Mathematical Acceleration Subsystem
26006           (MASS) libraries for vectorizing intrinsics using external
26007           libraries.  GCC currently emits calls to "acosd2", "acosf4",
26008           "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
26009           "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
26010           "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
26011           "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
26012           "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
26013           "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
26014           "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
26015           "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
26016           "tanhf4" when generating code for power7.  Both -ftree-vectorize
26017           and -funsafe-math-optimizations must also be enabled.  The MASS
26018           libraries must be specified at link time.
26019
26020       -mfriz
26021       -mno-friz
26022           Generate (do not generate) the "friz" instruction when the
26023           -funsafe-math-optimizations option is used to optimize rounding of
26024           floating-point values to 64-bit integer and back to floating point.
26025           The "friz" instruction does not return the same value if the
26026           floating-point number is too large to fit in an integer.
26027
26028       -mpointers-to-nested-functions
26029       -mno-pointers-to-nested-functions
26030           Generate (do not generate) code to load up the static chain
26031           register ("r11") when calling through a pointer on AIX and 64-bit
26032           Linux systems where a function pointer points to a 3-word
26033           descriptor giving the function address, TOC value to be loaded in
26034           register "r2", and static chain value to be loaded in register
26035           "r11".  The -mpointers-to-nested-functions is on by default.  You
26036           cannot call through pointers to nested functions or pointers to
26037           functions compiled in other languages that use the static chain if
26038           you use -mno-pointers-to-nested-functions.
26039
26040       -msave-toc-indirect
26041       -mno-save-toc-indirect
26042           Generate (do not generate) code to save the TOC value in the
26043           reserved stack location in the function prologue if the function
26044           calls through a pointer on AIX and 64-bit Linux systems.  If the
26045           TOC value is not saved in the prologue, it is saved just before the
26046           call through the pointer.  The -mno-save-toc-indirect option is the
26047           default.
26048
26049       -mcompat-align-parm
26050       -mno-compat-align-parm
26051           Generate (do not generate) code to pass structure parameters with a
26052           maximum alignment of 64 bits, for compatibility with older versions
26053           of GCC.
26054
26055           Older versions of GCC (prior to 4.9.0) incorrectly did not align a
26056           structure parameter on a 128-bit boundary when that structure
26057           contained a member requiring 128-bit alignment.  This is corrected
26058           in more recent versions of GCC.  This option may be used to
26059           generate code that is compatible with functions compiled with older
26060           versions of GCC.
26061
26062           The -mno-compat-align-parm option is the default.
26063
26064       -mstack-protector-guard=guard
26065       -mstack-protector-guard-reg=reg
26066       -mstack-protector-guard-offset=offset
26067       -mstack-protector-guard-symbol=symbol
26068           Generate stack protection code using canary at guard.  Supported
26069           locations are global for global canary or tls for per-thread canary
26070           in the TLS block (the default with GNU libc version 2.4 or later).
26071
26072           With the latter choice the options -mstack-protector-guard-reg=reg
26073           and -mstack-protector-guard-offset=offset furthermore specify which
26074           register to use as base register for reading the canary, and from
26075           what offset from that base register. The default for those is as
26076           specified in the relevant ABI.
26077           -mstack-protector-guard-symbol=symbol overrides the offset with a
26078           symbol reference to a canary in the TLS block.
26079
26080       -mpcrel
26081       -mno-pcrel
26082           Generate (do not generate) pc-relative addressing.  The -mpcrel
26083           option requires that the medium code model (-mcmodel=medium) and
26084           prefixed addressing (-mprefixed) options are enabled.
26085
26086       -mprefixed
26087       -mno-prefixed
26088           Generate (do not generate) addressing modes using prefixed load and
26089           store instructions.  The -mprefixed option requires that the option
26090           -mcpu=power10 (or later) is enabled.
26091
26092       -mmma
26093       -mno-mma
26094           Generate (do not generate) the MMA instructions.  The -mma option
26095           requires that the option -mcpu=power10 (or later) is enabled.
26096
26097       -mrop-protect
26098       -mno-rop-protect
26099           Generate (do not generate) ROP protection instructions when the
26100           target processor supports them.  Currently this option disables the
26101           shrink-wrap optimization (-fshrink-wrap).
26102
26103       -mprivileged
26104       -mno-privileged
26105           Generate (do not generate) code that will run in privileged state.
26106
26107       -mblock-ops-unaligned-vsx
26108       -mno-block-ops-unaligned-vsx
26109           Generate (do not generate) unaligned vsx loads and stores for
26110           inline expansion of "memcpy" and "memmove".
26111
26112       --param rs6000-vect-unroll-limit=
26113           The vectorizer will check with target information to determine
26114           whether it would be beneficial to unroll the main vectorized loop
26115           and by how much.  This parameter sets the upper bound of how much
26116           the vectorizer will unroll the main loop.  The default value is
26117           four.
26118
26119       RX Options
26120
26121       These command-line options are defined for RX targets:
26122
26123       -m64bit-doubles
26124       -m32bit-doubles
26125           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
26126           (-m32bit-doubles) in size.  The default is -m32bit-doubles.  Note
26127           RX floating-point hardware only works on 32-bit values, which is
26128           why the default is -m32bit-doubles.
26129
26130       -fpu
26131       -nofpu
26132           Enables (-fpu) or disables (-nofpu) the use of RX floating-point
26133           hardware.  The default is enabled for the RX600 series and disabled
26134           for the RX200 series.
26135
26136           Floating-point instructions are only generated for 32-bit floating-
26137           point values, however, so the FPU hardware is not used for doubles
26138           if the -m64bit-doubles option is used.
26139
26140           Note If the -fpu option is enabled then -funsafe-math-optimizations
26141           is also enabled automatically.  This is because the RX FPU
26142           instructions are themselves unsafe.
26143
26144       -mcpu=name
26145           Selects the type of RX CPU to be targeted.  Currently three types
26146           are supported, the generic RX600 and RX200 series hardware and the
26147           specific RX610 CPU.  The default is RX600.
26148
26149           The only difference between RX600 and RX610 is that the RX610 does
26150           not support the "MVTIPL" instruction.
26151
26152           The RX200 series does not have a hardware floating-point unit and
26153           so -nofpu is enabled by default when this type is selected.
26154
26155       -mbig-endian-data
26156       -mlittle-endian-data
26157           Store data (but not code) in the big-endian format.  The default is
26158           -mlittle-endian-data, i.e. to store data in the little-endian
26159           format.
26160
26161       -msmall-data-limit=N
26162           Specifies the maximum size in bytes of global and static variables
26163           which can be placed into the small data area.  Using the small data
26164           area can lead to smaller and faster code, but the size of area is
26165           limited and it is up to the programmer to ensure that the area does
26166           not overflow.  Also when the small data area is used one of the
26167           RX's registers (usually "r13") is reserved for use pointing to this
26168           area, so it is no longer available for use by the compiler.  This
26169           could result in slower and/or larger code if variables are pushed
26170           onto the stack instead of being held in this register.
26171
26172           Note, common variables (variables that have not been initialized)
26173           and constants are not placed into the small data area as they are
26174           assigned to other sections in the output executable.
26175
26176           The default value is zero, which disables this feature.  Note, this
26177           feature is not enabled by default with higher optimization levels
26178           (-O2 etc) because of the potentially detrimental effects of
26179           reserving a register.  It is up to the programmer to experiment and
26180           discover whether this feature is of benefit to their program.  See
26181           the description of the -mpid option for a description of how the
26182           actual register to hold the small data area pointer is chosen.
26183
26184       -msim
26185       -mno-sim
26186           Use the simulator runtime.  The default is to use the libgloss
26187           board-specific runtime.
26188
26189       -mas100-syntax
26190       -mno-as100-syntax
26191           When generating assembler output use a syntax that is compatible
26192           with Renesas's AS100 assembler.  This syntax can also be handled by
26193           the GAS assembler, but it has some restrictions so it is not
26194           generated by default.
26195
26196       -mmax-constant-size=N
26197           Specifies the maximum size, in bytes, of a constant that can be
26198           used as an operand in a RX instruction.  Although the RX
26199           instruction set does allow constants of up to 4 bytes in length to
26200           be used in instructions, a longer value equates to a longer
26201           instruction.  Thus in some circumstances it can be beneficial to
26202           restrict the size of constants that are used in instructions.
26203           Constants that are too big are instead placed into a constant pool
26204           and referenced via register indirection.
26205
26206           The value N can be between 0 and 4.  A value of 0 (the default) or
26207           4 means that constants of any size are allowed.
26208
26209       -mrelax
26210           Enable linker relaxation.  Linker relaxation is a process whereby
26211           the linker attempts to reduce the size of a program by finding
26212           shorter versions of various instructions.  Disabled by default.
26213
26214       -mint-register=N
26215           Specify the number of registers to reserve for fast interrupt
26216           handler functions.  The value N can be between 0 and 4.  A value of
26217           1 means that register "r13" is reserved for the exclusive use of
26218           fast interrupt handlers.  A value of 2 reserves "r13" and "r12".  A
26219           value of 3 reserves "r13", "r12" and "r11", and a value of 4
26220           reserves "r13" through "r10".  A value of 0, the default, does not
26221           reserve any registers.
26222
26223       -msave-acc-in-interrupts
26224           Specifies that interrupt handler functions should preserve the
26225           accumulator register.  This is only necessary if normal code might
26226           use the accumulator register, for example because it performs
26227           64-bit multiplications.  The default is to ignore the accumulator
26228           as this makes the interrupt handlers faster.
26229
26230       -mpid
26231       -mno-pid
26232           Enables the generation of position independent data.  When enabled
26233           any access to constant data is done via an offset from a base
26234           address held in a register.  This allows the location of constant
26235           data to be determined at run time without requiring the executable
26236           to be relocated, which is a benefit to embedded applications with
26237           tight memory constraints.  Data that can be modified is not
26238           affected by this option.
26239
26240           Note, using this feature reserves a register, usually "r13", for
26241           the constant data base address.  This can result in slower and/or
26242           larger code, especially in complicated functions.
26243
26244           The actual register chosen to hold the constant data base address
26245           depends upon whether the -msmall-data-limit and/or the
26246           -mint-register command-line options are enabled.  Starting with
26247           register "r13" and proceeding downwards, registers are allocated
26248           first to satisfy the requirements of -mint-register, then -mpid and
26249           finally -msmall-data-limit.  Thus it is possible for the small data
26250           area register to be "r8" if both -mint-register=4 and -mpid are
26251           specified on the command line.
26252
26253           By default this feature is not enabled.  The default can be
26254           restored via the -mno-pid command-line option.
26255
26256       -mno-warn-multiple-fast-interrupts
26257       -mwarn-multiple-fast-interrupts
26258           Prevents GCC from issuing a warning message if it finds more than
26259           one fast interrupt handler when it is compiling a file.  The
26260           default is to issue a warning for each extra fast interrupt handler
26261           found, as the RX only supports one such interrupt.
26262
26263       -mallow-string-insns
26264       -mno-allow-string-insns
26265           Enables or disables the use of the string manipulation instructions
26266           "SMOVF", "SCMPU", "SMOVB", "SMOVU", "SUNTIL" "SWHILE" and also the
26267           "RMPA" instruction.  These instructions may prefetch data, which is
26268           not safe to do if accessing an I/O register.  (See section 12.2.7
26269           of the RX62N Group User's Manual for more information).
26270
26271           The default is to allow these instructions, but it is not possible
26272           for GCC to reliably detect all circumstances where a string
26273           instruction might be used to access an I/O register, so their use
26274           cannot be disabled automatically.  Instead it is reliant upon the
26275           programmer to use the -mno-allow-string-insns option if their
26276           program accesses I/O space.
26277
26278           When the instructions are enabled GCC defines the C preprocessor
26279           symbol "__RX_ALLOW_STRING_INSNS__", otherwise it defines the symbol
26280           "__RX_DISALLOW_STRING_INSNS__".
26281
26282       -mjsr
26283       -mno-jsr
26284           Use only (or not only) "JSR" instructions to access functions.
26285           This option can be used when code size exceeds the range of "BSR"
26286           instructions.  Note that -mno-jsr does not mean to not use "JSR"
26287           but instead means that any type of branch may be used.
26288
26289       Note: The generic GCC command-line option -ffixed-reg has special
26290       significance to the RX port when used with the "interrupt" function
26291       attribute.  This attribute indicates a function intended to process
26292       fast interrupts.  GCC ensures that it only uses the registers "r10",
26293       "r11", "r12" and/or "r13" and only provided that the normal use of the
26294       corresponding registers have been restricted via the -ffixed-reg or
26295       -mint-register command-line options.
26296
26297       S/390 and zSeries Options
26298
26299       These are the -m options defined for the S/390 and zSeries
26300       architecture.
26301
26302       -mhard-float
26303       -msoft-float
26304           Use (do not use) the hardware floating-point instructions and
26305           registers for floating-point operations.  When -msoft-float is
26306           specified, functions in libgcc.a are used to perform floating-point
26307           operations.  When -mhard-float is specified, the compiler generates
26308           IEEE floating-point instructions.  This is the default.
26309
26310       -mhard-dfp
26311       -mno-hard-dfp
26312           Use (do not use) the hardware decimal-floating-point instructions
26313           for decimal-floating-point operations.  When -mno-hard-dfp is
26314           specified, functions in libgcc.a are used to perform decimal-
26315           floating-point operations.  When -mhard-dfp is specified, the
26316           compiler generates decimal-floating-point hardware instructions.
26317           This is the default for -march=z9-ec or higher.
26318
26319       -mlong-double-64
26320       -mlong-double-128
26321           These switches control the size of "long double" type. A size of 64
26322           bits makes the "long double" type equivalent to the "double" type.
26323           This is the default.
26324
26325       -mbackchain
26326       -mno-backchain
26327           Store (do not store) the address of the caller's frame as backchain
26328           pointer into the callee's stack frame.  A backchain may be needed
26329           to allow debugging using tools that do not understand DWARF call
26330           frame information.  When -mno-packed-stack is in effect, the
26331           backchain pointer is stored at the bottom of the stack frame; when
26332           -mpacked-stack is in effect, the backchain is placed into the
26333           topmost word of the 96/160 byte register save area.
26334
26335           In general, code compiled with -mbackchain is call-compatible with
26336           code compiled with -mno-backchain; however, use of the backchain
26337           for debugging purposes usually requires that the whole binary is
26338           built with -mbackchain.  Note that the combination of -mbackchain,
26339           -mpacked-stack and -mhard-float is not supported.  In order to
26340           build a linux kernel use -msoft-float.
26341
26342           The default is to not maintain the backchain.
26343
26344       -mpacked-stack
26345       -mno-packed-stack
26346           Use (do not use) the packed stack layout.  When -mno-packed-stack
26347           is specified, the compiler uses the all fields of the 96/160 byte
26348           register save area only for their default purpose; unused fields
26349           still take up stack space.  When -mpacked-stack is specified,
26350           register save slots are densely packed at the top of the register
26351           save area; unused space is reused for other purposes, allowing for
26352           more efficient use of the available stack space.  However, when
26353           -mbackchain is also in effect, the topmost word of the save area is
26354           always used to store the backchain, and the return address register
26355           is always saved two words below the backchain.
26356
26357           As long as the stack frame backchain is not used, code generated
26358           with -mpacked-stack is call-compatible with code generated with
26359           -mno-packed-stack.  Note that some non-FSF releases of GCC 2.95 for
26360           S/390 or zSeries generated code that uses the stack frame backchain
26361           at run time, not just for debugging purposes.  Such code is not
26362           call-compatible with code compiled with -mpacked-stack.  Also, note
26363           that the combination of -mbackchain, -mpacked-stack and
26364           -mhard-float is not supported.  In order to build a linux kernel
26365           use -msoft-float.
26366
26367           The default is to not use the packed stack layout.
26368
26369       -msmall-exec
26370       -mno-small-exec
26371           Generate (or do not generate) code using the "bras" instruction to
26372           do subroutine calls.  This only works reliably if the total
26373           executable size does not exceed 64k.  The default is to use the
26374           "basr" instruction instead, which does not have this limitation.
26375
26376       -m64
26377       -m31
26378           When -m31 is specified, generate code compliant to the GNU/Linux
26379           for S/390 ABI.  When -m64 is specified, generate code compliant to
26380           the GNU/Linux for zSeries ABI.  This allows GCC in particular to
26381           generate 64-bit instructions.  For the s390 targets, the default is
26382           -m31, while the s390x targets default to -m64.
26383
26384       -mzarch
26385       -mesa
26386           When -mzarch is specified, generate code using the instructions
26387           available on z/Architecture.  When -mesa is specified, generate
26388           code using the instructions available on ESA/390.  Note that -mesa
26389           is not possible with -m64.  When generating code compliant to the
26390           GNU/Linux for S/390 ABI, the default is -mesa.  When generating
26391           code compliant to the GNU/Linux for zSeries ABI, the default is
26392           -mzarch.
26393
26394       -mhtm
26395       -mno-htm
26396           The -mhtm option enables a set of builtins making use of
26397           instructions available with the transactional execution facility
26398           introduced with the IBM zEnterprise EC12 machine generation S/390
26399           System z Built-in Functions.  -mhtm is enabled by default when
26400           using -march=zEC12.
26401
26402       -mvx
26403       -mno-vx
26404           When -mvx is specified, generate code using the instructions
26405           available with the vector extension facility introduced with the
26406           IBM z13 machine generation.  This option changes the ABI for some
26407           vector type values with regard to alignment and calling
26408           conventions.  In case vector type values are being used in an ABI-
26409           relevant context a GAS .gnu_attribute command will be added to mark
26410           the resulting binary with the ABI used.  -mvx is enabled by default
26411           when using -march=z13.
26412
26413       -mzvector
26414       -mno-zvector
26415           The -mzvector option enables vector language extensions and
26416           builtins using instructions available with the vector extension
26417           facility introduced with the IBM z13 machine generation.  This
26418           option adds support for vector to be used as a keyword to define
26419           vector type variables and arguments.  vector is only available when
26420           GNU extensions are enabled.  It will not be expanded when
26421           requesting strict standard compliance e.g. with -std=c99.  In
26422           addition to the GCC low-level builtins -mzvector enables a set of
26423           builtins added for compatibility with AltiVec-style implementations
26424           like Power and Cell.  In order to make use of these builtins the
26425           header file vecintrin.h needs to be included.  -mzvector is
26426           disabled by default.
26427
26428       -mmvcle
26429       -mno-mvcle
26430           Generate (or do not generate) code using the "mvcle" instruction to
26431           perform block moves.  When -mno-mvcle is specified, use a "mvc"
26432           loop instead.  This is the default unless optimizing for size.
26433
26434       -mdebug
26435       -mno-debug
26436           Print (or do not print) additional debug information when
26437           compiling.  The default is to not print debug information.
26438
26439       -march=cpu-type
26440           Generate code that runs on cpu-type, which is the name of a system
26441           representing a certain processor type.  Possible values for cpu-
26442           type are z900/arch5, z990/arch6, z9-109, z9-ec/arch7, z10/arch8,
26443           z196/arch9, zEC12, z13/arch11, z14/arch12, z15/arch13, z16/arch14,
26444           and native.
26445
26446           The default is -march=z900.
26447
26448           Specifying native as cpu type can be used to select the best
26449           architecture option for the host processor.  -march=native has no
26450           effect if GCC does not recognize the processor.
26451
26452       -mtune=cpu-type
26453           Tune to cpu-type everything applicable about the generated code,
26454           except for the ABI and the set of available instructions.  The list
26455           of cpu-type values is the same as for -march.  The default is the
26456           value used for -march.
26457
26458       -mtpf-trace
26459       -mno-tpf-trace
26460           Generate code that adds (does not add) in TPF OS specific branches
26461           to trace routines in the operating system.  This option is off by
26462           default, even when compiling for the TPF OS.
26463
26464       -mtpf-trace-skip
26465       -mno-tpf-trace-skip
26466           Generate code that changes (does not change) the default branch
26467           targets enabled by -mtpf-trace to point to specialized trace
26468           routines providing the ability of selectively skipping function
26469           trace entries for the TPF OS.  This option is off by default, even
26470           when compiling for the TPF OS and specifying -mtpf-trace.
26471
26472       -mfused-madd
26473       -mno-fused-madd
26474           Generate code that uses (does not use) the floating-point multiply
26475           and accumulate instructions.  These instructions are generated by
26476           default if hardware floating point is used.
26477
26478       -mwarn-framesize=framesize
26479           Emit a warning if the current function exceeds the given frame
26480           size.  Because this is a compile-time check it doesn't need to be a
26481           real problem when the program runs.  It is intended to identify
26482           functions that most probably cause a stack overflow.  It is useful
26483           to be used in an environment with limited stack size e.g. the linux
26484           kernel.
26485
26486       -mwarn-dynamicstack
26487           Emit a warning if the function calls "alloca" or uses dynamically-
26488           sized arrays.  This is generally a bad idea with a limited stack
26489           size.
26490
26491       -mstack-guard=stack-guard
26492       -mstack-size=stack-size
26493           If these options are provided the S/390 back end emits additional
26494           instructions in the function prologue that trigger a trap if the
26495           stack size is stack-guard bytes above the stack-size (remember that
26496           the stack on S/390 grows downward).  If the stack-guard option is
26497           omitted the smallest power of 2 larger than the frame size of the
26498           compiled function is chosen.  These options are intended to be used
26499           to help debugging stack overflow problems.  The additionally
26500           emitted code causes only little overhead and hence can also be used
26501           in production-like systems without greater performance degradation.
26502           The given values have to be exact powers of 2 and stack-size has to
26503           be greater than stack-guard without exceeding 64k.  In order to be
26504           efficient the extra code makes the assumption that the stack starts
26505           at an address aligned to the value given by stack-size.  The stack-
26506           guard option can only be used in conjunction with stack-size.
26507
26508       -mhotpatch=pre-halfwords,post-halfwords
26509           If the hotpatch option is enabled, a "hot-patching" function
26510           prologue is generated for all functions in the compilation unit.
26511           The funtion label is prepended with the given number of two-byte
26512           NOP instructions (pre-halfwords, maximum 1000000).  After the
26513           label, 2 * post-halfwords bytes are appended, using the largest NOP
26514           like instructions the architecture allows (maximum 1000000).
26515
26516           If both arguments are zero, hotpatching is disabled.
26517
26518           This option can be overridden for individual functions with the
26519           "hotpatch" attribute.
26520
26521       SH Options
26522
26523       These -m options are defined for the SH implementations:
26524
26525       -m1 Generate code for the SH1.
26526
26527       -m2 Generate code for the SH2.
26528
26529       -m2e
26530           Generate code for the SH2e.
26531
26532       -m2a-nofpu
26533           Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
26534           way that the floating-point unit is not used.
26535
26536       -m2a-single-only
26537           Generate code for the SH2a-FPU, in such a way that no double-
26538           precision floating-point operations are used.
26539
26540       -m2a-single
26541           Generate code for the SH2a-FPU assuming the floating-point unit is
26542           in single-precision mode by default.
26543
26544       -m2a
26545           Generate code for the SH2a-FPU assuming the floating-point unit is
26546           in double-precision mode by default.
26547
26548       -m3 Generate code for the SH3.
26549
26550       -m3e
26551           Generate code for the SH3e.
26552
26553       -m4-nofpu
26554           Generate code for the SH4 without a floating-point unit.
26555
26556       -m4-single-only
26557           Generate code for the SH4 with a floating-point unit that only
26558           supports single-precision arithmetic.
26559
26560       -m4-single
26561           Generate code for the SH4 assuming the floating-point unit is in
26562           single-precision mode by default.
26563
26564       -m4 Generate code for the SH4.
26565
26566       -m4-100
26567           Generate code for SH4-100.
26568
26569       -m4-100-nofpu
26570           Generate code for SH4-100 in such a way that the floating-point
26571           unit is not used.
26572
26573       -m4-100-single
26574           Generate code for SH4-100 assuming the floating-point unit is in
26575           single-precision mode by default.
26576
26577       -m4-100-single-only
26578           Generate code for SH4-100 in such a way that no double-precision
26579           floating-point operations are used.
26580
26581       -m4-200
26582           Generate code for SH4-200.
26583
26584       -m4-200-nofpu
26585           Generate code for SH4-200 without in such a way that the floating-
26586           point unit is not used.
26587
26588       -m4-200-single
26589           Generate code for SH4-200 assuming the floating-point unit is in
26590           single-precision mode by default.
26591
26592       -m4-200-single-only
26593           Generate code for SH4-200 in such a way that no double-precision
26594           floating-point operations are used.
26595
26596       -m4-300
26597           Generate code for SH4-300.
26598
26599       -m4-300-nofpu
26600           Generate code for SH4-300 without in such a way that the floating-
26601           point unit is not used.
26602
26603       -m4-300-single
26604           Generate code for SH4-300 in such a way that no double-precision
26605           floating-point operations are used.
26606
26607       -m4-300-single-only
26608           Generate code for SH4-300 in such a way that no double-precision
26609           floating-point operations are used.
26610
26611       -m4-340
26612           Generate code for SH4-340 (no MMU, no FPU).
26613
26614       -m4-500
26615           Generate code for SH4-500 (no FPU).  Passes -isa=sh4-nofpu to the
26616           assembler.
26617
26618       -m4a-nofpu
26619           Generate code for the SH4al-dsp, or for a SH4a in such a way that
26620           the floating-point unit is not used.
26621
26622       -m4a-single-only
26623           Generate code for the SH4a, in such a way that no double-precision
26624           floating-point operations are used.
26625
26626       -m4a-single
26627           Generate code for the SH4a assuming the floating-point unit is in
26628           single-precision mode by default.
26629
26630       -m4a
26631           Generate code for the SH4a.
26632
26633       -m4al
26634           Same as -m4a-nofpu, except that it implicitly passes -dsp to the
26635           assembler.  GCC doesn't generate any DSP instructions at the
26636           moment.
26637
26638       -mb Compile code for the processor in big-endian mode.
26639
26640       -ml Compile code for the processor in little-endian mode.
26641
26642       -mdalign
26643           Align doubles at 64-bit boundaries.  Note that this changes the
26644           calling conventions, and thus some functions from the standard C
26645           library do not work unless you recompile it first with -mdalign.
26646
26647       -mrelax
26648           Shorten some address references at link time, when possible; uses
26649           the linker option -relax.
26650
26651       -mbigtable
26652           Use 32-bit offsets in "switch" tables.  The default is to use
26653           16-bit offsets.
26654
26655       -mbitops
26656           Enable the use of bit manipulation instructions on SH2A.
26657
26658       -mfmovd
26659           Enable the use of the instruction "fmovd".  Check -mdalign for
26660           alignment constraints.
26661
26662       -mrenesas
26663           Comply with the calling conventions defined by Renesas.
26664
26665       -mno-renesas
26666           Comply with the calling conventions defined for GCC before the
26667           Renesas conventions were available.  This option is the default for
26668           all targets of the SH toolchain.
26669
26670       -mnomacsave
26671           Mark the "MAC" register as call-clobbered, even if -mrenesas is
26672           given.
26673
26674       -mieee
26675       -mno-ieee
26676           Control the IEEE compliance of floating-point comparisons, which
26677           affects the handling of cases where the result of a comparison is
26678           unordered.  By default -mieee is implicitly enabled.  If
26679           -ffinite-math-only is enabled -mno-ieee is implicitly set, which
26680           results in faster floating-point greater-equal and less-equal
26681           comparisons.  The implicit settings can be overridden by specifying
26682           either -mieee or -mno-ieee.
26683
26684       -minline-ic_invalidate
26685           Inline code to invalidate instruction cache entries after setting
26686           up nested function trampolines.  This option has no effect if
26687           -musermode is in effect and the selected code generation option
26688           (e.g. -m4) does not allow the use of the "icbi" instruction.  If
26689           the selected code generation option does not allow the use of the
26690           "icbi" instruction, and -musermode is not in effect, the inlined
26691           code manipulates the instruction cache address array directly with
26692           an associative write.  This not only requires privileged mode at
26693           run time, but it also fails if the cache line had been mapped via
26694           the TLB and has become unmapped.
26695
26696       -misize
26697           Dump instruction size and location in the assembly code.
26698
26699       -mpadstruct
26700           This option is deprecated.  It pads structures to multiple of 4
26701           bytes, which is incompatible with the SH ABI.
26702
26703       -matomic-model=model
26704           Sets the model of atomic operations and additional parameters as a
26705           comma separated list.  For details on the atomic built-in functions
26706           see __atomic Builtins.  The following models and parameters are
26707           supported:
26708
26709           none
26710               Disable compiler generated atomic sequences and emit library
26711               calls for atomic operations.  This is the default if the target
26712               is not "sh*-*-linux*".
26713
26714           soft-gusa
26715               Generate GNU/Linux compatible gUSA software atomic sequences
26716               for the atomic built-in functions.  The generated atomic
26717               sequences require additional support from the
26718               interrupt/exception handling code of the system and are only
26719               suitable for SH3* and SH4* single-core systems.  This option is
26720               enabled by default when the target is "sh*-*-linux*" and SH3*
26721               or SH4*.  When the target is SH4A, this option also partially
26722               utilizes the hardware atomic instructions "movli.l" and
26723               "movco.l" to create more efficient code, unless strict is
26724               specified.
26725
26726           soft-tcb
26727               Generate software atomic sequences that use a variable in the
26728               thread control block.  This is a variation of the gUSA
26729               sequences which can also be used on SH1* and SH2* targets.  The
26730               generated atomic sequences require additional support from the
26731               interrupt/exception handling code of the system and are only
26732               suitable for single-core systems.  When using this model, the
26733               gbr-offset= parameter has to be specified as well.
26734
26735           soft-imask
26736               Generate software atomic sequences that temporarily disable
26737               interrupts by setting "SR.IMASK = 1111".  This model works only
26738               when the program runs in privileged mode and is only suitable
26739               for single-core systems.  Additional support from the
26740               interrupt/exception handling code of the system is not
26741               required.  This model is enabled by default when the target is
26742               "sh*-*-linux*" and SH1* or SH2*.
26743
26744           hard-llcs
26745               Generate hardware atomic sequences using the "movli.l" and
26746               "movco.l" instructions only.  This is only available on SH4A
26747               and is suitable for multi-core systems.  Since the hardware
26748               instructions support only 32 bit atomic variables access to 8
26749               or 16 bit variables is emulated with 32 bit accesses.  Code
26750               compiled with this option is also compatible with other
26751               software atomic model interrupt/exception handling systems if
26752               executed on an SH4A system.  Additional support from the
26753               interrupt/exception handling code of the system is not required
26754               for this model.
26755
26756           gbr-offset=
26757               This parameter specifies the offset in bytes of the variable in
26758               the thread control block structure that should be used by the
26759               generated atomic sequences when the soft-tcb model has been
26760               selected.  For other models this parameter is ignored.  The
26761               specified value must be an integer multiple of four and in the
26762               range 0-1020.
26763
26764           strict
26765               This parameter prevents mixed usage of multiple atomic models,
26766               even if they are compatible, and makes the compiler generate
26767               atomic sequences of the specified model only.
26768
26769       -mtas
26770           Generate the "tas.b" opcode for "__atomic_test_and_set".  Notice
26771           that depending on the particular hardware and software
26772           configuration this can degrade overall performance due to the
26773           operand cache line flushes that are implied by the "tas.b"
26774           instruction.  On multi-core SH4A processors the "tas.b" instruction
26775           must be used with caution since it can result in data corruption
26776           for certain cache configurations.
26777
26778       -mprefergot
26779           When generating position-independent code, emit function calls
26780           using the Global Offset Table instead of the Procedure Linkage
26781           Table.
26782
26783       -musermode
26784       -mno-usermode
26785           Don't allow (allow) the compiler generating privileged mode code.
26786           Specifying -musermode also implies -mno-inline-ic_invalidate if the
26787           inlined code would not work in user mode.  -musermode is the
26788           default when the target is "sh*-*-linux*".  If the target is SH1*
26789           or SH2* -musermode has no effect, since there is no user mode.
26790
26791       -multcost=number
26792           Set the cost to assume for a multiply insn.
26793
26794       -mdiv=strategy
26795           Set the division strategy to be used for integer division
26796           operations.  strategy can be one of:
26797
26798           call-div1
26799               Calls a library function that uses the single-step division
26800               instruction "div1" to perform the operation.  Division by zero
26801               calculates an unspecified result and does not trap.  This is
26802               the default except for SH4, SH2A and SHcompact.
26803
26804           call-fp
26805               Calls a library function that performs the operation in double
26806               precision floating point.  Division by zero causes a floating-
26807               point exception.  This is the default for SHcompact with FPU.
26808               Specifying this for targets that do not have a double precision
26809               FPU defaults to "call-div1".
26810
26811           call-table
26812               Calls a library function that uses a lookup table for small
26813               divisors and the "div1" instruction with case distinction for
26814               larger divisors.  Division by zero calculates an unspecified
26815               result and does not trap.  This is the default for SH4.
26816               Specifying this for targets that do not have dynamic shift
26817               instructions defaults to "call-div1".
26818
26819           When a division strategy has not been specified the default
26820           strategy is selected based on the current target.  For SH2A the
26821           default strategy is to use the "divs" and "divu" instructions
26822           instead of library function calls.
26823
26824       -maccumulate-outgoing-args
26825           Reserve space once for outgoing arguments in the function prologue
26826           rather than around each call.  Generally beneficial for performance
26827           and size.  Also needed for unwinding to avoid changing the stack
26828           frame around conditional code.
26829
26830       -mdivsi3_libfunc=name
26831           Set the name of the library function used for 32-bit signed
26832           division to name.  This only affects the name used in the call
26833           division strategies, and the compiler still expects the same sets
26834           of input/output/clobbered registers as if this option were not
26835           present.
26836
26837       -mfixed-range=register-range
26838           Generate code treating the given register range as fixed registers.
26839           A fixed register is one that the register allocator cannot use.
26840           This is useful when compiling kernel code.  A register range is
26841           specified as two registers separated by a dash.  Multiple register
26842           ranges can be specified separated by a comma.
26843
26844       -mbranch-cost=num
26845           Assume num to be the cost for a branch instruction.  Higher numbers
26846           make the compiler try to generate more branch-free code if
26847           possible.  If not specified the value is selected depending on the
26848           processor type that is being compiled for.
26849
26850       -mzdcbranch
26851       -mno-zdcbranch
26852           Assume (do not assume) that zero displacement conditional branch
26853           instructions "bt" and "bf" are fast.  If -mzdcbranch is specified,
26854           the compiler prefers zero displacement branch code sequences.  This
26855           is enabled by default when generating code for SH4 and SH4A.  It
26856           can be explicitly disabled by specifying -mno-zdcbranch.
26857
26858       -mcbranch-force-delay-slot
26859           Force the usage of delay slots for conditional branches, which
26860           stuffs the delay slot with a "nop" if a suitable instruction cannot
26861           be found.  By default this option is disabled.  It can be enabled
26862           to work around hardware bugs as found in the original SH7055.
26863
26864       -mfused-madd
26865       -mno-fused-madd
26866           Generate code that uses (does not use) the floating-point multiply
26867           and accumulate instructions.  These instructions are generated by
26868           default if hardware floating point is used.  The machine-dependent
26869           -mfused-madd option is now mapped to the machine-independent
26870           -ffp-contract=fast option, and -mno-fused-madd is mapped to
26871           -ffp-contract=off.
26872
26873       -mfsca
26874       -mno-fsca
26875           Allow or disallow the compiler to emit the "fsca" instruction for
26876           sine and cosine approximations.  The option -mfsca must be used in
26877           combination with -funsafe-math-optimizations.  It is enabled by
26878           default when generating code for SH4A.  Using -mno-fsca disables
26879           sine and cosine approximations even if -funsafe-math-optimizations
26880           is in effect.
26881
26882       -mfsrra
26883       -mno-fsrra
26884           Allow or disallow the compiler to emit the "fsrra" instruction for
26885           reciprocal square root approximations.  The option -mfsrra must be
26886           used in combination with -funsafe-math-optimizations and
26887           -ffinite-math-only.  It is enabled by default when generating code
26888           for SH4A.  Using -mno-fsrra disables reciprocal square root
26889           approximations even if -funsafe-math-optimizations and
26890           -ffinite-math-only are in effect.
26891
26892       -mpretend-cmove
26893           Prefer zero-displacement conditional branches for conditional move
26894           instruction patterns.  This can result in faster code on the SH4
26895           processor.
26896
26897       -mfdpic
26898           Generate code using the FDPIC ABI.
26899
26900       Solaris 2 Options
26901
26902       These -m options are supported on Solaris 2:
26903
26904       -mclear-hwcap
26905           -mclear-hwcap tells the compiler to remove the hardware
26906           capabilities generated by the Solaris assembler.  This is only
26907           necessary when object files use ISA extensions not supported by the
26908           current machine, but check at runtime whether or not to use them.
26909
26910       -mimpure-text
26911           -mimpure-text, used in addition to -shared, tells the compiler to
26912           not pass -z text to the linker when linking a shared object.  Using
26913           this option, you can link position-dependent code into a shared
26914           object.
26915
26916           -mimpure-text suppresses the "relocations remain against
26917           allocatable but non-writable sections" linker error message.
26918           However, the necessary relocations trigger copy-on-write, and the
26919           shared object is not actually shared across processes.  Instead of
26920           using -mimpure-text, you should compile all source code with -fpic
26921           or -fPIC.
26922
26923       These switches are supported in addition to the above on Solaris 2:
26924
26925       -pthreads
26926           This is a synonym for -pthread.
26927
26928       SPARC Options
26929
26930       These -m options are supported on the SPARC:
26931
26932       -mno-app-regs
26933       -mapp-regs
26934           Specify -mapp-regs to generate output using the global registers 2
26935           through 4, which the SPARC SVR4 ABI reserves for applications.
26936           Like the global register 1, each global register 2 through 4 is
26937           then treated as an allocable register that is clobbered by function
26938           calls.  This is the default.
26939
26940           To be fully SVR4 ABI-compliant at the cost of some performance
26941           loss, specify -mno-app-regs.  You should compile libraries and
26942           system software with this option.
26943
26944       -mflat
26945       -mno-flat
26946           With -mflat, the compiler does not generate save/restore
26947           instructions and uses a "flat" or single register window model.
26948           This model is compatible with the regular register window model.
26949           The local registers and the input registers (0--5) are still
26950           treated as "call-saved" registers and are saved on the stack as
26951           needed.
26952
26953           With -mno-flat (the default), the compiler generates save/restore
26954           instructions (except for leaf functions).  This is the normal
26955           operating mode.
26956
26957       -mfpu
26958       -mhard-float
26959           Generate output containing floating-point instructions.  This is
26960           the default.
26961
26962       -mno-fpu
26963       -msoft-float
26964           Generate output containing library calls for floating point.
26965           Warning: the requisite libraries are not available for all SPARC
26966           targets.  Normally the facilities of the machine's usual C compiler
26967           are used, but this cannot be done directly in cross-compilation.
26968           You must make your own arrangements to provide suitable library
26969           functions for cross-compilation.  The embedded targets sparc-*-aout
26970           and sparclite-*-* do provide software floating-point support.
26971
26972           -msoft-float changes the calling convention in the output file;
26973           therefore, it is only useful if you compile all of a program with
26974           this option.  In particular, you need to compile libgcc.a, the
26975           library that comes with GCC, with -msoft-float in order for this to
26976           work.
26977
26978       -mhard-quad-float
26979           Generate output containing quad-word (long double) floating-point
26980           instructions.
26981
26982       -msoft-quad-float
26983           Generate output containing library calls for quad-word (long
26984           double) floating-point instructions.  The functions called are
26985           those specified in the SPARC ABI.  This is the default.
26986
26987           As of this writing, there are no SPARC implementations that have
26988           hardware support for the quad-word floating-point instructions.
26989           They all invoke a trap handler for one of these instructions, and
26990           then the trap handler emulates the effect of the instruction.
26991           Because of the trap handler overhead, this is much slower than
26992           calling the ABI library routines.  Thus the -msoft-quad-float
26993           option is the default.
26994
26995       -mno-unaligned-doubles
26996       -munaligned-doubles
26997           Assume that doubles have 8-byte alignment.  This is the default.
26998
26999           With -munaligned-doubles, GCC assumes that doubles have 8-byte
27000           alignment only if they are contained in another type, or if they
27001           have an absolute address.  Otherwise, it assumes they have 4-byte
27002           alignment.  Specifying this option avoids some rare compatibility
27003           problems with code generated by other compilers.  It is not the
27004           default because it results in a performance loss, especially for
27005           floating-point code.
27006
27007       -muser-mode
27008       -mno-user-mode
27009           Do not generate code that can only run in supervisor mode.  This is
27010           relevant only for the "casa" instruction emitted for the LEON3
27011           processor.  This is the default.
27012
27013       -mfaster-structs
27014       -mno-faster-structs
27015           With -mfaster-structs, the compiler assumes that structures should
27016           have 8-byte alignment.  This enables the use of pairs of "ldd" and
27017           "std" instructions for copies in structure assignment, in place of
27018           twice as many "ld" and "st" pairs.  However, the use of this
27019           changed alignment directly violates the SPARC ABI.  Thus, it's
27020           intended only for use on targets where the developer acknowledges
27021           that their resulting code is not directly in line with the rules of
27022           the ABI.
27023
27024       -mstd-struct-return
27025       -mno-std-struct-return
27026           With -mstd-struct-return, the compiler generates checking code in
27027           functions returning structures or unions to detect size mismatches
27028           between the two sides of function calls, as per the 32-bit ABI.
27029
27030           The default is -mno-std-struct-return.  This option has no effect
27031           in 64-bit mode.
27032
27033       -mlra
27034       -mno-lra
27035           Enable Local Register Allocation.  This is the default for SPARC
27036           since GCC 7 so -mno-lra needs to be passed to get old Reload.
27037
27038       -mcpu=cpu_type
27039           Set the instruction set, register set, and instruction scheduling
27040           parameters for machine type cpu_type.  Supported values for
27041           cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
27042           leon3v7, leon5, sparclite, f930, f934, sparclite86x, sparclet,
27043           tsc701, v9, ultrasparc, ultrasparc3, niagara, niagara2, niagara3,
27044           niagara4, niagara7 and m8.
27045
27046           Native Solaris and GNU/Linux toolchains also support the value
27047           native, which selects the best architecture option for the host
27048           processor.  -mcpu=native has no effect if GCC does not recognize
27049           the processor.
27050
27051           Default instruction scheduling parameters are used for values that
27052           select an architecture and not an implementation.  These are v7,
27053           v8, sparclite, sparclet, v9.
27054
27055           Here is a list of each supported architecture and their supported
27056           implementations.
27057
27058           v7  cypress, leon3v7
27059
27060           v8  supersparc, hypersparc, leon, leon3, leon5
27061
27062           sparclite
27063               f930, f934, sparclite86x
27064
27065           sparclet
27066               tsc701
27067
27068           v9  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
27069               niagara7, m8
27070
27071           By default (unless configured otherwise), GCC generates code for
27072           the V7 variant of the SPARC architecture.  With -mcpu=cypress, the
27073           compiler additionally optimizes it for the Cypress CY7C602 chip, as
27074           used in the SPARCStation/SPARCServer 3xx series.  This is also
27075           appropriate for the older SPARCStation 1, 2, IPX etc.
27076
27077           With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
27078           architecture.  The only difference from V7 code is that the
27079           compiler emits the integer multiply and integer divide instructions
27080           which exist in SPARC-V8 but not in SPARC-V7.  With
27081           -mcpu=supersparc, the compiler additionally optimizes it for the
27082           SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
27083           series.
27084
27085           With -mcpu=sparclite, GCC generates code for the SPARClite variant
27086           of the SPARC architecture.  This adds the integer multiply, integer
27087           divide step and scan ("ffs") instructions which exist in SPARClite
27088           but not in SPARC-V7.  With -mcpu=f930, the compiler additionally
27089           optimizes it for the Fujitsu MB86930 chip, which is the original
27090           SPARClite, with no FPU.  With -mcpu=f934, the compiler additionally
27091           optimizes it for the Fujitsu MB86934 chip, which is the more recent
27092           SPARClite with FPU.
27093
27094           With -mcpu=sparclet, GCC generates code for the SPARClet variant of
27095           the SPARC architecture.  This adds the integer multiply,
27096           multiply/accumulate, integer divide step and scan ("ffs")
27097           instructions which exist in SPARClet but not in SPARC-V7.  With
27098           -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
27099           SPARClet chip.
27100
27101           With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
27102           architecture.  This adds 64-bit integer and floating-point move
27103           instructions, 3 additional floating-point condition code registers
27104           and conditional move instructions.  With -mcpu=ultrasparc, the
27105           compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
27106           chips.  With -mcpu=ultrasparc3, the compiler additionally optimizes
27107           it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
27108           -mcpu=niagara, the compiler additionally optimizes it for Sun
27109           UltraSPARC T1 chips.  With -mcpu=niagara2, the compiler
27110           additionally optimizes it for Sun UltraSPARC T2 chips. With
27111           -mcpu=niagara3, the compiler additionally optimizes it for Sun
27112           UltraSPARC T3 chips.  With -mcpu=niagara4, the compiler
27113           additionally optimizes it for Sun UltraSPARC T4 chips.  With
27114           -mcpu=niagara7, the compiler additionally optimizes it for Oracle
27115           SPARC M7 chips.  With -mcpu=m8, the compiler additionally optimizes
27116           it for Oracle M8 chips.
27117
27118       -mtune=cpu_type
27119           Set the instruction scheduling parameters for machine type
27120           cpu_type, but do not set the instruction set or register set that
27121           the option -mcpu=cpu_type does.
27122
27123           The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
27124           but the only useful values are those that select a particular CPU
27125           implementation.  Those are cypress, supersparc, hypersparc, leon,
27126           leon3, leon3v7, leon5, f930, f934, sparclite86x, tsc701,
27127           ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
27128           niagara7 and m8.  With native Solaris and GNU/Linux toolchains,
27129           native can also be used.
27130
27131       -mv8plus
27132       -mno-v8plus
27133           With -mv8plus, GCC generates code for the SPARC-V8+ ABI.  The
27134           difference from the V8 ABI is that the global and out registers are
27135           considered 64 bits wide.  This is enabled by default on Solaris in
27136           32-bit mode for all SPARC-V9 processors.
27137
27138       -mvis
27139       -mno-vis
27140           With -mvis, GCC generates code that takes advantage of the
27141           UltraSPARC Visual Instruction Set extensions.  The default is
27142           -mno-vis.
27143
27144       -mvis2
27145       -mno-vis2
27146           With -mvis2, GCC generates code that takes advantage of version 2.0
27147           of the UltraSPARC Visual Instruction Set extensions.  The default
27148           is -mvis2 when targeting a cpu that supports such instructions,
27149           such as UltraSPARC-III and later.  Setting -mvis2 also sets -mvis.
27150
27151       -mvis3
27152       -mno-vis3
27153           With -mvis3, GCC generates code that takes advantage of version 3.0
27154           of the UltraSPARC Visual Instruction Set extensions.  The default
27155           is -mvis3 when targeting a cpu that supports such instructions,
27156           such as niagara-3 and later.  Setting -mvis3 also sets -mvis2 and
27157           -mvis.
27158
27159       -mvis4
27160       -mno-vis4
27161           With -mvis4, GCC generates code that takes advantage of version 4.0
27162           of the UltraSPARC Visual Instruction Set extensions.  The default
27163           is -mvis4 when targeting a cpu that supports such instructions,
27164           such as niagara-7 and later.  Setting -mvis4 also sets -mvis3,
27165           -mvis2 and -mvis.
27166
27167       -mvis4b
27168       -mno-vis4b
27169           With -mvis4b, GCC generates code that takes advantage of version
27170           4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
27171           additional VIS instructions introduced in the Oracle SPARC
27172           Architecture 2017.  The default is -mvis4b when targeting a cpu
27173           that supports such instructions, such as m8 and later.  Setting
27174           -mvis4b also sets -mvis4, -mvis3, -mvis2 and -mvis.
27175
27176       -mcbcond
27177       -mno-cbcond
27178           With -mcbcond, GCC generates code that takes advantage of the
27179           UltraSPARC Compare-and-Branch-on-Condition instructions.  The
27180           default is -mcbcond when targeting a CPU that supports such
27181           instructions, such as Niagara-4 and later.
27182
27183       -mfmaf
27184       -mno-fmaf
27185           With -mfmaf, GCC generates code that takes advantage of the
27186           UltraSPARC Fused Multiply-Add Floating-point instructions.  The
27187           default is -mfmaf when targeting a CPU that supports such
27188           instructions, such as Niagara-3 and later.
27189
27190       -mfsmuld
27191       -mno-fsmuld
27192           With -mfsmuld, GCC generates code that takes advantage of the
27193           Floating-point Multiply Single to Double (FsMULd) instruction.  The
27194           default is -mfsmuld when targeting a CPU supporting the
27195           architecture versions V8 or V9 with FPU except -mcpu=leon.
27196
27197       -mpopc
27198       -mno-popc
27199           With -mpopc, GCC generates code that takes advantage of the
27200           UltraSPARC Population Count instruction.  The default is -mpopc
27201           when targeting a CPU that supports such an instruction, such as
27202           Niagara-2 and later.
27203
27204       -msubxc
27205       -mno-subxc
27206           With -msubxc, GCC generates code that takes advantage of the
27207           UltraSPARC Subtract-Extended-with-Carry instruction.  The default
27208           is -msubxc when targeting a CPU that supports such an instruction,
27209           such as Niagara-7 and later.
27210
27211       -mfix-at697f
27212           Enable the documented workaround for the single erratum of the
27213           Atmel AT697F processor (which corresponds to erratum #13 of the
27214           AT697E processor).
27215
27216       -mfix-ut699
27217           Enable the documented workarounds for the floating-point errata and
27218           the data cache nullify errata of the UT699 processor.
27219
27220       -mfix-ut700
27221           Enable the documented workaround for the back-to-back store errata
27222           of the UT699E/UT700 processor.
27223
27224       -mfix-gr712rc
27225           Enable the documented workaround for the back-to-back store errata
27226           of the GR712RC processor.
27227
27228       These -m options are supported in addition to the above on SPARC-V9
27229       processors in 64-bit environments:
27230
27231       -m32
27232       -m64
27233           Generate code for a 32-bit or 64-bit environment.  The 32-bit
27234           environment sets int, long and pointer to 32 bits.  The 64-bit
27235           environment sets int to 32 bits and long and pointer to 64 bits.
27236
27237       -mcmodel=which
27238           Set the code model to one of
27239
27240           medlow
27241               The Medium/Low code model: 64-bit addresses, programs must be
27242               linked in the low 32 bits of memory.  Programs can be
27243               statically or dynamically linked.
27244
27245           medmid
27246               The Medium/Middle code model: 64-bit addresses, programs must
27247               be linked in the low 44 bits of memory, the text and data
27248               segments must be less than 2GB in size and the data segment
27249               must be located within 2GB of the text segment.
27250
27251           medany
27252               The Medium/Anywhere code model: 64-bit addresses, programs may
27253               be linked anywhere in memory, the text and data segments must
27254               be less than 2GB in size and the data segment must be located
27255               within 2GB of the text segment.
27256
27257           embmedany
27258               The Medium/Anywhere code model for embedded systems: 64-bit
27259               addresses, the text and data segments must be less than 2GB in
27260               size, both starting anywhere in memory (determined at link
27261               time).  The global register %g4 points to the base of the data
27262               segment.  Programs are statically linked and PIC is not
27263               supported.
27264
27265       -mmemory-model=mem-model
27266           Set the memory model in force on the processor to one of
27267
27268           default
27269               The default memory model for the processor and operating
27270               system.
27271
27272           rmo Relaxed Memory Order
27273
27274           pso Partial Store Order
27275
27276           tso Total Store Order
27277
27278           sc  Sequential Consistency
27279
27280           These memory models are formally defined in Appendix D of the
27281           SPARC-V9 architecture manual, as set in the processor's "PSTATE.MM"
27282           field.
27283
27284       -mstack-bias
27285       -mno-stack-bias
27286           With -mstack-bias, GCC assumes that the stack pointer, and frame
27287           pointer if present, are offset by -2047 which must be added back
27288           when making stack frame references.  This is the default in 64-bit
27289           mode.  Otherwise, assume no such offset is present.
27290
27291       Options for System V
27292
27293       These additional options are available on System V Release 4 for
27294       compatibility with other compilers on those systems:
27295
27296       -G  Create a shared object.  It is recommended that -symbolic or
27297           -shared be used instead.
27298
27299       -Qy Identify the versions of each tool used by the compiler, in a
27300           ".ident" assembler directive in the output.
27301
27302       -Qn Refrain from adding ".ident" directives to the output file (this is
27303           the default).
27304
27305       -YP,dirs
27306           Search the directories dirs, and no others, for libraries specified
27307           with -l.
27308
27309       -Ym,dir
27310           Look in the directory dir to find the M4 preprocessor.  The
27311           assembler uses this option.
27312
27313       V850 Options
27314
27315       These -m options are defined for V850 implementations:
27316
27317       -mlong-calls
27318       -mno-long-calls
27319           Treat all calls as being far away (near).  If calls are assumed to
27320           be far away, the compiler always loads the function's address into
27321           a register, and calls indirect through the pointer.
27322
27323       -mno-ep
27324       -mep
27325           Do not optimize (do optimize) basic blocks that use the same index
27326           pointer 4 or more times to copy pointer into the "ep" register, and
27327           use the shorter "sld" and "sst" instructions.  The -mep option is
27328           on by default if you optimize.
27329
27330       -mno-prolog-function
27331       -mprolog-function
27332           Do not use (do use) external functions to save and restore
27333           registers at the prologue and epilogue of a function.  The external
27334           functions are slower, but use less code space if more than one
27335           function saves the same number of registers.  The -mprolog-function
27336           option is on by default if you optimize.
27337
27338       -mspace
27339           Try to make the code as small as possible.  At present, this just
27340           turns on the -mep and -mprolog-function options.
27341
27342       -mtda=n
27343           Put static or global variables whose size is n bytes or less into
27344           the tiny data area that register "ep" points to.  The tiny data
27345           area can hold up to 256 bytes in total (128 bytes for byte
27346           references).
27347
27348       -msda=n
27349           Put static or global variables whose size is n bytes or less into
27350           the small data area that register "gp" points to.  The small data
27351           area can hold up to 64 kilobytes.
27352
27353       -mzda=n
27354           Put static or global variables whose size is n bytes or less into
27355           the first 32 kilobytes of memory.
27356
27357       -mv850
27358           Specify that the target processor is the V850.
27359
27360       -mv850e3v5
27361           Specify that the target processor is the V850E3V5.  The
27362           preprocessor constant "__v850e3v5__" is defined if this option is
27363           used.
27364
27365       -mv850e2v4
27366           Specify that the target processor is the V850E3V5.  This is an
27367           alias for the -mv850e3v5 option.
27368
27369       -mv850e2v3
27370           Specify that the target processor is the V850E2V3.  The
27371           preprocessor constant "__v850e2v3__" is defined if this option is
27372           used.
27373
27374       -mv850e2
27375           Specify that the target processor is the V850E2.  The preprocessor
27376           constant "__v850e2__" is defined if this option is used.
27377
27378       -mv850e1
27379           Specify that the target processor is the V850E1.  The preprocessor
27380           constants "__v850e1__" and "__v850e__" are defined if this option
27381           is used.
27382
27383       -mv850es
27384           Specify that the target processor is the V850ES.  This is an alias
27385           for the -mv850e1 option.
27386
27387       -mv850e
27388           Specify that the target processor is the V850E.  The preprocessor
27389           constant "__v850e__" is defined if this option is used.
27390
27391           If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
27392           -mv850e2v3 nor -mv850e3v5 are defined then a default target
27393           processor is chosen and the relevant __v850*__ preprocessor
27394           constant is defined.
27395
27396           The preprocessor constants "__v850" and "__v851__" are always
27397           defined, regardless of which processor variant is the target.
27398
27399       -mdisable-callt
27400       -mno-disable-callt
27401           This option suppresses generation of the "CALLT" instruction for
27402           the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
27403           v850 architecture.
27404
27405           This option is enabled by default when the RH850 ABI is in use (see
27406           -mrh850-abi), and disabled by default when the GCC ABI is in use.
27407           If "CALLT" instructions are being generated then the C preprocessor
27408           symbol "__V850_CALLT__" is defined.
27409
27410       -mrelax
27411       -mno-relax
27412           Pass on (or do not pass on) the -mrelax command-line option to the
27413           assembler.
27414
27415       -mlong-jumps
27416       -mno-long-jumps
27417           Disable (or re-enable) the generation of PC-relative jump
27418           instructions.
27419
27420       -msoft-float
27421       -mhard-float
27422           Disable (or re-enable) the generation of hardware floating point
27423           instructions.  This option is only significant when the target
27424           architecture is V850E2V3 or higher.  If hardware floating point
27425           instructions are being generated then the C preprocessor symbol
27426           "__FPU_OK__" is defined, otherwise the symbol "__NO_FPU__" is
27427           defined.
27428
27429       -mloop
27430           Enables the use of the e3v5 LOOP instruction.  The use of this
27431           instruction is not enabled by default when the e3v5 architecture is
27432           selected because its use is still experimental.
27433
27434       -mrh850-abi
27435       -mghs
27436           Enables support for the RH850 version of the V850 ABI.  This is the
27437           default.  With this version of the ABI the following rules apply:
27438
27439           *   Integer sized structures and unions are returned via a memory
27440               pointer rather than a register.
27441
27442           *   Large structures and unions (more than 8 bytes in size) are
27443               passed by value.
27444
27445           *   Functions are aligned to 16-bit boundaries.
27446
27447           *   The -m8byte-align command-line option is supported.
27448
27449           *   The -mdisable-callt command-line option is enabled by default.
27450               The -mno-disable-callt command-line option is not supported.
27451
27452           When this version of the ABI is enabled the C preprocessor symbol
27453           "__V850_RH850_ABI__" is defined.
27454
27455       -mgcc-abi
27456           Enables support for the old GCC version of the V850 ABI.  With this
27457           version of the ABI the following rules apply:
27458
27459           *   Integer sized structures and unions are returned in register
27460               "r10".
27461
27462           *   Large structures and unions (more than 8 bytes in size) are
27463               passed by reference.
27464
27465           *   Functions are aligned to 32-bit boundaries, unless optimizing
27466               for size.
27467
27468           *   The -m8byte-align command-line option is not supported.
27469
27470           *   The -mdisable-callt command-line option is supported but not
27471               enabled by default.
27472
27473           When this version of the ABI is enabled the C preprocessor symbol
27474           "__V850_GCC_ABI__" is defined.
27475
27476       -m8byte-align
27477       -mno-8byte-align
27478           Enables support for "double" and "long long" types to be aligned on
27479           8-byte boundaries.  The default is to restrict the alignment of all
27480           objects to at most 4-bytes.  When -m8byte-align is in effect the C
27481           preprocessor symbol "__V850_8BYTE_ALIGN__" is defined.
27482
27483       -mbig-switch
27484           Generate code suitable for big switch tables.  Use this option only
27485           if the assembler/linker complain about out of range branches within
27486           a switch table.
27487
27488       -mapp-regs
27489           This option causes r2 and r5 to be used in the code generated by
27490           the compiler.  This setting is the default.
27491
27492       -mno-app-regs
27493           This option causes r2 and r5 to be treated as fixed registers.
27494
27495       VAX Options
27496
27497       These -m options are defined for the VAX:
27498
27499       -munix
27500           Do not output certain jump instructions ("aobleq" and so on) that
27501           the Unix assembler for the VAX cannot handle across long ranges.
27502
27503       -mgnu
27504           Do output those jump instructions, on the assumption that the GNU
27505           assembler is being used.
27506
27507       -mg Output code for G-format floating-point numbers instead of
27508           D-format.
27509
27510       -mlra
27511       -mno-lra
27512           Enable Local Register Allocation.  This is still experimental for
27513           the VAX, so by default the compiler uses standard reload.
27514
27515       Visium Options
27516
27517       -mdebug
27518           A program which performs file I/O and is destined to run on an MCM
27519           target should be linked with this option.  It causes the libraries
27520           libc.a and libdebug.a to be linked.  The program should be run on
27521           the target under the control of the GDB remote debugging stub.
27522
27523       -msim
27524           A program which performs file I/O and is destined to run on the
27525           simulator should be linked with option.  This causes libraries
27526           libc.a and libsim.a to be linked.
27527
27528       -mfpu
27529       -mhard-float
27530           Generate code containing floating-point instructions.  This is the
27531           default.
27532
27533       -mno-fpu
27534       -msoft-float
27535           Generate code containing library calls for floating-point.
27536
27537           -msoft-float changes the calling convention in the output file;
27538           therefore, it is only useful if you compile all of a program with
27539           this option.  In particular, you need to compile libgcc.a, the
27540           library that comes with GCC, with -msoft-float in order for this to
27541           work.
27542
27543       -mcpu=cpu_type
27544           Set the instruction set, register set, and instruction scheduling
27545           parameters for machine type cpu_type.  Supported values for
27546           cpu_type are mcm, gr5 and gr6.
27547
27548           mcm is a synonym of gr5 present for backward compatibility.
27549
27550           By default (unless configured otherwise), GCC generates code for
27551           the GR5 variant of the Visium architecture.
27552
27553           With -mcpu=gr6, GCC generates code for the GR6 variant of the
27554           Visium architecture.  The only difference from GR5 code is that the
27555           compiler will generate block move instructions.
27556
27557       -mtune=cpu_type
27558           Set the instruction scheduling parameters for machine type
27559           cpu_type, but do not set the instruction set or register set that
27560           the option -mcpu=cpu_type would.
27561
27562       -msv-mode
27563           Generate code for the supervisor mode, where there are no
27564           restrictions on the access to general registers.  This is the
27565           default.
27566
27567       -muser-mode
27568           Generate code for the user mode, where the access to some general
27569           registers is forbidden: on the GR5, registers r24 to r31 cannot be
27570           accessed in this mode; on the GR6, only registers r29 to r31 are
27571           affected.
27572
27573       VMS Options
27574
27575       These -m options are defined for the VMS implementations:
27576
27577       -mvms-return-codes
27578           Return VMS condition codes from "main". The default is to return
27579           POSIX-style condition (e.g. error) codes.
27580
27581       -mdebug-main=prefix
27582           Flag the first routine whose name starts with prefix as the main
27583           routine for the debugger.
27584
27585       -mmalloc64
27586           Default to 64-bit memory allocation routines.
27587
27588       -mpointer-size=size
27589           Set the default size of pointers. Possible options for size are 32
27590           or short for 32 bit pointers, 64 or long for 64 bit pointers, and
27591           no for supporting only 32 bit pointers.  The later option disables
27592           "pragma pointer_size".
27593
27594       VxWorks Options
27595
27596       The options in this section are defined for all VxWorks targets.
27597       Options specific to the target hardware are listed with the other
27598       options for that target.
27599
27600       -mrtp
27601           GCC can generate code for both VxWorks kernels and real time
27602           processes (RTPs).  This option switches from the former to the
27603           latter.  It also defines the preprocessor macro "__RTP__".
27604
27605       -non-static
27606           Link an RTP executable against shared libraries rather than static
27607           libraries.  The options -static and -shared can also be used for
27608           RTPs; -static is the default.
27609
27610       -Bstatic
27611       -Bdynamic
27612           These options are passed down to the linker.  They are defined for
27613           compatibility with Diab.
27614
27615       -Xbind-lazy
27616           Enable lazy binding of function calls.  This option is equivalent
27617           to -Wl,-z,now and is defined for compatibility with Diab.
27618
27619       -Xbind-now
27620           Disable lazy binding of function calls.  This option is the default
27621           and is defined for compatibility with Diab.
27622
27623       x86 Options
27624
27625       These -m options are defined for the x86 family of computers.
27626
27627       -march=cpu-type
27628           Generate instructions for the machine type cpu-type.  In contrast
27629           to -mtune=cpu-type, which merely tunes the generated code for the
27630           specified cpu-type, -march=cpu-type allows GCC to generate code
27631           that may not run at all on processors other than the one indicated.
27632           Specifying -march=cpu-type implies -mtune=cpu-type, except where
27633           noted otherwise.
27634
27635           The choices for cpu-type are:
27636
27637           native
27638               This selects the CPU to generate code for at compilation time
27639               by determining the processor type of the compiling machine.
27640               Using -march=native enables all instruction subsets supported
27641               by the local machine (hence the result might not run on
27642               different machines).  Using -mtune=native produces code
27643               optimized for the local machine under the constraints of the
27644               selected instruction set.
27645
27646           x86-64
27647               A generic CPU with 64-bit extensions.
27648
27649           x86-64-v2
27650           x86-64-v3
27651           x86-64-v4
27652               These choices for cpu-type select the corresponding micro-
27653               architecture level from the x86-64 psABI.  On ABIs other than
27654               the x86-64 psABI they select the same CPU features as the
27655               x86-64 psABI documents for the particular micro-architecture
27656               level.
27657
27658               Since these cpu-type values do not have a corresponding -mtune
27659               setting, using -march with these values enables generic tuning.
27660               Specific tuning can be enabled using the -mtune=other-cpu-type
27661               option with an appropriate other-cpu-type value.
27662
27663           i386
27664               Original Intel i386 CPU.
27665
27666           i486
27667               Intel i486 CPU.  (No scheduling is implemented for this chip.)
27668
27669           i586
27670           pentium
27671               Intel Pentium CPU with no MMX support.
27672
27673           lakemont
27674               Intel Lakemont MCU, based on Intel Pentium CPU.
27675
27676           pentium-mmx
27677               Intel Pentium MMX CPU, based on Pentium core with MMX
27678               instruction set support.
27679
27680           pentiumpro
27681               Intel Pentium Pro CPU.
27682
27683           i686
27684               When used with -march, the Pentium Pro instruction set is used,
27685               so the code runs on all i686 family chips.  When used with
27686               -mtune, it has the same meaning as generic.
27687
27688           pentium2
27689               Intel Pentium II CPU, based on Pentium Pro core with MMX and
27690               FXSR instruction set support.
27691
27692           pentium3
27693           pentium3m
27694               Intel Pentium III CPU, based on Pentium Pro core with MMX, FXSR
27695               and SSE instruction set support.
27696
27697           pentium-m
27698               Intel Pentium M; low-power version of Intel Pentium III CPU
27699               with MMX, SSE, SSE2 and FXSR instruction set support.  Used by
27700               Centrino notebooks.
27701
27702           pentium4
27703           pentium4m
27704               Intel Pentium 4 CPU with MMX, SSE, SSE2 and FXSR instruction
27705               set support.
27706
27707           prescott
27708               Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2,
27709               SSE3 and FXSR instruction set support.
27710
27711           nocona
27712               Improved version of Intel Pentium 4 CPU with 64-bit extensions,
27713               MMX, SSE, SSE2, SSE3 and FXSR instruction set support.
27714
27715           core2
27716               Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
27717               SSSE3, CX16, SAHF and FXSR instruction set support.
27718
27719           nehalem
27720               Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
27721               SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction
27722               set support.
27723
27724           westmere
27725               Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
27726               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and
27727               PCLMUL instruction set support.
27728
27729           sandybridge
27730               Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
27731               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
27732               XSAVE and PCLMUL instruction set support.
27733
27734           ivybridge
27735               Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
27736               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX,
27737               XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set
27738               support.
27739
27740           haswell
27741               Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
27742               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27743               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27744               LZCNT, FMA, MOVBE and HLE instruction set support.
27745
27746           broadwell
27747               Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
27748               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27749               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27750               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX and PREFETCHW instruction
27751               set support.
27752
27753           skylake
27754               Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
27755               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27756               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27757               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27758               CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support.
27759
27760           bonnell
27761               Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
27762               SSE2, SSE3 and SSSE3 instruction set support.
27763
27764           silvermont
27765               Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
27766               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27767               PCLMUL, PREFETCHW and RDRND instruction set support.
27768
27769           goldmont
27770               Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
27771               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27772               PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
27773               XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction set
27774               support.
27775
27776           goldmont-plus
27777               Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
27778               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27779               FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE,
27780               XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID
27781               and SGX instruction set support.
27782
27783           tremont
27784               Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
27785               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27786               PCLMUL, PREFETCHW, RDRND, AES, SHA, RDSEED, XSAVE, XSAVEC,
27787               XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, SGX,
27788               CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG
27789               instruction set support.
27790
27791           sierraforest
27792               Intel Sierra Forest CPU with 64-bit extensions, MOVBE, MMX,
27793               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
27794               PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
27795               PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
27796               CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
27797               LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
27798               WIDEKL, AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT,
27799               CMPCCXADD, ENQCMD and UINTR instruction set support.
27800
27801           grandridge
27802               Intel Grand Ridge CPU with 64-bit extensions, MOVBE, MMX, SSE,
27803               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
27804               PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
27805               PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
27806               CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
27807               LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
27808               WIDEKL, AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT,
27809               CMPCCXADD, ENQCMD, UINTR and RAOINT instruction set support.
27810
27811           knl Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
27812               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27813               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27814               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
27815               AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1
27816               instruction set support.
27817
27818           knm Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE,
27819               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27820               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27821               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AVX512PF,
27822               AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW,
27823               AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
27824
27825           skylake-avx512
27826               Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
27827               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27828               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27829               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27830               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
27831               AVX512BW, AVX512DQ and AVX512CD instruction set support.
27832
27833           cannonlake
27834               Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX,
27835               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27836               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27837               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27838               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27839               AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA
27840               instruction set support.
27841
27842           icelake-client
27843               Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
27844               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27845               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27846               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27847               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27848               AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
27849               AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, AVX512BITALG,
27850               RDPID and AVX512VPOPCNTDQ instruction set support.
27851
27852           icelake-server
27853               Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
27854               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27855               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27856               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27857               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27858               AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
27859               AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, AVX512BITALG,
27860               RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB instruction
27861               set support.
27862
27863           cascadelake
27864               Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE,
27865               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27866               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27867               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27868               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
27869               AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI instruction set
27870               support.
27871
27872           cooperlake
27873               Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
27874               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27875               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27876               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27877               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL,
27878               AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16
27879               instruction set support.
27880
27881           tigerlake
27882               Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
27883               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27884               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27885               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27886               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27887               AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA,
27888               AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
27889               RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB,
27890               AVX512VP2INTERSECT and KEYLOCKER instruction set support.
27891
27892           sapphirerapids
27893               Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX,
27894               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27895               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27896               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27897               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27898               AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
27899               AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
27900               RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
27901               MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
27902               TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
27903               AVX512-FP16 and AVX512BF16 instruction set support.
27904
27905           alderlake
27906               Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
27907               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW,
27908               PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE,
27909               PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
27910               CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
27911               LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL,
27912               WIDEKL and AVX-VNNI instruction set support.
27913
27914           rocketlake
27915               Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
27916               SSE2, SSE3, SSSE3 , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR,
27917               AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2,
27918               LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27919               CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW,
27920               AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA,
27921               AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
27922               RDPID and AVX512VPOPCNTDQ instruction set support.
27923
27924           graniterapids
27925               Intel graniterapids CPU with 64-bit extensions, MOVBE, MMX,
27926               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27927               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27928               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27929               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27930               AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
27931               AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
27932               RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
27933               MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
27934               TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
27935               AVX512-FP16, AVX512BF16, AMX-FP16 and PREFETCHI instruction set
27936               support.
27937
27938           graniterapids-d
27939               Intel graniterapids D CPU with 64-bit extensions, MOVBE, MMX,
27940               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF,
27941               FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI,
27942               BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
27943               CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
27944               AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA,
27945               AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG,
27946               RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI,
27947               MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE,
27948               TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI,
27949               AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI and AMX-COMPLEX
27950               instruction set support.
27951
27952           k6  AMD K6 CPU with MMX instruction set support.
27953
27954           k6-2
27955           k6-3
27956               Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
27957               set support.
27958
27959           athlon
27960           athlon-tbird
27961               AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
27962               prefetch instructions support.
27963
27964           athlon-4
27965           athlon-xp
27966           athlon-mp
27967               Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
27968               full SSE instruction set support.
27969
27970           k8
27971           opteron
27972           athlon64
27973           athlon-fx
27974               Processors based on the AMD K8 core with x86-64 instruction set
27975               support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
27976               processors.  (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
27977               3DNow! and 64-bit instruction set extensions.)
27978
27979           k8-sse3
27980           opteron-sse3
27981           athlon64-sse3
27982               Improved versions of AMD K8 cores with SSE3 instruction set
27983               support.
27984
27985           amdfam10
27986           barcelona
27987               CPUs based on AMD Family 10h cores with x86-64 instruction set
27988               support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
27989               enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
27990
27991           bdver1
27992               CPUs based on AMD Family 15h cores with x86-64 instruction set
27993               support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCLMUL,
27994               CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
27995               and 64-bit instruction set extensions.)
27996
27997           bdver2
27998               AMD Family 15h core based CPUs with x86-64 instruction set
27999               support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
28000               LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
28001               SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
28002
28003           bdver3
28004               AMD Family 15h core based CPUs with x86-64 instruction set
28005               support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
28006               AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
28007               SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
28008               extensions.)
28009
28010           bdver4
28011               AMD Family 15h core based CPUs with x86-64 instruction set
28012               support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
28013               FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCLMUL, CX16, MOVBE, MMX,
28014               SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
28015               instruction set extensions.)
28016
28017           znver1
28018               AMD Family 17h core based CPUs with x86-64 instruction set
28019               support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
28020               AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16,
28021               MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM,
28022               XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit instruction set
28023               extensions.)
28024
28025           znver2
28026               AMD Family 17h core based CPUs with x86-64 instruction set
28027               support. (This supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE,
28028               AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL,
28029               CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
28030               SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
28031               WBNOINVD, and 64-bit instruction set extensions.)
28032
28033           znver3
28034               AMD Family 19h core based CPUs with x86-64 instruction set
28035               support. (This supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE,
28036               AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL,
28037               CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
28038               SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
28039               WBNOINVD, PKU, VPCLMULQDQ, VAES, and 64-bit instruction set
28040               extensions.)
28041
28042           znver4
28043               AMD Family 19h core based CPUs with x86-64 instruction set
28044               support. (This supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE,
28045               AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL,
28046               CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
28047               SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
28048               WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA,
28049               AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI,
28050               AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI
28051               and 64-bit instruction set extensions.)
28052
28053           btver1
28054               CPUs based on AMD Family 14h cores with x86-64 instruction set
28055               support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
28056               CX16, ABM and 64-bit instruction set extensions.)
28057
28058           btver2
28059               CPUs based on AMD Family 16h cores with x86-64 instruction set
28060               support. This includes MOVBE, F16C, BMI, AVX, PCLMUL, AES,
28061               SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
28062               and 64-bit instruction set extensions.
28063
28064           winchip-c6
28065               IDT WinChip C6 CPU, dealt in same way as i486 with additional
28066               MMX instruction set support.
28067
28068           winchip2
28069               IDT WinChip 2 CPU, dealt in same way as i486 with additional
28070               MMX and 3DNow!  instruction set support.
28071
28072           c3  VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
28073               scheduling is implemented for this chip.)
28074
28075           c3-2
28076               VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
28077               support.  (No scheduling is implemented for this chip.)
28078
28079           c7  VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
28080               set support.  (No scheduling is implemented for this chip.)
28081
28082           samuel-2
28083               VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
28084               support.  (No scheduling is implemented for this chip.)
28085
28086           nehemiah
28087               VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
28088               (No scheduling is implemented for this chip.)
28089
28090           esther
28091               VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
28092               set support.  (No scheduling is implemented for this chip.)
28093
28094           eden-x2
28095               VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
28096               instruction set support.  (No scheduling is implemented for
28097               this chip.)
28098
28099           eden-x4
28100               VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
28101               SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
28102               scheduling is implemented for this chip.)
28103
28104           nano
28105               Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
28106               SSSE3 instruction set support.  (No scheduling is implemented
28107               for this chip.)
28108
28109           nano-1000
28110               VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
28111               instruction set support.  (No scheduling is implemented for
28112               this chip.)
28113
28114           nano-2000
28115               VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
28116               instruction set support.  (No scheduling is implemented for
28117               this chip.)
28118
28119           nano-3000
28120               VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
28121               SSE4.1 instruction set support.  (No scheduling is implemented
28122               for this chip.)
28123
28124           nano-x2
28125               VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
28126               and SSE4.1 instruction set support.  (No scheduling is
28127               implemented for this chip.)
28128
28129           nano-x4
28130               VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
28131               and SSE4.1 instruction set support.  (No scheduling is
28132               implemented for this chip.)
28133
28134           lujiazui
28135               ZHAOXIN lujiazui CPU with x86-64, MOVBE, MMX, SSE, SSE2, SSE3,
28136               SSSE3, SSE4.1, SSE4.2, AVX, POPCNT, AES, PCLMUL, RDRND, XSAVE,
28137               XSAVEOPT, FSGSBASE, CX16, ABM, BMI, BMI2, F16C, FXSR, RDSEED
28138               instruction set support.
28139
28140           geode
28141               AMD Geode embedded processor with MMX and 3DNow! instruction
28142               set support.
28143
28144       -mtune=cpu-type
28145           Tune to cpu-type everything applicable about the generated code,
28146           except for the ABI and the set of available instructions.  While
28147           picking a specific cpu-type schedules things appropriately for that
28148           particular chip, the compiler does not generate any code that
28149           cannot run on the default machine type unless you use a -march=cpu-
28150           type option.  For example, if GCC is configured for
28151           i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
28152           for Pentium 4 but still runs on i686 machines.
28153
28154           The choices for cpu-type are the same as for -march.  In addition,
28155           -mtune supports 2 extra choices for cpu-type:
28156
28157           generic
28158               Produce code optimized for the most common IA32/AMD64/EM64T
28159               processors.  If you know the CPU on which your code will run,
28160               then you should use the corresponding -mtune or -march option
28161               instead of -mtune=generic.  But, if you do not know exactly
28162               what CPU users of your application will have, then you should
28163               use this option.
28164
28165               As new processors are deployed in the marketplace, the behavior
28166               of this option will change.  Therefore, if you upgrade to a
28167               newer version of GCC, code generation controlled by this option
28168               will change to reflect the processors that are most common at
28169               the time that version of GCC is released.
28170
28171               There is no -march=generic option because -march indicates the
28172               instruction set the compiler can use, and there is no generic
28173               instruction set applicable to all processors.  In contrast,
28174               -mtune indicates the processor (or, in this case, collection of
28175               processors) for which the code is optimized.
28176
28177           intel
28178               Produce code optimized for the most current Intel processors,
28179               which are Haswell and Silvermont for this version of GCC.  If
28180               you know the CPU on which your code will run, then you should
28181               use the corresponding -mtune or -march option instead of
28182               -mtune=intel.  But, if you want your application performs
28183               better on both Haswell and Silvermont, then you should use this
28184               option.
28185
28186               As new Intel processors are deployed in the marketplace, the
28187               behavior of this option will change.  Therefore, if you upgrade
28188               to a newer version of GCC, code generation controlled by this
28189               option will change to reflect the most current Intel processors
28190               at the time that version of GCC is released.
28191
28192               There is no -march=intel option because -march indicates the
28193               instruction set the compiler can use, and there is no common
28194               instruction set applicable to all processors.  In contrast,
28195               -mtune indicates the processor (or, in this case, collection of
28196               processors) for which the code is optimized.
28197
28198       -mcpu=cpu-type
28199           A deprecated synonym for -mtune.
28200
28201       -mfpmath=unit
28202           Generate floating-point arithmetic for selected unit unit.  The
28203           choices for unit are:
28204
28205           387 Use the standard 387 floating-point coprocessor present on the
28206               majority of chips and emulated otherwise.  Code compiled with
28207               this option runs almost everywhere.  The temporary results are
28208               computed in 80-bit precision instead of the precision specified
28209               by the type, resulting in slightly different results compared
28210               to most of other chips.  See -ffloat-store for more detailed
28211               description.
28212
28213               This is the default choice for non-Darwin x86-32 targets.
28214
28215           sse Use scalar floating-point instructions present in the SSE
28216               instruction set.  This instruction set is supported by Pentium
28217               III and newer chips, and in the AMD line by Athlon-4, Athlon XP
28218               and Athlon MP chips.  The earlier version of the SSE
28219               instruction set supports only single-precision arithmetic, thus
28220               the double and extended-precision arithmetic are still done
28221               using 387.  A later version, present only in Pentium 4 and AMD
28222               x86-64 chips, supports double-precision arithmetic too.
28223
28224               For the x86-32 compiler, you must use -march=cpu-type, -msse or
28225               -msse2 switches to enable SSE extensions and make this option
28226               effective.  For the x86-64 compiler, these extensions are
28227               enabled by default.
28228
28229               The resulting code should be considerably faster in the
28230               majority of cases and avoid the numerical instability problems
28231               of 387 code, but may break some existing code that expects
28232               temporaries to be 80 bits.
28233
28234               This is the default choice for the x86-64 compiler, Darwin
28235               x86-32 targets, and the default choice for x86-32 targets with
28236               the SSE2 instruction set when -ffast-math is enabled.
28237
28238           sse,387
28239           sse+387
28240           both
28241               Attempt to utilize both instruction sets at once.  This
28242               effectively doubles the amount of available registers, and on
28243               chips with separate execution units for 387 and SSE the
28244               execution resources too.  Use this option with care, as it is
28245               still experimental, because the GCC register allocator does not
28246               model separate functional units well, resulting in unstable
28247               performance.
28248
28249       -masm=dialect
28250           Output assembly instructions using selected dialect.  Also affects
28251           which dialect is used for basic "asm" and extended "asm". Supported
28252           choices (in dialect order) are att or intel. The default is att.
28253           Darwin does not support intel.
28254
28255       -mieee-fp
28256       -mno-ieee-fp
28257           Control whether or not the compiler uses IEEE floating-point
28258           comparisons.  These correctly handle the case where the result of a
28259           comparison is unordered.
28260
28261       -m80387
28262       -mhard-float
28263           Generate output containing 80387 instructions for floating point.
28264
28265       -mno-80387
28266       -msoft-float
28267           Generate output containing library calls for floating point.
28268
28269           Warning: the requisite libraries are not part of GCC.  Normally the
28270           facilities of the machine's usual C compiler are used, but this
28271           cannot be done directly in cross-compilation.  You must make your
28272           own arrangements to provide suitable library functions for cross-
28273           compilation.
28274
28275           On machines where a function returns floating-point results in the
28276           80387 register stack, some floating-point opcodes may be emitted
28277           even if -msoft-float is used.
28278
28279       -mno-fp-ret-in-387
28280           Do not use the FPU registers for return values of functions.
28281
28282           The usual calling convention has functions return values of types
28283           "float" and "double" in an FPU register, even if there is no FPU.
28284           The idea is that the operating system should emulate an FPU.
28285
28286           The option -mno-fp-ret-in-387 causes such values to be returned in
28287           ordinary CPU registers instead.
28288
28289       -mno-fancy-math-387
28290           Some 387 emulators do not support the "sin", "cos" and "sqrt"
28291           instructions for the 387.  Specify this option to avoid generating
28292           those instructions.  This option is overridden when -march
28293           indicates that the target CPU always has an FPU and so the
28294           instruction does not need emulation.  These instructions are not
28295           generated unless you also use the -funsafe-math-optimizations
28296           switch.
28297
28298       -malign-double
28299       -mno-align-double
28300           Control whether GCC aligns "double", "long double", and "long long"
28301           variables on a two-word boundary or a one-word boundary.  Aligning
28302           "double" variables on a two-word boundary produces code that runs
28303           somewhat faster on a Pentium at the expense of more memory.
28304
28305           On x86-64, -malign-double is enabled by default.
28306
28307           Warning: if you use the -malign-double switch, structures
28308           containing the above types are aligned differently than the
28309           published application binary interface specifications for the
28310           x86-32 and are not binary compatible with structures in code
28311           compiled without that switch.
28312
28313       -m96bit-long-double
28314       -m128bit-long-double
28315           These switches control the size of "long double" type.  The x86-32
28316           application binary interface specifies the size to be 96 bits, so
28317           -m96bit-long-double is the default in 32-bit mode.
28318
28319           Modern architectures (Pentium and newer) prefer "long double" to be
28320           aligned to an 8- or 16-byte boundary.  In arrays or structures
28321           conforming to the ABI, this is not possible.  So specifying
28322           -m128bit-long-double aligns "long double" to a 16-byte boundary by
28323           padding the "long double" with an additional 32-bit zero.
28324
28325           In the x86-64 compiler, -m128bit-long-double is the default choice
28326           as its ABI specifies that "long double" is aligned on 16-byte
28327           boundary.
28328
28329           Notice that neither of these options enable any extra precision
28330           over the x87 standard of 80 bits for a "long double".
28331
28332           Warning: if you override the default value for your target ABI,
28333           this changes the size of structures and arrays containing "long
28334           double" variables, as well as modifying the function calling
28335           convention for functions taking "long double".  Hence they are not
28336           binary-compatible with code compiled without that switch.
28337
28338       -mlong-double-64
28339       -mlong-double-80
28340       -mlong-double-128
28341           These switches control the size of "long double" type. A size of 64
28342           bits makes the "long double" type equivalent to the "double" type.
28343           This is the default for 32-bit Bionic C library.  A size of 128
28344           bits makes the "long double" type equivalent to the "__float128"
28345           type. This is the default for 64-bit Bionic C library.
28346
28347           Warning: if you override the default value for your target ABI,
28348           this changes the size of structures and arrays containing "long
28349           double" variables, as well as modifying the function calling
28350           convention for functions taking "long double".  Hence they are not
28351           binary-compatible with code compiled without that switch.
28352
28353       -malign-data=type
28354           Control how GCC aligns variables.  Supported values for type are
28355           compat uses increased alignment value compatible uses GCC 4.8 and
28356           earlier, abi uses alignment value as specified by the psABI, and
28357           cacheline uses increased alignment value to match the cache line
28358           size.  compat is the default.
28359
28360       -mlarge-data-threshold=threshold
28361           When -mcmodel=medium is specified, data objects larger than
28362           threshold are placed in the large data section.  This value must be
28363           the same across all objects linked into the binary, and defaults to
28364           65535.
28365
28366       -mrtd
28367           Use a different function-calling convention, in which functions
28368           that take a fixed number of arguments return with the "ret num"
28369           instruction, which pops their arguments while returning.  This
28370           saves one instruction in the caller since there is no need to pop
28371           the arguments there.
28372
28373           You can specify that an individual function is called with this
28374           calling sequence with the function attribute "stdcall".  You can
28375           also override the -mrtd option by using the function attribute
28376           "cdecl".
28377
28378           Warning: this calling convention is incompatible with the one
28379           normally used on Unix, so you cannot use it if you need to call
28380           libraries compiled with the Unix compiler.
28381
28382           Also, you must provide function prototypes for all functions that
28383           take variable numbers of arguments (including "printf"); otherwise
28384           incorrect code is generated for calls to those functions.
28385
28386           In addition, seriously incorrect code results if you call a
28387           function with too many arguments.  (Normally, extra arguments are
28388           harmlessly ignored.)
28389
28390       -mregparm=num
28391           Control how many registers are used to pass integer arguments.  By
28392           default, no registers are used to pass arguments, and at most 3
28393           registers can be used.  You can control this behavior for a
28394           specific function by using the function attribute "regparm".
28395
28396           Warning: if you use this switch, and num is nonzero, then you must
28397           build all modules with the same value, including any libraries.
28398           This includes the system libraries and startup modules.
28399
28400       -msseregparm
28401           Use SSE register passing conventions for float and double arguments
28402           and return values.  You can control this behavior for a specific
28403           function by using the function attribute "sseregparm".
28404
28405           Warning: if you use this switch then you must build all modules
28406           with the same value, including any libraries.  This includes the
28407           system libraries and startup modules.
28408
28409       -mvect8-ret-in-mem
28410           Return 8-byte vectors in memory instead of MMX registers.  This is
28411           the default on VxWorks to match the ABI of the Sun Studio compilers
28412           until version 12.  Only use this option if you need to remain
28413           compatible with existing code produced by those previous compiler
28414           versions or older versions of GCC.
28415
28416       -mpc32
28417       -mpc64
28418       -mpc80
28419           Set 80387 floating-point precision to 32, 64 or 80 bits.  When
28420           -mpc32 is specified, the significands of results of floating-point
28421           operations are rounded to 24 bits (single precision); -mpc64 rounds
28422           the significands of results of floating-point operations to 53 bits
28423           (double precision) and -mpc80 rounds the significands of results of
28424           floating-point operations to 64 bits (extended double precision),
28425           which is the default.  When this option is used, floating-point
28426           operations in higher precisions are not available to the programmer
28427           without setting the FPU control word explicitly.
28428
28429           Setting the rounding of floating-point operations to less than the
28430           default 80 bits can speed some programs by 2% or more.  Note that
28431           some mathematical libraries assume that extended-precision (80-bit)
28432           floating-point operations are enabled by default; routines in such
28433           libraries could suffer significant loss of accuracy, typically
28434           through so-called "catastrophic cancellation", when this option is
28435           used to set the precision to less than extended precision.
28436
28437       -mdaz-ftz
28438           The flush-to-zero (FTZ) and denormals-are-zero (DAZ) flags in the
28439           MXCSR register are used to control floating-point calculations.SSE
28440           and AVX instructions including scalar and vector instructions could
28441           benefit from enabling the FTZ and DAZ flags when -mdaz-ftz is
28442           specified. Don't set FTZ/DAZ flags when -mno-daz-ftz or -shared is
28443           specified, -mdaz-ftz will set FTZ/DAZ flags even with -shared.
28444
28445       -mstackrealign
28446           Realign the stack at entry.  On the x86, the -mstackrealign option
28447           generates an alternate prologue and epilogue that realigns the run-
28448           time stack if necessary.  This supports mixing legacy codes that
28449           keep 4-byte stack alignment with modern codes that keep 16-byte
28450           stack alignment for SSE compatibility.  See also the attribute
28451           "force_align_arg_pointer", applicable to individual functions.
28452
28453       -mpreferred-stack-boundary=num
28454           Attempt to keep the stack boundary aligned to a 2 raised to num
28455           byte boundary.  If -mpreferred-stack-boundary is not specified, the
28456           default is 4 (16 bytes or 128 bits).
28457
28458           Warning: When generating code for the x86-64 architecture with SSE
28459           extensions disabled, -mpreferred-stack-boundary=3 can be used to
28460           keep the stack boundary aligned to 8 byte boundary.  Since x86-64
28461           ABI require 16 byte stack alignment, this is ABI incompatible and
28462           intended to be used in controlled environment where stack space is
28463           important limitation.  This option leads to wrong code when
28464           functions compiled with 16 byte stack alignment (such as functions
28465           from a standard library) are called with misaligned stack.  In this
28466           case, SSE instructions may lead to misaligned memory access traps.
28467           In addition, variable arguments are handled incorrectly for 16 byte
28468           aligned objects (including x87 long double and __int128), leading
28469           to wrong results.  You must build all modules with
28470           -mpreferred-stack-boundary=3, including any libraries.  This
28471           includes the system libraries and startup modules.
28472
28473       -mincoming-stack-boundary=num
28474           Assume the incoming stack is aligned to a 2 raised to num byte
28475           boundary.  If -mincoming-stack-boundary is not specified, the one
28476           specified by -mpreferred-stack-boundary is used.
28477
28478           On Pentium and Pentium Pro, "double" and "long double" values
28479           should be aligned to an 8-byte boundary (see -malign-double) or
28480           suffer significant run time performance penalties.  On Pentium III,
28481           the Streaming SIMD Extension (SSE) data type "__m128" may not work
28482           properly if it is not 16-byte aligned.
28483
28484           To ensure proper alignment of this values on the stack, the stack
28485           boundary must be as aligned as that required by any value stored on
28486           the stack.  Further, every function must be generated such that it
28487           keeps the stack aligned.  Thus calling a function compiled with a
28488           higher preferred stack boundary from a function compiled with a
28489           lower preferred stack boundary most likely misaligns the stack.  It
28490           is recommended that libraries that use callbacks always use the
28491           default setting.
28492
28493           This extra alignment does consume extra stack space, and generally
28494           increases code size.  Code that is sensitive to stack space usage,
28495           such as embedded systems and operating system kernels, may want to
28496           reduce the preferred alignment to -mpreferred-stack-boundary=2.
28497
28498       -mmmx
28499       -msse
28500       -msse2
28501       -msse3
28502       -mssse3
28503       -msse4
28504       -msse4a
28505       -msse4.1
28506       -msse4.2
28507       -mavx
28508       -mavx2
28509       -mavx512f
28510       -mavx512pf
28511       -mavx512er
28512       -mavx512cd
28513       -mavx512vl
28514       -mavx512bw
28515       -mavx512dq
28516       -mavx512ifma
28517       -mavx512vbmi
28518       -msha
28519       -maes
28520       -mpclmul
28521       -mclflushopt
28522       -mclwb
28523       -mfsgsbase
28524       -mptwrite
28525       -mrdrnd
28526       -mf16c
28527       -mfma
28528       -mpconfig
28529       -mwbnoinvd
28530       -mfma4
28531       -mprfchw
28532       -mrdpid
28533       -mprefetchwt1
28534       -mrdseed
28535       -msgx
28536       -mxop
28537       -mlwp
28538       -m3dnow
28539       -m3dnowa
28540       -mpopcnt
28541       -mabm
28542       -madx
28543       -mbmi
28544       -mbmi2
28545       -mlzcnt
28546       -mfxsr
28547       -mxsave
28548       -mxsaveopt
28549       -mxsavec
28550       -mxsaves
28551       -mrtm
28552       -mhle
28553       -mtbm
28554       -mmwaitx
28555       -mclzero
28556       -mpku
28557       -mavx512vbmi2
28558       -mavx512bf16
28559       -mavx512fp16
28560       -mgfni
28561       -mvaes
28562       -mwaitpkg
28563       -mvpclmulqdq
28564       -mavx512bitalg
28565       -mmovdiri
28566       -mmovdir64b
28567       -menqcmd
28568       -muintr
28569       -mtsxldtrk
28570       -mavx512vpopcntdq
28571       -mavx512vp2intersect
28572       -mavx5124fmaps
28573       -mavx512vnni
28574       -mavxvnni
28575       -mavx5124vnniw
28576       -mcldemote
28577       -mserialize
28578       -mamx-tile
28579       -mamx-int8
28580       -mamx-bf16
28581       -mhreset
28582       -mkl
28583       -mwidekl
28584       -mavxifma
28585       -mavxvnniint8
28586       -mavxneconvert
28587       -mcmpccxadd
28588       -mamx-fp16
28589       -mprefetchi
28590       -mraoint
28591       -mamx-complex
28592           These switches enable the use of instructions in the MMX, SSE,
28593           SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
28594           AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
28595           AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
28596           FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4,
28597           PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!,
28598           enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
28599           XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU,
28600           AVX512VBMI2, GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG,
28601           MOVDIRI, MOVDIR64B, AVX512BF16, ENQCMD, AVX512VPOPCNTDQ,
28602           AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE, UINTR, HRESET,
28603           AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512-FP16,
28604           AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AMX-FP16, PREFETCHI,
28605           RAOINT, AMX-COMPLEX or CLDEMOTE extended instruction sets. Each has
28606           a corresponding -mno- option to disable use of these instructions.
28607
28608           These extensions are also available as built-in functions: see x86
28609           Built-in Functions, for details of the functions enabled and
28610           disabled by these switches.
28611
28612           To generate SSE/SSE2 instructions automatically from floating-point
28613           code (as opposed to 387 instructions), see -mfpmath=sse.
28614
28615           GCC depresses SSEx instructions when -mavx is used. Instead, it
28616           generates new AVX instructions or AVX equivalence for all SSEx
28617           instructions when needed.
28618
28619           These options enable GCC to use these extended instructions in
28620           generated code, even without -mfpmath=sse.  Applications that
28621           perform run-time CPU detection must compile separate files for each
28622           supported architecture, using the appropriate flags.  In
28623           particular, the file containing the CPU detection code should be
28624           compiled without these options.
28625
28626       -mdump-tune-features
28627           This option instructs GCC to dump the names of the x86 performance
28628           tuning features and default settings. The names can be used in
28629           -mtune-ctrl=feature-list.
28630
28631       -mtune-ctrl=feature-list
28632           This option is used to do fine grain control of x86 code generation
28633           features.  feature-list is a comma separated list of feature names.
28634           See also -mdump-tune-features. When specified, the feature is
28635           turned on if it is not preceded with ^, otherwise, it is turned
28636           off.  -mtune-ctrl=feature-list is intended to be used by GCC
28637           developers. Using it may lead to code paths not covered by testing
28638           and can potentially result in compiler ICEs or runtime errors.
28639
28640       -mno-default
28641           This option instructs GCC to turn off all tunable features. See
28642           also -mtune-ctrl=feature-list and -mdump-tune-features.
28643
28644       -mcld
28645           This option instructs GCC to emit a "cld" instruction in the
28646           prologue of functions that use string instructions.  String
28647           instructions depend on the DF flag to select between autoincrement
28648           or autodecrement mode.  While the ABI specifies the DF flag to be
28649           cleared on function entry, some operating systems violate this
28650           specification by not clearing the DF flag in their exception
28651           dispatchers.  The exception handler can be invoked with the DF flag
28652           set, which leads to wrong direction mode when string instructions
28653           are used.  This option can be enabled by default on 32-bit x86
28654           targets by configuring GCC with the --enable-cld configure option.
28655           Generation of "cld" instructions can be suppressed with the
28656           -mno-cld compiler option in this case.
28657
28658       -mvzeroupper
28659           This option instructs GCC to emit a "vzeroupper" instruction before
28660           a transfer of control flow out of the function to minimize the AVX
28661           to SSE transition penalty as well as remove unnecessary "zeroupper"
28662           intrinsics.
28663
28664       -mprefer-avx128
28665           This option instructs GCC to use 128-bit AVX instructions instead
28666           of 256-bit AVX instructions in the auto-vectorizer.
28667
28668       -mprefer-vector-width=opt
28669           This option instructs GCC to use opt-bit vector width in
28670           instructions instead of default on the selected platform.
28671
28672       -mmove-max=bits
28673           This option instructs GCC to set the maximum number of bits can be
28674           moved from memory to memory efficiently to bits.  The valid bits
28675           are 128, 256 and 512.
28676
28677       -mstore-max=bits
28678           This option instructs GCC to set the maximum number of bits can be
28679           stored to memory efficiently to bits.  The valid bits are 128, 256
28680           and 512.
28681
28682           none
28683               No extra limitations applied to GCC other than defined by the
28684               selected platform.
28685
28686           128 Prefer 128-bit vector width for instructions.
28687
28688           256 Prefer 256-bit vector width for instructions.
28689
28690           512 Prefer 512-bit vector width for instructions.
28691
28692       -mcx16
28693           This option enables GCC to generate "CMPXCHG16B" instructions in
28694           64-bit code to implement compare-and-exchange operations on 16-byte
28695           aligned 128-bit objects.  This is useful for atomic updates of data
28696           structures exceeding one machine word in size.  The compiler uses
28697           this instruction to implement __sync Builtins.  However, for
28698           __atomic Builtins operating on 128-bit integers, a library call is
28699           always used.
28700
28701       -msahf
28702           This option enables generation of "SAHF" instructions in 64-bit
28703           code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
28704           the introduction of Pentium 4 G1 step in December 2005, lacked the
28705           "LAHF" and "SAHF" instructions which are supported by AMD64.  These
28706           are load and store instructions, respectively, for certain status
28707           flags.  In 64-bit mode, the "SAHF" instruction is used to optimize
28708           "fmod", "drem", and "remainder" built-in functions; see Other
28709           Builtins for details.
28710
28711       -mmovbe
28712           This option enables use of the "movbe" instruction to implement
28713           "__builtin_bswap32" and "__builtin_bswap64".
28714
28715       -mshstk
28716           The -mshstk option enables shadow stack built-in functions from x86
28717           Control-flow Enforcement Technology (CET).
28718
28719       -mcrc32
28720           This option enables built-in functions "__builtin_ia32_crc32qi",
28721           "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
28722           "__builtin_ia32_crc32di" to generate the "crc32" machine
28723           instruction.
28724
28725       -mmwait
28726           This option enables built-in functions "__builtin_ia32_monitor",
28727           and "__builtin_ia32_mwait" to generate the "monitor" and "mwait"
28728           machine instructions.
28729
28730       -mrecip
28731           This option enables use of "RCPSS" and "RSQRTSS" instructions (and
28732           their vectorized variants "RCPPS" and "RSQRTPS") with an additional
28733           Newton-Raphson step to increase precision instead of "DIVSS" and
28734           "SQRTSS" (and their vectorized variants) for single-precision
28735           floating-point arguments.  These instructions are generated only
28736           when -funsafe-math-optimizations is enabled together with
28737           -ffinite-math-only and -fno-trapping-math.  Note that while the
28738           throughput of the sequence is higher than the throughput of the
28739           non-reciprocal instruction, the precision of the sequence can be
28740           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
28741           0.99999994).
28742
28743           Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
28744           "RSQRTPS") already with -ffast-math (or the above option
28745           combination), and doesn't need -mrecip.
28746
28747           Also note that GCC emits the above sequence with additional Newton-
28748           Raphson step for vectorized single-float division and vectorized
28749           sqrtf(x) already with -ffast-math (or the above option
28750           combination), and doesn't need -mrecip.
28751
28752       -mrecip=opt
28753           This option controls which reciprocal estimate instructions may be
28754           used.  opt is a comma-separated list of options, which may be
28755           preceded by a ! to invert the option:
28756
28757           all Enable all estimate instructions.
28758
28759           default
28760               Enable the default instructions, equivalent to -mrecip.
28761
28762           none
28763               Disable all estimate instructions, equivalent to -mno-recip.
28764
28765           div Enable the approximation for scalar division.
28766
28767           vec-div
28768               Enable the approximation for vectorized division.
28769
28770           sqrt
28771               Enable the approximation for scalar square root.
28772
28773           vec-sqrt
28774               Enable the approximation for vectorized square root.
28775
28776           So, for example, -mrecip=all,!sqrt enables all of the reciprocal
28777           approximations, except for square root.
28778
28779       -mveclibabi=type
28780           Specifies the ABI type to use for vectorizing intrinsics using an
28781           external library.  Supported values for type are svml for the Intel
28782           short vector math library and acml for the AMD math core library.
28783           To use this option, both -ftree-vectorize and
28784           -funsafe-math-optimizations have to be enabled, and an SVML or ACML
28785           ABI-compatible library must be specified at link time.
28786
28787           GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
28788           "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2",
28789           "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2",
28790           "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2", "vmlsExp4",
28791           "vmlsLn4", "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4",
28792           "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
28793           "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4"
28794           and "vmlsAcos4" for corresponding function type when
28795           -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
28796           "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
28797           "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
28798           "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
28799           corresponding function type when -mveclibabi=acml is used.
28800
28801       -mabi=name
28802           Generate code for the specified calling convention.  Permissible
28803           values are sysv for the ABI used on GNU/Linux and other systems,
28804           and ms for the Microsoft ABI.  The default is to use the Microsoft
28805           ABI when targeting Microsoft Windows and the SysV ABI on all other
28806           systems.  You can control this behavior for specific functions by
28807           using the function attributes "ms_abi" and "sysv_abi".
28808
28809       -mforce-indirect-call
28810           Force all calls to functions to be indirect. This is useful when
28811           using Intel Processor Trace where it generates more precise timing
28812           information for function calls.
28813
28814       -mmanual-endbr
28815           Insert ENDBR instruction at function entry only via the "cf_check"
28816           function attribute. This is useful when used with the option
28817           -fcf-protection=branch to control ENDBR insertion at the function
28818           entry.
28819
28820       -mcet-switch
28821           By default, CET instrumentation is turned off on switch statements
28822           that use a jump table and indirect branch track is disabled.  Since
28823           jump tables are stored in read-only memory, this does not result in
28824           a direct loss of hardening.  But if the jump table index is
28825           attacker-controlled, the indirect jump may not be constrained by
28826           CET.  This option turns on CET instrumentation to enable indirect
28827           branch track for switch statements with jump tables which leads to
28828           the jump targets reachable via any indirect jumps.
28829
28830       -mcall-ms2sysv-xlogues
28831           Due to differences in 64-bit ABIs, any Microsoft ABI function that
28832           calls a System V ABI function must consider RSI, RDI and XMM6-15 as
28833           clobbered.  By default, the code for saving and restoring these
28834           registers is emitted inline, resulting in fairly lengthy prologues
28835           and epilogues.  Using -mcall-ms2sysv-xlogues emits prologues and
28836           epilogues that use stubs in the static portion of libgcc to perform
28837           these saves and restores, thus reducing function size at the cost
28838           of a few extra instructions.
28839
28840       -mtls-dialect=type
28841           Generate code to access thread-local storage using the gnu or gnu2
28842           conventions.  gnu is the conservative default; gnu2 is more
28843           efficient, but it may add compile- and run-time requirements that
28844           cannot be satisfied on all systems.
28845
28846       -mpush-args
28847       -mno-push-args
28848           Use PUSH operations to store outgoing parameters.  This method is
28849           shorter and usually equally fast as method using SUB/MOV operations
28850           and is enabled by default.  In some cases disabling it may improve
28851           performance because of improved scheduling and reduced
28852           dependencies.
28853
28854       -maccumulate-outgoing-args
28855           If enabled, the maximum amount of space required for outgoing
28856           arguments is computed in the function prologue.  This is faster on
28857           most modern CPUs because of reduced dependencies, improved
28858           scheduling and reduced stack usage when the preferred stack
28859           boundary is not equal to 2.  The drawback is a notable increase in
28860           code size.  This switch implies -mno-push-args.
28861
28862       -mthreads
28863           Support thread-safe exception handling on MinGW.  Programs that
28864           rely on thread-safe exception handling must compile and link all
28865           code with the -mthreads option.  When compiling, -mthreads defines
28866           -D_MT; when linking, it links in a special thread helper library
28867           -lmingwthrd which cleans up per-thread exception-handling data.
28868
28869       -mms-bitfields
28870       -mno-ms-bitfields
28871           Enable/disable bit-field layout compatible with the native
28872           Microsoft Windows compiler.
28873
28874           If "packed" is used on a structure, or if bit-fields are used, it
28875           may be that the Microsoft ABI lays out the structure differently
28876           than the way GCC normally does.  Particularly when moving packed
28877           data between functions compiled with GCC and the native Microsoft
28878           compiler (either via function call or as data in a file), it may be
28879           necessary to access either format.
28880
28881           This option is enabled by default for Microsoft Windows targets.
28882           This behavior can also be controlled locally by use of variable or
28883           type attributes.  For more information, see x86 Variable Attributes
28884           and x86 Type Attributes.
28885
28886           The Microsoft structure layout algorithm is fairly simple with the
28887           exception of the bit-field packing.  The padding and alignment of
28888           members of structures and whether a bit-field can straddle a
28889           storage-unit boundary are determine by these rules:
28890
28891           1. Structure members are stored sequentially in the order in which
28892           they are
28893               declared: the first member has the lowest memory address and
28894               the last member the highest.
28895
28896           2. Every data object has an alignment requirement.  The alignment
28897           requirement
28898               for all data except structures, unions, and arrays is either
28899               the size of the object or the current packing size (specified
28900               with either the "aligned" attribute or the "pack" pragma),
28901               whichever is less.  For structures, unions, and arrays, the
28902               alignment requirement is the largest alignment requirement of
28903               its members.  Every object is allocated an offset so that:
28904
28905                       offset % alignment_requirement == 0
28906
28907           3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
28908           allocation
28909               unit if the integral types are the same size and if the next
28910               bit-field fits into the current allocation unit without
28911               crossing the boundary imposed by the common alignment
28912               requirements of the bit-fields.
28913
28914           MSVC interprets zero-length bit-fields in the following ways:
28915
28916           1. If a zero-length bit-field is inserted between two bit-fields
28917           that
28918               are normally coalesced, the bit-fields are not coalesced.
28919
28920               For example:
28921
28922                       struct
28923                        {
28924                          unsigned long bf_1 : 12;
28925                          unsigned long : 0;
28926                          unsigned long bf_2 : 12;
28927                        } t1;
28928
28929               The size of "t1" is 8 bytes with the zero-length bit-field.  If
28930               the zero-length bit-field were removed, "t1"'s size would be 4
28931               bytes.
28932
28933           2. If a zero-length bit-field is inserted after a bit-field, "foo",
28934           and the
28935               alignment of the zero-length bit-field is greater than the
28936               member that follows it, "bar", "bar" is aligned as the type of
28937               the zero-length bit-field.
28938
28939               For example:
28940
28941                       struct
28942                        {
28943                          char foo : 4;
28944                          short : 0;
28945                          char bar;
28946                        } t2;
28947
28948                       struct
28949                        {
28950                          char foo : 4;
28951                          short : 0;
28952                          double bar;
28953                        } t3;
28954
28955               For "t2", "bar" is placed at offset 2, rather than offset 1.
28956               Accordingly, the size of "t2" is 4.  For "t3", the zero-length
28957               bit-field does not affect the alignment of "bar" or, as a
28958               result, the size of the structure.
28959
28960               Taking this into account, it is important to note the
28961               following:
28962
28963               1. If a zero-length bit-field follows a normal bit-field, the
28964               type of the
28965                   zero-length bit-field may affect the alignment of the
28966                   structure as whole. For example, "t2" has a size of 4
28967                   bytes, since the zero-length bit-field follows a normal
28968                   bit-field, and is of type short.
28969
28970               2. Even if a zero-length bit-field is not followed by a normal
28971               bit-field, it may
28972                   still affect the alignment of the structure:
28973
28974                           struct
28975                            {
28976                              char foo : 6;
28977                              long : 0;
28978                            } t4;
28979
28980                   Here, "t4" takes up 4 bytes.
28981
28982           3. Zero-length bit-fields following non-bit-field members are
28983           ignored:
28984                       struct
28985                        {
28986                          char foo;
28987                          long : 0;
28988                          char bar;
28989                        } t5;
28990
28991               Here, "t5" takes up 2 bytes.
28992
28993       -mno-align-stringops
28994           Do not align the destination of inlined string operations.  This
28995           switch reduces code size and improves performance in case the
28996           destination is already aligned, but GCC doesn't know about it.
28997
28998       -minline-all-stringops
28999           By default GCC inlines string operations only when the destination
29000           is known to be aligned to least a 4-byte boundary.  This enables
29001           more inlining and increases code size, but may improve performance
29002           of code that depends on fast "memcpy" and "memset" for short
29003           lengths.  The option enables inline expansion of "strlen" for all
29004           pointer alignments.
29005
29006       -minline-stringops-dynamically
29007           For string operations of unknown size, use run-time checks with
29008           inline code for small blocks and a library call for large blocks.
29009
29010       -mstringop-strategy=alg
29011           Override the internal decision heuristic for the particular
29012           algorithm to use for inlining string operations.  The allowed
29013           values for alg are:
29014
29015           rep_byte
29016           rep_4byte
29017           rep_8byte
29018               Expand using i386 "rep" prefix of the specified size.
29019
29020           byte_loop
29021           loop
29022           unrolled_loop
29023               Expand into an inline loop.
29024
29025           libcall
29026               Always use a library call.
29027
29028       -mmemcpy-strategy=strategy
29029           Override the internal decision heuristic to decide if
29030           "__builtin_memcpy" should be inlined and what inline algorithm to
29031           use when the expected size of the copy operation is known. strategy
29032           is a comma-separated list of alg:max_size:dest_align triplets.  alg
29033           is specified in -mstringop-strategy, max_size specifies the max
29034           byte size with which inline algorithm alg is allowed.  For the last
29035           triplet, the max_size must be -1. The max_size of the triplets in
29036           the list must be specified in increasing order.  The minimal byte
29037           size for alg is 0 for the first triplet and "max_size + 1" of the
29038           preceding range.
29039
29040       -mmemset-strategy=strategy
29041           The option is similar to -mmemcpy-strategy= except that it is to
29042           control "__builtin_memset" expansion.
29043
29044       -momit-leaf-frame-pointer
29045           Don't keep the frame pointer in a register for leaf functions.
29046           This avoids the instructions to save, set up, and restore frame
29047           pointers and makes an extra register available in leaf functions.
29048           The option -fomit-leaf-frame-pointer removes the frame pointer for
29049           leaf functions, which might make debugging harder.
29050
29051       -mtls-direct-seg-refs
29052       -mno-tls-direct-seg-refs
29053           Controls whether TLS variables may be accessed with offsets from
29054           the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
29055           whether the thread base pointer must be added.  Whether or not this
29056           is valid depends on the operating system, and whether it maps the
29057           segment to cover the entire TLS area.
29058
29059           For systems that use the GNU C Library, the default is on.
29060
29061       -msse2avx
29062       -mno-sse2avx
29063           Specify that the assembler should encode SSE instructions with VEX
29064           prefix.  The option -mavx turns this on by default.
29065
29066       -mfentry
29067       -mno-fentry
29068           If profiling is active (-pg), put the profiling counter call before
29069           the prologue.  Note: On x86 architectures the attribute
29070           "ms_hook_prologue" isn't possible at the moment for -mfentry and
29071           -pg.
29072
29073       -mrecord-mcount
29074       -mno-record-mcount
29075           If profiling is active (-pg), generate a __mcount_loc section that
29076           contains pointers to each profiling call. This is useful for
29077           automatically patching and out calls.
29078
29079       -mnop-mcount
29080       -mno-nop-mcount
29081           If profiling is active (-pg), generate the calls to the profiling
29082           functions as NOPs. This is useful when they should be patched in
29083           later dynamically. This is likely only useful together with
29084           -mrecord-mcount.
29085
29086       -minstrument-return=type
29087           Instrument function exit in -pg -mfentry instrumented functions
29088           with call to specified function. This only instruments true returns
29089           ending with ret, but not sibling calls ending with jump. Valid
29090           types are none to not instrument, call to generate a call to
29091           __return__, or nop5 to generate a 5 byte nop.
29092
29093       -mrecord-return
29094       -mno-record-return
29095           Generate a __return_loc section pointing to all return
29096           instrumentation code.
29097
29098       -mfentry-name=name
29099           Set name of __fentry__ symbol called at function entry for -pg
29100           -mfentry functions.
29101
29102       -mfentry-section=name
29103           Set name of section to record -mrecord-mcount calls (default
29104           __mcount_loc).
29105
29106       -mskip-rax-setup
29107       -mno-skip-rax-setup
29108           When generating code for the x86-64 architecture with SSE
29109           extensions disabled, -mskip-rax-setup can be used to skip setting
29110           up RAX register when there are no variable arguments passed in
29111           vector registers.
29112
29113           Warning: Since RAX register is used to avoid unnecessarily saving
29114           vector registers on stack when passing variable arguments, the
29115           impacts of this option are callees may waste some stack space,
29116           misbehave or jump to a random location.  GCC 4.4 or newer don't
29117           have those issues, regardless the RAX register value.
29118
29119       -m8bit-idiv
29120       -mno-8bit-idiv
29121           On some processors, like Intel Atom, 8-bit unsigned integer divide
29122           is much faster than 32-bit/64-bit integer divide.  This option
29123           generates a run-time check.  If both dividend and divisor are
29124           within range of 0 to 255, 8-bit unsigned integer divide is used
29125           instead of 32-bit/64-bit integer divide.
29126
29127       -mavx256-split-unaligned-load
29128       -mavx256-split-unaligned-store
29129           Split 32-byte AVX unaligned load and store.
29130
29131       -mstack-protector-guard=guard
29132       -mstack-protector-guard-reg=reg
29133       -mstack-protector-guard-offset=offset
29134           Generate stack protection code using canary at guard.  Supported
29135           locations are global for global canary or tls for per-thread canary
29136           in the TLS block (the default).  This option has effect only when
29137           -fstack-protector or -fstack-protector-all is specified.
29138
29139           With the latter choice the options -mstack-protector-guard-reg=reg
29140           and -mstack-protector-guard-offset=offset furthermore specify which
29141           segment register (%fs or %gs) to use as base register for reading
29142           the canary, and from what offset from that base register.  The
29143           default for those is as specified in the relevant ABI.
29144
29145       -mgeneral-regs-only
29146           Generate code that uses only the general-purpose registers.  This
29147           prevents the compiler from using floating-point, vector, mask and
29148           bound registers.
29149
29150       -mrelax-cmpxchg-loop
29151           When emitting a compare-and-swap loop for __sync Builtins and
29152           __atomic Builtins lacking a native instruction, optimize for the
29153           highly contended case by issuing an atomic load before the
29154           "CMPXCHG" instruction, and using the "PAUSE" instruction to save
29155           CPU power when restarting the loop.
29156
29157       -mindirect-branch=choice
29158           Convert indirect call and jump with choice.  The default is keep,
29159           which keeps indirect call and jump unmodified.  thunk converts
29160           indirect call and jump to call and return thunk.  thunk-inline
29161           converts indirect call and jump to inlined call and return thunk.
29162           thunk-extern converts indirect call and jump to external call and
29163           return thunk provided in a separate object file.  You can control
29164           this behavior for a specific function by using the function
29165           attribute "indirect_branch".
29166
29167           Note that -mcmodel=large is incompatible with
29168           -mindirect-branch=thunk and -mindirect-branch=thunk-extern since
29169           the thunk function may not be reachable in the large code model.
29170
29171           Note that -mindirect-branch=thunk-extern is compatible with
29172           -fcf-protection=branch since the external thunk can be made to
29173           enable control-flow check.
29174
29175       -mfunction-return=choice
29176           Convert function return with choice.  The default is keep, which
29177           keeps function return unmodified.  thunk converts function return
29178           to call and return thunk.  thunk-inline converts function return to
29179           inlined call and return thunk.  thunk-extern converts function
29180           return to external call and return thunk provided in a separate
29181           object file.  You can control this behavior for a specific function
29182           by using the function attribute "function_return".
29183
29184           Note that -mindirect-return=thunk-extern is compatible with
29185           -fcf-protection=branch since the external thunk can be made to
29186           enable control-flow check.
29187
29188           Note that -mcmodel=large is incompatible with
29189           -mfunction-return=thunk and -mfunction-return=thunk-extern since
29190           the thunk function may not be reachable in the large code model.
29191
29192       -mindirect-branch-register
29193           Force indirect call and jump via register.
29194
29195       -mharden-sls=choice
29196           Generate code to mitigate against straight line speculation (SLS)
29197           with choice.  The default is none which disables all SLS hardening.
29198           return enables SLS hardening for function returns.  indirect-jmp
29199           enables SLS hardening for indirect jumps.  all enables all SLS
29200           hardening.
29201
29202       -mindirect-branch-cs-prefix
29203           Add CS prefix to call and jmp to indirect thunk with branch target
29204           in r8-r15 registers so that the call and jmp instruction length is
29205           6 bytes to allow them to be replaced with lfence; call *%r8-r15 or
29206           lfence; jmp *%r8-r15 at run-time.
29207
29208       These -m switches are supported in addition to the above on x86-64
29209       processors in 64-bit environments.
29210
29211       -m32
29212       -m64
29213       -mx32
29214       -m16
29215       -miamcu
29216           Generate code for a 16-bit, 32-bit or 64-bit environment.  The -m32
29217           option sets "int", "long", and pointer types to 32 bits, and
29218           generates code that runs in 32-bit mode.
29219
29220           The -m64 option sets "int" to 32 bits and "long" and pointer types
29221           to 64 bits, and generates code for the x86-64 architecture.  For
29222           Darwin only the -m64 option also turns off the -fno-pic and
29223           -mdynamic-no-pic options.
29224
29225           The -mx32 option sets "int", "long", and pointer types to 32 bits,
29226           and generates code for the x86-64 architecture.
29227
29228           The -m16 option is the same as -m32, except for that it outputs the
29229           ".code16gcc" assembly directive at the beginning of the assembly
29230           output so that the binary can run in 16-bit mode.
29231
29232           The -miamcu option generates code which conforms to Intel MCU
29233           psABI.  It requires the -m32 option to be turned on.
29234
29235       -mno-red-zone
29236           Do not use a so-called "red zone" for x86-64 code.  The red zone is
29237           mandated by the x86-64 ABI; it is a 128-byte area beyond the
29238           location of the stack pointer that is not modified by signal or
29239           interrupt handlers and therefore can be used for temporary data
29240           without adjusting the stack pointer.  The flag -mno-red-zone
29241           disables this red zone.
29242
29243       -mcmodel=small
29244           Generate code for the small code model: the program and its symbols
29245           must be linked in the lower 2 GB of the address space.  Pointers
29246           are 64 bits.  Programs can be statically or dynamically linked.
29247           This is the default code model.
29248
29249       -mcmodel=kernel
29250           Generate code for the kernel code model.  The kernel runs in the
29251           negative 2 GB of the address space.  This model has to be used for
29252           Linux kernel code.
29253
29254       -mcmodel=medium
29255           Generate code for the medium model: the program is linked in the
29256           lower 2 GB of the address space.  Small symbols are also placed
29257           there.  Symbols with sizes larger than -mlarge-data-threshold are
29258           put into large data or BSS sections and can be located above 2GB.
29259           Programs can be statically or dynamically linked.
29260
29261       -mcmodel=large
29262           Generate code for the large model.  This model makes no assumptions
29263           about addresses and sizes of sections.
29264
29265       -maddress-mode=long
29266           Generate code for long address mode.  This is only supported for
29267           64-bit and x32 environments.  It is the default address mode for
29268           64-bit environments.
29269
29270       -maddress-mode=short
29271           Generate code for short address mode.  This is only supported for
29272           32-bit and x32 environments.  It is the default address mode for
29273           32-bit and x32 environments.
29274
29275       -mneeded
29276       -mno-needed
29277           Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property for Linux target to
29278           indicate the micro-architecture ISA level required to execute the
29279           binary.
29280
29281       -mno-direct-extern-access
29282           Without -fpic nor -fPIC, always use the GOT pointer to access
29283           external symbols.  With -fpic or -fPIC, treat access to protected
29284           symbols as local symbols.  The default is -mdirect-extern-access.
29285
29286           Warning: shared libraries compiled with -mno-direct-extern-access
29287           and executable compiled with -mdirect-extern-access may not be
29288           binary compatible if protected symbols are used in shared libraries
29289           and executable.
29290
29291       -munroll-only-small-loops
29292           Controls conservative small loop unrolling. It is default enabled
29293           by O2, and unrolls loop with less than 4 insns by 1 time. Explicit
29294           -f[no-]unroll-[all-]loops would disable this flag to avoid any
29295           unintended unrolling behavior that user does not want.
29296
29297       -mlam=choice
29298           LAM(linear-address masking) allows special bits in the pointer to
29299           be used for metadata. The default is none. With u48, pointer bits
29300           in positions 62:48 can be used for metadata; With u57, pointer bits
29301           in positions 62:57 can be used for metadata.
29302
29303       x86 Windows Options
29304
29305       These additional options are available for Microsoft Windows targets:
29306
29307       -mconsole
29308           This option specifies that a console application is to be
29309           generated, by instructing the linker to set the PE header subsystem
29310           type required for console applications.  This option is available
29311           for Cygwin and MinGW targets and is enabled by default on those
29312           targets.
29313
29314       -mdll
29315           This option is available for Cygwin and MinGW targets.  It
29316           specifies that a DLL---a dynamic link library---is to be generated,
29317           enabling the selection of the required runtime startup object and
29318           entry point.
29319
29320       -mnop-fun-dllimport
29321           This option is available for Cygwin and MinGW targets.  It
29322           specifies that the "dllimport" attribute should be ignored.
29323
29324       -mthreads
29325           This option is available for MinGW targets. It specifies that
29326           MinGW-specific thread support is to be used.
29327
29328       -municode
29329           This option is available for MinGW-w64 targets.  It causes the
29330           "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
29331           capable runtime startup code.
29332
29333       -mwin32
29334           This option is available for Cygwin and MinGW targets.  It
29335           specifies that the typical Microsoft Windows predefined macros are
29336           to be set in the pre-processor, but does not influence the choice
29337           of runtime library/startup code.
29338
29339       -mwindows
29340           This option is available for Cygwin and MinGW targets.  It
29341           specifies that a GUI application is to be generated by instructing
29342           the linker to set the PE header subsystem type appropriately.
29343
29344       -fno-set-stack-executable
29345           This option is available for MinGW targets. It specifies that the
29346           executable flag for the stack used by nested functions isn't set.
29347           This is necessary for binaries running in kernel mode of Microsoft
29348           Windows, as there the User32 API, which is used to set executable
29349           privileges, isn't available.
29350
29351       -fwritable-relocated-rdata
29352           This option is available for MinGW and Cygwin targets.  It
29353           specifies that relocated-data in read-only section is put into the
29354           ".data" section.  This is a necessary for older runtimes not
29355           supporting modification of ".rdata" sections for pseudo-relocation.
29356
29357       -mpe-aligned-commons
29358           This option is available for Cygwin and MinGW targets.  It
29359           specifies that the GNU extension to the PE file format that permits
29360           the correct alignment of COMMON variables should be used when
29361           generating code.  It is enabled by default if GCC detects that the
29362           target assembler found during configuration supports the feature.
29363
29364       See also under x86 Options for standard options.
29365
29366       Xstormy16 Options
29367
29368       These options are defined for Xstormy16:
29369
29370       -msim
29371           Choose startup files and linker script suitable for the simulator.
29372
29373       Xtensa Options
29374
29375       These options are supported for Xtensa targets:
29376
29377       -mconst16
29378       -mno-const16
29379           Enable or disable use of "CONST16" instructions for loading
29380           constant values.  The "CONST16" instruction is currently not a
29381           standard option from Tensilica.  When enabled, "CONST16"
29382           instructions are always used in place of the standard "L32R"
29383           instructions.  The use of "CONST16" is enabled by default only if
29384           the "L32R" instruction is not available.
29385
29386       -mfused-madd
29387       -mno-fused-madd
29388           Enable or disable use of fused multiply/add and multiply/subtract
29389           instructions in the floating-point option.  This has no effect if
29390           the floating-point option is not also enabled.  Disabling fused
29391           multiply/add and multiply/subtract instructions forces the compiler
29392           to use separate instructions for the multiply and add/subtract
29393           operations.  This may be desirable in some cases where strict IEEE
29394           754-compliant results are required: the fused multiply add/subtract
29395           instructions do not round the intermediate result, thereby
29396           producing results with more bits of precision than specified by the
29397           IEEE standard.  Disabling fused multiply add/subtract instructions
29398           also ensures that the program output is not sensitive to the
29399           compiler's ability to combine multiply and add/subtract operations.
29400
29401       -mserialize-volatile
29402       -mno-serialize-volatile
29403           When this option is enabled, GCC inserts "MEMW" instructions before
29404           "volatile" memory references to guarantee sequential consistency.
29405           The default is -mserialize-volatile.  Use -mno-serialize-volatile
29406           to omit the "MEMW" instructions.
29407
29408       -mforce-no-pic
29409           For targets, like GNU/Linux, where all user-mode Xtensa code must
29410           be position-independent code (PIC), this option disables PIC for
29411           compiling kernel code.
29412
29413       -mtext-section-literals
29414       -mno-text-section-literals
29415           These options control the treatment of literal pools.  The default
29416           is -mno-text-section-literals, which places literals in a separate
29417           section in the output file.  This allows the literal pool to be
29418           placed in a data RAM/ROM, and it also allows the linker to combine
29419           literal pools from separate object files to remove redundant
29420           literals and improve code size.  With -mtext-section-literals, the
29421           literals are interspersed in the text section in order to keep them
29422           as close as possible to their references.  This may be necessary
29423           for large assembly files.  Literals for each function are placed
29424           right before that function.
29425
29426       -mauto-litpools
29427       -mno-auto-litpools
29428           These options control the treatment of literal pools.  The default
29429           is -mno-auto-litpools, which places literals in a separate section
29430           in the output file unless -mtext-section-literals is used.  With
29431           -mauto-litpools the literals are interspersed in the text section
29432           by the assembler.  Compiler does not produce explicit ".literal"
29433           directives and loads literals into registers with "MOVI"
29434           instructions instead of "L32R" to let the assembler do relaxation
29435           and place literals as necessary.  This option allows assembler to
29436           create several literal pools per function and assemble very big
29437           functions, which may not be possible with -mtext-section-literals.
29438
29439       -mtarget-align
29440       -mno-target-align
29441           When this option is enabled, GCC instructs the assembler to
29442           automatically align instructions to reduce branch penalties at the
29443           expense of some code density.  The assembler attempts to widen
29444           density instructions to align branch targets and the instructions
29445           following call instructions.  If there are not enough preceding
29446           safe density instructions to align a target, no widening is
29447           performed.  The default is -mtarget-align.  These options do not
29448           affect the treatment of auto-aligned instructions like "LOOP",
29449           which the assembler always aligns, either by widening density
29450           instructions or by inserting NOP instructions.
29451
29452       -mlongcalls
29453       -mno-longcalls
29454           When this option is enabled, GCC instructs the assembler to
29455           translate direct calls to indirect calls unless it can determine
29456           that the target of a direct call is in the range allowed by the
29457           call instruction.  This translation typically occurs for calls to
29458           functions in other source files.  Specifically, the assembler
29459           translates a direct "CALL" instruction into an "L32R" followed by a
29460           "CALLX" instruction.  The default is -mno-longcalls.  This option
29461           should be used in programs where the call target can potentially be
29462           out of range.  This option is implemented in the assembler, not the
29463           compiler, so the assembly code generated by GCC still shows direct
29464           call instructions---look at the disassembled object code to see the
29465           actual instructions.  Note that the assembler uses an indirect call
29466           for every cross-file call, not just those that really are out of
29467           range.
29468
29469       -mabi=name
29470           Generate code for the specified ABI.  Permissible values are:
29471           call0, windowed.  Default ABI is chosen by the Xtensa core
29472           configuration.
29473
29474       -mabi=call0
29475           When this option is enabled function parameters are passed in
29476           registers "a2" through "a7", registers "a12" through "a15" are
29477           caller-saved, and register "a15" may be used as a frame pointer.
29478           When this version of the ABI is enabled the C preprocessor symbol
29479           "__XTENSA_CALL0_ABI__" is defined.
29480
29481       -mabi=windowed
29482           When this option is enabled function parameters are passed in
29483           registers "a10" through "a15", and called function rotates register
29484           window by 8 registers on entry so that its arguments are found in
29485           registers "a2" through "a7".  Register "a7" may be used as a frame
29486           pointer.  Register window is rotated 8 registers back upon return.
29487           When this version of the ABI is enabled the C preprocessor symbol
29488           "__XTENSA_WINDOWED_ABI__" is defined.
29489
29490       -mextra-l32r-costs=n
29491           Specify an extra cost of instruction RAM/ROM access for "L32R"
29492           instructions, in clock cycles.  This affects, when optimizing for
29493           speed, whether loading a constant from literal pool using "L32R" or
29494           synthesizing the constant from a small one with a couple of
29495           arithmetic instructions.  The default value is 0.
29496
29497       zSeries Options
29498
29499       These are listed under
29500

ENVIRONMENT

29502       This section describes several environment variables that affect how
29503       GCC operates.  Some of them work by specifying directories or prefixes
29504       to use when searching for various kinds of files.  Some are used to
29505       specify other aspects of the compilation environment.
29506
29507       Note that you can also specify places to search using options such as
29508       -B, -I and -L.  These take precedence over places specified using
29509       environment variables, which in turn take precedence over those
29510       specified by the configuration of GCC.
29511
29512       LANG
29513       LC_CTYPE
29514       LC_MESSAGES
29515       LC_ALL
29516           These environment variables control the way that GCC uses
29517           localization information which allows GCC to work with different
29518           national conventions.  GCC inspects the locale categories LC_CTYPE
29519           and LC_MESSAGES if it has been configured to do so.  These locale
29520           categories can be set to any value supported by your installation.
29521           A typical value is en_GB.UTF-8 for English in the United Kingdom
29522           encoded in UTF-8.
29523
29524           The LC_CTYPE environment variable specifies character
29525           classification.  GCC uses it to determine the character boundaries
29526           in a string; this is needed for some multibyte encodings that
29527           contain quote and escape characters that are otherwise interpreted
29528           as a string end or escape.
29529
29530           The LC_MESSAGES environment variable specifies the language to use
29531           in diagnostic messages.
29532
29533           If the LC_ALL environment variable is set, it overrides the value
29534           of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
29535           default to the value of the LANG environment variable.  If none of
29536           these variables are set, GCC defaults to traditional C English
29537           behavior.
29538
29539       TMPDIR
29540           If TMPDIR is set, it specifies the directory to use for temporary
29541           files.  GCC uses temporary files to hold the output of one stage of
29542           compilation which is to be used as input to the next stage: for
29543           example, the output of the preprocessor, which is the input to the
29544           compiler proper.
29545
29546       GCC_COMPARE_DEBUG
29547           Setting GCC_COMPARE_DEBUG is nearly equivalent to passing
29548           -fcompare-debug to the compiler driver.  See the documentation of
29549           this option for more details.
29550
29551       GCC_EXEC_PREFIX
29552           If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
29553           names of the subprograms executed by the compiler.  No slash is
29554           added when this prefix is combined with the name of a subprogram,
29555           but you can specify a prefix that ends with a slash if you wish.
29556
29557           If GCC_EXEC_PREFIX is not set, GCC attempts to figure out an
29558           appropriate prefix to use based on the pathname it is invoked with.
29559
29560           If GCC cannot find the subprogram using the specified prefix, it
29561           tries looking in the usual places for the subprogram.
29562
29563           The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
29564           prefix is the prefix to the installed compiler. In many cases
29565           prefix is the value of "prefix" when you ran the configure script.
29566
29567           Other prefixes specified with -B take precedence over this prefix.
29568
29569           This prefix is also used for finding files such as crt0.o that are
29570           used for linking.
29571
29572           In addition, the prefix is used in an unusual way in finding the
29573           directories to search for header files.  For each of the standard
29574           directories whose name normally begins with /usr/local/lib/gcc
29575           (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
29576           replacing that beginning with the specified prefix to produce an
29577           alternate directory name.  Thus, with -Bfoo/, GCC searches foo/bar
29578           just before it searches the standard directory /usr/local/lib/bar.
29579           If a standard directory begins with the configured prefix then the
29580           value of prefix is replaced by GCC_EXEC_PREFIX when looking for
29581           header files.
29582
29583       COMPILER_PATH
29584           The value of COMPILER_PATH is a colon-separated list of
29585           directories, much like PATH.  GCC tries the directories thus
29586           specified when searching for subprograms, if it cannot find the
29587           subprograms using GCC_EXEC_PREFIX.
29588
29589       LIBRARY_PATH
29590           The value of LIBRARY_PATH is a colon-separated list of directories,
29591           much like PATH.  When configured as a native compiler, GCC tries
29592           the directories thus specified when searching for special linker
29593           files, if it cannot find them using GCC_EXEC_PREFIX.  Linking using
29594           GCC also uses these directories when searching for ordinary
29595           libraries for the -l option (but directories specified with -L come
29596           first).
29597
29598       LANG
29599           This variable is used to pass locale information to the compiler.
29600           One way in which this information is used is to determine the
29601           character set to be used when character literals, string literals
29602           and comments are parsed in C and C++.  When the compiler is
29603           configured to allow multibyte characters, the following values for
29604           LANG are recognized:
29605
29606           C-JIS
29607               Recognize JIS characters.
29608
29609           C-SJIS
29610               Recognize SJIS characters.
29611
29612           C-EUCJP
29613               Recognize EUCJP characters.
29614
29615           If LANG is not defined, or if it has some other value, then the
29616           compiler uses "mblen" and "mbtowc" as defined by the default locale
29617           to recognize and translate multibyte characters.
29618
29619       GCC_EXTRA_DIAGNOSTIC_OUTPUT
29620           If GCC_EXTRA_DIAGNOSTIC_OUTPUT is set to one of the following
29621           values, then additional text will be emitted to stderr when fix-it
29622           hints are emitted.  -fdiagnostics-parseable-fixits and
29623           -fno-diagnostics-parseable-fixits take precedence over this
29624           environment variable.
29625
29626           fixits-v1
29627               Emit parseable fix-it hints, equivalent to
29628               -fdiagnostics-parseable-fixits.  In particular, columns are
29629               expressed as a count of bytes, starting at byte 1 for the
29630               initial column.
29631
29632           fixits-v2
29633               As "fixits-v1", but columns are expressed as display columns,
29634               as per -fdiagnostics-column-unit=display.
29635
29636       Some additional environment variables affect the behavior of the
29637       preprocessor.
29638
29639       CPATH
29640       C_INCLUDE_PATH
29641       CPLUS_INCLUDE_PATH
29642       OBJC_INCLUDE_PATH
29643           Each variable's value is a list of directories separated by a
29644           special character, much like PATH, in which to look for header
29645           files.  The special character, "PATH_SEPARATOR", is target-
29646           dependent and determined at GCC build time.  For Microsoft Windows-
29647           based targets it is a semicolon, and for almost all other targets
29648           it is a colon.
29649
29650           CPATH specifies a list of directories to be searched as if
29651           specified with -I, but after any paths given with -I options on the
29652           command line.  This environment variable is used regardless of
29653           which language is being preprocessed.
29654
29655           The remaining environment variables apply only when preprocessing
29656           the particular language indicated.  Each specifies a list of
29657           directories to be searched as if specified with -isystem, but after
29658           any paths given with -isystem options on the command line.
29659
29660           In all these variables, an empty element instructs the compiler to
29661           search its current working directory.  Empty elements can appear at
29662           the beginning or end of a path.  For instance, if the value of
29663           CPATH is ":/special/include", that has the same effect as
29664           -I. -I/special/include.
29665
29666       DEPENDENCIES_OUTPUT
29667           If this variable is set, its value specifies how to output
29668           dependencies for Make based on the non-system header files
29669           processed by the compiler.  System header files are ignored in the
29670           dependency output.
29671
29672           The value of DEPENDENCIES_OUTPUT can be just a file name, in which
29673           case the Make rules are written to that file, guessing the target
29674           name from the source file name.  Or the value can have the form
29675           file target, in which case the rules are written to file file using
29676           target as the target name.
29677
29678           In other words, this environment variable is equivalent to
29679           combining the options -MM and -MF, with an optional -MT switch too.
29680
29681       SUNPRO_DEPENDENCIES
29682           This variable is the same as DEPENDENCIES_OUTPUT (see above),
29683           except that system header files are not ignored, so it implies -M
29684           rather than -MM.  However, the dependence on the main input file is
29685           omitted.
29686
29687       SOURCE_DATE_EPOCH
29688           If this variable is set, its value specifies a UNIX timestamp to be
29689           used in replacement of the current date and time in the "__DATE__"
29690           and "__TIME__" macros, so that the embedded timestamps become
29691           reproducible.
29692
29693           The value of SOURCE_DATE_EPOCH must be a UNIX timestamp, defined as
29694           the number of seconds (excluding leap seconds) since 01 Jan 1970
29695           00:00:00 represented in ASCII; identical to the output of "date
29696           +%s" on GNU/Linux and other systems that support the %s extension
29697           in the "date" command.
29698
29699           The value should be a known timestamp such as the last modification
29700           time of the source or package and it should be set by the build
29701           process.
29702

BUGS

29704       For instructions on reporting bugs, see
29705       <http://bugzilla.redhat.com/bugzilla/>.
29706

FOOTNOTES

29708       1.  On some systems, gcc -shared needs to build supplementary stub code
29709           for constructors to work.  On multi-libbed systems, gcc -shared
29710           must select the correct support libraries to link against.  Failing
29711           to supply the correct flags may lead to subtle defects.  Supplying
29712           them in cases where they are not necessary is innocuous.  -shared
29713           suppresses the addition of startup code to alter the floating-point
29714           environment as done with -ffast-math, -Ofast or
29715           -funsafe-math-optimizations on some targets.
29716

SEE ALSO

29718       gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1)
29719       and the Info entries for gcc, cpp, as, ld, binutils and gdb.
29720

AUTHOR

29722       See the Info entry for gcc, or
29723       <https://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for
29724       contributors to GCC.
29725
29727       Copyright (c) 1988-2023 Free Software Foundation, Inc.
29728
29729       Permission is granted to copy, distribute and/or modify this document
29730       under the terms of the GNU Free Documentation License, Version 1.3 or
29731       any later version published by the Free Software Foundation; with the
29732       Invariant Sections being "GNU General Public License" and "Funding Free
29733       Software", the Front-Cover texts being (a) (see below), and with the
29734       Back-Cover Texts being (b) (see below).  A copy of the license is
29735       included in the gfdl(7) man page.
29736
29737       (a) The FSF's Front-Cover Text is:
29738
29739            A GNU Manual
29740
29741       (b) The FSF's Back-Cover Text is:
29742
29743            You have freedom to copy and modify this GNU Manual, like GNU
29744            software.  Copies published by the Free Software Foundation raise
29745            funds for GNU development.
29746
29747
29748
29749gcc-13                            2023-07-28                            GCC(1)
Impressum