Merge branch 'vendor/GCC47'
[dragonfly.git] / contrib / gcc-4.7 / gcc / doc / gcc.1
1 .\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
29 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
30 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
31 .\" nothing in troff, for use with C<>.
32 .tr \(*W-
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" Escape single quotes in literal strings from groff's Unicode transform.
52 .ie \n(.g .ds Aq \(aq
53 .el       .ds Aq '
54 .\"
55 .\" If the F register is turned on, we'll generate index entries on stderr for
56 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
57 .\" entries marked with X<> in POD.  Of course, you'll have to process the
58 .\" output yourself in some meaningful fashion.
59 .ie \nF \{\
60 .    de IX
61 .    tm Index:\\$1\t\\n%\t"\\$2"
62 ..
63 .    nr % 0
64 .    rr F
65 .\}
66 .el \{\
67 .    de IX
68 ..
69 .\}
70 .\"
71 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
72 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
73 .    \" fudge factors for nroff and troff
74 .if n \{\
75 .    ds #H 0
76 .    ds #V .8m
77 .    ds #F .3m
78 .    ds #[ \f1
79 .    ds #] \fP
80 .\}
81 .if t \{\
82 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
83 .    ds #V .6m
84 .    ds #F 0
85 .    ds #[ \&
86 .    ds #] \&
87 .\}
88 .    \" simple accents for nroff and troff
89 .if n \{\
90 .    ds ' \&
91 .    ds ` \&
92 .    ds ^ \&
93 .    ds , \&
94 .    ds ~ ~
95 .    ds /
96 .\}
97 .if t \{\
98 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
99 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
100 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
101 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
102 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
103 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
104 .\}
105 .    \" troff and (daisy-wheel) nroff accents
106 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
107 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
108 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
109 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
110 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
111 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
112 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
113 .ds ae a\h'-(\w'a'u*4/10)'e
114 .ds Ae A\h'-(\w'A'u*4/10)'E
115 .    \" corrections for vroff
116 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
117 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
118 .    \" for low resolution devices (crt and lpr)
119 .if \n(.H>23 .if \n(.V>19 \
120 \{\
121 .    ds : e
122 .    ds 8 ss
123 .    ds o a
124 .    ds d- d\h'-1'\(ga
125 .    ds D- D\h'-1'\(hy
126 .    ds th \o'bp'
127 .    ds Th \o'LP'
128 .    ds ae ae
129 .    ds Ae AE
130 .\}
131 .rm #[ #] #H #V #F C
132 .\" ========================================================================
133 .\"
134 .IX Title "GCC 1"
135 .TH GCC 1 "2014-06-12" "gcc-4.7.4" "GNU"
136 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
137 .\" way too many mistakes in technical documents.
138 .if n .ad l
139 .nh
140 .SH "NAME"
141 gcc \- GNU project C and C++ compiler
143 .IX Header "SYNOPSIS"
144 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
145     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
146     [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
147     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
148     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
149     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
150     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
151 .PP
152 Only the most useful options are listed here; see below for the
153 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
155 .IX Header "DESCRIPTION"
156 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
157 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
158 process at an intermediate stage.  For example, the \fB\-c\fR option
159 says not to run the linker.  Then the output consists of object files
160 output by the assembler.
161 .PP
162 Other options are passed on to one stage of processing.  Some options
163 control the preprocessor and others the compiler itself.  Yet other
164 options control the assembler and linker; most of these are not
165 documented here, since you rarely need to use any of them.
166 .PP
167 Most of the command-line options that you can use with \s-1GCC\s0 are useful
168 for C programs; when an option is only useful with another language
169 (usually \*(C+), the explanation says so explicitly.  If the description
170 for a particular option does not mention a source language, you can use
171 that option with all supported languages.
172 .PP
173 The \fBgcc\fR program accepts options and file names as operands.  Many
174 options have multi-letter names; therefore multiple single-letter options
175 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
176 .PP
177 You can mix options and other arguments.  For the most part, the order
178 you use doesn't matter.  Order does matter when you use several
179 options of the same kind; for example, if you specify \fB\-L\fR more
180 than once, the directories are searched in the order specified.  Also,
181 the placement of the \fB\-l\fR option is significant.
182 .PP
183 Many options have long names starting with \fB\-f\fR or with
184 \&\fB\-W\fR\-\-\-for example,
185 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
186 these have both positive and negative forms; the negative form of
187 \&\fB\-ffoo\fR would be \fB\-fno\-foo\fR.  This manual documents
188 only one of these two forms, whichever one is not the default.
190 .IX Header "OPTIONS"
191 .Sh "Option Summary"
192 .IX Subsection "Option Summary"
193 Here is a summary of all the options, grouped by type.  Explanations are
194 in the following sections.
195 .IP "\fIOverall Options\fR" 4
196 .IX Item "Overall Options"
197 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-no\-canonical\-prefixes  
198 \&\-pipe  \-pass\-exit\-codes  
199 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
200 \&\-\-version \-wrapper @\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR  
201 \&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fdump\-go\-spec=\fR\fIfile\fR
202 .IP "\fIC Language Options\fR" 4
203 .IX Item "C Language Options"
204 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
205 \&\-aux\-info\fR \fIfilename\fR \fB\-fallow\-parameterless\-variadic\-functions 
206 \&\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
207 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fms\-extensions \-fplan9\-extensions 
208 \&\-trigraphs  \-no\-integrated\-cpp  \-traditional  \-traditional\-cpp 
209 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
210 \&\-fsigned\-bitfields  \-fsigned\-char 
211 \&\-funsigned\-bitfields  \-funsigned\-char\fR
212 .IP "\fI\*(C+ Language Options\fR" 4
213 .IX Item " Language Options"
214 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
215 \&\-fconserve\-space  \-fconstexpr\-depth=\fR\fIn\fR  \fB\-ffriend\-injection 
216 \&\-fno\-elide\-constructors 
217 \&\-fno\-enforce\-eh\-specs 
218 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
219 \&\-fno\-implicit\-templates 
220 \&\-fno\-implicit\-inline\-templates 
221 \&\-fno\-implement\-inlines  \-fms\-extensions 
222 \&\-fno\-nonansi\-builtins  \-fnothrow\-opt  \-fno\-operator\-names 
223 \&\-fno\-optional\-diags  \-fpermissive 
224 \&\-fno\-pretty\-templates 
225 \&\-frepo  \-fno\-rtti  \-fstats  \-ftemplate\-depth=\fR\fIn\fR 
226 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
227 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
228 \&\-fvisibility\-ms\-compat 
229 \&\-Wabi  \-Wconversion\-null  \-Wctor\-dtor\-privacy 
230 \&\-Wdelete\-non\-virtual\-dtor \-Wnarrowing \-Wnoexcept 
231 \&\-Wnon\-virtual\-dtor  \-Wreorder 
232 \&\-Weffc++  \-Wstrict\-null\-sentinel 
233 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
234 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
235 \&\-Wsign\-promo\fR
236 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
237 .IX Item "Objective-C and Objective- Language Options"
238 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
239 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
240 \&\-fno\-nil\-receivers 
241 \&\-fobjc\-abi\-version=\fR\fIn\fR 
242 \&\fB\-fobjc\-call\-cxx\-cdtors 
243 \&\-fobjc\-direct\-dispatch 
244 \&\-fobjc\-exceptions 
245 \&\-fobjc\-gc 
246 \&\-fobjc\-nilcheck 
247 \&\-fobjc\-std=objc1 
248 \&\-freplace\-objc\-classes 
249 \&\-fzero\-link 
250 \&\-gen\-decls 
251 \&\-Wassign\-intercept 
252 \&\-Wno\-protocol  \-Wselector 
253 \&\-Wstrict\-selector\-match 
254 \&\-Wundeclared\-selector\fR
255 .IP "\fILanguage Independent Options\fR" 4
256 .IX Item "Language Independent Options"
257 \&\fB\-fmessage\-length=\fR\fIn\fR  
258 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
259 \&\fB\-fno\-diagnostics\-show\-option\fR
260 .IP "\fIWarning Options\fR" 4
261 .IX Item "Warning Options"
262 \&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-pedantic 
263 \&\-pedantic\-errors 
264 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
265 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
266 \&\-Wc++\-compat \-Wc++11\-compat \-Wcast\-align  \-Wcast\-qual  
267 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
268 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-cpp  \-Wno\-deprecated  
269 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
270 \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \-Wempty\-body  \-Wenum\-compare 
271 \&\-Wno\-endif\-labels \-Werror  \-Werror=* 
272 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
273 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
274 \&\-Wformat\-security  \-Wformat\-y2k 
275 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wno\-free\-nonheap\-object \-Wjump\-misses\-init 
276 \&\-Wignored\-qualifiers 
277 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
278 \&\-Winit\-self  \-Winline \-Wmaybe\-uninitialized 
279 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
280 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
281 \&\-Wlogical\-op \-Wlong\-long 
282 \&\-Wmain \-Wmaybe\-uninitialized \-Wmissing\-braces  \-Wmissing\-field\-initializers 
283 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
284 \&\-Wno\-mudflap 
285 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
286 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
287 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
288 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
289 \&\-Wredundant\-decls 
290 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow 
291 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
292 \&\-Wstack\-usage=\fR\fIlen\fR \fB\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
293 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
294 \&\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR] 
295 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
296 \&\-Wsystem\-headers  \-Wtrampolines  \-Wtrigraphs  \-Wtype\-limits  \-Wundef 
297 \&\-Wuninitialized  \-Wunknown\-pragmas  \-Wno\-pragmas 
298 \&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
299 \&\-Wunused\-label  \-Wunused\-local\-typedefs \-Wunused\-parameter 
300 \&\-Wno\-unused\-result \-Wunused\-value  \-Wunused\-variable 
301 \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-variable 
302 \&\-Wvariadic\-macros \-Wvector\-operation\-performance \-Wvla 
303 \&\-Wvolatile\-register\-var  \-Wwrite\-strings \-Wzero\-as\-null\-pointer\-constant\fR
304 .IP "\fIC and Objective-C-only Warning Options\fR" 4
305 .IX Item "C and Objective-C-only Warning Options"
306 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
307 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
308 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
309 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
310 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
311 .IP "\fIDebugging Options\fR" 4
312 .IX Item "Debugging Options"
313 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
314 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
315 \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
316 \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
317 \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
318 \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
319 \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
320 \&\fB\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links 
321 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
322 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
323 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
324 \&\-fdump\-passes 
325 \&\-fdump\-statistics 
326 \&\-fdump\-tree\-all 
327 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
328 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
329 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
330 \&\-fdump\-tree\-ch 
331 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
332 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
333 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
334 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
335 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
336 \&\fB\-fdump\-tree\-phiprop\fR[\fB\-\fR\fIn\fR] 
337 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
338 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
339 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
340 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
341 \&\-fdump\-tree\-sink 
342 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
343 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
344 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
345 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
346 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
347 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
348 \&\fB\-fdump\-final\-insns=\fR\fIfile\fR 
349 \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
350 \&\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
351 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
352 \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
353 \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
354 \&\fB\-fdebug\-types\-section 
355 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
356 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
357 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
358 \&\-fstack\-usage  \-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
359 \&\-fvar\-tracking\-assignments  \-fvar\-tracking\-assignments\-toggle 
360 \&\-g  \-g\fR\fIlevel\fR  \fB\-gtoggle  \-gcoff  \-gdwarf\-\fR\fIversion\fR 
361 \&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
362 \&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
363 \&\-gvms  \-gxcoff  \-gxcoff+ 
364 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
365 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
366 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
367 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
368 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
369 \&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
370 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
371 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
372 \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \-time\fR[\fB=\fR\fIfile\fR]
373 .IP "\fIOptimization Options\fR" 4
374 .IX Item "Optimization Options"
375 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
376 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
377 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
378 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
379 \&\-fcheck\-data\-deps \-fcombine\-stack\-adjustments \-fconserve\-stack 
380 \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping 
381 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules 
382 \&\-fcx\-limited\-range 
383 \&\-fdata\-sections \-fdce \-fdelayed\-branch 
384 \&\-fdelete\-null\-pointer\-checks \-fdevirtualize \-fdse 
385 \&\-fearly\-inlining \-fipa\-sra \-fexpensive\-optimizations \-ffat\-lto\-objects 
386 \&\-ffast\-math \-ffinite\-math\-only \-ffloat\-store \-fexcess\-precision=\fR\fIstyle\fR 
387 \&\fB\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffunction\-sections 
388 \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity 
389 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
390 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
391 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg 
392 \&\-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \-fipa\-reference 
393 \&\-fira\-algorithm=\fR\fIalgorithm\fR 
394 \&\fB\-fira\-region=\fR\fIregion\fR 
395 \&\fB\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots 
396 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
397 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
398 \&\-floop\-block \-floop\-flatten \-floop\-interchange \-floop\-strip\-mine 
399 \&\-floop\-parallelize\-all \-flto \-flto\-compression\-level 
400 \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-report \-fmerge\-all\-constants 
401 \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves 
402 \&\-fmove\-loop\-invariants fmudflap \-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg 
403 \&\-fno\-default\-inline 
404 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
405 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
406 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
407 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
408 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
409 \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning 
410 \&\-fprefetch\-loop\-arrays 
411 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
412 \&\-fprofile\-generate=\fR\fIpath\fR 
413 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
414 \&\-freciprocal\-math \-free \-fregmove \-frename\-registers \-freorder\-blocks 
415 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
416 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
417 \&\-frounding\-math \-fsched2\-use\-superblocks \-fsched\-pressure 
418 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
419 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
420 \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic 
421 \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic 
422 \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic 
423 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors 
424 \&\-fselective\-scheduling \-fselective\-scheduling2 
425 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
426 \&\-fshrink\-wrap \-fsignaling\-nans \-fsingle\-precision\-constant 
427 \&\-fsplit\-ivs\-in\-unroller \-fsplit\-wide\-types \-fstack\-protector 
428 \&\-fstack\-protector\-all \-fstrict\-aliasing \-fstrict\-overflow 
429 \&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
430 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
431 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
432 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
433 \&\-ftree\-loop\-if\-convert\-stores \-ftree\-loop\-im 
434 \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns 
435 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
436 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-pta \-ftree\-reassoc 
437 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion \-ftree\-tail\-merge 
438 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
439 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
440 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
441 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
442 \&\-fwhole\-program \-fwpa \-fuse\-linker\-plugin 
443 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
444 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os \-Ofast\fR
445 .IP "\fIPreprocessor Options\fR" 4
446 .IX Item "Preprocessor Options"
447 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
448 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
449 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
450 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
451 \&\-idirafter\fR \fIdir\fR 
452 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
453 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
454 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
455 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
456 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
457 \&\-P  \-fdebug\-cpp \-ftrack\-macro\-expansion \-fworking\-directory 
458 \&\-remap \-trigraphs  \-undef  \-U\fR\fImacro\fR  
459 \&\fB\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR
460 .IP "\fIAssembler Option\fR" 4
461 .IX Item "Assembler Option"
462 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
463 .IP "\fILinker Options\fR" 4
464 .IX Item "Linker Options"
465 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
466 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
467 \&\-s  \-static  \-static\-libgcc  \-static\-libstdc++ \-shared  
468 \&\-shared\-libgcc  \-symbolic 
469 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
470 \&\fB\-u\fR \fIsymbol\fR
471 .IP "\fIDirectory Options\fR" 4
472 .IX Item "Directory Options"
473 \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-iplugindir=\fR\fIdir\fR 
474 \&\fB\-iquote\fR\fIdir\fR \fB\-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR \fB\-I\- 
475 \&\-\-sysroot=\fR\fIdir\fR
476 .IP "\fIMachine Dependent Options\fR" 4
477 .IX Item "Machine Dependent Options"
478 \&\fIAdapteva Epiphany Options\fR
479 \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs 
480 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf 
481 \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR 
482 \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 
483 \&\-mfp\-mode=\fR\fImode\fR \fB\-mvect\-double \-max\-vect\-align=\fR\fInum\fR 
484 \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR
485 .Sp
486 \&\fI\s-1ARM\s0 Options\fR
487 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
488 \&\-mabi=\fR\fIname\fR 
489 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
490 \&\-mapcs\-float  \-mno\-apcs\-float 
491 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
492 \&\-msched\-prolog  \-mno\-sched\-prolog 
493 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
494 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-mfpe 
495 \&\-mfp16\-format=\fR\fIname\fR
496 \&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
497 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
498 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
499 \&\fB\-mabort\-on\-noreturn 
500 \&\-mlong\-calls  \-mno\-long\-calls 
501 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
502 \&\-mpic\-register=\fR\fIreg\fR 
503 \&\fB\-mnop\-fun\-dllimport 
504 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
505 \&\-mpoke\-function\-name 
506 \&\-mthumb  \-marm 
507 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
508 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
509 \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR 
510 \&\fB\-mword\-relocations 
511 \&\-mfix\-cortex\-m3\-ldrd 
512 \&\-munaligned\-access\fR
513 .Sp
514 \&\fI\s-1AVR\s0 Options\fR
515 \&\fB\-mmcu=\fR\fImcu\fR \fB\-maccumulate\-args \-mbranch\-cost=\fR\fIcost\fR 
516 \&\fB\-mcall\-prologues \-mint8 \-mno\-interrupts \-mrelax \-mshort\-calls 
517 \&\-mstrict\-X \-mtiny\-stack\fR
518 .Sp
519 \&\fIBlackfin Options\fR
520 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
521 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
522 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
523 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
524 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
525 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
526 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
527 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
528 \&\-micplb\fR
529 .Sp
530 \&\fIC6X Options\fR
531 \&\fB\-mbig\-endian  \-mlittle\-endian \-march=\fR\fIcpu\fR 
532 \&\fB\-msim \-msdata=\fR\fIsdata-type\fR
533 .Sp
534 \&\fI\s-1CRIS\s0 Options\fR
535 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
536 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
537 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
538 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
539 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
540 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
541 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
542 .Sp
543 \&\fI\s-1CR16\s0 Options\fR
544 \&\fB\-mmac 
545 \&\-mcr16cplus \-mcr16c 
546 \&\-msim \-mint32 \-mbit\-ops
547 \&\-mdata\-model=\fR\fImodel\fR
548 .Sp
549 \&\fIDarwin Options\fR
550 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
551 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
552 \&\-client_name  \-compatibility_version  \-current_version 
553 \&\-dead_strip 
554 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
555 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
556 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
557 \&\-force_flat_namespace  \-headerpad_max_install_names 
558 \&\-iframework 
559 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
560 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
561 \&\-noall_load   \-no_dead_strip_inits_and_terms 
562 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
563 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
564 \&\-private_bundle  \-read_only_relocs  \-sectalign 
565 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
566 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
567 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
568 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
569 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
570 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
571 \&\-twolevel_namespace  \-umbrella  \-undefined 
572 \&\-unexported_symbols_list  \-weak_reference_mismatches 
573 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
574 \&\fB\-mkernel \-mone\-byte\-bool\fR
575 .Sp
576 \&\fI\s-1DEC\s0 Alpha Options\fR
577 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
578 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
579 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
580 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
581 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
582 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
583 \&\-mfloat\-vax  \-mfloat\-ieee 
584 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
585 \&\-msmall\-text  \-mlarge\-text 
586 \&\-mmemory\-latency=\fR\fItime\fR
587 .Sp
588 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
589 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64\fR
590 .Sp
591 \&\fI\s-1FR30\s0 Options\fR
592 \&\fB\-msmall\-model \-mno\-lsim\fR
593 .Sp
594 \&\fI\s-1FRV\s0 Options\fR
595 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
596 \&\-mhard\-float  \-msoft\-float 
597 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
598 \&\-mdouble  \-mno\-double 
599 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
600 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
601 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
602 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
603 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
604 \&\-moptimize\-membar \-mno\-optimize\-membar 
605 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
606 \&\-mvliw\-branch  \-mno\-vliw\-branch 
607 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
608 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
609 \&\-mTLS \-mtls 
610 \&\-mcpu=\fR\fIcpu\fR
611 .Sp
612 \&\fIGNU/Linux Options\fR
613 \&\fB\-mglibc \-muclibc \-mbionic \-mandroid 
614 \&\-tno\-android\-cc \-tno\-android\-ld\fR
615 .Sp
616 \&\fIH8/300 Options\fR
617 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
618 .Sp
619 \&\fI\s-1HPPA\s0 Options\fR
620 \&\fB\-march=\fR\fIarchitecture-type\fR 
621 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
622 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
623 \&\-mfixed\-range=\fR\fIregister-range\fR 
624 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
625 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
626 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
627 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
628 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
629 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
630 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
631 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
632 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
633 .Sp
634 \&\fIi386 and x86\-64 Options\fR
635 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
636 \&\fB\-mfpmath=\fR\fIunit\fR 
637 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
638 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
639 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
640 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
641 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
642 \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 
643 \&\-mrecip \-mrecip=\fR\fIopt\fR 
644 \&\fB\-mvzeroupper \-mprefer\-avx128 
645 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
646 \&\-mavx2 \-maes \-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma 
647 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \-mlzcnt 
648 \&\-mbmi2 \-mlwp \-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
649 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
650 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
651 \&\-m96bit\-long\-double  \-mregparm=\fR\fInum\fR  \fB\-msseregparm 
652 \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem 
653 \&\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
654 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
655 \&\-mcmodel=\fR\fIcode-model\fR \fB\-mabi=\fR\fIname\fR 
656 \&\fB\-m32 \-m64 \-mx32 \-mlarge\-data\-threshold=\fR\fInum\fR 
657 \&\fB\-msse2avx \-mfentry \-m8bit\-idiv 
658 \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store\fR
659 .Sp
660 \&\fIi386 and x86\-64 Windows Options\fR
661 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll 
662 \&\-mnop\-fun\-dllimport \-mthread 
663 \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR
664 .Sp
665 \&\fI\s-1IA\-64\s0 Options\fR
666 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
667 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata \-mno\-sdata 
668 \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
669 \&\-minline\-float\-divide\-min\-latency 
670 \&\-minline\-float\-divide\-max\-throughput 
671 \&\-mno\-inline\-float\-divide 
672 \&\-minline\-int\-divide\-min\-latency 
673 \&\-minline\-int\-divide\-max\-throughput  
674 \&\-mno\-inline\-int\-divide 
675 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
676 \&\-mno\-inline\-sqrt 
677 \&\-mdwarf2\-asm \-mearly\-stop\-bits 
678 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
679 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-milp32 \-mlp64 
680 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec 
681 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
682 \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc 
683 \&\-msched\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns 
684 \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path 
685 \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost 
686 \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
687 .Sp
688 \&\fI\s-1IA\-64/VMS\s0 Options\fR
689 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64\fR
690 .Sp
691 \&\fI\s-1LM32\s0 Options\fR
692 \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled 
693 \&\-msign\-extend\-enabled \-muser\-enabled\fR
694 .Sp
695 \&\fIM32R/D Options\fR
696 \&\fB\-m32r2 \-m32rx \-m32r 
697 \&\-mdebug 
698 \&\-malign\-loops \-mno\-align\-loops 
699 \&\-missue\-rate=\fR\fInumber\fR 
700 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
701 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
702 \&\fB\-msdata=\fR\fIsdata-type\fR 
703 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
704 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
705 \&\fB\-G\fR \fInum\fR
706 .Sp
707 \&\fIM32C Options\fR
708 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
709 .Sp
710 \&\fIM680x0 Options\fR
711 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
712 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
713 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
714 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
715 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
716 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
717 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
718 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
719 \&\-mxgot \-mno\-xgot\fR
720 .Sp
721 \&\fIMCore Options\fR
722 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
723 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
724 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
725 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
726 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
727 .Sp
728 \&\fIMeP Options\fR
729 \&\fB\-mabsdiff \-mall\-opts \-maverage \-mbased=\fR\fIn\fR \fB\-mbitops 
730 \&\-mc=\fR\fIn\fR \fB\-mclip \-mconfig=\fR\fIname\fR \fB\-mcop \-mcop32 \-mcop64 \-mivc2 
731 \&\-mdc \-mdiv \-meb \-mel \-mio\-volatile \-ml \-mleadz \-mm \-mminmax 
732 \&\-mmult \-mno\-opts \-mrepeat \-ms \-msatur \-msdram \-msim \-msimnovec \-mtf 
733 \&\-mtiny=\fR\fIn\fR
734 .Sp
735 \&\fIMicroBlaze Options\fR
736 \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR 
737 \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift 
738 \&\-mxl\-pattern\-compare \-mxl\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss 
739 \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt 
740 \&\-mxl\-mode\-\fR\fIapp-model\fR
741 .Sp
742 \&\fI\s-1MIPS\s0 Options\fR
743 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
744 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
745 \&\-mips64  \-mips64r2 
746 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
747 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
748 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
749 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
750 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
751 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
752 \&\-mfpu=\fR\fIfpu-type\fR 
753 \&\fB\-msmartmips  \-mno\-smartmips 
754 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
755 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
756 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
757 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
758 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
759 \&\-membedded\-data  \-mno\-embedded\-data 
760 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
761 \&\-mcode\-readable=\fR\fIsetting\fR 
762 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
763 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
764 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
765 \&\-mdivide\-traps  \-mdivide\-breaks 
766 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
767 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
768 \&\-mfix\-24k \-mno\-fix\-24k 
769 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
770 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
771 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
772 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
773 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
774 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
775 \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci 
776 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address\fR
777 .Sp
778 \&\fI\s-1MMIX\s0 Options\fR
779 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
780 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
781 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
782 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
783 .Sp
784 \&\fI\s-1MN10300\s0 Options\fR
785 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
786 \&\-mno\-am33 \-mam33 \-mam33\-2 \-mam34 
787 \&\-mtune=\fR\fIcpu-type\fR 
788 \&\fB\-mreturn\-pointer\-on\-d0 
789 \&\-mno\-crt0  \-mrelax \-mliw \-msetlb\fR
790 .Sp
791 \&\fI\s-1PDP\-11\s0 Options\fR
792 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
793 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
794 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
795 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
796 \&\-mbranch\-expensive  \-mbranch\-cheap 
797 \&\-munix\-asm  \-mdec\-asm\fR
798 .Sp
799 \&\fIpicoChip Options\fR
800 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR 
801 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
802 .Sp
803 \&\fIPowerPC Options\fR
804 See \s-1RS/6000\s0 and PowerPC Options.
805 .Sp
806 \&\fI\s-1RL78\s0 Options\fR
807 \&\fB\-msim \-mmul=none \-mmul=g13 \-mmul=rl78\fR
808 .Sp
809 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
810 \&\fB\-mcpu=\fR\fIcpu-type\fR 
811 \&\fB\-mtune=\fR\fIcpu-type\fR 
812 \&\fB\-mcmodel=\fR\fIcode-model\fR 
813 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
814 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
815 \&\-maltivec  \-mno\-altivec 
816 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
817 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
818 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb \-mpopcntd \-mno\-popcntd 
819 \&\-mfprnd  \-mno\-fprnd 
820 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
821 \&\-mnew\-mnemonics  \-mold\-mnemonics 
822 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
823 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
824 \&\-malign\-power  \-malign\-natural 
825 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
826 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
827 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
828 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
829 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
830 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
831 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
832 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
833 \&\-mdynamic\-no\-pic  \-maltivec \-mswdiv  \-msingle\-pic\-base 
834 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
835 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
836 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
837 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
838 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
839 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
840 \&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
841 \&\fB\-misel \-mno\-isel 
842 \&\-misel=yes  \-misel=no 
843 \&\-mspe \-mno\-spe 
844 \&\-mspe=yes  \-mspe=no 
845 \&\-mpaired 
846 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
847 \&\-mvrsave \-mno\-vrsave 
848 \&\-mmulhw \-mno\-mulhw 
849 \&\-mdlmzb \-mno\-dlmzb 
850 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
851 \&\-mprototype  \-mno\-prototype 
852 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
853 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread 
854 \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision 
855 \&\-mno\-recip\-precision 
856 \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz 
857 \&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions 
858 \&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect\fR
859 .Sp
860 \&\fI\s-1RX\s0 Options\fR
861 \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
862 \&\-mcpu=
863 \&\-mbig\-endian\-data \-mlittle\-endian\-data 
864 \&\-msmall\-data 
865 \&\-msim  \-mno\-sim
866 \&\-mas100\-syntax \-mno\-as100\-syntax
867 \&\-mrelax
868 \&\-mmax\-constant\-size=
869 \&\-mint\-register=
870 \&\-mpid
871 \&\-msave\-acc\-in\-interrupts\fR
872 .Sp
873 \&\fIS/390 and zSeries Options\fR
874 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
875 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
876 \&\-mlong\-double\-64 \-mlong\-double\-128 
877 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
878 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
879 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
880 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
881 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
882 .Sp
883 \&\fIScore Options\fR
884 \&\fB\-meb \-mel 
885 \&\-mnhwloop 
886 \&\-muls 
887 \&\-mmac 
888 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
889 .Sp
890 \&\fI\s-1SH\s0 Options\fR
891 \&\fB\-m1  \-m2  \-m2e 
892 \&\-m2a\-nofpu \-m2a\-single\-only \-m2a\-single \-m2a 
893 \&\-m3  \-m3e 
894 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
895 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
896 \&\-m5\-64media  \-m5\-64media\-nofpu 
897 \&\-m5\-32media  \-m5\-32media\-nofpu 
898 \&\-m5\-compact  \-m5\-compact\-nofpu 
899 \&\-mb  \-ml  \-mdalign  \-mrelax 
900 \&\-mbigtable \-mfmovd \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
901 \&\-mieee \-mno\-ieee \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct 
902 \&\-mspace \-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
903 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
904 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
905 \&\-maccumulate\-outgoing\-args \-minvalid\-symbols \-msoft\-atomic 
906 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcbranchdi \-mcmpeqdi \-mfused\-madd \-mpretend\-cmove\fR
907 .Sp
908 \&\fISolaris 2 Options\fR
909 \&\fB\-mimpure\-text  \-mno\-impure\-text 
910 \&\-pthreads \-pthread\fR
911 .Sp
912 \&\fI\s-1SPARC\s0 Options\fR
913 \&\fB\-mcpu=\fR\fIcpu-type\fR 
914 \&\fB\-mtune=\fR\fIcpu-type\fR 
915 \&\fB\-mcmodel=\fR\fIcode-model\fR 
916 \&\fB\-mmemory\-model=\fR\fImem-model\fR 
917 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
918 \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
919 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
920 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
921 \&\-mstack\-bias  \-mno\-stack\-bias 
922 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
923 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
924 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
925 \&\-mfmaf  \-mno\-fmaf  \-mpopc  \-mno\-popc 
926 \&\-mfix\-at697f\fR
927 .Sp
928 \&\fI\s-1SPU\s0 Options\fR
929 \&\fB\-mwarn\-reloc \-merror\-reloc 
930 \&\-msafe\-dma \-munsafe\-dma 
931 \&\-mbranch\-hints 
932 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
933 \&\-mfixed\-range=\fR\fIregister-range\fR 
934 \&\fB\-mea32 \-mea64 
935 \&\-maddress\-space\-conversion \-mno\-address\-space\-conversion 
936 \&\-mcache\-size=\fR\fIcache-size\fR 
937 \&\fB\-matomic\-updates \-mno\-atomic\-updates\fR
938 .Sp
939 \&\fISystem V Options\fR
940 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
941 .Sp
942 \&\fITILE-Gx Options\fR
943 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32 \-m64\fR
944 .Sp
945 \&\fITILEPro Options\fR
946 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32\fR
947 .Sp
948 \&\fIV850 Options\fR
949 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
950 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
951 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
952 \&\fB\-mapp\-regs  \-mno\-app\-regs 
953 \&\-mdisable\-callt  \-mno\-disable\-callt 
954 \&\-mv850e2v3 
955 \&\-mv850e2 
956 \&\-mv850e1 \-mv850es 
957 \&\-mv850e 
958 \&\-mv850  \-mbig\-switch\fR
959 .Sp
960 \&\fI\s-1VAX\s0 Options\fR
961 \&\fB\-mg  \-mgnu  \-munix\fR
962 .Sp
963 \&\fIVxWorks Options\fR
964 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
965 \&\-Xbind\-lazy  \-Xbind\-now\fR
966 .Sp
967 \&\fIx86\-64 Options\fR
968 See i386 and x86\-64 Options.
969 .Sp
970 \&\fIXstormy16 Options\fR
971 \&\fB\-msim\fR
972 .Sp
973 \&\fIXtensa Options\fR
974 \&\fB\-mconst16 \-mno\-const16 
975 \&\-mfused\-madd  \-mno\-fused\-madd 
976 \&\-mforce\-no\-pic 
977 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
978 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
979 \&\-mtarget\-align  \-mno\-target\-align 
980 \&\-mlongcalls  \-mno\-longcalls\fR
981 .Sp
982 \&\fIzSeries Options\fR
983 See S/390 and zSeries Options.
984 .IP "\fICode Generation Options\fR" 4
985 .IX Item "Code Generation Options"
986 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
987 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
988 \&\-fnon\-call\-exceptions  \-funwind\-tables 
989 \&\-fasynchronous\-unwind\-tables 
990 \&\-finhibit\-size\-directive  \-finstrument\-functions 
991 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
992 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
993 \&\-fno\-common  \-fno\-ident 
994 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
995 \&\-fno\-jump\-tables 
996 \&\-frecord\-gcc\-switches 
997 \&\-freg\-struct\-return  \-fshort\-enums 
998 \&\-fshort\-double  \-fshort\-wchar 
999 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
1000 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
1001 \&\fB\-fno\-stack\-limit \-fsplit\-stack 
1002 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
1003 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
1004 \&\-fvisibility \-fstrict\-volatile\-bitfields\fR
1005 .Sh "Options Controlling the Kind of Output"
1006 .IX Subsection "Options Controlling the Kind of Output"
1007 Compilation can involve up to four stages: preprocessing, compilation
1008 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
1009 preprocessing and compiling several files either into several
1010 assembler input files, or into one assembler input file; then each
1011 assembler input file produces an object file, and linking combines all
1012 the object files (those newly compiled, and those specified as input)
1013 into an executable file.
1014 .PP
1015 For any given input file, the file name suffix determines what kind of
1016 compilation is done:
1017 .IP "\fIfile\fR\fB.c\fR" 4
1018 .IX Item "file.c"
1019 C source code that must be preprocessed.
1020 .IP "\fIfile\fR\fB.i\fR" 4
1021 .IX Item "file.i"
1022 C source code that should not be preprocessed.
1023 .IP "\fIfile\fR\fB.ii\fR" 4
1024 .IX Item "file.ii"
1025 \&\*(C+ source code that should not be preprocessed.
1026 .IP "\fIfile\fR\fB.m\fR" 4
1027 .IX Item "file.m"
1028 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
1029 library to make an Objective-C program work.
1030 .IP "\fIfile\fR\fB.mi\fR" 4
1031 .IX Item "file.mi"
1032 Objective-C source code that should not be preprocessed.
1033 .IP "\fIfile\fR\\fR" 4
1034 .IX Item ""
1035 .PD 0
1036 .IP "\fIfile\fR\fB.M\fR" 4
1037 .IX Item "file.M"
1038 .PD
1039 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
1040 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
1041 to a literal capital M.
1042 .IP "\fIfile\fR\fB.mii\fR" 4
1043 .IX Item "file.mii"
1044 Objective\-\*(C+ source code that should not be preprocessed.
1045 .IP "\fIfile\fR\fB.h\fR" 4
1046 .IX Item "file.h"
1047 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
1048 precompiled header (default), or C, \*(C+ header file to be turned into an
1049 Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
1050 .IP "\fIfile\fR\\fR" 4
1051 .IX Item ""
1052 .PD 0
1053 .IP "\fIfile\fR\fB.cp\fR" 4
1054 .IX Item "file.cp"
1055 .IP "\fIfile\fR\fB.cxx\fR" 4
1056 .IX Item "file.cxx"
1057 .IP "\fIfile\fR\fB.cpp\fR" 4
1058 .IX Item "file.cpp"
1059 .IP "\fIfile\fR\fB.CPP\fR" 4
1060 .IX Item "file.CPP"
1061 .IP "\fIfile\fR\fB.c++\fR" 4
1062 .IX Item "file.c++"
1063 .IP "\fIfile\fR\fB.C\fR" 4
1064 .IX Item "file.C"
1065 .PD
1066 \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
1067 the last two letters must both be literally \fBx\fR.  Likewise,
1068 \&\fB.C\fR refers to a literal capital C.
1069 .IP "\fIfile\fR\\fR" 4
1070 .IX Item ""
1071 .PD 0
1072 .IP "\fIfile\fR\fB.M\fR" 4
1073 .IX Item "file.M"
1074 .PD
1075 Objective\-\*(C+ source code that must be preprocessed.
1076 .IP "\fIfile\fR\fB.mii\fR" 4
1077 .IX Item "file.mii"
1078 Objective\-\*(C+ source code that should not be preprocessed.
1079 .IP "\fIfile\fR\fB.hh\fR" 4
1080 .IX Item "file.hh"
1081 .PD 0
1082 .IP "\fIfile\fR\fB.H\fR" 4
1083 .IX Item "file.H"
1084 .IP "\fIfile\fR\fB.hp\fR" 4
1085 .IX Item "file.hp"
1086 .IP "\fIfile\fR\fB.hxx\fR" 4
1087 .IX Item "file.hxx"
1088 .IP "\fIfile\fR\fB.hpp\fR" 4
1089 .IX Item "file.hpp"
1090 .IP "\fIfile\fR\fB.HPP\fR" 4
1091 .IX Item "file.HPP"
1092 .IP "\fIfile\fR\fB.h++\fR" 4
1093 .IX Item "file.h++"
1094 .IP "\fIfile\fR\fB.tcc\fR" 4
1095 .IX Item "file.tcc"
1096 .PD
1097 \&\*(C+ header file to be turned into a precompiled header or Ada spec.
1098 .IP "\fIfile\fR\fB.f\fR" 4
1099 .IX Item "file.f"
1100 .PD 0
1101 .IP "\fIfile\fR\fB.for\fR" 4
1102 .IX Item "file.for"
1103 .IP "\fIfile\fR\fB.ftn\fR" 4
1104 .IX Item "file.ftn"
1105 .PD
1106 Fixed form Fortran source code that should not be preprocessed.
1107 .IP "\fIfile\fR\fB.F\fR" 4
1108 .IX Item "file.F"
1109 .PD 0
1110 .IP "\fIfile\fR\fB.FOR\fR" 4
1111 .IX Item "file.FOR"
1112 .IP "\fIfile\fR\fB.fpp\fR" 4
1113 .IX Item "file.fpp"
1114 .IP "\fIfile\fR\fB.FPP\fR" 4
1115 .IX Item "file.FPP"
1116 .IP "\fIfile\fR\fB.FTN\fR" 4
1117 .IX Item "file.FTN"
1118 .PD
1119 Fixed form Fortran source code that must be preprocessed (with the traditional
1120 preprocessor).
1121 .IP "\fIfile\fR\fB.f90\fR" 4
1122 .IX Item "file.f90"
1123 .PD 0
1124 .IP "\fIfile\fR\fB.f95\fR" 4
1125 .IX Item "file.f95"
1126 .IP "\fIfile\fR\fB.f03\fR" 4
1127 .IX Item "file.f03"
1128 .IP "\fIfile\fR\fB.f08\fR" 4
1129 .IX Item "file.f08"
1130 .PD
1131 Free form Fortran source code that should not be preprocessed.
1132 .IP "\fIfile\fR\fB.F90\fR" 4
1133 .IX Item "file.F90"
1134 .PD 0
1135 .IP "\fIfile\fR\fB.F95\fR" 4
1136 .IX Item "file.F95"
1137 .IP "\fIfile\fR\fB.F03\fR" 4
1138 .IX Item "file.F03"
1139 .IP "\fIfile\fR\fB.F08\fR" 4
1140 .IX Item "file.F08"
1141 .PD
1142 Free form Fortran source code that must be preprocessed (with the
1143 traditional preprocessor).
1144 .IP "\fIfile\fR\fB.go\fR" 4
1145 .IX Item "file.go"
1146 Go source code.
1147 .IP "\fIfile\fR\\fR" 4
1148 .IX Item ""
1149 Ada source code file that contains a library unit declaration (a
1150 declaration of a package, subprogram, or generic, or a generic
1151 instantiation), or a library unit renaming declaration (a package,
1152 generic, or subprogram renaming declaration).  Such files are also
1153 called \fIspecs\fR.
1154 .IP "\fIfile\fR\fB.adb\fR" 4
1155 .IX Item "file.adb"
1156 Ada source code file containing a library unit body (a subprogram or
1157 package body).  Such files are also called \fIbodies\fR.
1158 .IP "\fIfile\fR\fB.s\fR" 4
1159 .IX Item "file.s"
1160 Assembler code.
1161 .IP "\fIfile\fR\fB.S\fR" 4
1162 .IX Item "file.S"
1163 .PD 0
1164 .IP "\fIfile\fR\\fR" 4
1165 .IX Item ""
1166 .PD
1167 Assembler code that must be preprocessed.
1168 .IP "\fIother\fR" 4
1169 .IX Item "other"
1170 An object file to be fed straight into linking.
1171 Any file name with no recognized suffix is treated this way.
1172 .PP
1173 You can specify the input language explicitly with the \fB\-x\fR option:
1174 .IP "\fB\-x\fR \fIlanguage\fR" 4
1175 .IX Item "-x language"
1176 Specify explicitly the \fIlanguage\fR for the following input files
1177 (rather than letting the compiler choose a default based on the file
1178 name suffix).  This option applies to all following input files until
1179 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1180 .Sp
1181 .Vb 9
1182 \&        c  c\-header  cpp\-output
1183 \&        c++  c++\-header  c++\-cpp\-output
1184 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1185 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1186 \&        assembler  assembler\-with\-cpp
1187 \&        ada
1188 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1189 \&        go
1190 \&        java
1191 .Ve
1192 .IP "\fB\-x none\fR" 4
1193 .IX Item "-x none"
1194 Turn off any specification of a language, so that subsequent files are
1195 handled according to their file name suffixes (as they are if \fB\-x\fR
1196 has not been used at all).
1197 .IP "\fB\-pass\-exit\-codes\fR" 4
1198 .IX Item "-pass-exit-codes"
1199 Normally the \fBgcc\fR program will exit with the code of 1 if any
1200 phase of the compiler returns a non-success return code.  If you specify
1201 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1202 numerically highest error produced by any phase that returned an error
1203 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1204 compiler error is encountered.
1205 .PP
1206 If you only want some of the stages of compilation, you can use
1207 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1208 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1209 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1210 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1211 .IP "\fB\-c\fR" 4
1212 .IX Item "-c"
1213 Compile or assemble the source files, but do not link.  The linking
1214 stage simply is not done.  The ultimate output is in the form of an
1215 object file for each source file.
1216 .Sp
1217 By default, the object file name for a source file is made by replacing
1218 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1219 .Sp
1220 Unrecognized input files, not requiring compilation or assembly, are
1221 ignored.
1222 .IP "\fB\-S\fR" 4
1223 .IX Item "-S"
1224 Stop after the stage of compilation proper; do not assemble.  The output
1225 is in the form of an assembler code file for each non-assembler input
1226 file specified.
1227 .Sp
1228 By default, the assembler file name for a source file is made by
1229 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1230 .Sp
1231 Input files that don't require compilation are ignored.
1232 .IP "\fB\-E\fR" 4
1233 .IX Item "-E"
1234 Stop after the preprocessing stage; do not run the compiler proper.  The
1235 output is in the form of preprocessed source code, which is sent to the
1236 standard output.
1237 .Sp
1238 Input files that don't require preprocessing are ignored.
1239 .IP "\fB\-o\fR \fIfile\fR" 4
1240 .IX Item "-o file"
1241 Place output in file \fIfile\fR.  This applies regardless to whatever
1242 sort of output is being produced, whether it be an executable file,
1243 an object file, an assembler file or preprocessed C code.
1244 .Sp
1245 If \fB\-o\fR is not specified, the default is to put an executable
1246 file in \fIa.out\fR, the object file for
1247 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1248 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1249 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1250 standard output.
1251 .IP "\fB\-v\fR" 4
1252 .IX Item "-v"
1253 Print (on standard error output) the commands executed to run the stages
1254 of compilation.  Also print the version number of the compiler driver
1255 program and of the preprocessor and the compiler proper.
1256 .IP "\fB\-###\fR" 4
1257 .IX Item "-###"
1258 Like \fB\-v\fR except the commands are not executed and arguments
1259 are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
1260 This is useful for shell scripts to capture the driver-generated command lines.
1261 .IP "\fB\-pipe\fR" 4
1262 .IX Item "-pipe"
1263 Use pipes rather than temporary files for communication between the
1264 various stages of compilation.  This fails to work on some systems where
1265 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1266 no trouble.
1267 .IP "\fB\-\-help\fR" 4
1268 .IX Item "--help"
1269 Print (on the standard output) a description of the command-line options
1270 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1271 then \fB\-\-help\fR will also be passed on to the various processes
1272 invoked by \fBgcc\fR, so that they can display the command-line options
1273 they accept.  If the \fB\-Wextra\fR option has also been specified
1274 (prior to the \fB\-\-help\fR option), then command-line options that
1275 have no documentation associated with them will also be displayed.
1276 .IP "\fB\-\-target\-help\fR" 4
1277 .IX Item "--target-help"
1278 Print (on the standard output) a description of target-specific command-line
1279 options for each tool.  For some targets extra target-specific
1280 information may also be printed.
1281 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1282 .IX Item "--help={class|[^]qualifier}[,...]"
1283 Print (on the standard output) a description of the command-line
1284 options understood by the compiler that fit into all specified classes
1285 and qualifiers.  These are the supported classes:
1286 .RS 4
1287 .IP "\fBoptimizers\fR" 4
1288 .IX Item "optimizers"
1289 This will display all of the optimization options supported by the
1290 compiler.
1291 .IP "\fBwarnings\fR" 4
1292 .IX Item "warnings"
1293 This will display all of the options controlling warning messages
1294 produced by the compiler.
1295 .IP "\fBtarget\fR" 4
1296 .IX Item "target"
1297 This will display target-specific options.  Unlike the
1298 \&\fB\-\-target\-help\fR option however, target-specific options of the
1299 linker and assembler will not be displayed.  This is because those
1300 tools do not currently support the extended \fB\-\-help=\fR syntax.
1301 .IP "\fBparams\fR" 4
1302 .IX Item "params"
1303 This will display the values recognized by the \fB\-\-param\fR
1304 option.
1305 .IP "\fIlanguage\fR" 4
1306 .IX Item "language"
1307 This will display the options supported for \fIlanguage\fR, where
1308 \&\fIlanguage\fR is the name of one of the languages supported in this
1309 version of \s-1GCC\s0.
1310 .IP "\fBcommon\fR" 4
1311 .IX Item "common"
1312 This will display the options that are common to all languages.
1313 .RE
1314 .RS 4
1315 .Sp
1316 These are the supported qualifiers:
1317 .IP "\fBundocumented\fR" 4
1318 .IX Item "undocumented"
1319 Display only those options that are undocumented.
1320 .IP "\fBjoined\fR" 4
1321 .IX Item "joined"
1322 Display options taking an argument that appears after an equal
1323 sign in the same continuous piece of text, such as:
1324 \&\fB\-\-help=target\fR.
1325 .IP "\fBseparate\fR" 4
1326 .IX Item "separate"
1327 Display options taking an argument that appears as a separate word
1328 following the original option, such as: \fB\-o output-file\fR.
1329 .RE
1330 .RS 4
1331 .Sp
1332 Thus for example to display all the undocumented target-specific
1333 switches supported by the compiler the following can be used:
1334 .Sp
1335 .Vb 1
1336 \&        \-\-help=target,undocumented
1337 .Ve
1338 .Sp
1339 The sense of a qualifier can be inverted by prefixing it with the
1340 \&\fB^\fR character, so for example to display all binary warning
1341 options (i.e., ones that are either on or off and that do not take an
1342 argument) that have a description, use:
1343 .Sp
1344 .Vb 1
1345 \&        \-\-help=warnings,^joined,^undocumented
1346 .Ve
1347 .Sp
1348 The argument to \fB\-\-help=\fR should not consist solely of inverted
1349 qualifiers.
1350 .Sp
1351 Combining several classes is possible, although this usually
1352 restricts the output by so much that there is nothing to display.  One
1353 case where it does work however is when one of the classes is
1354 \&\fItarget\fR.  So for example to display all the target-specific
1355 optimization options the following can be used:
1356 .Sp
1357 .Vb 1
1358 \&        \-\-help=target,optimizers
1359 .Ve
1360 .Sp
1361 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1362 successive use will display its requested class of options, skipping
1363 those that have already been displayed.
1364 .Sp
1365 If the \fB\-Q\fR option appears on the command line before the
1366 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1367 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1368 options, an indication is given as to whether the option is enabled,
1369 disabled or set to a specific value (assuming that the compiler
1370 knows this at the point where the \fB\-\-help=\fR option is used).
1371 .Sp
1372 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1373 .Sp
1374 .Vb 5
1375 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1376 \&          The following options are target specific:
1377 \&          \-mabi=                                2
1378 \&          \-mabort\-on\-noreturn                   [disabled]
1379 \&          \-mapcs                                [disabled]
1380 .Ve
1381 .Sp
1382 The output is sensitive to the effects of previous command-line
1383 options, so for example it is possible to find out which optimizations
1384 are enabled at \fB\-O2\fR by using:
1385 .Sp
1386 .Vb 1
1387 \&        \-Q \-O2 \-\-help=optimizers
1388 .Ve
1389 .Sp
1390 Alternatively you can discover which binary optimizations are enabled
1391 by \fB\-O3\fR by using:
1392 .Sp
1393 .Vb 3
1394 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1395 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1396 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1397 .Ve
1398 .RE
1399 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1400 .IX Item "-no-canonical-prefixes"
1401 Do not expand any symbolic links, resolve references to \fB/../\fR
1402 or \fB/./\fR, or make the path absolute when generating a relative
1403 prefix.
1404 .IP "\fB\-\-version\fR" 4
1405 .IX Item "--version"
1406 Display the version number and copyrights of the invoked \s-1GCC\s0.
1407 .IP "\fB\-wrapper\fR" 4
1408 .IX Item "-wrapper"
1409 Invoke all subcommands under a wrapper program.  The name of the
1410 wrapper program and its parameters are passed as a comma separated
1411 list.
1412 .Sp
1413 .Vb 1
1414 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1415 .Ve
1416 .Sp
1417 This will invoke all subprograms of \fBgcc\fR under
1418 \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR will be
1419 \&\fBgdb \-\-args cc1 ...\fR.
1420 .IP "\fB\-fplugin=\fR\fIname\fR\\fR" 4
1421 .IX Item ""
1422 Load the plugin code in file \fIname\, assumed to be a
1423 shared object to be dlopen'd by the compiler.  The base name of
1424 the shared object file is used to identify the plugin for the
1425 purposes of argument parsing (See
1426 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1427 Each plugin should define the callback functions specified in the
1428 Plugins \s-1API\s0.
1429 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1430 .IX Item "-fplugin-arg-name-key=value"
1431 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1432 for the plugin called \fIname\fR.
1433 .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
1434 .IX Item "-fdump-ada-spec[-slim]"
1435 For C and \*(C+ source and include files, generate corresponding Ada specs.
1436 .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
1437 .IX Item "-fdump-go-spec=file"
1438 For input files in any language, generate corresponding Go
1439 declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
1440 \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
1441 useful way to start writing a Go interface to code written in some
1442 other language.
1443 .IP "\fB@\fR\fIfile\fR" 4
1444 .IX Item "@file"
1445 Read command-line options from \fIfile\fR.  The options read are
1446 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1447 does not exist, or cannot be read, then the option will be treated
1448 literally, and not removed.
1449 .Sp
1450 Options in \fIfile\fR are separated by whitespace.  A whitespace
1451 character may be included in an option by surrounding the entire
1452 option in either single or double quotes.  Any character (including a
1453 backslash) may be included by prefixing the character to be included
1454 with a backslash.  The \fIfile\fR may itself contain additional
1455 @\fIfile\fR options; any such options will be processed recursively.
1456 .Sh "Compiling \*(C+ Programs"
1457 .IX Subsection "Compiling  Programs"
1458 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1459 \&\\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1460 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1461 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1462 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1463 files with these names and compiles them as \*(C+ programs even if you
1464 call the compiler the same way as for compiling C programs (usually
1465 with the name \fBgcc\fR).
1466 .PP
1467 However, the use of \fBgcc\fR does not add the \*(C+ library.
1468 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1469 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1470 files unless \fB\-x\fR is used, and automatically specifies linking
1471 against the \*(C+ library.  This program is also useful when
1472 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1473 compilations.  On many systems, \fBg++\fR is also installed with
1474 the name \fBc++\fR.
1475 .PP
1476 When you compile \*(C+ programs, you may specify many of the same
1477 command-line options that you use for compiling programs in any
1478 language; or command-line options meaningful for C and related
1479 languages; or options that are meaningful only for \*(C+ programs.
1480 .Sh "Options Controlling C Dialect"
1481 .IX Subsection "Options Controlling C Dialect"
1482 The following options control the dialect of C (or languages derived
1483 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1484 accepts:
1485 .IP "\fB\-ansi\fR" 4
1486 .IX Item "-ansi"
1487 In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
1488 equivalent to \fB\-std=c++98\fR.
1489 .Sp
1490 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1491 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1492 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1493 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1494 type of system you are using.  It also enables the undesirable and
1495 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1496 it disables recognition of \*(C+ style \fB//\fR comments as well as
1497 the \f(CW\*(C`inline\*(C'\fR keyword.
1498 .Sp
1499 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1500 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1501 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1502 course, but it is useful to put them in header files that might be included
1503 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1504 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1505 without \fB\-ansi\fR.
1506 .Sp
1507 The \fB\-ansi\fR option does not cause non-ISO programs to be
1508 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1509 addition to \fB\-ansi\fR.
1510 .Sp
1511 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1512 option is used.  Some header files may notice this macro and refrain
1513 from declaring certain functions or defining certain macros that the
1514 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1515 programs that might use these names for other things.
1516 .Sp
1517 Functions that would normally be built in but do not have semantics
1518 defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
1519 functions when \fB\-ansi\fR is used.
1520 .IP "\fB\-std=\fR" 4
1521 .IX Item "-std="
1522 Determine the language standard.   This option
1523 is currently only supported when compiling C or \*(C+.
1524 .Sp
1525 The compiler can accept several base standards, such as \fBc90\fR or
1526 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1527 \&\fBgnu90\fR or \fBgnu++98\fR.  By specifying a base standard, the
1528 compiler will accept all programs following that standard and those
1529 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1530 \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
1531 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1532 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1533 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1534 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1535 standard, all features the compiler support are enabled, even when
1536 those features change the meaning of the base standard and some
1537 strict-conforming programs may be rejected.  The particular standard
1538 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1539 extensions given that version of the standard. For example
1540 \&\fB\-std=gnu90 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1541 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1542 .Sp
1543 A value for this option must be provided; possible values are
1544 .RS 4
1545 .IP "\fBc90\fR" 4
1546 .IX Item "c90"
1547 .PD 0
1548 .IP "\fBc89\fR" 4
1549 .IX Item "c89"
1550 .IP "\fBiso9899:1990\fR" 4
1551 .IX Item "iso9899:1990"
1552 .PD
1553 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1554 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1555 .IP "\fBiso9899:199409\fR" 4
1556 .IX Item "iso9899:199409"
1557 \&\s-1ISO\s0 C90 as modified in amendment 1.
1558 .IP "\fBc99\fR" 4
1559 .IX Item "c99"
1560 .PD 0
1561 .IP "\fBc9x\fR" 4
1562 .IX Item "c9x"
1563 .IP "\fBiso9899:1999\fR" 4
1564 .IX Item "iso9899:1999"
1565 .IP "\fBiso9899:199x\fR" 4
1566 .IX Item "iso9899:199x"
1567 .PD
1568 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1569 <\fB\-4.7/c99status.html\fR> for more information.  The
1570 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1571 .IP "\fBc11\fR" 4
1572 .IX Item "c11"
1573 .PD 0
1574 .IP "\fBc1x\fR" 4
1575 .IX Item "c1x"
1576 .IP "\fBiso9899:2011\fR" 4
1577 .IX Item "iso9899:2011"
1578 .PD
1579 \&\s-1ISO\s0 C11, the 2011 revision of the \s-1ISO\s0 C standard.
1580 Support is incomplete and experimental.  The name \fBc1x\fR is
1581 deprecated.
1582 .IP "\fBgnu90\fR" 4
1583 .IX Item "gnu90"
1584 .PD 0
1585 .IP "\fBgnu89\fR" 4
1586 .IX Item "gnu89"
1587 .PD
1588 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1589 is the default for C code.
1590 .IP "\fBgnu99\fR" 4
1591 .IX Item "gnu99"
1592 .PD 0
1593 .IP "\fBgnu9x\fR" 4
1594 .IX Item "gnu9x"
1595 .PD
1596 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1597 this will become the default.  The name \fBgnu9x\fR is deprecated.
1598 .IP "\fBgnu11\fR" 4
1599 .IX Item "gnu11"
1600 .PD 0
1601 .IP "\fBgnu1x\fR" 4
1602 .IX Item "gnu1x"
1603 .PD
1604 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C11.  Support is incomplete and experimental.  The
1605 name \fBgnu1x\fR is deprecated.
1606 .IP "\fBc++98\fR" 4
1607 .IX Item "c++98"
1608 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1609 \&\*(C+ code.
1610 .IP "\fBgnu++98\fR" 4
1611 .IX Item "gnu++98"
1612 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1613 \&\*(C+ code.
1614 .IP "\fBc++11\fR" 4
1615 .IX Item "c++11"
1616 The 2011 \s-1ISO\s0 \*(C+ standard plus amendments.  Support for \*(C+11 is still
1617 experimental, and may change in incompatible ways in future releases.
1618 .IP "\fBgnu++11\fR" 4
1619 .IX Item "gnu++11"
1620 \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR. Support for \*(C+11 is still
1621 experimental, and may change in incompatible ways in future releases.
1622 .RE
1623 .RS 4
1624 .RE
1625 .IP "\fB\-fgnu89\-inline\fR" 4
1626 .IX Item "-fgnu89-inline"
1627 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1628 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1629   This option
1630 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1631 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1632 C99 mode.  Using this option is roughly equivalent to adding the
1633 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1634 .Sp
1635 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1636 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1637 specifies the default behavior).  This option was first supported in
1638 \&\s-1GCC\s0 4.3.  This option is not supported in \fB\-std=c90\fR or
1639 \&\fB\-std=gnu90\fR mode.
1640 .Sp
1641 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1642 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1643 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1644 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1645 .IX Item "-aux-info filename"
1646 Output to the given filename prototyped declarations for all functions
1647 declared and/or defined in a translation unit, including those in header
1648 files.  This option is silently ignored in any language other than C.
1649 .Sp
1650 Besides declarations, the file indicates, in comments, the origin of
1651 each declaration (source file and line), whether the declaration was
1652 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1653 \&\fBO\fR for old, respectively, in the first character after the line
1654 number and the colon), and whether it came from a declaration or a
1655 definition (\fBC\fR or \fBF\fR, respectively, in the following
1656 character).  In the case of function definitions, a K&R\-style list of
1657 arguments followed by their declarations is also provided, inside
1658 comments, after the declaration.
1659 .IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
1660 .IX Item "-fallow-parameterless-variadic-functions"
1661 Accept variadic functions without named parameters.
1662 .Sp
1663 Although it is possible to define such a function, this is not very
1664 useful as it is not possible to read the arguments.  This is only
1665 supported for C as this construct is allowed by \*(C+.
1666 .IP "\fB\-fno\-asm\fR" 4
1667 .IX Item "-fno-asm"
1668 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1669 keyword, so that code can use these words as identifiers.  You can use
1670 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1671 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1672 .Sp
1673 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1674 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1675 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1676 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1677 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1678 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1679 .IP "\fB\-fno\-builtin\fR" 4
1680 .IX Item "-fno-builtin"
1681 .PD 0
1682 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1683 .IX Item "-fno-builtin-function"
1684 .PD
1685 Don't recognize built-in functions that do not begin with
1686 \&\fB_\|_builtin_\fR as prefix.
1687 .Sp
1688 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1689 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1690 instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1691 may become inline copy loops.  The resulting code is often both smaller
1692 and faster, but since the function calls no longer appear as such, you
1693 cannot set a breakpoint on those calls, nor can you change the behavior
1694 of the functions by linking with a different library.  In addition,
1695 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1696 information about that function to warn about problems with calls to
1697 that function, or to generate more efficient code, even if the
1698 resulting code still contains calls to that function.  For example,
1699 warnings are given with \fB\-Wformat\fR for bad calls to
1700 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1701 known not to modify global memory.
1702 .Sp
1703 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1704 only the built-in function \fIfunction\fR is
1705 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1706 function is named that is not built-in in this version of \s-1GCC\s0, this
1707 option is ignored.  There is no corresponding
1708 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1709 built-in functions selectively when using \fB\-fno\-builtin\fR or
1710 \&\fB\-ffreestanding\fR, you may define macros such as:
1711 .Sp
1712 .Vb 2
1713 \&        #define abs(n)          _\|_builtin_abs ((n))
1714 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1715 .Ve
1716 .IP "\fB\-fhosted\fR" 4
1717 .IX Item "-fhosted"
1718 Assert that compilation takes place in a hosted environment.  This implies
1719 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1720 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1721 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1722 This is equivalent to \fB\-fno\-freestanding\fR.
1723 .IP "\fB\-ffreestanding\fR" 4
1724 .IX Item "-ffreestanding"
1725 Assert that compilation takes place in a freestanding environment.  This
1726 implies \fB\-fno\-builtin\fR.  A freestanding environment
1727 is one in which the standard library may not exist, and program startup may
1728 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1729 This is equivalent to \fB\-fno\-hosted\fR.
1730 .IP "\fB\-fopenmp\fR" 4
1731 .IX Item "-fopenmp"
1732 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1733 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1734 compiler generates parallel code according to the OpenMP Application
1735 Program Interface v3.0 <\fB\fR>.  This option
1736 implies \fB\-pthread\fR, and thus is only supported on targets that
1737 have support for \fB\-pthread\fR.
1738 .IP "\fB\-fgnu\-tm\fR" 4
1739 .IX Item "-fgnu-tm"
1740 When the option \fB\-fgnu\-tm\fR is specified, the compiler will
1741 generate code for the Linux variant of Intel's current Transactional
1742 Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
1743 an experimental feature whose interface may change in future versions
1744 of \s-1GCC\s0, as the official specification changes.  Please note that not
1745 all architectures are supported for this feature.
1746 .Sp
1747 For more information on \s-1GCC\s0's support for transactional memory,
1748 .Sp
1749 Note that the transactional memory feature is not supported with
1750 non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
1751 .IP "\fB\-fms\-extensions\fR" 4
1752 .IX Item "-fms-extensions"
1753 Accept some non-standard constructs used in Microsoft header files.
1754 .Sp
1755 In \*(C+ code, this allows member names in structures to be similar
1756 to previous types declarations.
1757 .Sp
1758 .Vb 4
1759 \&        typedef int UOW;
1760 \&        struct ABC {
1761 \&          UOW UOW;
1762 \&        };
1763 .Ve
1764 .Sp
1765 Some cases of unnamed fields in structures and unions are only
1766 accepted with this option.
1767 .IP "\fB\-fplan9\-extensions\fR" 4
1768 .IX Item "-fplan9-extensions"
1769 Accept some non-standard constructs used in Plan 9 code.
1770 .Sp
1771 This enables \fB\-fms\-extensions\fR, permits passing pointers to
1772 structures with anonymous fields to functions that expect pointers to
1773 elements of the type of the field, and permits referring to anonymous
1774 fields declared using a typedef.    This is only
1775 supported for C, not \*(C+.
1776 .IP "\fB\-trigraphs\fR" 4
1777 .IX Item "-trigraphs"
1778 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1779 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1780 .IP "\fB\-no\-integrated\-cpp\fR" 4
1781 .IX Item "-no-integrated-cpp"
1782 Performs a compilation in two passes: preprocessing and compiling.  This
1783 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1784 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1785 an additional preprocessing step after normal preprocessing but before
1786 compiling.  The default is to use the integrated cpp (internal cpp)
1787 .Sp
1788 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1789 \&\*(L"cc1obj\*(R" are merged.
1790 .IP "\fB\-traditional\fR" 4
1791 .IX Item "-traditional"
1792 .PD 0
1793 .IP "\fB\-traditional\-cpp\fR" 4
1794 .IX Item "-traditional-cpp"
1795 .PD
1796 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1797 C compiler.  They are now only supported with the \fB\-E\fR switch.
1798 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1799 \&\s-1CPP\s0 manual for details.
1800 .IP "\fB\-fcond\-mismatch\fR" 4
1801 .IX Item "-fcond-mismatch"
1802 Allow conditional expressions with mismatched types in the second and
1803 third arguments.  The value of such an expression is void.  This option
1804 is not supported for \*(C+.
1805 .IP "\fB\-flax\-vector\-conversions\fR" 4
1806 .IX Item "-flax-vector-conversions"
1807 Allow implicit conversions between vectors with differing numbers of
1808 elements and/or incompatible element types.  This option should not be
1809 used for new code.
1810 .IP "\fB\-funsigned\-char\fR" 4
1811 .IX Item "-funsigned-char"
1812 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1813 .Sp
1814 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1815 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1816 \&\f(CW\*(C`signed char\*(C'\fR by default.
1817 .Sp
1818 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1819 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1820 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1821 expect it to be signed, or expect it to be unsigned, depending on the
1822 machines they were written for.  This option, and its inverse, let you
1823 make such a program work with the opposite default.
1824 .Sp
1825 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1826 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1827 is always just like one of those two.
1828 .IP "\fB\-fsigned\-char\fR" 4
1829 .IX Item "-fsigned-char"
1830 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1831 .Sp
1832 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1833 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1834 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1835 .IP "\fB\-fsigned\-bitfields\fR" 4
1836 .IX Item "-fsigned-bitfields"
1837 .PD 0
1838 .IP "\fB\-funsigned\-bitfields\fR" 4
1839 .IX Item "-funsigned-bitfields"
1840 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1841 .IX Item "-fno-signed-bitfields"
1842 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1843 .IX Item "-fno-unsigned-bitfields"
1844 .PD
1845 These options control whether a bit-field is signed or unsigned, when the
1846 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1847 default, such a bit-field is signed, because this is consistent: the
1848 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1849 .Sh "Options Controlling \*(C+ Dialect"
1850 .IX Subsection "Options Controlling  Dialect"
1851 This section describes the command-line options that are only meaningful
1852 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1853 regardless of what language your program is in.  For example, you
1854 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1855 .PP
1856 .Vb 1
1857 \&        g++ \-g \-frepo \-O \-c firstClass.C
1858 .Ve
1859 .PP
1860 In this example, only \fB\-frepo\fR is an option meant
1861 only for \*(C+ programs; you can use the other options with any
1862 language supported by \s-1GCC\s0.
1863 .PP
1864 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1865 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1866 .IX Item "-fabi-version=n"
1867 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1868 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1869 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1870 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1871 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1872 are fixed.
1873 .Sp
1874 The default is version 2.
1875 .Sp
1876 Version 3 corrects an error in mangling a constant address as a
1877 template argument.
1878 .Sp
1879 Version 4, which first appeared in G++ 4.5, implements a standard
1880 mangling for vector types.
1881 .Sp
1882 Version 5, which first appeared in G++ 4.6, corrects the mangling of
1883 attribute const/volatile on function pointer types, decltype of a
1884 plain decl, and use of a function parameter in the declaration of
1885 another parameter.
1886 .Sp
1887 Version 6, which first appeared in G++ 4.7, corrects the promotion
1888 behavior of \*(C+11 scoped enums and the mangling of template argument
1889 packs, const/static_cast, prefix ++ and \-\-, and a class scope function
1890 used as a template argument.
1891 .Sp
1892 See also \fB\-Wabi\fR.
1893 .IP "\fB\-fno\-access\-control\fR" 4
1894 .IX Item "-fno-access-control"
1895 Turn off all access checking.  This switch is mainly useful for working
1896 around bugs in the access control code.
1897 .IP "\fB\-fcheck\-new\fR" 4
1898 .IX Item "-fcheck-new"
1899 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1900 before attempting to modify the storage allocated.  This check is
1901 normally unnecessary because the \*(C+ standard specifies that
1902 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1903 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1904 return value even without this option.  In all other cases, when
1905 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1906 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1907 \&\fBnew (nothrow)\fR.
1908 .IP "\fB\-fconserve\-space\fR" 4
1909 .IX Item "-fconserve-space"
1910 Put uninitialized or run-time-initialized global variables into the
1911 common segment, as C does.  This saves space in the executable at the
1912 cost of not diagnosing duplicate definitions.  If you compile with this
1913 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1914 completed, you may have an object that is being destroyed twice because
1915 two definitions were merged.
1916 .Sp
1917 This option is no longer useful on most targets, now that support has
1918 been added for putting variables into \s-1BSS\s0 without making them common.
1919 .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
1920 .IX Item "-fconstexpr-depth=n"
1921 Set the maximum nested evaluation depth for \*(C+11 constexpr functions
1922 to \fIn\fR.  A limit is needed to detect endless recursion during
1923 constant expression evaluation.  The minimum specified by the standard
1924 is 512.
1925 .IP "\fB\-fdeduce\-init\-list\fR" 4
1926 .IX Item "-fdeduce-init-list"
1927 Enable deduction of a template type parameter as
1928 std::initializer_list from a brace-enclosed initializer list, i.e.
1929 .Sp
1930 .Vb 4
1931 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
1932 \&        {
1933 \&          return realfn (t);
1934 \&        }
1935 \&        
1936 \&        void f()
1937 \&        {
1938 \&          forward({1,2}); // call forward<std::initializer_list<int>>
1939 \&        }
1940 .Ve
1941 .Sp
1942 This deduction was implemented as a possible extension to the
1943 originally proposed semantics for the \*(C+11 standard, but was not part
1944 of the final standard, so it is disabled by default.  This option is
1945 deprecated, and may be removed in a future version of G++.
1946 .IP "\fB\-ffriend\-injection\fR" 4
1947 .IX Item "-ffriend-injection"
1948 Inject friend functions into the enclosing namespace, so that they are
1949 visible outside the scope of the class in which they are declared.
1950 Friend functions were documented to work this way in the old Annotated
1951 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1952 that way.  However, in \s-1ISO\s0 \*(C+ a friend function that is not declared
1953 in an enclosing scope can only be found using argument dependent
1954 lookup.  This option causes friends to be injected as they were in
1955 earlier releases.
1956 .Sp
1957 This option is for compatibility, and may be removed in a future
1958 release of G++.
1959 .IP "\fB\-fno\-elide\-constructors\fR" 4
1960 .IX Item "-fno-elide-constructors"
1961 The \*(C+ standard allows an implementation to omit creating a temporary
1962 that is only used to initialize another object of the same type.
1963 Specifying this option disables that optimization, and forces G++ to
1964 call the copy constructor in all cases.
1965 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1966 .IX Item "-fno-enforce-eh-specs"
1967 Don't generate code to check for violation of exception specifications
1968 at run time.  This option violates the \*(C+ standard, but may be useful
1969 for reducing code size in production builds, much like defining
1970 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1971 exceptions in violation of the exception specifications; the compiler
1972 will still optimize based on the specifications, so throwing an
1973 unexpected exception will result in undefined behavior.
1974 .IP "\fB\-ffor\-scope\fR" 4
1975 .IX Item "-ffor-scope"
1976 .PD 0
1977 .IP "\fB\-fno\-for\-scope\fR" 4
1978 .IX Item "-fno-for-scope"
1979 .PD
1980 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1981 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1982 as specified by the \*(C+ standard.
1983 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1984 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1985 as was the case in old versions of G++, and other (traditional)
1986 implementations of \*(C+.
1987 .Sp
1988 The default if neither flag is given to follow the standard,
1989 but to allow and give a warning for old-style code that would
1990 otherwise be invalid, or have different behavior.
1991 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1992 .IX Item "-fno-gnu-keywords"
1993 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1994 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1995 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1996 .IP "\fB\-fno\-implicit\-templates\fR" 4
1997 .IX Item "-fno-implicit-templates"
1998 Never emit code for non-inline templates that are instantiated
1999 implicitly (i.e. by use); only emit code for explicit instantiations.
2000 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
2001 .IX Item "-fno-implicit-inline-templates"
2002 Don't emit code for implicit instantiations of inline templates, either.
2003 The default is to handle inlines differently so that compiles with and
2004 without optimization will need the same set of explicit instantiations.
2005 .IP "\fB\-fno\-implement\-inlines\fR" 4
2006 .IX Item "-fno-implement-inlines"
2007 To save space, do not emit out-of-line copies of inline functions
2008 controlled by \fB#pragma implementation\fR.  This will cause linker
2009 errors if these functions are not inlined everywhere they are called.
2010 .IP "\fB\-fms\-extensions\fR" 4
2011 .IX Item "-fms-extensions"
2012 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
2013 int and getting a pointer to member function via non-standard syntax.
2014 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
2015 .IX Item "-fno-nonansi-builtins"
2016 Disable built-in declarations of functions that are not mandated by
2017 \&\s-1ANSI/ISO\s0 C.  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
2018 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
2019 .IP "\fB\-fnothrow\-opt\fR" 4
2020 .IX Item "-fnothrow-opt"
2021 Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as though it were a
2022 \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
2023 overhead relative to a function with no exception specification.  If
2024 the function has local variables of types with non-trivial
2025 destructors, the exception specification will actually make the
2026 function smaller because the \s-1EH\s0 cleanups for those variables can be
2027 optimized away.  The semantic effect is that an exception thrown out of
2028 a function with such an exception specification will result in a call
2029 to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
2030 .IP "\fB\-fno\-operator\-names\fR" 4
2031 .IX Item "-fno-operator-names"
2032 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
2033 \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
2034 synonyms as keywords.
2035 .IP "\fB\-fno\-optional\-diags\fR" 4
2036 .IX Item "-fno-optional-diags"
2037 Disable diagnostics that the standard says a compiler does not need to
2038 issue.  Currently, the only such diagnostic issued by G++ is the one for
2039 a name having multiple meanings within a class.
2040 .IP "\fB\-fpermissive\fR" 4
2041 .IX Item "-fpermissive"
2042 Downgrade some diagnostics about nonconformant code from errors to
2043 warnings.  Thus, using \fB\-fpermissive\fR will allow some
2044 nonconforming code to compile.
2045 .IP "\fB\-fno\-pretty\-templates\fR" 4
2046 .IX Item "-fno-pretty-templates"
2047 When an error message refers to a specialization of a function
2048 template, the compiler will normally print the signature of the
2049 template followed by the template arguments and any typedefs or
2050 typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
2051 rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
2052 involved.  When an error message refers to a specialization of a class
2053 template, the compiler will omit any template arguments that match
2054 the default template arguments for that template.  If either of these
2055 behaviors make it harder to understand the error message rather than
2056 easier, using \fB\-fno\-pretty\-templates\fR will disable them.
2057 .IP "\fB\-frepo\fR" 4
2058 .IX Item "-frepo"
2059 Enable automatic template instantiation at link time.  This option also
2060 implies \fB\-fno\-implicit\-templates\fR.
2061 .IP "\fB\-fno\-rtti\fR" 4
2062 .IX Item "-fno-rtti"
2063 Disable generation of information about every class with virtual
2064 functions for use by the \*(C+ run-time type identification features
2065 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
2066 of the language, you can save some space by using this flag.  Note that
2067 exception handling uses the same information, but it will generate it as
2068 needed. The \fBdynamic_cast\fR operator can still be used for casts that
2069 do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
2070 unambiguous base classes.
2071 .IP "\fB\-fstats\fR" 4
2072 .IX Item "-fstats"
2073 Emit statistics about front-end processing at the end of the compilation.
2074 This information is generally only useful to the G++ development team.
2075 .IP "\fB\-fstrict\-enums\fR" 4
2076 .IX Item "-fstrict-enums"
2077 Allow the compiler to optimize using the assumption that a value of
2078 enumerated type can only be one of the values of the enumeration (as
2079 defined in the \*(C+ standard; basically, a value that can be
2080 represented in the minimum number of bits needed to represent all the
2081 enumerators).  This assumption may not be valid if the program uses a
2082 cast to convert an arbitrary integer value to the enumerated type.
2083 .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
2084 .IX Item "-ftemplate-depth=n"
2085 Set the maximum instantiation depth for template classes to \fIn\fR.
2086 A limit on the template instantiation depth is needed to detect
2087 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
2088 conforming programs must not rely on a maximum depth greater than 17
2089 (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
2090 can run out of stack space before hitting 1024 in some situations.
2091 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
2092 .IX Item "-fno-threadsafe-statics"
2093 Do not emit the extra code to use the routines specified in the \*(C+
2094 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
2095 option to reduce code size slightly in code that doesn't need to be
2096 thread-safe.
2097 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
2098 .IX Item "-fuse-cxa-atexit"
2099 Register destructors for objects with static storage duration with the
2100 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
2101 This option is required for fully standards-compliant handling of static
2102 destructors, but will only work if your C library supports
2103 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
2104 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
2105 .IX Item "-fno-use-cxa-get-exception-ptr"
2106 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
2107 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
2108 if the runtime routine is not available.
2109 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
2110 .IX Item "-fvisibility-inlines-hidden"
2111 This switch declares that the user does not attempt to compare
2112 pointers to inline functions or methods where the addresses of the two functions
2113 were taken in different shared objects.
2114 .Sp
2115 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
2116 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
2117 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
2118 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
2119 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
2120 dynamic export table when the library makes heavy use of templates.
2121 .Sp
2122 The behavior of this switch is not quite the same as marking the
2123 methods as hidden directly, because it does not affect static variables
2124 local to the function or cause the compiler to deduce that
2125 the function is defined in only one shared object.
2126 .Sp
2127 You may mark a method as having a visibility explicitly to negate the
2128 effect of the switch for that method.  For example, if you do want to
2129 compare pointers to a particular inline method, you might mark it as
2130 having default visibility.  Marking the enclosing class with explicit
2131 visibility will have no effect.
2132 .Sp
2133 Explicitly instantiated inline methods are unaffected by this option
2134 as their linkage might otherwise cross a shared library boundary.
2135 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
2136 .IX Item "-fvisibility-ms-compat"
2137 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
2138 linkage model compatible with that of Microsoft Visual Studio.
2139 .Sp
2140 The flag makes these changes to \s-1GCC\s0's linkage model:
2141 .RS 4
2142 .IP "1." 4
2143 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
2144 \&\fB\-fvisibility=hidden\fR.
2145 .IP "2." 4
2146 Types, but not their members, are not hidden by default.
2147 .IP "3." 4
2148 The One Definition Rule is relaxed for types without explicit
2149 visibility specifications that are defined in more than one different
2150 shared object: those declarations are permitted if they would have
2151 been permitted when this option was not used.
2152 .RE
2153 .RS 4
2154 .Sp
2155 In new code it is better to use \fB\-fvisibility=hidden\fR and
2156 export those classes that are intended to be externally visible.
2157 Unfortunately it is possible for code to rely, perhaps accidentally,
2158 on the Visual Studio behavior.
2159 .Sp
2160 Among the consequences of these changes are that static data members
2161 of the same type with the same name but defined in different shared
2162 objects will be different, so changing one will not change the other;
2163 and that pointers to function members defined in different shared
2164 objects may not compare equal.  When this flag is given, it is a
2165 violation of the \s-1ODR\s0 to define types with the same name differently.
2166 .RE
2167 .IP "\fB\-fno\-weak\fR" 4
2168 .IX Item "-fno-weak"
2169 Do not use weak symbol support, even if it is provided by the linker.
2170 By default, G++ will use weak symbols if they are available.  This
2171 option exists only for testing, and should not be used by end-users;
2172 it will result in inferior code and has no benefits.  This option may
2173 be removed in a future release of G++.
2174 .IP "\fB\-nostdinc++\fR" 4
2175 .IX Item "-nostdinc++"
2176 Do not search for header files in the standard directories specific to
2177 \&\*(C+, but do still search the other standard directories.  (This option
2178 is used when building the \*(C+ library.)
2179 .PP
2180 In addition, these optimization, warning, and code generation options
2181 have meanings only for \*(C+ programs:
2182 .IP "\fB\-fno\-default\-inline\fR" 4
2183 .IX Item "-fno-default-inline"
2184 Do not assume \fBinline\fR for functions defined inside a class scope.
2185   Note that these
2186 functions will have linkage like inline functions; they just won't be
2187 inlined by default.
2188 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
2189 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
2190 Warn when G++ generates code that is probably not compatible with the
2191 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
2192 all such cases, there are probably some cases that are not warned about,
2193 even though G++ is generating incompatible code.  There may also be
2194 cases where warnings are emitted even though the code that is generated
2195 will be compatible.
2196 .Sp
2197 You should rewrite your code to avoid these warnings if you are
2198 concerned about the fact that code generated by G++ may not be binary
2199 compatible with code generated by other compilers.
2200 .Sp
2201 The known incompatibilities in \fB\-fabi\-version=2\fR (the default) include:
2202 .RS 4
2203 .IP "\(bu" 4
2204 A template with a non-type template parameter of reference type is
2205 mangled incorrectly:
2206 .Sp
2207 .Vb 3
2208 \&        extern int N;
2209 \&        template <int &> struct S {};
2210 \&        void n (S<N>) {2}
2211 .Ve
2212 .Sp
2213 This is fixed in \fB\-fabi\-version=3\fR.
2214 .IP "\(bu" 4
2215 \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR are
2216 mangled in a non-standard way that does not allow for overloading of
2217 functions taking vectors of different sizes.
2218 .Sp
2219 The mangling is changed in \fB\-fabi\-version=4\fR.
2220 .RE
2221 .RS 4
2222 .Sp
2223 The known incompatibilities in \fB\-fabi\-version=1\fR include:
2224 .IP "\(bu" 4
2225 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2226 pack data into the same byte as a base class.  For example:
2227 .Sp
2228 .Vb 2
2229 \&        struct A { virtual void f(); int f1 : 1; };
2230 \&        struct B : public A { int f2 : 1; };
2231 .Ve
2232 .Sp
2233 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
2234 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
2235 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
2236 byte size on your platform; that will cause G++ and other compilers to
2237 layout \f(CW\*(C`B\*(C'\fR identically.
2238 .IP "\(bu" 4
2239 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2240 tail padding when laying out virtual bases.  For example:
2241 .Sp
2242 .Vb 3
2243 \&        struct A { virtual void f(); char c1; };
2244 \&        struct B { B(); char c2; };
2245 \&        struct C : public A, public virtual B {};
2246 .Ve
2247 .Sp
2248 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
2249 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
2250 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
2251 alignment (ignoring virtual base classes); that will cause G++ and other
2252 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
2253 .IP "\(bu" 4
2254 Incorrect handling of bit-fields with declared widths greater than that
2255 of their underlying types, when the bit-fields appear in a union.  For
2256 example:
2257 .Sp
2258 .Vb 1
2259 \&        union U { int i : 4096; };
2260 .Ve
2261 .Sp
2262 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
2263 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
2264 .IP "\(bu" 4
2265 Empty classes can be placed at incorrect offsets.  For example:
2266 .Sp
2267 .Vb 1
2268 \&        struct A {};
2269 \&        
2270 \&        struct B {
2271 \&          A a;
2272 \&          virtual void f ();
2273 \&        };
2274 \&        
2275 \&        struct C : public B, public A {};
2276 .Ve
2277 .Sp
2278 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
2279 it should be placed at offset zero.  G++ mistakenly believes that the
2280 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
2281 .IP "\(bu" 4
2282 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
2283 template template parameters can be mangled incorrectly.
2284 .Sp
2285 .Vb 2
2286 \&        template <typename Q>
2287 \&        void f(typename Q::X) {}
2288 \&        
2289 \&        template <template <typename> class Q>
2290 \&        void f(typename Q<int>::X) {}
2291 .Ve
2292 .Sp
2293 Instantiations of these templates may be mangled incorrectly.
2294 .RE
2295 .RS 4
2296 .Sp
2297 It also warns psABI related changes.  The known psABI changes at this
2298 point include:
2299 .IP "\(bu" 4
2300 For SYSV/x86\-64, when passing union with long double, it is changed to
2301 pass in memory as specified in psABI.  For example:
2302 .Sp
2303 .Vb 4
2304 \&        union U {
2305 \&          long double ld;
2306 \&          int i;
2307 \&        };
2308 .Ve
2309 .Sp
2310 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2311 .RE
2312 .RS 4
2313 .RE
2314 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2315 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2316 Warn when a class seems unusable because all the constructors or
2317 destructors in that class are private, and it has neither friends nor
2318 public static member functions.
2319 .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2320 .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
2321 Warn when \fBdelete\fR is used to destroy an instance of a class that
2322 has virtual functions and non-virtual destructor. It is unsafe to delete
2323 an instance of a derived class through a pointer to a base class if the
2324 base class does not have a virtual destructor.  This warning is enabled
2325 by \fB\-Wall\fR.
2326 .IP "\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
2327 .IX Item "-Wnarrowing ( and Objective- only)"
2328 Warn when a narrowing conversion prohibited by \*(C+11 occurs within
2329 \&\fB{ }\fR, e.g.
2330 .Sp
2331 .Vb 1
2332 \&        int i = { 2.2 }; // error: narrowing from double to int
2333 .Ve
2334 .Sp
2335 This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
2336 .Sp
2337 With \-std=c++11, \fB\-Wno\-narrowing\fR suppresses the diagnostic
2338 required by the standard.  Note that this does not affect the meaning
2339 of well-formed code; narrowing conversions are still considered
2340 ill-formed in \s-1SFINAE\s0 context.
2341 .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
2342 .IX Item "-Wnoexcept ( and Objective- only)"
2343 Warn when a noexcept-expression evaluates to false because of a call
2344 to a function that does not have a non-throwing exception
2345 specification (i.e. \fB\f(BIthrow()\fB\fR or \fBnoexcept\fR) but is known by
2346 the compiler to never throw an exception.
2347 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2348 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2349 Warn when a class has virtual functions and accessible non-virtual
2350 destructor, in which case it would be possible but unsafe to delete
2351 an instance of a derived class through a pointer to the base class.
2352 This warning is also enabled if \fB\-Weffc++\fR is specified.
2353 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2354 .IX Item "-Wreorder ( and Objective- only)"
2355 Warn when the order of member initializers given in the code does not
2356 match the order in which they must be executed.  For instance:
2357 .Sp
2358 .Vb 5
2359 \&        struct A {
2360 \&          int i;
2361 \&          int j;
2362 \&          A(): j (0), i (1) { }
2363 \&        };
2364 .Ve
2365 .Sp
2366 The compiler will rearrange the member initializers for \fBi\fR
2367 and \fBj\fR to match the declaration order of the members, emitting
2368 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2369 .PP
2370 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2371 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2372 .IX Item "-Weffc++ ( and Objective- only)"
2373 Warn about violations of the following style guidelines from Scott Meyers'
2374 \&\fIEffective \*(C+, Second Edition\fR book:
2375 .RS 4
2376 .IP "\(bu" 4
2377 Item 11:  Define a copy constructor and an assignment operator for classes
2378 with dynamically allocated memory.
2379 .IP "\(bu" 4
2380 Item 12:  Prefer initialization to assignment in constructors.
2381 .IP "\(bu" 4
2382 Item 14:  Make destructors virtual in base classes.
2383 .IP "\(bu" 4
2384 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2385 .IP "\(bu" 4
2386 Item 23:  Don't try to return a reference when you must return an object.
2387 .RE
2388 .RS 4
2389 .Sp
2390 Also warn about violations of the following style guidelines from
2391 Scott Meyers' \fIMore Effective \*(C+\fR book:
2392 .IP "\(bu" 4
2393 Item 6:  Distinguish between prefix and postfix forms of increment and
2394 decrement operators.
2395 .IP "\(bu" 4
2396 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2397 .RE
2398 .RS 4
2399 .Sp
2400 When selecting this option, be aware that the standard library
2401 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2402 to filter out those warnings.
2403 .RE
2404 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2405 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2406 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2407 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2408 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2409 it is guaranteed to be of the same size as a pointer.  But this use is
2410 not portable across different compilers.
2411 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2412 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2413 Disable warnings when non-templatized friend functions are declared
2414 within a template.  Since the advent of explicit template specification
2415 support in G++, if the name of the friend is an unqualified-id (i.e.,
2416 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2417 friend declare or define an ordinary, nontemplate function.  (Section
2418 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2419 could be interpreted as a particular specialization of a templatized
2420 function.  Because this non-conforming behavior is no longer the default
2421 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2422 check existing code for potential trouble spots and is on by default.
2423 This new compiler behavior can be turned off with
2424 \&\fB\-Wno\-non\-template\-friend\fR, which keeps the conformant compiler code
2425 but disables the helpful warning.
2426 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2427 .IX Item "-Wold-style-cast ( and Objective- only)"
2428 Warn if an old-style (C\-style) cast to a non-void type is used within
2429 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2430 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2431 less vulnerable to unintended effects and much easier to search for.
2432 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2433 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2434 Warn when a function declaration hides virtual functions from a
2435 base class.  For example, in:
2436 .Sp
2437 .Vb 3
2438 \&        struct A {
2439 \&          virtual void f();
2440 \&        };
2441 \&        
2442 \&        struct B: public A {
2443 \&          void f(int);
2444 \&        };
2445 .Ve
2446 .Sp
2447 the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
2448 like:
2449 .Sp
2450 .Vb 2
2451 \&        B* b;
2452 \&        b\->f();
2453 .Ve
2454 .Sp
2455 will fail to compile.
2456 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2457 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2458 Disable the diagnostic for converting a bound pointer to member function
2459 to a plain pointer.
2460 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2461 .IX Item "-Wsign-promo ( and Objective- only)"
2462 Warn when overload resolution chooses a promotion from unsigned or
2463 enumerated type to a signed type, over a conversion to an unsigned type of
2464 the same size.  Previous versions of G++ would try to preserve
2465 unsignedness, but the standard mandates the current behavior.
2466 .Sp
2467 .Vb 4
2468 \&        struct A {
2469 \&          operator int ();
2470 \&          A& operator = (int);
2471 \&        };
2472 \&        
2473 \&        main ()
2474 \&        {
2475 \&          A a,b;
2476 \&          a = b;
2477 \&        }
2478 .Ve
2479 .Sp
2480 In this example, G++ will synthesize a default \fBA& operator =
2481 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2482 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2483 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2484 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2485 languages themselves.
2486 .PP
2487 This section describes the command-line options that are only meaningful
2488 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2489 the language-independent \s-1GNU\s0 compiler options.
2490 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2491 .PP
2492 .Vb 1
2493 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2494 .Ve
2495 .PP
2496 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2497 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2498 any language supported by \s-1GCC\s0.
2499 .PP
2500 Note that since Objective-C is an extension of the C language, Objective-C
2501 compilations may also use options specific to the C front-end (e.g.,
2502 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2503 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2504 .PP
2505 Here is a list of options that are \fIonly\fR for compiling Objective-C
2506 and Objective\-\*(C+ programs:
2507 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2508 .IX Item "-fconstant-string-class=class-name"
2509 Use \fIclass-name\fR as the name of the class to instantiate for each
2510 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2511 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2512 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2513 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2514 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2515 to be laid out as constant CoreFoundation strings.
2516 .IP "\fB\-fgnu\-runtime\fR" 4
2517 .IX Item "-fgnu-runtime"
2518 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2519 runtime.  This is the default for most types of systems.
2520 .IP "\fB\-fnext\-runtime\fR" 4
2521 .IX Item "-fnext-runtime"
2522 Generate output compatible with the NeXT runtime.  This is the default
2523 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2524 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2525 used.
2526 .IP "\fB\-fno\-nil\-receivers\fR" 4
2527 .IX Item "-fno-nil-receivers"
2528 Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
2529 message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
2530 not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
2531 runtime to be used.  This option is only available in conjunction with
2532 the NeXT runtime and \s-1ABI\s0 version 0 or 1.
2533 .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
2534 .IX Item "-fobjc-abi-version=n"
2535 Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
2536 This option is currently supported only for the NeXT runtime.  In that
2537 case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
2538 properties and other Objective-C 2.0 additions.  Version 1 is the
2539 traditional (32\-bit) \s-1ABI\s0 with support for properties and other
2540 Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI\s0.  If
2541 nothing is specified, the default is Version 0 on 32\-bit target
2542 machines, and Version 2 on 64\-bit target machines.
2543 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2544 .IX Item "-fobjc-call-cxx-cdtors"
2545 For each Objective-C class, check if any of its instance variables is a
2546 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2547 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which will run
2548 non-trivial default constructors on any such instance variables, in order,
2549 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2550 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2551 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which will run
2552 all such default destructors, in reverse order.
2553 .Sp
2554 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
2555 methods thusly generated will only operate on instance variables
2556 declared in the current Objective-C class, and not those inherited
2557 from superclasses.  It is the responsibility of the Objective-C
2558 runtime to invoke all such methods in an object's inheritance
2559 hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods will be invoked
2560 by the runtime immediately after a new object instance is allocated;
2561 the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will be invoked immediately
2562 before the runtime deallocates an object instance.
2563 .Sp
2564 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2565 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2566 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2567 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2568 .IX Item "-fobjc-direct-dispatch"
2569 Allow fast jumps to the message dispatcher.  On Darwin this is
2570 accomplished via the comm page.
2571 .IP "\fB\-fobjc\-exceptions\fR" 4
2572 .IX Item "-fobjc-exceptions"
2573 Enable syntactic support for structured exception handling in
2574 Objective-C, similar to what is offered by \*(C+ and Java.  This option
2575 is required to use the Objective-C keywords \f(CW@try\fR,
2576 \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
2577 \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
2578 runtime and the NeXT runtime (but not available in conjunction with
2579 the NeXT runtime on Mac \s-1OS\s0 X 10.2 and earlier).
2580 .IP "\fB\-fobjc\-gc\fR" 4
2581 .IX Item "-fobjc-gc"
2582 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
2583 programs.  This option is only available with the NeXT runtime; the
2584 \&\s-1GNU\s0 runtime has a different garbage collection implementation that
2585 does not require special compiler flags.
2586 .IP "\fB\-fobjc\-nilcheck\fR" 4
2587 .IX Item "-fobjc-nilcheck"
2588 For the NeXT runtime with version 2 of the \s-1ABI\s0, check for a nil
2589 receiver in method invocations before doing the actual method call.
2590 This is the default and can be disabled using
2591 \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
2592 checked for nil in this way no matter what this flag is set to.
2593 Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
2594 version of the NeXT runtime \s-1ABI\s0, is used.
2595 .IP "\fB\-fobjc\-std=objc1\fR" 4
2596 .IX Item "-fobjc-std=objc1"
2597 Conform to the language syntax of Objective-C 1.0, the language
2598 recognized by \s-1GCC\s0 4.0.  This only affects the Objective-C additions to
2599 the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
2600 which is controlled by the separate C/\*(C+ dialect option flags.  When
2601 this option is used with the Objective-C or Objective\-\*(C+ compiler,
2602 any Objective-C syntax that is not recognized by \s-1GCC\s0 4.0 is rejected.
2603 This is useful if you need to make sure that your Objective-C code can
2604 be compiled with older versions of \s-1GCC\s0.
2605 .IP "\fB\-freplace\-objc\-classes\fR" 4
2606 .IX Item "-freplace-objc-classes"
2607 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2608 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2609 run time instead.  This is used in conjunction with the Fix-and-Continue
2610 debugging mode, where the object file in question may be recompiled and
2611 dynamically reloaded in the course of program execution, without the need
2612 to restart the program itself.  Currently, Fix-and-Continue functionality
2613 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2614 and later.
2615 .IP "\fB\-fzero\-link\fR" 4
2616 .IX Item "-fzero-link"
2617 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2618 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2619 compile time) with static class references that get initialized at load time,
2620 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2621 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2622 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2623 for individual class implementations to be modified during program execution.
2624 The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
2625 regardless of command-line options.
2626 .IP "\fB\-gen\-decls\fR" 4
2627 .IX Item "-gen-decls"
2628 Dump interface declarations for all classes seen in the source file to a
2629 file named \fI\fIsourcename\fI.decl\fR.
2630 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2631 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2632 Warn whenever an Objective-C assignment is being intercepted by the
2633 garbage collector.
2634 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2635 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2636 If a class is declared to implement a protocol, a warning is issued for
2637 every method in the protocol that is not implemented by the class.  The
2638 default behavior is to issue a warning for every method not explicitly
2639 implemented in the class, even if a method implementation is inherited
2640 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2641 methods inherited from the superclass are considered to be implemented,
2642 and no warning is issued for them.
2643 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2644 .IX Item "-Wselector (Objective-C and Objective- only)"
2645 Warn if multiple methods of different types for the same selector are
2646 found during compilation.  The check is performed on the list of methods
2647 in the final stage of compilation.  Additionally, a check is performed
2648 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2649 expression, and a corresponding method for that selector has been found
2650 during compilation.  Because these checks scan the method table only at
2651 the end of compilation, these warnings are not produced if the final
2652 stage of compilation is not reached, for example because an error is
2653 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2654 being used.
2655 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2656 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2657 Warn if multiple methods with differing argument and/or return types are
2658 found for a given selector when attempting to send a message using this
2659 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2660 is off (which is the default behavior), the compiler will omit such warnings
2661 if any differences found are confined to types that share the same size
2662 and alignment.
2663 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2664 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2665 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2666 undeclared selector is found.  A selector is considered undeclared if no
2667 method with that name has been declared before the
2668 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2669 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2670 an \f(CW@implementation\fR section.  This option always performs its
2671 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2672 while \fB\-Wselector\fR only performs its checks in the final stage of
2673 compilation.  This also enforces the coding style convention
2674 that methods and selectors must be declared before being used.
2675 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2676 .IX Item "-print-objc-runtime-info"
2677 Generate C header describing the largest structure that is passed by
2678 value, if any.
2679 .Sh "Options to Control Diagnostic Messages Formatting"
2680 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2681 Traditionally, diagnostic messages have been formatted irrespective of
2682 the output device's aspect (e.g. its width, ...).  The options described
2683 below can be used to control the diagnostic messages formatting
2684 algorithm, e.g. how many characters per line, how often source location
2685 information should be reported.  Right now, only the \*(C+ front end can
2686 honor these options.  However it is expected, in the near future, that
2687 the remaining front ends would be able to digest them correctly.
2688 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2689 .IX Item "-fmessage-length=n"
2690 Try to format error messages so that they fit on lines of about \fIn\fR
2691 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2692 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2693 line-wrapping will be done; each error message will appear on a single
2694 line.
2695 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2696 .IX Item "-fdiagnostics-show-location=once"
2697 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2698 reporter to emit \fIonce\fR source location information; that is, in
2699 case the message is too long to fit on a single physical line and has to
2700 be wrapped, the source location won't be emitted (as prefix) again,
2701 over and over, in subsequent continuation lines.  This is the default
2702 behavior.
2703 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2704 .IX Item "-fdiagnostics-show-location=every-line"
2705 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2706 messages reporter to emit the same source location information (as
2707 prefix) for physical lines that result from the process of breaking
2708 a message which is too long to fit on a single line.
2709 .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
2710 .IX Item "-fno-diagnostics-show-option"
2711 By default, each diagnostic emitted includes text indicating the
2712 command-line option that directly controls the diagnostic (if such an
2713 option is known to the diagnostic machinery).  Specifying the
2714 \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
2715 .Sh "Options to Request or Suppress Warnings"
2716 .IX Subsection "Options to Request or Suppress Warnings"
2717 Warnings are diagnostic messages that report constructions that
2718 are not inherently erroneous but that are risky or suggest there
2719 may have been an error.
2720 .PP
2721 The following language-independent options do not enable specific
2722 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2723 .IP "\fB\-fsyntax\-only\fR" 4
2724 .IX Item "-fsyntax-only"
2725 Check the code for syntax errors, but don't do anything beyond that.
2726 .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
2727 .IX Item "-fmax-errors=n"
2728 Limits the maximum number of error messages to \fIn\fR, at which point
2729 \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
2730 code.  If \fIn\fR is 0 (the default), there is no limit on the number
2731 of error messages produced.  If \fB\-Wfatal\-errors\fR is also
2732 specified, then \fB\-Wfatal\-errors\fR takes precedence over this
2733 option.
2734 .IP "\fB\-w\fR" 4
2735 .IX Item "-w"
2736 Inhibit all warning messages.
2737 .IP "\fB\-Werror\fR" 4
2738 .IX Item "-Werror"
2739 Make all warnings into errors.
2740 .IP "\fB\-Werror=\fR" 4
2741 .IX Item "-Werror="
2742 Make the specified warning into an error.  The specifier for a warning
2743 is appended, for example \fB\-Werror=switch\fR turns the warnings
2744 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2745 negative form, to be used to negate \fB\-Werror\fR for specific
2746 warnings, for example \fB\-Wno\-error=switch\fR makes
2747 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2748 is in effect.
2749 .Sp
2750 The warning message for each controllable warning includes the
2751 option that controls the warning.  That option can then be used with
2752 \&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
2753 (Printing of the option in the warning message can be disabled using the
2754 \&\fB\-fno\-diagnostics\-show\-option\fR flag.)
2755 .Sp
2756 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2757 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2758 imply anything.
2759 .IP "\fB\-Wfatal\-errors\fR" 4
2760 .IX Item "-Wfatal-errors"
2761 This option causes the compiler to abort compilation on the first error
2762 occurred rather than trying to keep going and printing further error
2763 messages.
2764 .PP
2765 You can request many specific warnings with options beginning
2766 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2767 implicit declarations.  Each of these specific warning options also
2768 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2769 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2770 two forms, whichever is not the default.  For further,
2771 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2772 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2773 .PP
2774 When an unrecognized warning option is requested (e.g.,
2775 \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 will emit a diagnostic stating
2776 that the option is not recognized.  However, if the \fB\-Wno\-\fR form
2777 is used, the behavior is slightly different: No diagnostic will be
2778 produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
2779 are being produced.  This allows the use of new \fB\-Wno\-\fR options
2780 with old compilers, but if something goes wrong, the compiler will
2781 warn that an unrecognized option was used.
2782 .IP "\fB\-pedantic\fR" 4
2783 .IX Item "-pedantic"
2784 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2785 reject all programs that use forbidden extensions, and some other
2786 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2787 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2788 .Sp
2789 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2790 this option (though a rare few will require \fB\-ansi\fR or a
2791 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2792 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2793 features are supported as well.  With this option, they are rejected.
2794 .Sp
2795 \&\fB\-pedantic\fR does not cause warning messages for use of the
2796 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2797 warnings are also disabled in the expression that follows
2798 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2799 these escape routes; application programs should avoid them.
2800 .Sp
2801 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2802 C conformance.  They soon find that it does not do quite what they want:
2803 it finds some non-ISO practices, but not all\-\-\-only those for which
2804 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2805 diagnostics have been added.
2806 .Sp
2807 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2808 some instances, but would require considerable additional work and would
2809 be quite different from \fB\-pedantic\fR.  We don't have plans to
2810 support such a feature in the near future.
2811 .Sp
2812 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2813 extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
2814 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2815 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2816 where they are required by the base standard.  (It would not make sense
2817 for such warnings to be given only for features not in the specified \s-1GNU\s0
2818 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2819 features the compiler supports with the given option, and there would be
2820 nothing to warn about.)
2821 .IP "\fB\-pedantic\-errors\fR" 4
2822 .IX Item "-pedantic-errors"
2823 Like \fB\-pedantic\fR, except that errors are produced rather than
2824 warnings.
2825 .IP "\fB\-Wall\fR" 4
2826 .IX Item "-Wall"
2827 This enables all the warnings about constructions that some users
2828 consider questionable, and that are easy to avoid (or modify to
2829 prevent the warning), even in conjunction with macros.  This also
2830 enables some language-specific warnings described in \fB\*(C+ Dialect
2831 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2832 .Sp
2833 \&\fB\-Wall\fR turns on the following warning flags:
2834 .Sp
2835 \&\fB\-Waddress   
2836 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2837 \&\fB\-Wc++11\-compat  
2838 \&\-Wchar\-subscripts  
2839 \&\-Wenum\-compare\fR (in C/Objc; this is on by default in \*(C+) 
2840 \&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
2841 \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
2842 \&\fB\-Wcomment  
2843 \&\-Wformat   
2844 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2845 \&\fB\-Wmaybe\-uninitialized 
2846 \&\-Wmissing\-braces  
2847 \&\-Wnonnull  
2848 \&\-Wparentheses  
2849 \&\-Wpointer\-sign  
2850 \&\-Wreorder   
2851 \&\-Wreturn\-type  
2852 \&\-Wsequence\-point  
2853 \&\-Wsign\-compare\fR (only in \*(C+)  
2854 \&\fB\-Wstrict\-aliasing  
2855 \&\-Wstrict\-overflow=1  
2856 \&\-Wswitch  
2857 \&\-Wtrigraphs  
2858 \&\-Wuninitialized  
2859 \&\-Wunknown\-pragmas  
2860 \&\-Wunused\-function  
2861 \&\-Wunused\-label     
2862 \&\-Wunused\-value     
2863 \&\-Wunused\-variable  
2864 \&\-Wvolatile\-register\-var\fR
2865 .Sp
2866 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2867 them warn about constructions that users generally do not consider
2868 questionable, but which occasionally you might wish to check for;
2869 others warn about constructions that are necessary or hard to avoid in
2870 some cases, and there is no simple way to modify the code to suppress
2871 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2872 them must be enabled individually.
2873 .IP "\fB\-Wextra\fR" 4
2874 .IX Item "-Wextra"
2875 This enables some extra warning flags that are not enabled by
2876 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2877 name is still supported, but the newer name is more descriptive.)
2878 .Sp
2879 \&\fB\-Wclobbered  
2880 \&\-Wempty\-body  
2881 \&\-Wignored\-qualifiers 
2882 \&\-Wmissing\-field\-initializers  
2883 \&\-Wmissing\-parameter\-type\fR (C only)  
2884 \&\fB\-Wold\-style\-declaration\fR (C only)  
2885 \&\fB\-Woverride\-init  
2886 \&\-Wsign\-compare  
2887 \&\-Wtype\-limits  
2888 \&\-Wuninitialized  
2889 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
2890 \&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
2891 .Sp
2892 The option \fB\-Wextra\fR also prints warning messages for the
2893 following cases:
2894 .RS 4
2895 .IP "\(bu" 4
2896 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2897 \&\fB>\fR, or \fB>=\fR.
2898 .IP "\(bu" 4
2899 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2900 conditional expression.
2901 .IP "\(bu" 4
2902 (\*(C+ only) Ambiguous virtual bases.
2903 .IP "\(bu" 4
2904 (\*(C+ only) Subscripting an array that has been declared \fBregister\fR.
2905 .IP "\(bu" 4
2906 (\*(C+ only) Taking the address of a variable that has been declared
2907 \&\fBregister\fR.
2908 .IP "\(bu" 4
2909 (\*(C+ only) A base class is not initialized in a derived class' copy
2910 constructor.
2911 .RE
2912 .RS 4
2913 .RE
2914 .IP "\fB\-Wchar\-subscripts\fR" 4
2915 .IX Item "-Wchar-subscripts"
2916 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2917 of error, as programmers often forget that this type is signed on some
2918 machines.
2919 This warning is enabled by \fB\-Wall\fR.
2920 .IP "\fB\-Wcomment\fR" 4
2921 .IX Item "-Wcomment"
2922 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2923 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2924 This warning is enabled by \fB\-Wall\fR.
2925 .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
2926 .IX Item "-Wno-coverage-mismatch"
2927 Warn if feedback profiles do not match when using the
2928 \&\fB\-fprofile\-use\fR option.
2929 If a source file was changed between \fB\-fprofile\-gen\fR and
2930 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2931 to match the source file and \s-1GCC\s0 cannot use the profile feedback
2932 information.  By default, this warning is enabled and is treated as an
2933 error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
2934 warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
2935 disable the error.  Disabling the error for this warning can result in
2936 poorly optimized code and is useful only in the
2937 case of very minor changes such as bug fixes to an existing code-base.
2938 Completely disabling the warning is not recommended.
2939 .IP "\fB\-Wno\-cpp\fR" 4
2940 .IX Item "-Wno-cpp"
2941 (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
2942 .Sp
2943 Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
2944 .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2945 .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
2946 Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
2947 promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
2948 floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
2949 \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
2950 using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
2951 overhead required for software emulation.
2952 .Sp
2953 It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
2954 floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
2955 example, in:
2956 .Sp
2957 .Vb 4
2958 \&        float area(float radius)
2959 \&        {
2960 \&           return 3.14159 * radius * radius;
2961 \&        }
2962 .Ve
2963 .Sp
2964 the compiler will perform the entire computation with \f(CW\*(C`double\*(C'\fR
2965 because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
2966 .IP "\fB\-Wformat\fR" 4
2967 .IX Item "-Wformat"
2968 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2969 the arguments supplied have types appropriate to the format string
2970 specified, and that the conversions specified in the format string make
2971 sense.  This includes standard functions, and others specified by format
2972 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2973 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2974 not in the C standard) families (or other target-specific families).
2975 Which functions are checked without format attributes having been
2976 specified depends on the standard version selected, and such checks of
2977 functions without the attribute specified are disabled by
2978 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2979 .Sp
2980 The formats are checked against the format features supported by \s-1GNU\s0
2981 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2982 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2983 extensions.  Other library implementations may not support all these
2984 features; \s-1GCC\s0 does not support warning about features that go beyond a
2985 particular library's limitations.  However, if \fB\-pedantic\fR is used
2986 with \fB\-Wformat\fR, warnings will be given about format features not
2987 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2988 since those are not in any version of the C standard).
2989 .Sp
2990 Since \fB\-Wformat\fR also checks for null format arguments for
2991 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2992 .Sp
2993 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2994 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2995 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2996 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2997 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2998 .IP "\fB\-Wformat\-y2k\fR" 4
2999 .IX Item "-Wformat-y2k"
3000 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
3001 formats that may yield only a two-digit year.
3002 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
3003 .IX Item "-Wno-format-contains-nul"
3004 If \fB\-Wformat\fR is specified, do not warn about format strings that
3005 contain \s-1NUL\s0 bytes.
3006 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
3007 .IX Item "-Wno-format-extra-args"
3008 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
3009 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
3010 that such arguments are ignored.
3011 .Sp
3012 Where the unused arguments lie between used arguments that are
3013 specified with \fB$\fR operand number specifications, normally
3014 warnings are still given, since the implementation could not know what
3015 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
3016 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
3017 warning if the unused arguments are all pointers, since the Single
3018 Unix Specification says that such unused arguments are allowed.
3019 .IP "\fB\-Wno\-format\-zero\-length\fR" 4
3020 .IX Item "-Wno-format-zero-length"
3021 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
3022 The C standard specifies that zero-length formats are allowed.
3023 .IP "\fB\-Wformat\-nonliteral\fR" 4
3024 .IX Item "-Wformat-nonliteral"
3025 If \fB\-Wformat\fR is specified, also warn if the format string is not a
3026 string literal and so cannot be checked, unless the format function
3027 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
3028 .IP "\fB\-Wformat\-security\fR" 4
3029 .IX Item "-Wformat-security"
3030 If \fB\-Wformat\fR is specified, also warn about uses of format
3031 functions that represent possible security problems.  At present, this
3032 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
3033 format string is not a string literal and there are no format arguments,
3034 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
3035 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
3036 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
3037 in future warnings may be added to \fB\-Wformat\-security\fR that are not
3038 included in \fB\-Wformat\-nonliteral\fR.)
3039 .IP "\fB\-Wformat=2\fR" 4
3040 .IX Item "-Wformat=2"
3041 Enable \fB\-Wformat\fR plus format checks not included in
3042 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
3043 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
3044 .IP "\fB\-Wnonnull\fR" 4
3045 .IX Item "-Wnonnull"
3046 Warn about passing a null pointer for arguments marked as
3047 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
3048 .Sp
3049 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
3050 can be disabled with the \fB\-Wno\-nonnull\fR option.
3051 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3052 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
3053 Warn about uninitialized variables that are initialized with themselves.
3054 Note this option can only be used with the \fB\-Wuninitialized\fR option.
3055 .Sp
3056 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
3057 following snippet only when \fB\-Winit\-self\fR has been specified:
3058 .Sp
3059 .Vb 5
3060 \&        int f()
3061 \&        {
3062 \&          int i = i;
3063 \&          return i;
3064 \&        }
3065 .Ve
3066 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
3067 .IX Item "-Wimplicit-int (C and Objective-C only)"
3068 Warn when a declaration does not specify a type.
3069 This warning is enabled by \fB\-Wall\fR.
3070 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
3071 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
3072 Give a warning whenever a function is used before being declared. In
3073 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
3074 enabled by default and it is made into an error by
3075 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
3076 \&\fB\-Wall\fR.
3077 .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
3078 .IX Item "-Wimplicit (C and Objective-C only)"
3079 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
3080 This warning is enabled by \fB\-Wall\fR.
3081 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
3082 .IX Item "-Wignored-qualifiers (C and  only)"
3083 Warn if the return type of a function has a type qualifier
3084 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
3085 since the value returned by a function is not an lvalue.
3086 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
3087 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
3088 definitions, so such return types always receive a warning
3089 even without this option.
3090 .Sp
3091 This warning is also enabled by \fB\-Wextra\fR.
3092 .IP "\fB\-Wmain\fR" 4
3093 .IX Item "-Wmain"
3094 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
3095 a function with external linkage, returning int, taking either zero
3096 arguments, two, or three arguments of appropriate types.  This warning
3097 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
3098 or \fB\-pedantic\fR.
3099 .IP "\fB\-Wmissing\-braces\fR" 4
3100 .IX Item "-Wmissing-braces"
3101 Warn if an aggregate or union initializer is not fully bracketed.  In
3102 the following example, the initializer for \fBa\fR is not fully
3103 bracketed, but that for \fBb\fR is fully bracketed.
3104 .Sp
3105 .Vb 2
3106 \&        int a[2][2] = { 0, 1, 2, 3 };
3107 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
3108 .Ve
3109 .Sp
3110 This warning is enabled by \fB\-Wall\fR.
3111 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3112 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
3113 Warn if a user-supplied include directory does not exist.
3114 .IP "\fB\-Wparentheses\fR" 4
3115 .IX Item "-Wparentheses"
3116 Warn if parentheses are omitted in certain contexts, such
3117 as when there is an assignment in a context where a truth value
3118 is expected, or when operators are nested whose precedence people
3119 often get confused about.
3120 .Sp
3121 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
3122 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
3123 interpretation from that of ordinary mathematical notation.
3124 .Sp
3125 Also warn about constructions where there may be confusion to which
3126 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
3127 such a case:
3128 .Sp
3129 .Vb 7
3130 \&        {
3131 \&          if (a)
3132 \&            if (b)
3133 \&              foo ();
3134 \&          else
3135 \&            bar ();
3136 \&        }
3137 .Ve
3138 .Sp
3139 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
3140 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
3141 often not what the programmer expected, as illustrated in the above
3142 example by indentation the programmer chose.  When there is the
3143 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
3144 is specified.  To eliminate the warning, add explicit braces around
3145 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
3146 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
3147 look like this:
3148 .Sp
3149 .Vb 9
3150 \&        {
3151 \&          if (a)
3152 \&            {
3153 \&              if (b)
3154 \&                foo ();
3155 \&              else
3156 \&                bar ();
3157 \&            }
3158 \&        }
3159 .Ve
3160 .Sp
3161 Also warn for dangerous uses of the
3162 ?: with omitted middle operand \s-1GNU\s0 extension. When the condition
3163 in the ?: operator is a boolean expression the omitted value will
3164 be always 1. Often the user expects it to be a value computed
3165 inside the conditional expression instead.
3166 .Sp
3167 This warning is enabled by \fB\-Wall\fR.
3168 .IP "\fB\-Wsequence\-point\fR" 4
3169 .IX Item "-Wsequence-point"
3170 Warn about code that may have undefined semantics because of violations
3171 of sequence point rules in the C and \*(C+ standards.
3172 .Sp
3173 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
3174 program are evaluated in terms of \fIsequence points\fR, which represent
3175 a partial ordering between the execution of parts of the program: those
3176 executed before the sequence point, and those executed after it.  These
3177 occur after the evaluation of a full expression (one which is not part
3178 of a larger expression), after the evaluation of the first operand of a
3179 \&\f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, \f(CW\*(C`? :\*(C'\fR or \f(CW\*(C`,\*(C'\fR (comma) operator, before a
3180 function is called (but after the evaluation of its arguments and the
3181 expression denoting the called function), and in certain other places.
3182 Other than as expressed by the sequence point rules, the order of
3183 evaluation of subexpressions of an expression is not specified.  All
3184 these rules describe only a partial order rather than a total order,
3185 since, for example, if two functions are called within one expression
3186 with no sequence point between them, the order in which the functions
3187 are called is not specified.  However, the standards committee have
3188 ruled that function calls do not overlap.
3189 .Sp
3190 It is not specified when between sequence points modifications to the
3191 values of objects take effect.  Programs whose behavior depends on this
3192 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
3193 the previous and next sequence point an object shall have its stored
3194 value modified at most once by the evaluation of an expression.
3195 Furthermore, the prior value shall be read only to determine the value
3196 to be stored.\*(R".  If a program breaks these rules, the results on any
3197 particular implementation are entirely unpredictable.
3198 .Sp
3199 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
3200 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
3201 diagnosed by this option, and it may give an occasional false positive
3202 result, but in general it has been found fairly effective at detecting
3203 this sort of problem in programs.
3204 .Sp
3205 The standard is worded confusingly, therefore there is some debate
3206 over the precise meaning of the sequence point rules in subtle cases.
3207 Links to discussions of the problem, including proposed formal
3208 definitions, may be found on the \s-1GCC\s0 readings page, at
3209 <\fB\fR>.
3210 .Sp
3211 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
3212 .IP "\fB\-Wreturn\-type\fR" 4
3213 .IX Item "-Wreturn-type"
3214 Warn whenever a function is defined with a return-type that defaults
3215 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
3216 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
3217 (falling off the end of the function body is considered returning
3218 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with an
3219 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
3220 .Sp
3221 For \*(C+, a function without return type always produces a diagnostic
3222 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
3223 exceptions are \fBmain\fR and functions defined in system headers.
3224 .Sp
3225 This warning is enabled by \fB\-Wall\fR.
3226 .IP "\fB\-Wswitch\fR" 4
3227 .IX Item "-Wswitch"
3228 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3229 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3230 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
3231 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3232 provoke warnings when this option is used (even if there is a
3233 \&\f(CW\*(C`default\*(C'\fR label).
3234 This warning is enabled by \fB\-Wall\fR.
3235 .IP "\fB\-Wswitch\-default\fR" 4
3236 .IX Item "-Wswitch-default"
3237 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
3238 case.
3239 .IP "\fB\-Wswitch\-enum\fR" 4
3240 .IX Item "-Wswitch-enum"
3241 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3242 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3243 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3244 provoke warnings when this option is used.  The only difference
3245 between \fB\-Wswitch\fR and this option is that this option gives a
3246 warning about an omitted enumeration code even if there is a
3247 \&\f(CW\*(C`default\*(C'\fR label.
3248 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
3249 .IX Item "-Wsync-nand (C and  only)"
3250 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
3251 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
3252 .IP "\fB\-Wtrigraphs\fR" 4
3253 .IX Item "-Wtrigraphs"
3254 Warn if any trigraphs are encountered that might change the meaning of
3255 the program (trigraphs within comments are not warned about).
3256 This warning is enabled by \fB\-Wall\fR.
3257 .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
3258 .IX Item "-Wunused-but-set-parameter"
3259 Warn whenever a function parameter is assigned to, but otherwise unused
3260 (aside from its declaration).
3261 .Sp
3262 To suppress this warning use the \fBunused\fR attribute.
3263 .Sp
3264 This warning is also enabled by \fB\-Wunused\fR together with
3265 \&\fB\-Wextra\fR.
3266 .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
3267 .IX Item "-Wunused-but-set-variable"
3268 Warn whenever a local variable is assigned to, but otherwise unused
3269 (aside from its declaration).
3270 This warning is enabled by \fB\-Wall\fR.
3271 .Sp
3272 To suppress this warning use the \fBunused\fR attribute.
3273 .Sp
3274 This warning is also enabled by \fB\-Wunused\fR, which is enabled
3275 by \fB\-Wall\fR.
3276 .IP "\fB\-Wunused\-function\fR" 4
3277 .IX Item "-Wunused-function"
3278 Warn whenever a static function is declared but not defined or a
3279 non-inline static function is unused.
3280 This warning is enabled by \fB\-Wall\fR.
3281 .IP "\fB\-Wunused\-label\fR" 4
3282 .IX Item "-Wunused-label"
3283 Warn whenever a label is declared but not used.
3284 This warning is enabled by \fB\-Wall\fR.
3285 .Sp
3286 To suppress this warning use the \fBunused\fR attribute.
3287 .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
3288 .IX Item "-Wunused-local-typedefs (C, Objective-C,  and Objective- only)"
3289 Warn when a typedef locally defined in a function is not used.
3290 .IP "\fB\-Wunused\-parameter\fR" 4
3291 .IX Item "-Wunused-parameter"
3292 Warn whenever a function parameter is unused aside from its declaration.
3293 .Sp
3294 To suppress this warning use the \fBunused\fR attribute.
3295 .IP "\fB\-Wno\-unused\-result\fR" 4
3296 .IX Item "-Wno-unused-result"
3297 Do not warn if a caller of a function marked with attribute
3298 \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
3299 its return value. The default is \fB\-Wunused\-result\fR.
3300 .IP "\fB\-Wunused\-variable\fR" 4
3301 .IX Item "-Wunused-variable"
3302 Warn whenever a local variable or non-constant static variable is unused
3303 aside from its declaration.
3304 This warning is enabled by \fB\-Wall\fR.
3305 .Sp
3306 To suppress this warning use the \fBunused\fR attribute.
3307 .IP "\fB\-Wunused\-value\fR" 4
3308 .IX Item "-Wunused-value"
3309 Warn whenever a statement computes a result that is explicitly not
3310 used. To suppress this warning cast the unused expression to
3311 \&\fBvoid\fR. This includes an expression-statement or the left-hand
3312 side of a comma expression that contains no side effects. For example,
3313 an expression such as \fBx[i,j]\fR will cause a warning, while
3314 \&\fBx[(void)i,j]\fR will not.
3315 .Sp
3316 This warning is enabled by \fB\-Wall\fR.
3317 .IP "\fB\-Wunused\fR" 4
3318 .IX Item "-Wunused"
3319 All the above \fB\-Wunused\fR options combined.
3320 .Sp
3321 In order to get a warning about an unused function parameter, you must
3322 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
3323 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
3324 .IP "\fB\-Wuninitialized\fR" 4
3325 .IX Item "-Wuninitialized"
3326 Warn if an automatic variable is used without first being initialized
3327 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
3328 warn if a non-static reference or non-static \fBconst\fR member
3329 appears in a class without constructors.
3330 .Sp
3331 If you want to warn about code that uses the uninitialized value of the
3332 variable in its own initializer, use the \fB\-Winit\-self\fR option.
3333 .Sp
3334 These warnings occur for individual uninitialized or clobbered
3335 elements of structure, union or array variables as well as for
3336 variables that are uninitialized or clobbered as a whole.  They do
3337 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3338 these warnings depend on optimization, the exact variables or elements
3339 for which there are warnings will depend on the precise optimization
3340 options and version of \s-1GCC\s0 used.
3341 .Sp
3342 Note that there may be no warning about a variable that is used only
3343 to compute a value that itself is never used, because such
3344 computations may be deleted by data flow analysis before the warnings
3345 are printed.
3346 .IP "\fB\-Wmaybe\-uninitialized\fR" 4
3347 .IX Item "-Wmaybe-uninitialized"
3348 For an automatic variable, if there exists a path from the function
3349 entry to a use of the variable that is initialized, but there exist
3350 some other paths the variable is not initialized, the compiler will
3351 emit a warning if it can not prove the uninitialized paths do not
3352 happen at run time. These warnings are made optional because \s-1GCC\s0 is
3353 not smart enough to see all the reasons why the code might be correct
3354 despite appearing to have an error.  Here is one example of how
3355 this can happen:
3356 .Sp
3357 .Vb 12
3358 \&        {
3359 \&          int x;
3360 \&          switch (y)
3361 \&            {
3362 \&            case 1: x = 1;
3363 \&              break;
3364 \&            case 2: x = 4;
3365 \&              break;
3366 \&            case 3: x = 5;
3367 \&            }
3368 \&          foo (x);
3369 \&        }
3370 .Ve
3371 .Sp
3372 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3373 always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
3374 warning, the user needs to provide a default case with \fIassert\fR\|(0) or
3375 similar code.
3376 .Sp
3377 This option also warns when a non-volatile automatic variable might be
3378 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3379 only in optimizing compilation.
3380 .Sp
3381 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3382 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3383 call it at any point in the code.  As a result, you may get a warning
3384 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3385 in fact be called at the place that would cause a problem.
3386 .Sp
3387 Some spurious warnings can be avoided if you declare all the functions
3388 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3389 .Sp
3390 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3391 .IP "\fB\-Wunknown\-pragmas\fR" 4
3392 .IX Item "-Wunknown-pragmas"
3393 Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
3394 \&\s-1GCC\s0.  If this command-line option is used, warnings will even be issued
3395 for unknown pragmas in system header files.  This is not the case if
3396 the warnings were only enabled by the \fB\-Wall\fR command-line option.
3397 .IP "\fB\-Wno\-pragmas\fR" 4
3398 .IX Item "-Wno-pragmas"
3399 Do not warn about misuses of pragmas, such as incorrect parameters,
3400 invalid syntax, or conflicts between pragmas.  See also
3401 \&\fB\-Wunknown\-pragmas\fR.
3402 .IP "\fB\-Wstrict\-aliasing\fR" 4
3403 .IX Item "-Wstrict-aliasing"
3404 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3405 It warns about code that might break the strict aliasing rules that the
3406 compiler is using for optimization.  The warning does not catch all
3407 cases, but does attempt to catch the more common pitfalls.  It is
3408 included in \fB\-Wall\fR.
3409 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3410 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3411 .IX Item "-Wstrict-aliasing=n"
3412 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3413 It warns about code that might break the strict aliasing rules that the
3414 compiler is using for optimization.
3415 Higher levels correspond to higher accuracy (fewer false positives).
3416 Higher levels also correspond to more effort, similar to the way \-O works.
3417 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3418 with n=3.
3419 .Sp
3420 Level 1: Most aggressive, quick, least accurate.
3421 Possibly useful when higher levels
3422 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few
3423 false negatives.  However, it has many false positives.
3424 Warns for all pointer conversions between possibly incompatible types,
3425 even if never dereferenced.  Runs in the front end only.
3426 .Sp
3427 Level 2: Aggressive, quick, not too precise.
3428 May still have many false positives (not as many as level 1 though),
3429 and few false negatives (but possibly more than level 1).
3430 Unlike level 1, it only warns when an address is taken.  Warns about
3431 incomplete types.  Runs in the front end only.
3432 .Sp
3433 Level 3 (default for \fB\-Wstrict\-aliasing\fR):
3434 Should have very few false positives and few false
3435 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3436 Takes care of the common pun+dereference pattern in the front end:
3437 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3438 If optimization is enabled, it also runs in the back end, where it deals
3439 with multiple statement cases using flow-sensitive points-to information.
3440 Only warns when the converted pointer is dereferenced.
3441 Does not warn about incomplete types.
3442 .IP "\fB\-Wstrict\-overflow\fR" 4
3443 .IX Item "-Wstrict-overflow"
3444 .PD 0
3445 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3446 .IX Item "-Wstrict-overflow=n"
3447 .PD
3448 This option is only active when \fB\-fstrict\-overflow\fR is active.
3449 It warns about cases where the compiler optimizes based on the
3450 assumption that signed overflow does not occur.  Note that it does not
3451 warn about all cases where the code might overflow: it only warns
3452 about cases where the compiler implements some optimization.  Thus
3453 this warning depends on the optimization level.
3454 .Sp
3455 An optimization that assumes that signed overflow does not occur is
3456 perfectly safe if the values of the variables involved are such that
3457 overflow never does, in fact, occur.  Therefore this warning can
3458 easily give a false positive: a warning about code that is not
3459 actually a problem.  To help focus on important issues, several
3460 warning levels are defined.  No warnings are issued for the use of
3461 undefined signed overflow when estimating how many iterations a loop
3462 will require, in particular when determining whether a loop will be
3463 executed at all.
3464 .RS 4
3465 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3466 .IX Item "-Wstrict-overflow=1"
3467 Warn about cases that are both questionable and easy to avoid.  For
3468 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3469 compiler will simplify this to \f(CW1\fR.  This level of
3470 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3471 are not, and must be explicitly requested.
3472 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3473 .IX Item "-Wstrict-overflow=2"
3474 Also warn about other cases where a comparison is simplified to a
3475 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3476 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3477 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3478 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3479 \&\fB\-Wstrict\-overflow=2\fR.
3480 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3481 .IX Item "-Wstrict-overflow=3"
3482 Also warn about other cases where a comparison is simplified.  For
3483 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3484 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3485 .IX Item "-Wstrict-overflow=4"
3486 Also warn about other simplifications not covered by the above cases.
3487 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3488 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3489 .IX Item "-Wstrict-overflow=5"
3490 Also warn about cases where the compiler reduces the magnitude of a
3491 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3492 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3493 highest warning level because this simplification applies to many
3494 comparisons, so this warning level will give a very large number of
3495 false positives.
3496 .RE
3497 .RS 4
3498 .RE
3499 .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR]" 4
3500 .IX Item "-Wsuggest-attribute=[pure|const|noreturn]"
3501 Warn for cases where adding an attribute may be beneficial. The
3502 attributes currently supported are listed below.
3503 .RS 4
3504 .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
3505 .IX Item "-Wsuggest-attribute=pure"
3506 .PD 0
3507 .IP "\fB\-Wsuggest\-attribute=const\fR" 4
3508 .IX Item "-Wsuggest-attribute=const"
3509 .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
3510 .IX Item "-Wsuggest-attribute=noreturn"
3511 .PD
3512 Warn about functions that might be candidates for attributes
3513 \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR.  The compiler only warns for
3514 functions visible in other compilation units or (in the case of \f(CW\*(C`pure\*(C'\fR and
3515 \&\f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns normally. A function
3516 returns normally if it doesn't contain an infinite loop nor returns abnormally
3517 by throwing, calling \f(CW\*(C`abort()\*(C'\fR or trapping.  This analysis requires option
3518 \&\fB\-fipa\-pure\-const\fR, which is enabled by default at \fB\-O\fR and
3519 higher.  Higher optimization levels improve the accuracy of the analysis.
3520 .RE
3521 .RS 4
3522 .RE
3523 .IP "\fB\-Warray\-bounds\fR" 4
3524 .IX Item "-Warray-bounds"
3525 This option is only active when \fB\-ftree\-vrp\fR is active
3526 (default for \fB\-O2\fR and above). It warns about subscripts to arrays
3527 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3528 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3529 .IX Item "-Wno-div-by-zero"
3530 Do not warn about compile-time integer division by zero.  Floating-point
3531 division by zero is not warned about, as it can be a legitimate way of
3532 obtaining infinities and NaNs.
3533 .IP "\fB\-Wsystem\-headers\fR" 4
3534 .IX Item "-Wsystem-headers"
3535 Print warning messages for constructs found in system header files.
3536 Warnings from system headers are normally suppressed, on the assumption
3537 that they usually do not indicate real problems and would only make the
3538 compiler output harder to read.  Using this command-line option tells
3539 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3540 code.  However, note that using \fB\-Wall\fR in conjunction with this
3541 option will \fInot\fR warn about unknown pragmas in system
3542 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3543 .IP "\fB\-Wtrampolines\fR" 4
3544 .IX Item "-Wtrampolines"
3545 .Vb 1
3546 \& Warn about trampolines generated for pointers to nested functions.
3547 \&
3548 \& A trampoline is a small piece of data or code that is created at run
3549 \& time on the stack when the address of a nested function is taken, and
3550 \& is used to call the nested function indirectly.  For some targets, it
3551 \& is made up of data only and thus requires no special treatment.  But,
3552 \& for most targets, it is made up of code and thus requires the stack
3553 \& to be made executable in order for the program to work properly.
3554 .Ve
3555 .IP "\fB\-Wfloat\-equal\fR" 4
3556 .IX Item "-Wfloat-equal"
3557 Warn if floating-point values are used in equality comparisons.
3558 .Sp
3559 The idea behind this is that sometimes it is convenient (for the
3560 programmer) to consider floating-point values as approximations to
3561 infinitely precise real numbers.  If you are doing this, then you need
3562 to compute (by analyzing the code, or in some other way) the maximum or
3563 likely maximum error that the computation introduces, and allow for it
3564 when performing comparisons (and when producing output, but that's a
3565 different problem).  In particular, instead of testing for equality, you
3566 would check to see whether the two values have ranges that overlap; and
3567 this is done with the relational operators, so equality comparisons are
3568 probably mistaken.
3569 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3570 .IX Item "-Wtraditional (C and Objective-C only)"
3571 Warn about certain constructs that behave differently in traditional and
3572 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3573 equivalent, and/or problematic constructs that should be avoided.
3574 .RS 4
3575 .IP "\(bu" 4
3576 Macro parameters that appear within string literals in the macro body.
3577 In traditional C macro replacement takes place within string literals,
3578 but does not in \s-1ISO\s0 C.
3579 .IP "\(bu" 4
3580 In traditional C, some preprocessor directives did not exist.
3581 Traditional preprocessors would only consider a line to be a directive
3582 if the \fB#\fR appeared in column 1 on the line.  Therefore
3583 \&\fB\-Wtraditional\fR warns about directives that traditional C
3584 understands but would ignore because the \fB#\fR does not appear as the
3585 first character on the line.  It also suggests you hide directives like
3586 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3587 traditional implementations would not recognize \fB#elif\fR, so it
3588 suggests avoiding it altogether.
3589 .IP "\(bu" 4
3590 A function-like macro that appears without arguments.
3591 .IP "\(bu" 4
3592 The unary plus operator.
3593 .IP "\(bu" 4
3594 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
3595 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3596 constants.)  Note, these suffixes appear in macros defined in the system
3597 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3598 Use of these macros in user code might normally lead to spurious
3599 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3600 avoid warning in these cases.
3601 .IP "\(bu" 4
3602 A function declared external in one block and then used after the end of
3603 the block.
3604 .IP "\(bu" 4
3605 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3606 .IP "\(bu" 4
3607 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3608 This construct is not accepted by some traditional C compilers.
3609 .IP "\(bu" 4
3610 The \s-1ISO\s0 type of an integer constant has a different width or
3611 signedness from its traditional type.  This warning is only issued if
3612 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3613 typically represent bit patterns, are not warned about.
3614 .IP "\(bu" 4
3615 Usage of \s-1ISO\s0 string concatenation is detected.
3616 .IP "\(bu" 4
3617 Initialization of automatic aggregates.
3618 .IP "\(bu" 4
3619 Identifier conflicts with labels.  Traditional C lacks a separate
3620 namespace for labels.
3621 .IP "\(bu" 4
3622 Initialization of unions.  If the initializer is zero, the warning is
3623 omitted.  This is done under the assumption that the zero initializer in
3624 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3625 initializer warnings and relies on default initialization to zero in the
3626 traditional C case.
3627 .IP "\(bu" 4
3628 Conversions by prototypes between fixed/floating\-point values and vice
3629 versa.  The absence of these prototypes when compiling with traditional
3630 C would cause serious problems.  This is a subset of the possible
3631 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3632 .IP "\(bu" 4
3633 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3634 \&\fInot\fR issued for prototype declarations or variadic functions
3635 because these \s-1ISO\s0 C features will appear in your code when using
3636 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3637 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3638 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3639 traditional C compatibility.
3640 .RE
3641 .RS 4
3642 .RE
3643 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3644 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3645 Warn if a prototype causes a type conversion that is different from what
3646 would happen to the same argument in the absence of a prototype.  This
3647 includes conversions of fixed point to floating and vice versa, and
3648 conversions changing the width or signedness of a fixed-point argument
3649 except when the same as the default promotion.
3650 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3651 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3652 Warn when a declaration is found after a statement in a block.  This
3653 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3654 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3655 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.
3656 .IP "\fB\-Wundef\fR" 4
3657 .IX Item "-Wundef"
3658 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3659 .IP "\fB\-Wno\-endif\-labels\fR" 4
3660 .IX Item "-Wno-endif-labels"
3661 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3662 .IP "\fB\-Wshadow\fR" 4
3663 .IX Item "-Wshadow"
3664 Warn whenever a local variable or type declaration shadows another variable,
3665 parameter, type, or class member (in \*(C+), or whenever a built-in function
3666 is shadowed. Note that in \*(C+, the compiler will not warn if a local variable
3667 shadows a struct/class/enum, but will warn if it shadows an explicit typedef.
3668 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3669 .IX Item "-Wlarger-than=len"
3670 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3671 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3672 .IX Item "-Wframe-larger-than=len"
3673 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3674 The computation done to determine the stack frame size is approximate
3675 and not conservative.
3676 The actual requirements may be somewhat greater than \fIlen\fR
3677 even if you do not get a warning.  In addition, any space allocated
3678 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3679 is not included by the compiler when determining
3680 whether or not to issue a warning.
3681 .IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
3682 .IX Item "-Wno-free-nonheap-object"
3683 Do not warn when attempting to free an object that was not allocated
3684 on the heap.
3685 .IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
3686 .IX Item "-Wstack-usage=len"
3687 Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
3688 The computation done to determine the stack usage is conservative.
3689 Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
3690 constructs is included by the compiler when determining whether or not to
3691 issue a warning.
3692 .Sp
3693 The message is in keeping with the output of \fB\-fstack\-usage\fR.
3694 .RS 4
3695 .IP "\(bu" 4
3696 If the stack usage is fully static but exceeds the specified amount, it's:
3697 .Sp
3698 .Vb 1
3699 \&          warning: stack usage is 1120 bytes
3700 .Ve
3701 .IP "\(bu" 4
3702 If the stack usage is (partly) dynamic but bounded, it's:
3703 .Sp
3704 .Vb 1
3705 \&          warning: stack usage might be 1648 bytes
3706 .Ve
3707 .IP "\(bu" 4
3708 If the stack usage is (partly) dynamic and not bounded, it's:
3709 .Sp
3710 .Vb 1
3711 \&          warning: stack usage might be unbounded
3712 .Ve
3713 .RE
3714 .RS 4
3715 .RE
3716 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3717 .IX Item "-Wunsafe-loop-optimizations"
3718 Warn if the loop cannot be optimized because the compiler could not
3719 assume anything on the bounds of the loop indices.  With
3720 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3721 such assumptions.
3722 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3723 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3724 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3725 width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets
3726 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3727 and \fB\-pedantic\fR without gnu-extensions.
3728 .IP "\fB\-Wpointer\-arith\fR" 4
3729 .IX Item "-Wpointer-arith"
3730 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3731 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3732 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3733 to functions.  In \*(C+, warn also when an arithmetic operation involves
3734 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3735 .IP "\fB\-Wtype\-limits\fR" 4
3736 .IX Item "-Wtype-limits"
3737 Warn if a comparison is always true or always false due to the limited
3738 range of the data type, but do not warn for constant expressions.  For
3739 example, warn if an unsigned variable is compared against zero with
3740 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3741 \&\fB\-Wextra\fR.
3742 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3743 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3744 Warn whenever a function call is cast to a non-matching type.
3745 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3746 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3747 .IX Item "-Wc++-compat (C and Objective-C only)"
3748 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3749 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3750 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3751 .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3752 .IX Item "-Wc++11-compat ( and Objective- only)"
3753 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998
3754 and \s-1ISO\s0 \*(C+ 2011, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that are keywords
3755 in \s-1ISO\s0 \*(C+ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
3756 enabled by \fB\-Wall\fR.
3757 .IP "\fB\-Wcast\-qual\fR" 4
3758 .IX Item "-Wcast-qual"
3759 Warn whenever a pointer is cast so as to remove a type qualifier from
3760 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3761 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3762 .Sp
3763 Also warn when making a cast that introduces a type qualifier in an
3764 unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
3765 is unsafe, as in this example:
3766 .Sp
3767 .Vb 6
3768 \&          /* p is char ** value.  */
3769 \&          const char **q = (const char **) p;
3770 \&          /* Assignment of readonly string to const char * is OK.  */
3771 \&          *q = "string";
3772 \&          /* Now char** pointer points to read\-only memory.  */
3773 \&          **p = \*(Aqb\*(Aq;
3774 .Ve
3775 .IP "\fB\-Wcast\-align\fR" 4
3776 .IX Item "-Wcast-align"
3777 Warn whenever a pointer is cast such that the required alignment of the
3778 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3779 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3780 two\- or four-byte boundaries.
3781 .IP "\fB\-Wwrite\-strings\fR" 4
3782 .IX Item "-Wwrite-strings"
3783 When compiling C, give string constants the type \f(CW\*(C`const
3784 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3785 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3786 warnings will help you find at compile time code that can try to write
3787 into a string constant, but only if you have been very careful about
3788 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3789 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3790 these warnings.
3791 .Sp
3792 When compiling \*(C+, warn about the deprecated conversion from string
3793 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3794 programs.
3795 .IP "\fB\-Wclobbered\fR" 4
3796 .IX Item "-Wclobbered"
3797 Warn for variables that might be changed by \fBlongjmp\fR or
3798 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3799 .IP "\fB\-Wconversion\fR" 4
3800 .IX Item "-Wconversion"
3801 Warn for implicit conversions that may alter a value. This includes
3802 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3803 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3804 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3805 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3806 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3807 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3808 conversions between signed and unsigned integers can be disabled by
3809 using \fB\-Wno\-sign\-conversion\fR.
3810 .Sp
3811 For \*(C+, also warn for confusing overload resolution for user-defined
3812 conversions; and conversions that will never use a type conversion
3813 operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
3814 reference to them. Warnings about conversions between signed and
3815 unsigned integers are disabled by default in \*(C+ unless
3816 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3817 .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
3818 .IX Item "-Wno-conversion-null ( and Objective- only)"
3819 Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3820 types. \fB\-Wconversion\-null\fR is enabled by default.
3821 .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
3822 .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
3823 Warn when a literal '0' is used as null pointer constant.  This can
3824 be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
3825 .IP "\fB\-Wempty\-body\fR" 4
3826 .IX Item "-Wempty-body"
3827 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3828 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3829 .IP "\fB\-Wenum\-compare\fR" 4
3830 .IX Item "-Wenum-compare"
3831 Warn about a comparison between values of different enumerated types.
3832 In \*(C+ enumeral mismatches in conditional expressions are also
3833 diagnosed and the warning is enabled by default.  In C this warning is 
3834 enabled by \fB\-Wall\fR.
3835 .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
3836 .IX Item "-Wjump-misses-init (C, Objective-C only)"
3837 Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
3838 forward across the initialization of a variable, or jumps backward to a
3839 label after the variable has been initialized.  This only warns about
3840 variables that are initialized when they are declared.  This warning is
3841 only supported for C and Objective-C; in \*(C+ this sort of branch is an
3842 error in any case.
3843 .Sp
3844 \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
3845 can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
3846 .IP "\fB\-Wsign\-compare\fR" 4
3847 .IX Item "-Wsign-compare"
3848 Warn when a comparison between signed and unsigned values could produce
3849 an incorrect result when the signed value is converted to unsigned.
3850 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3851 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3852 .IP "\fB\-Wsign\-conversion\fR" 4
3853 .IX Item "-Wsign-conversion"
3854 Warn for implicit conversions that may change the sign of an integer
3855 value, like assigning a signed integer expression to an unsigned
3856 integer variable. An explicit cast silences the warning. In C, this
3857 option is enabled also by \fB\-Wconversion\fR.
3858 .IP "\fB\-Waddress\fR" 4
3859 .IX Item "-Waddress"
3860 Warn about suspicious uses of memory addresses. These include using
3861 the address of a function in a conditional expression, such as
3862 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3863 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3864 uses typically indicate a programmer error: the address of a function
3865 always evaluates to true, so their use in a conditional usually
3866 indicate that the programmer forgot the parentheses in a function
3867 call; and comparisons against string literals result in unspecified
3868 behavior and are not portable in C, so they usually indicate that the
3869 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3870 \&\fB\-Wall\fR.
3871 .IP "\fB\-Wlogical\-op\fR" 4
3872 .IX Item "-Wlogical-op"
3873 Warn about suspicious uses of logical operators in expressions.
3874 This includes using logical operators in contexts where a
3875 bit-wise operator is likely to be expected.
3876 .IP "\fB\-Waggregate\-return\fR" 4
3877 .IX Item "-Waggregate-return"
3878 Warn if any functions that return structures or unions are defined or
3879 called.  (In languages where you can return an array, this also elicits
3880 a warning.)
3881 .IP "\fB\-Wno\-attributes\fR" 4
3882 .IX Item "-Wno-attributes"
3883 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3884 unrecognized attributes, function attributes applied to variables,
3885 etc.  This will not stop errors for incorrect use of supported
3886 attributes.
3887 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3888 .IX Item "-Wno-builtin-macro-redefined"
3889 Do not warn if certain built-in macros are redefined.  This suppresses
3890 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3891 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3892 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3893 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3894 Warn if a function is declared or defined without specifying the
3895 argument types.  (An old-style function definition is permitted without
3896 a warning if preceded by a declaration that specifies the argument
3897 types.)
3898 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3899 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3900 Warn for obsolescent usages, according to the C Standard, in a
3901 declaration. For example, warn if storage-class specifiers like
3902 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3903 is also enabled by \fB\-Wextra\fR.
3904 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3905 .IX Item "-Wold-style-definition (C and Objective-C only)"
3906 Warn if an old-style function definition is used.  A warning is given
3907 even if there is a previous prototype.
3908 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3909 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3910 A function parameter is declared without a type specifier in K&R\-style
3911 functions:
3912 .Sp
3913 .Vb 1
3914 \&        void foo(bar) { }
3915 .Ve
3916 .Sp
3917 This warning is also enabled by \fB\-Wextra\fR.
3918 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3919 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3920 Warn if a global function is defined without a previous prototype
3921 declaration.  This warning is issued even if the definition itself
3922 provides a prototype.  The aim is to detect global functions that 
3923 are not declared in header files.
3924 .IP "\fB\-Wmissing\-declarations\fR" 4
3925 .IX Item "-Wmissing-declarations"
3926 Warn if a global function is defined without a previous declaration.
3927 Do so even if the definition itself provides a prototype.
3928 Use this option to detect global functions that are not declared in
3929 header files.  In \*(C+, no warnings are issued for function templates,
3930 or for inline functions, or for functions in anonymous namespaces.
3931 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3932 .IX Item "-Wmissing-field-initializers"
3933 Warn if a structure's initializer has some fields missing.  For
3934 example, the following code would cause such a warning, because
3935 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3936 .Sp
3937 .Vb 2
3938 \&        struct s { int f, g, h; };
3939 \&        struct s x = { 3, 4 };
3940 .Ve
3941 .Sp
3942 This option does not warn about designated initializers, so the following
3943 modification would not trigger a warning:
3944 .Sp
3945 .Vb 2
3946 \&        struct s { int f, g, h; };
3947 \&        struct s x = { .f = 3, .g = 4 };
3948 .Ve
3949 .Sp
3950 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3951 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3952 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3953 .IX Item "-Wmissing-format-attribute"
3954 Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
3955 attributes.  Note these are only possible candidates, not absolute ones.
3956 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3957 are used in assignment, initialization, parameter passing or return
3958 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3959 resulting type.  I.e. the left-hand side of the assignment or
3960 initialization, the type of the parameter variable, or the return type
3961 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3962 attribute to avoid the warning.
3963 .Sp
3964 \&\s-1GCC\s0 will also warn about function definitions that might be
3965 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3966 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3967 might be appropriate for any function that calls a function like
3968 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3969 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3970 appropriate may not be detected.
3971 .IP "\fB\-Wno\-multichar\fR" 4
3972 .IX Item "-Wno-multichar"
3973 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3974 Usually they indicate a typo in the user's code, as they have
3975 implementation-defined values, and should not be used in portable code.
3976 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3977 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3978 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3979 different sequences of characters.  However, sometimes when characters
3980 outside the basic \s-1ASCII\s0 character set are used, you can have two
3981 different character sequences that look the same.  To avoid confusion,
3982 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3983 when applied ensure that two sequences that look the same are turned into
3984 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
3985 have not been normalized; this option controls that warning.
3986 .Sp
3987 There are four levels of warning supported by \s-1GCC\s0.  The default is
3988 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
3989 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3990 recommended form for most uses.
3991 .Sp
3992 Unfortunately, there are some characters allowed in identifiers by
3993 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+ that, when turned into \s-1NFC\s0, are not allowed in 
3994 identifiers.  That is, there's no way to use these symbols in portable
3995 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3996 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3997 It is hoped that future versions of the standards involved will correct
3998 this, which is why this option is not the default.
3999 .Sp
4000 You can switch the warning off for all characters by writing
4001 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
4002 were using some other normalization scheme (like \*(L"D\*(R"), because
4003 otherwise you can easily create bugs that are literally impossible to see.
4004 .Sp
4005 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
4006 in some fonts or display methodologies, especially once formatting has
4007 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
4008 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR that has been
4009 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
4010 normalization scheme to convert all these into a standard form as
4011 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
4012 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
4013 about every identifier that contains the letter O because it might be
4014 confused with the digit 0, and so is not the default, but may be
4015 useful as a local coding convention if the programming environment is
4016 unable to be fixed to display these characters distinctly.
4017 .IP "\fB\-Wno\-deprecated\fR" 4
4018 .IX Item "-Wno-deprecated"
4019 Do not warn about usage of deprecated features.
4020 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
4021 .IX Item "-Wno-deprecated-declarations"
4022 Do not warn about uses of functions,
4023 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
4024 attribute.
4025 .IP "\fB\-Wno\-overflow\fR" 4
4026 .IX Item "-Wno-overflow"
4027 Do not warn about compile-time overflow in constant expressions.
4028 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
4029 .IX Item "-Woverride-init (C and Objective-C only)"
4030 Warn if an initialized field without side effects is overridden when
4031 using designated initializers.
4032 .Sp
4033 This warning is included in \fB\-Wextra\fR.  To get other
4034 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
4035 \&\-Wno\-override\-init\fR.
4036 .IP "\fB\-Wpacked\fR" 4
4037 .IX Item "-Wpacked"
4038 Warn if a structure is given the packed attribute, but the packed
4039 attribute has no effect on the layout or size of the structure.
4040 Such structures may be mis-aligned for little benefit.  For
4041 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
4042 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
4043 have the packed attribute:
4044 .Sp
4045 .Vb 8
4046 \&        struct foo {
4047 \&          int x;
4048 \&          char a, b, c, d;
4049 \&        } _\|_attribute_\|_((packed));
4050 \&        struct bar {
4051 \&          char z;
4052 \&          struct foo f;
4053 \&        };
4054 .Ve
4055 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
4056 .IX Item "-Wpacked-bitfield-compat"
4057 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
4058 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
4059 the change can lead to differences in the structure layout.  \s-1GCC\s0
4060 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
4061 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
4062 and \f(CW\*(C`b\*(C'\fR in this structure:
4063 .Sp
4064 .Vb 5
4065 \&        struct foo
4066 \&        {
4067 \&          char a:4;
4068 \&          char b:8;
4069 \&        } _\|_attribute_\|_ ((packed));
4070 .Ve
4071 .Sp
4072 This warning is enabled by default.  Use
4073 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
4074 .IP "\fB\-Wpadded\fR" 4
4075 .IX Item "-Wpadded"
4076 Warn if padding is included in a structure, either to align an element
4077 of the structure or to align the whole structure.  Sometimes when this
4078 happens it is possible to rearrange the fields of the structure to
4079 reduce the padding and so make the structure smaller.
4080 .IP "\fB\-Wredundant\-decls\fR" 4
4081 .IX Item "-Wredundant-decls"
4082 Warn if anything is declared more than once in the same scope, even in
4083 cases where multiple declaration is valid and changes nothing.
4084 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
4085 .IX Item "-Wnested-externs (C and Objective-C only)"
4086 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
4087 .IP "\fB\-Winline\fR" 4
4088 .IX Item "-Winline"
4089 Warn if a function can not be inlined and it was declared as inline.
4090 Even with this option, the compiler will not warn about failures to
4091 inline functions declared in system headers.
4092 .Sp
4093 The compiler uses a variety of heuristics to determine whether or not
4094 to inline a function.  For example, the compiler takes into account
4095 the size of the function being inlined and the amount of inlining
4096 that has already been done in the current function.  Therefore,
4097 seemingly insignificant changes in the source program can cause the
4098 warnings produced by \fB\-Winline\fR to appear or disappear.
4099 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
4100 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
4101 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
4102 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
4103 to a non-POD type is undefined.  In existing \*(C+ implementations,
4104 however, \fBoffsetof\fR typically gives meaningful results even when
4105 applied to certain kinds of non-POD types. (Such as a simple
4106 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
4107 constructor.)  This flag is for users who are aware that they are
4108 writing nonportable code and who have deliberately chosen to ignore the
4109 warning about it.
4110 .Sp
4111 The restrictions on \fBoffsetof\fR may be relaxed in a future version
4112 of the \*(C+ standard.
4113 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
4114 .IX Item "-Wno-int-to-pointer-cast"
4115 Suppress warnings from casts to pointer type of an integer of a
4116 different size. In \*(C+, casting to a pointer type of smaller size is
4117 an error. \fBWint-to-pointer-cast\fR is enabled by default.
4118 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
4119 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
4120 Suppress warnings from casts from a pointer to an integer type of a
4121 different size.
4122 .IP "\fB\-Winvalid\-pch\fR" 4
4123 .IX Item "-Winvalid-pch"
4124 Warn if a precompiled header is found in
4125 the search path but can't be used.
4126 .IP "\fB\-Wlong\-long\fR" 4
4127 .IX Item "-Wlong-long"