VOP_FSYNC.9: Missing comma
[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 "2013-04-11" "gcc-4.7.3" "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\fB.mm\fR" 4
1034 .IX Item "file.mm"
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\fB.cc\fR" 4
1051 .IX Item "file.cc"
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\fB.mm\fR" 4
1070 .IX Item "file.mm"
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\fB.ads\fR" 4
1148 .IX Item "file.ads"
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\fB.sx\fR" 4
1165 .IX Item "file.sx"
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\fB.so\fR" 4
1421 .IX Item "-fplugin=name.so"
1422 Load the plugin code in file \fIname\fR.so, 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
1436 specs.
1437 .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
1438 .IX Item "-fdump-go-spec=file"
1439 For input files in any language, generate corresponding Go
1440 declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
1441 \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
1442 useful way to start writing a Go interface to code written in some
1443 other language.
1444 .IP "\fB@\fR\fIfile\fR" 4
1445 .IX Item "@file"
1446 Read command-line options from \fIfile\fR.  The options read are
1447 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1448 does not exist, or cannot be read, then the option will be treated
1449 literally, and not removed.
1450 .Sp
1451 Options in \fIfile\fR are separated by whitespace.  A whitespace
1452 character may be included in an option by surrounding the entire
1453 option in either single or double quotes.  Any character (including a
1454 backslash) may be included by prefixing the character to be included
1455 with a backslash.  The \fIfile\fR may itself contain additional
1456 @\fIfile\fR options; any such options will be processed recursively.
1457 .Sh "Compiling \*(C+ Programs"
1458 .IX Subsection "Compiling  Programs"
1459 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1460 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1461 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1462 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1463 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1464 files with these names and compiles them as \*(C+ programs even if you
1465 call the compiler the same way as for compiling C programs (usually
1466 with the name \fBgcc\fR).
1467 .PP
1468 However, the use of \fBgcc\fR does not add the \*(C+ library.
1469 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1470 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1471 files unless \fB\-x\fR is used, and automatically specifies linking
1472 against the \*(C+ library.  This program is also useful when
1473 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1474 compilations.  On many systems, \fBg++\fR is also installed with
1475 the name \fBc++\fR.
1476 .PP
1477 When you compile \*(C+ programs, you may specify many of the same
1478 command-line options that you use for compiling programs in any
1479 language; or command-line options meaningful for C and related
1480 languages; or options that are meaningful only for \*(C+ programs.
1481 .Sh "Options Controlling C Dialect"
1482 .IX Subsection "Options Controlling C Dialect"
1483 The following options control the dialect of C (or languages derived
1484 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1485 accepts:
1486 .IP "\fB\-ansi\fR" 4
1487 .IX Item "-ansi"
1488 In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
1489 equivalent to \fB\-std=c++98\fR.
1490 .Sp
1491 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1492 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1493 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1494 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1495 type of system you are using.  It also enables the undesirable and
1496 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1497 it disables recognition of \*(C+ style \fB//\fR comments as well as
1498 the \f(CW\*(C`inline\*(C'\fR keyword.
1499 .Sp
1500 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1501 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1502 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1503 course, but it is useful to put them in header files that might be included
1504 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1505 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1506 without \fB\-ansi\fR.
1507 .Sp
1508 The \fB\-ansi\fR option does not cause non-ISO programs to be
1509 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1510 addition to \fB\-ansi\fR.
1511 .Sp
1512 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1513 option is used.  Some header files may notice this macro and refrain
1514 from declaring certain functions or defining certain macros that the
1515 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1516 programs that might use these names for other things.
1517 .Sp
1518 Functions that would normally be built in but do not have semantics
1519 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
1520 functions when \fB\-ansi\fR is used.
1521 .IP "\fB\-std=\fR" 4
1522 .IX Item "-std="
1523 Determine the language standard.   This option
1524 is currently only supported when compiling C or \*(C+.
1525 .Sp
1526 The compiler can accept several base standards, such as \fBc90\fR or
1527 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1528 \&\fBgnu90\fR or \fBgnu++98\fR.  By specifying a base standard, the
1529 compiler will accept all programs following that standard and those
1530 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1531 \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
1532 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1533 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1534 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1535 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1536 standard, all features the compiler support are enabled, even when
1537 those features change the meaning of the base standard and some
1538 strict-conforming programs may be rejected.  The particular standard
1539 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1540 extensions given that version of the standard. For example
1541 \&\fB\-std=gnu90 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1542 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1543 .Sp
1544 A value for this option must be provided; possible values are
1545 .RS 4
1546 .IP "\fBc90\fR" 4
1547 .IX Item "c90"
1548 .PD 0
1549 .IP "\fBc89\fR" 4
1550 .IX Item "c89"
1551 .IP "\fBiso9899:1990\fR" 4
1552 .IX Item "iso9899:1990"
1553 .PD
1554 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1555 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1556 .IP "\fBiso9899:199409\fR" 4
1557 .IX Item "iso9899:199409"
1558 \&\s-1ISO\s0 C90 as modified in amendment 1.
1559 .IP "\fBc99\fR" 4
1560 .IX Item "c99"
1561 .PD 0
1562 .IP "\fBc9x\fR" 4
1563 .IX Item "c9x"
1564 .IP "\fBiso9899:1999\fR" 4
1565 .IX Item "iso9899:1999"
1566 .IP "\fBiso9899:199x\fR" 4
1567 .IX Item "iso9899:199x"
1568 .PD
1569 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1570 <\fBhttp://gcc.gnu.org/gcc\-4.7/c99status.html\fR> for more information.  The
1571 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1572 .IP "\fBc11\fR" 4
1573 .IX Item "c11"
1574 .PD 0
1575 .IP "\fBc1x\fR" 4
1576 .IX Item "c1x"
1577 .IP "\fBiso9899:2011\fR" 4
1578 .IX Item "iso9899:2011"
1579 .PD
1580 \&\s-1ISO\s0 C11, the 2011 revision of the \s-1ISO\s0 C standard.
1581 Support is incomplete and experimental.  The name \fBc1x\fR is
1582 deprecated.
1583 .IP "\fBgnu90\fR" 4
1584 .IX Item "gnu90"
1585 .PD 0
1586 .IP "\fBgnu89\fR" 4
1587 .IX Item "gnu89"
1588 .PD
1589 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1590 is the default for C code.
1591 .IP "\fBgnu99\fR" 4
1592 .IX Item "gnu99"
1593 .PD 0
1594 .IP "\fBgnu9x\fR" 4
1595 .IX Item "gnu9x"
1596 .PD
1597 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1598 this will become the default.  The name \fBgnu9x\fR is deprecated.
1599 .IP "\fBgnu11\fR" 4
1600 .IX Item "gnu11"
1601 .PD 0
1602 .IP "\fBgnu1x\fR" 4
1603 .IX Item "gnu1x"
1604 .PD
1605 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C11.  Support is incomplete and experimental.  The
1606 name \fBgnu1x\fR is deprecated.
1607 .IP "\fBc++98\fR" 4
1608 .IX Item "c++98"
1609 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1610 \&\*(C+ code.
1611 .IP "\fBgnu++98\fR" 4
1612 .IX Item "gnu++98"
1613 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1614 \&\*(C+ code.
1615 .IP "\fBc++11\fR" 4
1616 .IX Item "c++11"
1617 The 2011 \s-1ISO\s0 \*(C+ standard plus amendments.  Support for \*(C+11 is still
1618 experimental, and may change in incompatible ways in future releases.
1619 .IP "\fBgnu++11\fR" 4
1620 .IX Item "gnu++11"
1621 \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR. Support for \*(C+11 is still
1622 experimental, and may change in incompatible ways in future releases.
1623 .RE
1624 .RS 4
1625 .RE
1626 .IP "\fB\-fgnu89\-inline\fR" 4
1627 .IX Item "-fgnu89-inline"
1628 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1629 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1630   This option
1631 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1632 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1633 C99 mode.  Using this option is roughly equivalent to adding the
1634 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1635 .Sp
1636 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1637 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1638 specifies the default behavior).  This option was first supported in
1639 \&\s-1GCC\s0 4.3.  This option is not supported in \fB\-std=c90\fR or
1640 \&\fB\-std=gnu90\fR mode.
1641 .Sp
1642 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1643 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1644 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1645 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1646 .IX Item "-aux-info filename"
1647 Output to the given filename prototyped declarations for all functions
1648 declared and/or defined in a translation unit, including those in header
1649 files.  This option is silently ignored in any language other than C.
1650 .Sp
1651 Besides declarations, the file indicates, in comments, the origin of
1652 each declaration (source file and line), whether the declaration was
1653 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1654 \&\fBO\fR for old, respectively, in the first character after the line
1655 number and the colon), and whether it came from a declaration or a
1656 definition (\fBC\fR or \fBF\fR, respectively, in the following
1657 character).  In the case of function definitions, a K&R\-style list of
1658 arguments followed by their declarations is also provided, inside
1659 comments, after the declaration.
1660 .IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
1661 .IX Item "-fallow-parameterless-variadic-functions"
1662 Accept variadic functions without named parameters.
1663 .Sp
1664 Although it is possible to define such a function, this is not very
1665 useful as it is not possible to read the arguments.  This is only
1666 supported for C as this construct is allowed by \*(C+.
1667 .IP "\fB\-fno\-asm\fR" 4
1668 .IX Item "-fno-asm"
1669 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1670 keyword, so that code can use these words as identifiers.  You can use
1671 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1672 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1673 .Sp
1674 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1675 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1676 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1677 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1678 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1679 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1680 .IP "\fB\-fno\-builtin\fR" 4
1681 .IX Item "-fno-builtin"
1682 .PD 0
1683 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1684 .IX Item "-fno-builtin-function"
1685 .PD
1686 Don't recognize built-in functions that do not begin with
1687 \&\fB_\|_builtin_\fR as prefix.
1688 .Sp
1689 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1690 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1691 instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1692 may become inline copy loops.  The resulting code is often both smaller
1693 and faster, but since the function calls no longer appear as such, you
1694 cannot set a breakpoint on those calls, nor can you change the behavior
1695 of the functions by linking with a different library.  In addition,
1696 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1697 information about that function to warn about problems with calls to
1698 that function, or to generate more efficient code, even if the
1699 resulting code still contains calls to that function.  For example,
1700 warnings are given with \fB\-Wformat\fR for bad calls to
1701 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1702 known not to modify global memory.
1703 .Sp
1704 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1705 only the built-in function \fIfunction\fR is
1706 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1707 function is named that is not built-in in this version of \s-1GCC\s0, this
1708 option is ignored.  There is no corresponding
1709 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1710 built-in functions selectively when using \fB\-fno\-builtin\fR or
1711 \&\fB\-ffreestanding\fR, you may define macros such as:
1712 .Sp
1713 .Vb 2
1714 \&        #define abs(n)          _\|_builtin_abs ((n))
1715 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1716 .Ve
1717 .IP "\fB\-fhosted\fR" 4
1718 .IX Item "-fhosted"
1719 Assert that compilation takes place in a hosted environment.  This implies
1720 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1721 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1722 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1723 This is equivalent to \fB\-fno\-freestanding\fR.
1724 .IP "\fB\-ffreestanding\fR" 4
1725 .IX Item "-ffreestanding"
1726 Assert that compilation takes place in a freestanding environment.  This
1727 implies \fB\-fno\-builtin\fR.  A freestanding environment
1728 is one in which the standard library may not exist, and program startup may
1729 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1730 This is equivalent to \fB\-fno\-hosted\fR.
1731 .IP "\fB\-fopenmp\fR" 4
1732 .IX Item "-fopenmp"
1733 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1734 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1735 compiler generates parallel code according to the OpenMP Application
1736 Program Interface v3.0 <\fBhttp://www.openmp.org/\fR>.  This option
1737 implies \fB\-pthread\fR, and thus is only supported on targets that
1738 have support for \fB\-pthread\fR.
1739 .IP "\fB\-fgnu\-tm\fR" 4
1740 .IX Item "-fgnu-tm"
1741 When the option \fB\-fgnu\-tm\fR is specified, the compiler will
1742 generate code for the Linux variant of Intel's current Transactional
1743 Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
1744 an experimental feature whose interface may change in future versions
1745 of \s-1GCC\s0, as the official specification changes.  Please note that not
1746 all architectures are supported for this feature.
1747 .Sp
1748 For more information on \s-1GCC\s0's support for transactional memory,
1749 .Sp
1750 Note that the transactional memory feature is not supported with
1751 non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
1752 .IP "\fB\-fms\-extensions\fR" 4
1753 .IX Item "-fms-extensions"
1754 Accept some non-standard constructs used in Microsoft header files.
1755 .Sp
1756 In \*(C+ code, this allows member names in structures to be similar
1757 to previous types declarations.
1758 .Sp
1759 .Vb 4
1760 \&        typedef int UOW;
1761 \&        struct ABC {
1762 \&          UOW UOW;
1763 \&        };
1764 .Ve
1765 .Sp
1766 Some cases of unnamed fields in structures and unions are only
1767 accepted with this option.
1768 .IP "\fB\-fplan9\-extensions\fR" 4
1769 .IX Item "-fplan9-extensions"
1770 Accept some non-standard constructs used in Plan 9 code.
1771 .Sp
1772 This enables \fB\-fms\-extensions\fR, permits passing pointers to
1773 structures with anonymous fields to functions that expect pointers to
1774 elements of the type of the field, and permits referring to anonymous
1775 fields declared using a typedef.    This is only
1776 supported for C, not \*(C+.
1777 .IP "\fB\-trigraphs\fR" 4
1778 .IX Item "-trigraphs"
1779 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1780 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1781 .IP "\fB\-no\-integrated\-cpp\fR" 4
1782 .IX Item "-no-integrated-cpp"
1783 Performs a compilation in two passes: preprocessing and compiling.  This
1784 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1785 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1786 an additional preprocessing step after normal preprocessing but before
1787 compiling.  The default is to use the integrated cpp (internal cpp)
1788 .Sp
1789 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1790 \&\*(L"cc1obj\*(R" are merged.
1791 .IP "\fB\-traditional\fR" 4
1792 .IX Item "-traditional"
1793 .PD 0
1794 .IP "\fB\-traditional\-cpp\fR" 4
1795 .IX Item "-traditional-cpp"
1796 .PD
1797 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1798 C compiler.  They are now only supported with the \fB\-E\fR switch.
1799 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1800 \&\s-1CPP\s0 manual for details.
1801 .IP "\fB\-fcond\-mismatch\fR" 4
1802 .IX Item "-fcond-mismatch"
1803 Allow conditional expressions with mismatched types in the second and
1804 third arguments.  The value of such an expression is void.  This option
1805 is not supported for \*(C+.
1806 .IP "\fB\-flax\-vector\-conversions\fR" 4
1807 .IX Item "-flax-vector-conversions"
1808 Allow implicit conversions between vectors with differing numbers of
1809 elements and/or incompatible element types.  This option should not be
1810 used for new code.
1811 .IP "\fB\-funsigned\-char\fR" 4
1812 .IX Item "-funsigned-char"
1813 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1814 .Sp
1815 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1816 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1817 \&\f(CW\*(C`signed char\*(C'\fR by default.
1818 .Sp
1819 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1820 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1821 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1822 expect it to be signed, or expect it to be unsigned, depending on the
1823 machines they were written for.  This option, and its inverse, let you
1824 make such a program work with the opposite default.
1825 .Sp
1826 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1827 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1828 is always just like one of those two.
1829 .IP "\fB\-fsigned\-char\fR" 4
1830 .IX Item "-fsigned-char"
1831 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1832 .Sp
1833 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1834 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1835 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1836 .IP "\fB\-fsigned\-bitfields\fR" 4
1837 .IX Item "-fsigned-bitfields"
1838 .PD 0
1839 .IP "\fB\-funsigned\-bitfields\fR" 4
1840 .IX Item "-funsigned-bitfields"
1841 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1842 .IX Item "-fno-signed-bitfields"
1843 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1844 .IX Item "-fno-unsigned-bitfields"
1845 .PD
1846 These options control whether a bit-field is signed or unsigned, when the
1847 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1848 default, such a bit-field is signed, because this is consistent: the
1849 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1850 .Sh "Options Controlling \*(C+ Dialect"
1851 .IX Subsection "Options Controlling  Dialect"
1852 This section describes the command-line options that are only meaningful
1853 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1854 regardless of what language your program is in.  For example, you
1855 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1856 .PP
1857 .Vb 1
1858 \&        g++ \-g \-frepo \-O \-c firstClass.C
1859 .Ve
1860 .PP
1861 In this example, only \fB\-frepo\fR is an option meant
1862 only for \*(C+ programs; you can use the other options with any
1863 language supported by \s-1GCC\s0.
1864 .PP
1865 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1866 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1867 .IX Item "-fabi-version=n"
1868 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1869 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1870 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1871 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1872 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1873 are fixed.
1874 .Sp
1875 The default is version 2.
1876 .Sp
1877 Version 3 corrects an error in mangling a constant address as a
1878 template argument.
1879 .Sp
1880 Version 4, which first appeared in G++ 4.5, implements a standard
1881 mangling for vector types.
1882 .Sp
1883 Version 5, which first appeared in G++ 4.6, corrects the mangling of
1884 attribute const/volatile on function pointer types, decltype of a
1885 plain decl, and use of a function parameter in the declaration of
1886 another parameter.
1887 .Sp
1888 Version 6, which first appeared in G++ 4.7, corrects the promotion
1889 behavior of \*(C+11 scoped enums and the mangling of template argument
1890 packs, const/static_cast, prefix ++ and \-\-, and a class scope function
1891 used as a template argument.
1892 .Sp
1893 See also \fB\-Wabi\fR.
1894 .IP "\fB\-fno\-access\-control\fR" 4
1895 .IX Item "-fno-access-control"
1896 Turn off all access checking.  This switch is mainly useful for working
1897 around bugs in the access control code.
1898 .IP "\fB\-fcheck\-new\fR" 4
1899 .IX Item "-fcheck-new"
1900 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1901 before attempting to modify the storage allocated.  This check is
1902 normally unnecessary because the \*(C+ standard specifies that
1903 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1904 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1905 return value even without this option.  In all other cases, when
1906 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1907 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1908 \&\fBnew (nothrow)\fR.
1909 .IP "\fB\-fconserve\-space\fR" 4
1910 .IX Item "-fconserve-space"
1911 Put uninitialized or run-time-initialized global variables into the
1912 common segment, as C does.  This saves space in the executable at the
1913 cost of not diagnosing duplicate definitions.  If you compile with this
1914 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1915 completed, you may have an object that is being destroyed twice because
1916 two definitions were merged.
1917 .Sp
1918 This option is no longer useful on most targets, now that support has
1919 been added for putting variables into \s-1BSS\s0 without making them common.
1920 .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
1921 .IX Item "-fconstexpr-depth=n"
1922 Set the maximum nested evaluation depth for \*(C+11 constexpr functions
1923 to \fIn\fR.  A limit is needed to detect endless recursion during
1924 constant expression evaluation.  The minimum specified by the standard
1925 is 512.
1926 .IP "\fB\-fdeduce\-init\-list\fR" 4
1927 .IX Item "-fdeduce-init-list"
1928 Enable deduction of a template type parameter as
1929 std::initializer_list from a brace-enclosed initializer list, i.e.
1930 .Sp
1931 .Vb 4
1932 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
1933 \&        {
1934 \&          return realfn (t);
1935 \&        }
1936 \&        
1937 \&        void f()
1938 \&        {
1939 \&          forward({1,2}); // call forward<std::initializer_list<int>>
1940 \&        }
1941 .Ve
1942 .Sp
1943 This deduction was implemented as a possible extension to the
1944 originally proposed semantics for the \*(C+11 standard, but was not part
1945 of the final standard, so it is disabled by default.  This option is
1946 deprecated, and may be removed in a future version of G++.
1947 .IP "\fB\-ffriend\-injection\fR" 4
1948 .IX Item "-ffriend-injection"
1949 Inject friend functions into the enclosing namespace, so that they are
1950 visible outside the scope of the class in which they are declared.
1951 Friend functions were documented to work this way in the old Annotated
1952 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1953 that way.  However, in \s-1ISO\s0 \*(C+ a friend function that is not declared
1954 in an enclosing scope can only be found using argument dependent
1955 lookup.  This option causes friends to be injected as they were in
1956 earlier releases.
1957 .Sp
1958 This option is for compatibility, and may be removed in a future
1959 release of G++.
1960 .IP "\fB\-fno\-elide\-constructors\fR" 4
1961 .IX Item "-fno-elide-constructors"
1962 The \*(C+ standard allows an implementation to omit creating a temporary
1963 that is only used to initialize another object of the same type.
1964 Specifying this option disables that optimization, and forces G++ to
1965 call the copy constructor in all cases.
1966 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1967 .IX Item "-fno-enforce-eh-specs"
1968 Don't generate code to check for violation of exception specifications
1969 at run time.  This option violates the \*(C+ standard, but may be useful
1970 for reducing code size in production builds, much like defining
1971 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1972 exceptions in violation of the exception specifications; the compiler
1973 will still optimize based on the specifications, so throwing an
1974 unexpected exception will result in undefined behavior.
1975 .IP "\fB\-ffor\-scope\fR" 4
1976 .IX Item "-ffor-scope"
1977 .PD 0
1978 .IP "\fB\-fno\-for\-scope\fR" 4
1979 .IX Item "-fno-for-scope"
1980 .PD
1981 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1982 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1983 as specified by the \*(C+ standard.
1984 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1985 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1986 as was the case in old versions of G++, and other (traditional)
1987 implementations of \*(C+.
1988 .Sp
1989 The default if neither flag is given to follow the standard,
1990 but to allow and give a warning for old-style code that would
1991 otherwise be invalid, or have different behavior.
1992 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1993 .IX Item "-fno-gnu-keywords"
1994 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1995 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1996 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1997 .IP "\fB\-fno\-implicit\-templates\fR" 4
1998 .IX Item "-fno-implicit-templates"
1999 Never emit code for non-inline templates that are instantiated
2000 implicitly (i.e. by use); only emit code for explicit instantiations.
2001 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
2002 .IX Item "-fno-implicit-inline-templates"
2003 Don't emit code for implicit instantiations of inline templates, either.
2004 The default is to handle inlines differently so that compiles with and
2005 without optimization will need the same set of explicit instantiations.
2006 .IP "\fB\-fno\-implement\-inlines\fR" 4
2007 .IX Item "-fno-implement-inlines"
2008 To save space, do not emit out-of-line copies of inline functions
2009 controlled by \fB#pragma implementation\fR.  This will cause linker
2010 errors if these functions are not inlined everywhere they are called.
2011 .IP "\fB\-fms\-extensions\fR" 4
2012 .IX Item "-fms-extensions"
2013 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
2014 int and getting a pointer to member function via non-standard syntax.
2015 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
2016 .IX Item "-fno-nonansi-builtins"
2017 Disable built-in declarations of functions that are not mandated by
2018 \&\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,
2019 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
2020 .IP "\fB\-fnothrow\-opt\fR" 4
2021 .IX Item "-fnothrow-opt"
2022 Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as though it were a
2023 \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
2024 overhead relative to a function with no exception specification.  If
2025 the function has local variables of types with non-trivial
2026 destructors, the exception specification will actually make the
2027 function smaller because the \s-1EH\s0 cleanups for those variables can be
2028 optimized away.  The semantic effect is that an exception thrown out of
2029 a function with such an exception specification will result in a call
2030 to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
2031 .IP "\fB\-fno\-operator\-names\fR" 4
2032 .IX Item "-fno-operator-names"
2033 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
2034 \&\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
2035 synonyms as keywords.
2036 .IP "\fB\-fno\-optional\-diags\fR" 4
2037 .IX Item "-fno-optional-diags"
2038 Disable diagnostics that the standard says a compiler does not need to
2039 issue.  Currently, the only such diagnostic issued by G++ is the one for
2040 a name having multiple meanings within a class.
2041 .IP "\fB\-fpermissive\fR" 4
2042 .IX Item "-fpermissive"
2043 Downgrade some diagnostics about nonconformant code from errors to
2044 warnings.  Thus, using \fB\-fpermissive\fR will allow some
2045 nonconforming code to compile.
2046 .IP "\fB\-fno\-pretty\-templates\fR" 4
2047 .IX Item "-fno-pretty-templates"
2048 When an error message refers to a specialization of a function
2049 template, the compiler will normally print the signature of the
2050 template followed by the template arguments and any typedefs or
2051 typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
2052 rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
2053 involved.  When an error message refers to a specialization of a class
2054 template, the compiler will omit any template arguments that match
2055 the default template arguments for that template.  If either of these
2056 behaviors make it harder to understand the error message rather than
2057 easier, using \fB\-fno\-pretty\-templates\fR will disable them.
2058 .IP "\fB\-frepo\fR" 4
2059 .IX Item "-frepo"
2060 Enable automatic template instantiation at link time.  This option also
2061 implies \fB\-fno\-implicit\-templates\fR.
2062 .IP "\fB\-fno\-rtti\fR" 4
2063 .IX Item "-fno-rtti"
2064 Disable generation of information about every class with virtual
2065 functions for use by the \*(C+ run-time type identification features
2066 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
2067 of the language, you can save some space by using this flag.  Note that
2068 exception handling uses the same information, but it will generate it as
2069 needed. The \fBdynamic_cast\fR operator can still be used for casts that
2070 do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
2071 unambiguous base classes.
2072 .IP "\fB\-fstats\fR" 4
2073 .IX Item "-fstats"
2074 Emit statistics about front-end processing at the end of the compilation.
2075 This information is generally only useful to the G++ development team.
2076 .IP "\fB\-fstrict\-enums\fR" 4
2077 .IX Item "-fstrict-enums"
2078 Allow the compiler to optimize using the assumption that a value of
2079 enumerated type can only be one of the values of the enumeration (as
2080 defined in the \*(C+ standard; basically, a value that can be
2081 represented in the minimum number of bits needed to represent all the
2082 enumerators).  This assumption may not be valid if the program uses a
2083 cast to convert an arbitrary integer value to the enumerated type.
2084 .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
2085 .IX Item "-ftemplate-depth=n"
2086 Set the maximum instantiation depth for template classes to \fIn\fR.
2087 A limit on the template instantiation depth is needed to detect
2088 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
2089 conforming programs must not rely on a maximum depth greater than 17
2090 (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
2091 can run out of stack space before hitting 1024 in some situations.
2092 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
2093 .IX Item "-fno-threadsafe-statics"
2094 Do not emit the extra code to use the routines specified in the \*(C+
2095 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
2096 option to reduce code size slightly in code that doesn't need to be
2097 thread-safe.
2098 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
2099 .IX Item "-fuse-cxa-atexit"
2100 Register destructors for objects with static storage duration with the
2101 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
2102 This option is required for fully standards-compliant handling of static
2103 destructors, but will only work if your C library supports
2104 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
2105 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
2106 .IX Item "-fno-use-cxa-get-exception-ptr"
2107 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
2108 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
2109 if the runtime routine is not available.
2110 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
2111 .IX Item "-fvisibility-inlines-hidden"
2112 This switch declares that the user does not attempt to compare
2113 pointers to inline functions or methods where the addresses of the two functions
2114 were taken in different shared objects.
2115 .Sp
2116 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
2117 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
2118 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
2119 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
2120 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
2121 dynamic export table when the library makes heavy use of templates.
2122 .Sp
2123 The behavior of this switch is not quite the same as marking the
2124 methods as hidden directly, because it does not affect static variables
2125 local to the function or cause the compiler to deduce that
2126 the function is defined in only one shared object.
2127 .Sp
2128 You may mark a method as having a visibility explicitly to negate the
2129 effect of the switch for that method.  For example, if you do want to
2130 compare pointers to a particular inline method, you might mark it as
2131 having default visibility.  Marking the enclosing class with explicit
2132 visibility will have no effect.
2133 .Sp
2134 Explicitly instantiated inline methods are unaffected by this option
2135 as their linkage might otherwise cross a shared library boundary.
2136 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
2137 .IX Item "-fvisibility-ms-compat"
2138 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
2139 linkage model compatible with that of Microsoft Visual Studio.
2140 .Sp
2141 The flag makes these changes to \s-1GCC\s0's linkage model:
2142 .RS 4
2143 .IP "1." 4
2144 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
2145 \&\fB\-fvisibility=hidden\fR.
2146 .IP "2." 4
2147 Types, but not their members, are not hidden by default.
2148 .IP "3." 4
2149 The One Definition Rule is relaxed for types without explicit
2150 visibility specifications that are defined in more than one different
2151 shared object: those declarations are permitted if they would have
2152 been permitted when this option was not used.
2153 .RE
2154 .RS 4
2155 .Sp
2156 In new code it is better to use \fB\-fvisibility=hidden\fR and
2157 export those classes that are intended to be externally visible.
2158 Unfortunately it is possible for code to rely, perhaps accidentally,
2159 on the Visual Studio behavior.
2160 .Sp
2161 Among the consequences of these changes are that static data members
2162 of the same type with the same name but defined in different shared
2163 objects will be different, so changing one will not change the other;
2164 and that pointers to function members defined in different shared
2165 objects may not compare equal.  When this flag is given, it is a
2166 violation of the \s-1ODR\s0 to define types with the same name differently.
2167 .RE
2168 .IP "\fB\-fno\-weak\fR" 4
2169 .IX Item "-fno-weak"
2170 Do not use weak symbol support, even if it is provided by the linker.
2171 By default, G++ will use weak symbols if they are available.  This
2172 option exists only for testing, and should not be used by end-users;
2173 it will result in inferior code and has no benefits.  This option may
2174 be removed in a future release of G++.
2175 .IP "\fB\-nostdinc++\fR" 4
2176 .IX Item "-nostdinc++"
2177 Do not search for header files in the standard directories specific to
2178 \&\*(C+, but do still search the other standard directories.  (This option
2179 is used when building the \*(C+ library.)
2180 .PP
2181 In addition, these optimization, warning, and code generation options
2182 have meanings only for \*(C+ programs:
2183 .IP "\fB\-fno\-default\-inline\fR" 4
2184 .IX Item "-fno-default-inline"
2185 Do not assume \fBinline\fR for functions defined inside a class scope.
2186   Note that these
2187 functions will have linkage like inline functions; they just won't be
2188 inlined by default.
2189 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
2190 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
2191 Warn when G++ generates code that is probably not compatible with the
2192 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
2193 all such cases, there are probably some cases that are not warned about,
2194 even though G++ is generating incompatible code.  There may also be
2195 cases where warnings are emitted even though the code that is generated
2196 will be compatible.
2197 .Sp
2198 You should rewrite your code to avoid these warnings if you are
2199 concerned about the fact that code generated by G++ may not be binary
2200 compatible with code generated by other compilers.
2201 .Sp
2202 The known incompatibilities in \fB\-fabi\-version=2\fR (the default) include:
2203 .RS 4
2204 .IP "\(bu" 4
2205 A template with a non-type template parameter of reference type is
2206 mangled incorrectly:
2207 .Sp
2208 .Vb 3
2209 \&        extern int N;
2210 \&        template <int &> struct S {};
2211 \&        void n (S<N>) {2}
2212 .Ve
2213 .Sp
2214 This is fixed in \fB\-fabi\-version=3\fR.
2215 .IP "\(bu" 4
2216 \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR are
2217 mangled in a non-standard way that does not allow for overloading of
2218 functions taking vectors of different sizes.
2219 .Sp
2220 The mangling is changed in \fB\-fabi\-version=4\fR.
2221 .RE
2222 .RS 4
2223 .Sp
2224 The known incompatibilities in \fB\-fabi\-version=1\fR include:
2225 .IP "\(bu" 4
2226 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2227 pack data into the same byte as a base class.  For example:
2228 .Sp
2229 .Vb 2
2230 \&        struct A { virtual void f(); int f1 : 1; };
2231 \&        struct B : public A { int f2 : 1; };
2232 .Ve
2233 .Sp
2234 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
2235 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
2236 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
2237 byte size on your platform; that will cause G++ and other compilers to
2238 layout \f(CW\*(C`B\*(C'\fR identically.
2239 .IP "\(bu" 4
2240 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2241 tail padding when laying out virtual bases.  For example:
2242 .Sp
2243 .Vb 3
2244 \&        struct A { virtual void f(); char c1; };
2245 \&        struct B { B(); char c2; };
2246 \&        struct C : public A, public virtual B {};
2247 .Ve
2248 .Sp
2249 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
2250 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
2251 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
2252 alignment (ignoring virtual base classes); that will cause G++ and other
2253 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
2254 .IP "\(bu" 4
2255 Incorrect handling of bit-fields with declared widths greater than that
2256 of their underlying types, when the bit-fields appear in a union.  For
2257 example:
2258 .Sp
2259 .Vb 1
2260 \&        union U { int i : 4096; };
2261 .Ve
2262 .Sp
2263 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
2264 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
2265 .IP "\(bu" 4
2266 Empty classes can be placed at incorrect offsets.  For example:
2267 .Sp
2268 .Vb 1
2269 \&        struct A {};
2270 \&        
2271 \&        struct B {
2272 \&          A a;
2273 \&          virtual void f ();
2274 \&        };
2275 \&        
2276 \&        struct C : public B, public A {};
2277 .Ve
2278 .Sp
2279 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
2280 it should be placed at offset zero.  G++ mistakenly believes that the
2281 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
2282 .IP "\(bu" 4
2283 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
2284 template template parameters can be mangled incorrectly.
2285 .Sp
2286 .Vb 2
2287 \&        template <typename Q>
2288 \&        void f(typename Q::X) {}
2289 \&        
2290 \&        template <template <typename> class Q>
2291 \&        void f(typename Q<int>::X) {}
2292 .Ve
2293 .Sp
2294 Instantiations of these templates may be mangled incorrectly.
2295 .RE
2296 .RS 4
2297 .Sp
2298 It also warns psABI related changes.  The known psABI changes at this
2299 point include:
2300 .IP "\(bu" 4
2301 For SYSV/x86\-64, when passing union with long double, it is changed to
2302 pass in memory as specified in psABI.  For example:
2303 .Sp
2304 .Vb 4
2305 \&        union U {
2306 \&          long double ld;
2307 \&          int i;
2308 \&        };
2309 .Ve
2310 .Sp
2311 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2312 .RE
2313 .RS 4
2314 .RE
2315 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2316 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2317 Warn when a class seems unusable because all the constructors or
2318 destructors in that class are private, and it has neither friends nor
2319 public static member functions.
2320 .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2321 .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
2322 Warn when \fBdelete\fR is used to destroy an instance of a class that
2323 has virtual functions and non-virtual destructor. It is unsafe to delete
2324 an instance of a derived class through a pointer to a base class if the
2325 base class does not have a virtual destructor.  This warning is enabled
2326 by \fB\-Wall\fR.
2327 .IP "\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
2328 .IX Item "-Wnarrowing ( and Objective- only)"
2329 Warn when a narrowing conversion prohibited by \*(C+11 occurs within
2330 \&\fB{ }\fR, e.g.
2331 .Sp
2332 .Vb 1
2333 \&        int i = { 2.2 }; // error: narrowing from double to int
2334 .Ve
2335 .Sp
2336 This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
2337 .Sp
2338 With \-std=c++11, \fB\-Wno\-narrowing\fR suppresses the diagnostic
2339 required by the standard.  Note that this does not affect the meaning
2340 of well-formed code; narrowing conversions are still considered
2341 ill-formed in \s-1SFINAE\s0 context.
2342 .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
2343 .IX Item "-Wnoexcept ( and Objective- only)"
2344 Warn when a noexcept-expression evaluates to false because of a call
2345 to a function that does not have a non-throwing exception
2346 specification (i.e. \fB\f(BIthrow()\fB\fR or \fBnoexcept\fR) but is known by
2347 the compiler to never throw an exception.
2348 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2349 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2350 Warn when a class has virtual functions and accessible non-virtual
2351 destructor, in which case it would be possible but unsafe to delete
2352 an instance of a derived class through a pointer to the base class.
2353 This warning is also enabled if \fB\-Weffc++\fR is specified.
2354 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2355 .IX Item "-Wreorder ( and Objective- only)"
2356 Warn when the order of member initializers given in the code does not
2357 match the order in which they must be executed.  For instance:
2358 .Sp
2359 .Vb 5
2360 \&        struct A {
2361 \&          int i;
2362 \&          int j;
2363 \&          A(): j (0), i (1) { }
2364 \&        };
2365 .Ve
2366 .Sp
2367 The compiler will rearrange the member initializers for \fBi\fR
2368 and \fBj\fR to match the declaration order of the members, emitting
2369 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2370 .PP
2371 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2372 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2373 .IX Item "-Weffc++ ( and Objective- only)"
2374 Warn about violations of the following style guidelines from Scott Meyers'
2375 \&\fIEffective \*(C+, Second Edition\fR book:
2376 .RS 4
2377 .IP "\(bu" 4
2378 Item 11:  Define a copy constructor and an assignment operator for classes
2379 with dynamically allocated memory.
2380 .IP "\(bu" 4
2381 Item 12:  Prefer initialization to assignment in constructors.
2382 .IP "\(bu" 4
2383 Item 14:  Make destructors virtual in base classes.
2384 .IP "\(bu" 4
2385 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2386 .IP "\(bu" 4
2387 Item 23:  Don't try to return a reference when you must return an object.
2388 .RE
2389 .RS 4
2390 .Sp
2391 Also warn about violations of the following style guidelines from
2392 Scott Meyers' \fIMore Effective \*(C+\fR book:
2393 .IP "\(bu" 4
2394 Item 6:  Distinguish between prefix and postfix forms of increment and
2395 decrement operators.
2396 .IP "\(bu" 4
2397 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2398 .RE
2399 .RS 4
2400 .Sp
2401 When selecting this option, be aware that the standard library
2402 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2403 to filter out those warnings.
2404 .RE
2405 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2406 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2407 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2408 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2409 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2410 it is guaranteed to be of the same size as a pointer.  But this use is
2411 not portable across different compilers.
2412 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2413 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2414 Disable warnings when non-templatized friend functions are declared
2415 within a template.  Since the advent of explicit template specification
2416 support in G++, if the name of the friend is an unqualified-id (i.e.,
2417 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2418 friend declare or define an ordinary, nontemplate function.  (Section
2419 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2420 could be interpreted as a particular specialization of a templatized
2421 function.  Because this non-conforming behavior is no longer the default
2422 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2423 check existing code for potential trouble spots and is on by default.
2424 This new compiler behavior can be turned off with
2425 \&\fB\-Wno\-non\-template\-friend\fR, which keeps the conformant compiler code
2426 but disables the helpful warning.
2427 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2428 .IX Item "-Wold-style-cast ( and Objective- only)"
2429 Warn if an old-style (C\-style) cast to a non-void type is used within
2430 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2431 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2432 less vulnerable to unintended effects and much easier to search for.
2433 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2434 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2435 Warn when a function declaration hides virtual functions from a
2436 base class.  For example, in:
2437 .Sp
2438 .Vb 3
2439 \&        struct A {
2440 \&          virtual void f();
2441 \&        };
2442 \&        
2443 \&        struct B: public A {
2444 \&          void f(int);
2445 \&        };
2446 .Ve
2447 .Sp
2448 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
2449 like:
2450 .Sp
2451 .Vb 2
2452 \&        B* b;
2453 \&        b\->f();
2454 .Ve
2455 .Sp
2456 will fail to compile.
2457 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2458 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2459 Disable the diagnostic for converting a bound pointer to member function
2460 to a plain pointer.
2461 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2462 .IX Item "-Wsign-promo ( and Objective- only)"
2463 Warn when overload resolution chooses a promotion from unsigned or
2464 enumerated type to a signed type, over a conversion to an unsigned type of
2465 the same size.  Previous versions of G++ would try to preserve
2466 unsignedness, but the standard mandates the current behavior.
2467 .Sp
2468 .Vb 4
2469 \&        struct A {
2470 \&          operator int ();
2471 \&          A& operator = (int);
2472 \&        };
2473 \&        
2474 \&        main ()
2475 \&        {
2476 \&          A a,b;
2477 \&          a = b;
2478 \&        }
2479 .Ve
2480 .Sp
2481 In this example, G++ will synthesize a default \fBA& operator =
2482 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2483 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2484 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2485 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2486 languages themselves.
2487 .PP
2488 This section describes the command-line options that are only meaningful
2489 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2490 the language-independent \s-1GNU\s0 compiler options.
2491 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2492 .PP
2493 .Vb 1
2494 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2495 .Ve
2496 .PP
2497 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2498 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2499 any language supported by \s-1GCC\s0.
2500 .PP
2501 Note that since Objective-C is an extension of the C language, Objective-C
2502 compilations may also use options specific to the C front-end (e.g.,
2503 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2504 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2505 .PP
2506 Here is a list of options that are \fIonly\fR for compiling Objective-C
2507 and Objective\-\*(C+ programs:
2508 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2509 .IX Item "-fconstant-string-class=class-name"
2510 Use \fIclass-name\fR as the name of the class to instantiate for each
2511 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2512 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2513 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2514 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2515 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2516 to be laid out as constant CoreFoundation strings.
2517 .IP "\fB\-fgnu\-runtime\fR" 4
2518 .IX Item "-fgnu-runtime"
2519 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2520 runtime.  This is the default for most types of systems.
2521 .IP "\fB\-fnext\-runtime\fR" 4
2522 .IX Item "-fnext-runtime"
2523 Generate output compatible with the NeXT runtime.  This is the default
2524 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2525 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2526 used.
2527 .IP "\fB\-fno\-nil\-receivers\fR" 4
2528 .IX Item "-fno-nil-receivers"
2529 Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
2530 message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
2531 not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
2532 runtime to be used.  This option is only available in conjunction with
2533 the NeXT runtime and \s-1ABI\s0 version 0 or 1.
2534 .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
2535 .IX Item "-fobjc-abi-version=n"
2536 Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
2537 This option is currently supported only for the NeXT runtime.  In that
2538 case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
2539 properties and other Objective-C 2.0 additions.  Version 1 is the
2540 traditional (32\-bit) \s-1ABI\s0 with support for properties and other
2541 Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI\s0.  If
2542 nothing is specified, the default is Version 0 on 32\-bit target
2543 machines, and Version 2 on 64\-bit target machines.
2544 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2545 .IX Item "-fobjc-call-cxx-cdtors"
2546 For each Objective-C class, check if any of its instance variables is a
2547 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2548 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which will run
2549 non-trivial default constructors on any such instance variables, in order,
2550 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2551 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2552 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which will run
2553 all such default destructors, in reverse order.
2554 .Sp
2555 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
2556 methods thusly generated will only operate on instance variables
2557 declared in the current Objective-C class, and not those inherited
2558 from superclasses.  It is the responsibility of the Objective-C
2559 runtime to invoke all such methods in an object's inheritance
2560 hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods will be invoked
2561 by the runtime immediately after a new object instance is allocated;
2562 the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will be invoked immediately
2563 before the runtime deallocates an object instance.
2564 .Sp
2565 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2566 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2567 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2568 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2569 .IX Item "-fobjc-direct-dispatch"
2570 Allow fast jumps to the message dispatcher.  On Darwin this is
2571 accomplished via the comm page.
2572 .IP "\fB\-fobjc\-exceptions\fR" 4
2573 .IX Item "-fobjc-exceptions"
2574 Enable syntactic support for structured exception handling in
2575 Objective-C, similar to what is offered by \*(C+ and Java.  This option
2576 is required to use the Objective-C keywords \f(CW@try\fR,
2577 \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
2578 \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
2579 runtime and the NeXT runtime (but not available in conjunction with
2580 the NeXT runtime on Mac \s-1OS\s0 X 10.2 and earlier).
2581 .IP "\fB\-fobjc\-gc\fR" 4
2582 .IX Item "-fobjc-gc"
2583 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
2584 programs.  This option is only available with the NeXT runtime; the
2585 \&\s-1GNU\s0 runtime has a different garbage collection implementation that
2586 does not require special compiler flags.
2587 .IP "\fB\-fobjc\-nilcheck\fR" 4
2588 .IX Item "-fobjc-nilcheck"
2589 For the NeXT runtime with version 2 of the \s-1ABI\s0, check for a nil
2590 receiver in method invocations before doing the actual method call.
2591 This is the default and can be disabled using
2592 \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
2593 checked for nil in this way no matter what this flag is set to.
2594 Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
2595 version of the NeXT runtime \s-1ABI\s0, is used.
2596 .IP "\fB\-fobjc\-std=objc1\fR" 4
2597 .IX Item "-fobjc-std=objc1"
2598 Conform to the language syntax of Objective-C 1.0, the language
2599 recognized by \s-1GCC\s0 4.0.  This only affects the Objective-C additions to
2600 the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
2601 which is controlled by the separate C/\*(C+ dialect option flags.  When
2602 this option is used with the Objective-C or Objective\-\*(C+ compiler,
2603 any Objective-C syntax that is not recognized by \s-1GCC\s0 4.0 is rejected.
2604 This is useful if you need to make sure that your Objective-C code can
2605 be compiled with older versions of \s-1GCC\s0.
2606 .IP "\fB\-freplace\-objc\-classes\fR" 4
2607 .IX Item "-freplace-objc-classes"
2608 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2609 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2610 run time instead.  This is used in conjunction with the Fix-and-Continue
2611 debugging mode, where the object file in question may be recompiled and
2612 dynamically reloaded in the course of program execution, without the need
2613 to restart the program itself.  Currently, Fix-and-Continue functionality
2614 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2615 and later.
2616 .IP "\fB\-fzero\-link\fR" 4
2617 .IX Item "-fzero-link"
2618 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2619 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2620 compile time) with static class references that get initialized at load time,
2621 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2622 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2623 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2624 for individual class implementations to be modified during program execution.
2625 The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
2626 regardless of command-line options.
2627 .IP "\fB\-gen\-decls\fR" 4
2628 .IX Item "-gen-decls"
2629 Dump interface declarations for all classes seen in the source file to a
2630 file named \fI\fIsourcename\fI.decl\fR.
2631 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2632 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2633 Warn whenever an Objective-C assignment is being intercepted by the
2634 garbage collector.
2635 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2636 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2637 If a class is declared to implement a protocol, a warning is issued for
2638 every method in the protocol that is not implemented by the class.  The
2639 default behavior is to issue a warning for every method not explicitly
2640 implemented in the class, even if a method implementation is inherited
2641 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2642 methods inherited from the superclass are considered to be implemented,
2643 and no warning is issued for them.
2644 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2645 .IX Item "-Wselector (Objective-C and Objective- only)"
2646 Warn if multiple methods of different types for the same selector are
2647 found during compilation.  The check is performed on the list of methods
2648 in the final stage of compilation.  Additionally, a check is performed
2649 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2650 expression, and a corresponding method for that selector has been found
2651 during compilation.  Because these checks scan the method table only at
2652 the end of compilation, these warnings are not produced if the final
2653 stage of compilation is not reached, for example because an error is
2654 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2655 being used.
2656 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2657 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2658 Warn if multiple methods with differing argument and/or return types are
2659 found for a given selector when attempting to send a message using this
2660 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2661 is off (which is the default behavior), the compiler will omit such warnings
2662 if any differences found are confined to types that share the same size
2663 and alignment.
2664 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2665 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2666 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2667 undeclared selector is found.  A selector is considered undeclared if no
2668 method with that name has been declared before the
2669 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2670 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2671 an \f(CW@implementation\fR section.  This option always performs its
2672 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2673 while \fB\-Wselector\fR only performs its checks in the final stage of
2674 compilation.  This also enforces the coding style convention
2675 that methods and selectors must be declared before being used.
2676 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2677 .IX Item "-print-objc-runtime-info"
2678 Generate C header describing the largest structure that is passed by
2679 value, if any.
2680 .Sh "Options to Control Diagnostic Messages Formatting"
2681 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2682 Traditionally, diagnostic messages have been formatted irrespective of
2683 the output device's aspect (e.g. its width, ...).  The options described
2684 below can be used to control the diagnostic messages formatting
2685 algorithm, e.g. how many characters per line, how often source location
2686 information should be reported.  Right now, only the \*(C+ front end can
2687 honor these options.  However it is expected, in the near future, that
2688 the remaining front ends would be able to digest them correctly.
2689 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2690 .IX Item "-fmessage-length=n"
2691 Try to format error messages so that they fit on lines of about \fIn\fR
2692 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2693 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2694 line-wrapping will be done; each error message will appear on a single
2695 line.
2696 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2697 .IX Item "-fdiagnostics-show-location=once"
2698 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2699 reporter to emit \fIonce\fR source location information; that is, in
2700 case the message is too long to fit on a single physical line and has to
2701 be wrapped, the source location won't be emitted (as prefix) again,
2702 over and over, in subsequent continuation lines.  This is the default
2703 behavior.
2704 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2705 .IX Item "-fdiagnostics-show-location=every-line"
2706 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2707 messages reporter to emit the same source location information (as
2708 prefix) for physical lines that result from the process of breaking
2709 a message which is too long to fit on a single line.
2710 .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
2711 .IX Item "-fno-diagnostics-show-option"
2712 By default, each diagnostic emitted includes text indicating the
2713 command-line option that directly controls the diagnostic (if such an
2714 option is known to the diagnostic machinery).  Specifying the
2715 \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
2716 .Sh "Options to Request or Suppress Warnings"
2717 .IX Subsection "Options to Request or Suppress Warnings"
2718 Warnings are diagnostic messages that report constructions that
2719 are not inherently erroneous but that are risky or suggest there
2720 may have been an error.
2721 .PP
2722 The following language-independent options do not enable specific
2723 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2724 .IP "\fB\-fsyntax\-only\fR" 4
2725 .IX Item "-fsyntax-only"
2726 Check the code for syntax errors, but don't do anything beyond that.
2727 .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
2728 .IX Item "-fmax-errors=n"
2729 Limits the maximum number of error messages to \fIn\fR, at which point
2730 \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
2731 code.  If \fIn\fR is 0 (the default), there is no limit on the number
2732 of error messages produced.  If \fB\-Wfatal\-errors\fR is also
2733 specified, then \fB\-Wfatal\-errors\fR takes precedence over this
2734 option.
2735 .IP "\fB\-w\fR" 4
2736 .IX Item "-w"
2737 Inhibit all warning messages.
2738 .IP "\fB\-Werror\fR" 4
2739 .IX Item "-Werror"
2740 Make all warnings into errors.
2741 .IP "\fB\-Werror=\fR" 4
2742 .IX Item "-Werror="
2743 Make the specified warning into an error.  The specifier for a warning
2744 is appended, for example \fB\-Werror=switch\fR turns the warnings
2745 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2746 negative form, to be used to negate \fB\-Werror\fR for specific
2747 warnings, for example \fB\-Wno\-error=switch\fR makes
2748 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2749 is in effect.
2750 .Sp
2751 The warning message for each controllable warning includes the
2752 option that controls the warning.  That option can then be used with
2753 \&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
2754 (Printing of the option in the warning message can be disabled using the
2755 \&\fB\-fno\-diagnostics\-show\-option\fR flag.)
2756 .Sp
2757 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2758 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2759 imply anything.
2760 .IP "\fB\-Wfatal\-errors\fR" 4
2761 .IX Item "-Wfatal-errors"
2762 This option causes the compiler to abort compilation on the first error
2763 occurred rather than trying to keep going and printing further error
2764 messages.
2765 .PP
2766 You can request many specific warnings with options beginning
2767 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2768 implicit declarations.  Each of these specific warning options also
2769 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2770 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2771 two forms, whichever is not the default.  For further,
2772 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2773 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2774 .PP
2775 When an unrecognized warning option is requested (e.g.,
2776 \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 will emit a diagnostic stating
2777 that the option is not recognized.  However, if the \fB\-Wno\-\fR form
2778 is used, the behavior is slightly different: No diagnostic will be
2779 produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
2780 are being produced.  This allows the use of new \fB\-Wno\-\fR options
2781 with old compilers, but if something goes wrong, the compiler will
2782 warn that an unrecognized option was used.
2783 .IP "\fB\-pedantic\fR" 4
2784 .IX Item "-pedantic"
2785 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2786 reject all programs that use forbidden extensions, and some other
2787 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2788 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2789 .Sp
2790 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2791 this option (though a rare few will require \fB\-ansi\fR or a
2792 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2793 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2794 features are supported as well.  With this option, they are rejected.
2795 .Sp
2796 \&\fB\-pedantic\fR does not cause warning messages for use of the
2797 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2798 warnings are also disabled in the expression that follows
2799 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2800 these escape routes; application programs should avoid them.
2801 .Sp
2802 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2803 C conformance.  They soon find that it does not do quite what they want:
2804 it finds some non-ISO practices, but not all\-\-\-only those for which
2805 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2806 diagnostics have been added.
2807 .Sp
2808 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2809 some instances, but would require considerable additional work and would
2810 be quite different from \fB\-pedantic\fR.  We don't have plans to
2811 support such a feature in the near future.
2812 .Sp
2813 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2814 extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
2815 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2816 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2817 where they are required by the base standard.  (It would not make sense
2818 for such warnings to be given only for features not in the specified \s-1GNU\s0
2819 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2820 features the compiler supports with the given option, and there would be
2821 nothing to warn about.)
2822 .IP "\fB\-pedantic\-errors\fR" 4
2823 .IX Item "-pedantic-errors"
2824 Like \fB\-pedantic\fR, except that errors are produced rather than
2825 warnings.
2826 .IP "\fB\-Wall\fR" 4
2827 .IX Item "-Wall"
2828 This enables all the warnings about constructions that some users
2829 consider questionable, and that are easy to avoid (or modify to
2830 prevent the warning), even in conjunction with macros.  This also
2831 enables some language-specific warnings described in \fB\*(C+ Dialect
2832 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2833 .Sp
2834 \&\fB\-Wall\fR turns on the following warning flags:
2835 .Sp
2836 \&\fB\-Waddress   
2837 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2838 \&\fB\-Wc++11\-compat  
2839 \&\-Wchar\-subscripts  
2840 \&\-Wenum\-compare\fR (in C/Objc; this is on by default in \*(C+) 
2841 \&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
2842 \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
2843 \&\fB\-Wcomment  
2844 \&\-Wformat   
2845 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2846 \&\fB\-Wmaybe\-uninitialized 
2847 \&\-Wmissing\-braces  
2848 \&\-Wnonnull  
2849 \&\-Wparentheses  
2850 \&\-Wpointer\-sign  
2851 \&\-Wreorder   
2852 \&\-Wreturn\-type  
2853 \&\-Wsequence\-point  
2854 \&\-Wsign\-compare\fR (only in \*(C+)  
2855 \&\fB\-Wstrict\-aliasing  
2856 \&\-Wstrict\-overflow=1  
2857 \&\-Wswitch  
2858 \&\-Wtrigraphs  
2859 \&\-Wuninitialized  
2860 \&\-Wunknown\-pragmas  
2861 \&\-Wunused\-function  
2862 \&\-Wunused\-label     
2863 \&\-Wunused\-value     
2864 \&\-Wunused\-variable  
2865 \&\-Wvolatile\-register\-var\fR
2866 .Sp
2867 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2868 them warn about constructions that users generally do not consider
2869 questionable, but which occasionally you might wish to check for;
2870 others warn about constructions that are necessary or hard to avoid in
2871 some cases, and there is no simple way to modify the code to suppress
2872 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2873 them must be enabled individually.
2874 .IP "\fB\-Wextra\fR" 4
2875 .IX Item "-Wextra"
2876 This enables some extra warning flags that are not enabled by
2877 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2878 name is still supported, but the newer name is more descriptive.)
2879 .Sp
2880 \&\fB\-Wclobbered  
2881 \&\-Wempty\-body  
2882 \&\-Wignored\-qualifiers 
2883 \&\-Wmissing\-field\-initializers  
2884 \&\-Wmissing\-parameter\-type\fR (C only)  
2885 \&\fB\-Wold\-style\-declaration\fR (C only)  
2886 \&\fB\-Woverride\-init  
2887 \&\-Wsign\-compare  
2888 \&\-Wtype\-limits  
2889 \&\-Wuninitialized  
2890 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
2891 \&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
2892 .Sp
2893 The option \fB\-Wextra\fR also prints warning messages for the
2894 following cases:
2895 .RS 4
2896 .IP "\(bu" 4
2897 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2898 \&\fB>\fR, or \fB>=\fR.
2899 .IP "\(bu" 4
2900 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2901 conditional expression.
2902 .IP "\(bu" 4
2903 (\*(C+ only) Ambiguous virtual bases.
2904 .IP "\(bu" 4
2905 (\*(C+ only) Subscripting an array that has been declared \fBregister\fR.
2906 .IP "\(bu" 4
2907 (\*(C+ only) Taking the address of a variable that has been declared
2908 \&\fBregister\fR.
2909 .IP "\(bu" 4
2910 (\*(C+ only) A base class is not initialized in a derived class' copy
2911 constructor.
2912 .RE
2913 .RS 4
2914 .RE
2915 .IP "\fB\-Wchar\-subscripts\fR" 4
2916 .IX Item "-Wchar-subscripts"
2917 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2918 of error, as programmers often forget that this type is signed on some
2919 machines.
2920 This warning is enabled by \fB\-Wall\fR.
2921 .IP "\fB\-Wcomment\fR" 4
2922 .IX Item "-Wcomment"
2923 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2924 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2925 This warning is enabled by \fB\-Wall\fR.
2926 .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
2927 .IX Item "-Wno-coverage-mismatch"
2928 Warn if feedback profiles do not match when using the
2929 \&\fB\-fprofile\-use\fR option.
2930 If a source file was changed between \fB\-fprofile\-gen\fR and
2931 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2932 to match the source file and \s-1GCC\s0 cannot use the profile feedback
2933 information.  By default, this warning is enabled and is treated as an
2934 error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
2935 warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
2936 disable the error.  Disabling the error for this warning can result in
2937 poorly optimized code and is useful only in the
2938 case of very minor changes such as bug fixes to an existing code-base.
2939 Completely disabling the warning is not recommended.
2940 .IP "\fB\-Wno\-cpp\fR" 4
2941 .IX Item "-Wno-cpp"
2942 (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
2943 .Sp
2944 Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
2945 .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2946 .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
2947 Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
2948 promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
2949 floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
2950 \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
2951 using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
2952 overhead required for software emulation.
2953 .Sp
2954 It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
2955 floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
2956 example, in:
2957 .Sp
2958 .Vb 4
2959 \&        float area(float radius)
2960 \&        {
2961 \&           return 3.14159 * radius * radius;
2962 \&        }
2963 .Ve
2964 .Sp
2965 the compiler will perform the entire computation with \f(CW\*(C`double\*(C'\fR
2966 because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
2967 .IP "\fB\-Wformat\fR" 4
2968 .IX Item "-Wformat"
2969 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2970 the arguments supplied have types appropriate to the format string
2971 specified, and that the conversions specified in the format string make
2972 sense.  This includes standard functions, and others specified by format
2973 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2974 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2975 not in the C standard) families (or other target-specific families).
2976 Which functions are checked without format attributes having been
2977 specified depends on the standard version selected, and such checks of
2978 functions without the attribute specified are disabled by
2979 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2980 .Sp
2981 The formats are checked against the format features supported by \s-1GNU\s0
2982 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2983 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2984 extensions.  Other library implementations may not support all these
2985 features; \s-1GCC\s0 does not support warning about features that go beyond a
2986 particular library's limitations.  However, if \fB\-pedantic\fR is used
2987 with \fB\-Wformat\fR, warnings will be given about format features not
2988 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2989 since those are not in any version of the C standard).
2990 .Sp
2991 Since \fB\-Wformat\fR also checks for null format arguments for
2992 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2993 .Sp
2994 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2995 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2996 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2997 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2998 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2999 .IP "\fB\-Wformat\-y2k\fR" 4
3000 .IX Item "-Wformat-y2k"
3001 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
3002 formats that may yield only a two-digit year.
3003 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
3004 .IX Item "-Wno-format-contains-nul"
3005 If \fB\-Wformat\fR is specified, do not warn about format strings that
3006 contain \s-1NUL\s0 bytes.
3007 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
3008 .IX Item "-Wno-format-extra-args"
3009 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
3010 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
3011 that such arguments are ignored.
3012 .Sp
3013 Where the unused arguments lie between used arguments that are
3014 specified with \fB$\fR operand number specifications, normally
3015 warnings are still given, since the implementation could not know what
3016 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
3017 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
3018 warning if the unused arguments are all pointers, since the Single
3019 Unix Specification says that such unused arguments are allowed.
3020 .IP "\fB\-Wno\-format\-zero\-length\fR" 4
3021 .IX Item "-Wno-format-zero-length"
3022 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
3023 The C standard specifies that zero-length formats are allowed.
3024 .IP "\fB\-Wformat\-nonliteral\fR" 4
3025 .IX Item "-Wformat-nonliteral"
3026 If \fB\-Wformat\fR is specified, also warn if the format string is not a
3027 string literal and so cannot be checked, unless the format function
3028 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
3029 .IP "\fB\-Wformat\-security\fR" 4
3030 .IX Item "-Wformat-security"
3031 If \fB\-Wformat\fR is specified, also warn about uses of format
3032 functions that represent possible security problems.  At present, this
3033 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
3034 format string is not a string literal and there are no format arguments,
3035 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
3036 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
3037 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
3038 in future warnings may be added to \fB\-Wformat\-security\fR that are not
3039 included in \fB\-Wformat\-nonliteral\fR.)
3040 .IP "\fB\-Wformat=2\fR" 4
3041 .IX Item "-Wformat=2"
3042 Enable \fB\-Wformat\fR plus format checks not included in
3043 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
3044 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
3045 .IP "\fB\-Wnonnull\fR" 4
3046 .IX Item "-Wnonnull"
3047 Warn about passing a null pointer for arguments marked as
3048 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
3049 .Sp
3050 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
3051 can be disabled with the \fB\-Wno\-nonnull\fR option.
3052 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3053 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
3054 Warn about uninitialized variables that are initialized with themselves.
3055 Note this option can only be used with the \fB\-Wuninitialized\fR option.
3056 .Sp
3057 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
3058 following snippet only when \fB\-Winit\-self\fR has been specified:
3059 .Sp
3060 .Vb 5
3061 \&        int f()
3062 \&        {
3063 \&          int i = i;
3064 \&          return i;
3065 \&        }
3066 .Ve
3067 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
3068 .IX Item "-Wimplicit-int (C and Objective-C only)"
3069 Warn when a declaration does not specify a type.
3070 This warning is enabled by \fB\-Wall\fR.
3071 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
3072 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
3073 Give a warning whenever a function is used before being declared. In
3074 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
3075 enabled by default and it is made into an error by
3076 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
3077 \&\fB\-Wall\fR.
3078 .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
3079 .IX Item "-Wimplicit (C and Objective-C only)"
3080 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
3081 This warning is enabled by \fB\-Wall\fR.
3082 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
3083 .IX Item "-Wignored-qualifiers (C and  only)"
3084 Warn if the return type of a function has a type qualifier
3085 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
3086 since the value returned by a function is not an lvalue.
3087 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
3088 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
3089 definitions, so such return types always receive a warning
3090 even without this option.
3091 .Sp
3092 This warning is also enabled by \fB\-Wextra\fR.
3093 .IP "\fB\-Wmain\fR" 4
3094 .IX Item "-Wmain"
3095 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
3096 a function with external linkage, returning int, taking either zero
3097 arguments, two, or three arguments of appropriate types.  This warning
3098 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
3099 or \fB\-pedantic\fR.
3100 .IP "\fB\-Wmissing\-braces\fR" 4
3101 .IX Item "-Wmissing-braces"
3102 Warn if an aggregate or union initializer is not fully bracketed.  In
3103 the following example, the initializer for \fBa\fR is not fully
3104 bracketed, but that for \fBb\fR is fully bracketed.
3105 .Sp
3106 .Vb 2
3107 \&        int a[2][2] = { 0, 1, 2, 3 };
3108 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
3109 .Ve
3110 .Sp
3111 This warning is enabled by \fB\-Wall\fR.
3112 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3113 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
3114 Warn if a user-supplied include directory does not exist.
3115 .IP "\fB\-Wparentheses\fR" 4
3116 .IX Item "-Wparentheses"
3117 Warn if parentheses are omitted in certain contexts, such
3118 as when there is an assignment in a context where a truth value
3119 is expected, or when operators are nested whose precedence people
3120 often get confused about.
3121 .Sp
3122 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
3123 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
3124 interpretation from that of ordinary mathematical notation.
3125 .Sp
3126 Also warn about constructions where there may be confusion to which
3127 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
3128 such a case:
3129 .Sp
3130 .Vb 7
3131 \&        {
3132 \&          if (a)
3133 \&            if (b)
3134 \&              foo ();
3135 \&          else
3136 \&            bar ();
3137 \&        }
3138 .Ve
3139 .Sp
3140 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
3141 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
3142 often not what the programmer expected, as illustrated in the above
3143 example by indentation the programmer chose.  When there is the
3144 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
3145 is specified.  To eliminate the warning, add explicit braces around
3146 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
3147 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
3148 look like this:
3149 .Sp
3150 .Vb 9
3151 \&        {
3152 \&          if (a)
3153 \&            {
3154 \&              if (b)
3155 \&                foo ();
3156 \&              else
3157 \&                bar ();
3158 \&            }
3159 \&        }
3160 .Ve
3161 .Sp
3162 Also warn for dangerous uses of the
3163 ?: with omitted middle operand \s-1GNU\s0 extension. When the condition
3164 in the ?: operator is a boolean expression the omitted value will
3165 be always 1. Often the user expects it to be a value computed
3166 inside the conditional expression instead.
3167 .Sp
3168 This warning is enabled by \fB\-Wall\fR.
3169 .IP "\fB\-Wsequence\-point\fR" 4
3170 .IX Item "-Wsequence-point"
3171 Warn about code that may have undefined semantics because of violations
3172 of sequence point rules in the C and \*(C+ standards.
3173 .Sp
3174 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
3175 program are evaluated in terms of \fIsequence points\fR, which represent
3176 a partial ordering between the execution of parts of the program: those
3177 executed before the sequence point, and those executed after it.  These
3178 occur after the evaluation of a full expression (one which is not part
3179 of a larger expression), after the evaluation of the first operand of a
3180 \&\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
3181 function is called (but after the evaluation of its arguments and the
3182 expression denoting the called function), and in certain other places.
3183 Other than as expressed by the sequence point rules, the order of
3184 evaluation of subexpressions of an expression is not specified.  All
3185 these rules describe only a partial order rather than a total order,
3186 since, for example, if two functions are called within one expression
3187 with no sequence point between them, the order in which the functions
3188 are called is not specified.  However, the standards committee have
3189 ruled that function calls do not overlap.
3190 .Sp
3191 It is not specified when between sequence points modifications to the
3192 values of objects take effect.  Programs whose behavior depends on this
3193 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
3194 the previous and next sequence point an object shall have its stored
3195 value modified at most once by the evaluation of an expression.
3196 Furthermore, the prior value shall be read only to determine the value
3197 to be stored.\*(R".  If a program breaks these rules, the results on any
3198 particular implementation are entirely unpredictable.
3199 .Sp
3200 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
3201 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
3202 diagnosed by this option, and it may give an occasional false positive
3203 result, but in general it has been found fairly effective at detecting
3204 this sort of problem in programs.
3205 .Sp
3206 The standard is worded confusingly, therefore there is some debate
3207 over the precise meaning of the sequence point rules in subtle cases.
3208 Links to discussions of the problem, including proposed formal
3209 definitions, may be found on the \s-1GCC\s0 readings page, at
3210 <\fBhttp://gcc.gnu.org/readings.html\fR>.
3211 .Sp
3212 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
3213 .IP "\fB\-Wreturn\-type\fR" 4
3214 .IX Item "-Wreturn-type"
3215 Warn whenever a function is defined with a return-type that defaults
3216 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
3217 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
3218 (falling off the end of the function body is considered returning
3219 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with an
3220 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
3221 .Sp
3222 For \*(C+, a function without return type always produces a diagnostic
3223 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
3224 exceptions are \fBmain\fR and functions defined in system headers.
3225 .Sp
3226 This warning is enabled by \fB\-Wall\fR.
3227 .IP "\fB\-Wswitch\fR" 4
3228 .IX Item "-Wswitch"
3229 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3230 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3231 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
3232 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3233 provoke warnings when this option is used (even if there is a
3234 \&\f(CW\*(C`default\*(C'\fR label).
3235 This warning is enabled by \fB\-Wall\fR.
3236 .IP "\fB\-Wswitch\-default\fR" 4
3237 .IX Item "-Wswitch-default"
3238 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
3239 case.
3240 .IP "\fB\-Wswitch\-enum\fR" 4
3241 .IX Item "-Wswitch-enum"
3242 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3243 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3244 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3245 provoke warnings when this option is used.  The only difference
3246 between \fB\-Wswitch\fR and this option is that this option gives a
3247 warning about an omitted enumeration code even if there is a
3248 \&\f(CW\*(C`default\*(C'\fR label.
3249 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
3250 .IX Item "-Wsync-nand (C and  only)"
3251 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
3252 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
3253 .IP "\fB\-Wtrigraphs\fR" 4
3254 .IX Item "-Wtrigraphs"
3255 Warn if any trigraphs are encountered that might change the meaning of
3256 the program (trigraphs within comments are not warned about).
3257 This warning is enabled by \fB\-Wall\fR.
3258 .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
3259 .IX Item "-Wunused-but-set-parameter"
3260 Warn whenever a function parameter is assigned to, but otherwise unused
3261 (aside from its declaration).
3262 .Sp
3263 To suppress this warning use the \fBunused\fR attribute.
3264 .Sp
3265 This warning is also enabled by \fB\-Wunused\fR together with
3266 \&\fB\-Wextra\fR.
3267 .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
3268 .IX Item "-Wunused-but-set-variable"
3269 Warn whenever a local variable is assigned to, but otherwise unused
3270 (aside from its declaration).
3271 This warning is enabled by \fB\-Wall\fR.
3272 .Sp
3273 To suppress this warning use the \fBunused\fR attribute.
3274 .Sp
3275 This warning is also enabled by \fB\-Wunused\fR, which is enabled
3276 by \fB\-Wall\fR.
3277 .IP "\fB\-Wunused\-function\fR" 4
3278 .IX Item "-Wunused-function"
3279 Warn whenever a static function is declared but not defined or a
3280 non-inline static function is unused.
3281 This warning is enabled by \fB\-Wall\fR.
3282 .IP "\fB\-Wunused\-label\fR" 4
3283 .IX Item "-Wunused-label"
3284 Warn whenever a label is declared but not used.
3285 This warning is enabled by \fB\-Wall\fR.
3286 .Sp
3287 To suppress this warning use the \fBunused\fR attribute.
3288 .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
3289 .IX Item "-Wunused-local-typedefs (C, Objective-C,  and Objective- only)"
3290 Warn when a typedef locally defined in a function is not used.
3291 .IP "\fB\-Wunused\-parameter\fR" 4
3292 .IX Item "-Wunused-parameter"
3293 Warn whenever a function parameter is unused aside from its declaration.
3294 .Sp
3295 To suppress this warning use the \fBunused\fR attribute.
3296 .IP "\fB\-Wno\-unused\-result\fR" 4
3297 .IX Item "-Wno-unused-result"
3298 Do not warn if a caller of a function marked with attribute
3299 \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
3300 its return value. The default is \fB\-Wunused\-result\fR.
3301 .IP "\fB\-Wunused\-variable\fR" 4
3302 .IX Item "-Wunused-variable"
3303 Warn whenever a local variable or non-constant static variable is unused
3304 aside from its declaration.
3305 This warning is enabled by \fB\-Wall\fR.
3306 .Sp
3307 To suppress this warning use the \fBunused\fR attribute.
3308 .IP "\fB\-Wunused\-value\fR" 4
3309 .IX Item "-Wunused-value"
3310 Warn whenever a statement computes a result that is explicitly not
3311 used. To suppress this warning cast the unused expression to
3312 \&\fBvoid\fR. This includes an expression-statement or the left-hand
3313 side of a comma expression that contains no side effects. For example,
3314 an expression such as \fBx[i,j]\fR will cause a warning, while
3315 \&\fBx[(void)i,j]\fR will not.
3316 .Sp
3317 This warning is enabled by \fB\-Wall\fR.
3318 .IP "\fB\-Wunused\fR" 4
3319 .IX Item "-Wunused"
3320 All the above \fB\-Wunused\fR options combined.
3321 .Sp
3322 In order to get a warning about an unused function parameter, you must
3323 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
3324 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
3325 .IP "\fB\-Wuninitialized\fR" 4
3326 .IX Item "-Wuninitialized"
3327 Warn if an automatic variable is used without first being initialized
3328 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
3329 warn if a non-static reference or non-static \fBconst\fR member
3330 appears in a class without constructors.
3331 .Sp
3332 If you want to warn about code that uses the uninitialized value of the
3333 variable in its own initializer, use the \fB\-Winit\-self\fR option.
3334 .Sp
3335 These warnings occur for individual uninitialized or clobbered
3336 elements of structure, union or array variables as well as for
3337 variables that are uninitialized or clobbered as a whole.  They do
3338 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3339 these warnings depend on optimization, the exact variables or elements
3340 for which there are warnings will depend on the precise optimization
3341 options and version of \s-1GCC\s0 used.
3342 .Sp
3343 Note that there may be no warning about a variable that is used only
3344 to compute a value that itself is never used, because such
3345 computations may be deleted by data flow analysis before the warnings
3346 are printed.
3347 .IP "\fB\-Wmaybe\-uninitialized\fR" 4
3348 .IX Item "-Wmaybe-uninitialized"
3349 For an automatic variable, if there exists a path from the function
3350 entry to a use of the variable that is initialized, but there exist
3351 some other paths the variable is not initialized, the compiler will
3352 emit a warning if it can not prove the uninitialized paths do not
3353 happen at run time. These warnings are made optional because \s-1GCC\s0 is
3354 not smart enough to see all the reasons why the code might be correct
3355 despite appearing to have an error.  Here is one example of how
3356 this can happen:
3357 .Sp
3358 .Vb 12
3359 \&        {
3360 \&          int x;
3361 \&          switch (y)
3362 \&            {
3363 \&            case 1: x = 1;
3364 \&              break;
3365 \&            case 2: x = 4;
3366 \&              break;
3367 \&            case 3: x = 5;
3368 \&            }
3369 \&          foo (x);
3370 \&        }
3371 .Ve
3372 .Sp
3373 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3374 always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
3375 warning, the user needs to provide a default case with \fIassert\fR\|(0) or
3376 similar code.
3377 .Sp
3378 This option also warns when a non-volatile automatic variable might be
3379 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3380 only in optimizing compilation.
3381 .Sp
3382 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3383 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3384 call it at any point in the code.  As a result, you may get a warning
3385 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3386 in fact be called at the place that would cause a problem.
3387 .Sp
3388 Some spurious warnings can be avoided if you declare all the functions
3389 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3390 .Sp
3391 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3392 .IP "\fB\-Wunknown\-pragmas\fR" 4
3393 .IX Item "-Wunknown-pragmas"
3394 Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
3395 \&\s-1GCC\s0.  If this command-line option is used, warnings will even be issued
3396 for unknown pragmas in system header files.  This is not the case if
3397 the warnings were only enabled by the \fB\-Wall\fR command-line option.
3398 .IP "\fB\-Wno\-pragmas\fR" 4
3399 .IX Item "-Wno-pragmas"
3400 Do not warn about misuses of pragmas, such as incorrect parameters,
3401 invalid syntax, or conflicts between pragmas.  See also
3402 \&\fB\-Wunknown\-pragmas\fR.
3403 .IP "\fB\-Wstrict\-aliasing\fR" 4
3404 .IX Item "-Wstrict-aliasing"
3405 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3406 It warns about code that might break the strict aliasing rules that the
3407 compiler is using for optimization.  The warning does not catch all
3408 cases, but does attempt to catch the more common pitfalls.  It is
3409 included in \fB\-Wall\fR.
3410 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3411 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3412 .IX Item "-Wstrict-aliasing=n"
3413 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3414 It warns about code that might break the strict aliasing rules that the
3415 compiler is using for optimization.
3416 Higher levels correspond to higher accuracy (fewer false positives).
3417 Higher levels also correspond to more effort, similar to the way \-O works.
3418 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3419 with n=3.
3420 .Sp
3421 Level 1: Most aggressive, quick, least accurate.
3422 Possibly useful when higher levels
3423 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few
3424 false negatives.  However, it has many false positives.
3425 Warns for all pointer conversions between possibly incompatible types,
3426 even if never dereferenced.  Runs in the front end only.
3427 .Sp
3428 Level 2: Aggressive, quick, not too precise.
3429 May still have many false positives (not as many as level 1 though),
3430 and few false negatives (but possibly more than level 1).
3431 Unlike level 1, it only warns when an address is taken.  Warns about
3432 incomplete types.  Runs in the front end only.
3433 .Sp
3434 Level 3 (default for \fB\-Wstrict\-aliasing\fR):
3435 Should have very few false positives and few false
3436 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3437 Takes care of the common pun+dereference pattern in the front end:
3438 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3439 If optimization is enabled, it also runs in the back end, where it deals
3440 with multiple statement cases using flow-sensitive points-to information.
3441 Only warns when the converted pointer is dereferenced.
3442 Does not warn about incomplete types.
3443 .IP "\fB\-Wstrict\-overflow\fR" 4
3444 .IX Item "-Wstrict-overflow"
3445 .PD 0
3446 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3447 .IX Item "-Wstrict-overflow=n"
3448 .PD
3449 This option is only active when \fB\-fstrict\-overflow\fR is active.
3450 It warns about cases where the compiler optimizes based on the
3451 assumption that signed overflow does not occur.  Note that it does not
3452 warn about all cases where the code might overflow: it only warns
3453 about cases where the compiler implements some optimization.  Thus
3454 this warning depends on the optimization level.
3455 .Sp
3456 An optimization that assumes that signed overflow does not occur is
3457 perfectly safe if the values of the variables involved are such that
3458 overflow never does, in fact, occur.  Therefore this warning can
3459 easily give a false positive: a warning about code that is not
3460 actually a problem.  To help focus on important issues, several
3461 warning levels are defined.  No warnings are issued for the use of
3462 undefined signed overflow when estimating how many iterations a loop
3463 will require, in particular when determining whether a loop will be
3464 executed at all.
3465 .RS 4
3466 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3467 .IX Item "-Wstrict-overflow=1"
3468 Warn about cases that are both questionable and easy to avoid.  For
3469 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3470 compiler will simplify this to \f(CW1\fR.  This level of
3471 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3472 are not, and must be explicitly requested.
3473 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3474 .IX Item "-Wstrict-overflow=2"
3475 Also warn about other cases where a comparison is simplified to a
3476 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3477 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3478 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3479 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3480 \&\fB\-Wstrict\-overflow=2\fR.
3481 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3482 .IX Item "-Wstrict-overflow=3"
3483 Also warn about other cases where a comparison is simplified.  For
3484 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3485 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3486 .IX Item "-Wstrict-overflow=4"
3487 Also warn about other simplifications not covered by the above cases.
3488 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3489 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3490 .IX Item "-Wstrict-overflow=5"
3491 Also warn about cases where the compiler reduces the magnitude of a
3492 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3493 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3494 highest warning level because this simplification applies to many
3495 comparisons, so this warning level will give a very large number of
3496 false positives.
3497 .RE
3498 .RS 4
3499 .RE
3500 .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR]" 4
3501 .IX Item "-Wsuggest-attribute=[pure|const|noreturn]"
3502 Warn for cases where adding an attribute may be beneficial. The
3503 attributes currently supported are listed below.
3504 .RS 4
3505 .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
3506 .IX Item "-Wsuggest-attribute=pure"
3507 .PD 0
3508 .IP "\fB\-Wsuggest\-attribute=const\fR" 4
3509 .IX Item "-Wsuggest-attribute=const"
3510 .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
3511 .IX Item "-Wsuggest-attribute=noreturn"
3512 .PD
3513 Warn about functions that might be candidates for attributes
3514 \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR.  The compiler only warns for
3515 functions visible in other compilation units or (in the case of \f(CW\*(C`pure\*(C'\fR and
3516 \&\f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns normally. A function
3517 returns normally if it doesn't contain an infinite loop nor returns abnormally
3518 by throwing, calling \f(CW\*(C`abort()\*(C'\fR or trapping.  This analysis requires option
3519 \&\fB\-fipa\-pure\-const\fR, which is enabled by default at \fB\-O\fR and
3520 higher.  Higher optimization levels improve the accuracy of the analysis.
3521 .RE
3522 .RS 4
3523 .RE
3524 .IP "\fB\-Warray\-bounds\fR" 4
3525 .IX Item "-Warray-bounds"
3526 This option is only active when \fB\-ftree\-vrp\fR is active
3527 (default for \fB\-O2\fR and above). It warns about subscripts to arrays
3528 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3529 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3530 .IX Item "-Wno-div-by-zero"
3531 Do not warn about compile-time integer division by zero.  Floating-point
3532 division by zero is not warned about, as it can be a legitimate way of
3533 obtaining infinities and NaNs.
3534 .IP "\fB\-Wsystem\-headers\fR" 4
3535 .IX Item "-Wsystem-headers"
3536 Print warning messages for constructs found in system header files.
3537 Warnings from system headers are normally suppressed, on the assumption
3538 that they usually do not indicate real problems and would only make the
3539 compiler output harder to read.  Using this command-line option tells
3540 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3541 code.  However, note that using \fB\-Wall\fR in conjunction with this
3542 option will \fInot\fR warn about unknown pragmas in system
3543 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3544 .IP "\fB\-Wtrampolines\fR" 4
3545 .IX Item "-Wtrampolines"
3546 .Vb 1
3547 \& Warn about trampolines generated for pointers to nested functions.
3548 \&
3549 \& A trampoline is a small piece of data or code that is created at run
3550 \& time on the stack when the address of a nested function is taken, and
3551 \& is used to call the nested function indirectly.  For some targets, it
3552 \& is made up of data only and thus requires no special treatment.  But,
3553 \& for most targets, it is made up of code and thus requires the stack
3554 \& to be made executable in order for the program to work properly.
3555 .Ve
3556 .IP "\fB\-Wfloat\-equal\fR" 4
3557 .IX Item "-Wfloat-equal"
3558 Warn if floating-point values are used in equality comparisons.
3559 .Sp
3560 The idea behind this is that sometimes it is convenient (for the
3561 programmer) to consider floating-point values as approximations to
3562 infinitely precise real numbers.  If you are doing this, then you need
3563 to compute (by analyzing the code, or in some other way) the maximum or
3564 likely maximum error that the computation introduces, and allow for it
3565 when performing comparisons (and when producing output, but that's a
3566 different problem).  In particular, instead of testing for equality, you
3567 would check to see whether the two values have ranges that overlap; and
3568 this is done with the relational operators, so equality comparisons are
3569 probably mistaken.
3570 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3571 .IX Item "-Wtraditional (C and Objective-C only)"
3572 Warn about certain constructs that behave differently in traditional and
3573 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3574 equivalent, and/or problematic constructs that should be avoided.
3575 .RS 4
3576 .IP "\(bu" 4
3577 Macro parameters that appear within string literals in the macro body.
3578 In traditional C macro replacement takes place within string literals,
3579 but does not in \s-1ISO\s0 C.
3580 .IP "\(bu" 4
3581 In traditional C, some preprocessor directives did not exist.
3582 Traditional preprocessors would only consider a line to be a directive
3583 if the \fB#\fR appeared in column 1 on the line.  Therefore
3584 \&\fB\-Wtraditional\fR warns about directives that traditional C
3585 understands but would ignore because the \fB#\fR does not appear as the
3586 first character on the line.  It also suggests you hide directives like
3587 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3588 traditional implementations would not recognize \fB#elif\fR, so it
3589 suggests avoiding it altogether.
3590 .IP "\(bu" 4
3591 A function-like macro that appears without arguments.
3592 .IP "\(bu" 4
3593 The unary plus operator.
3594 .IP "\(bu" 4
3595 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
3596 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3597 constants.)  Note, these suffixes appear in macros defined in the system
3598 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3599 Use of these macros in user code might normally lead to spurious
3600 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3601 avoid warning in these cases.
3602 .IP "\(bu" 4
3603 A function declared external in one block and then used after the end of
3604 the block.
3605 .IP "\(bu" 4
3606 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3607 .IP "\(bu" 4
3608 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3609 This construct is not accepted by some traditional C compilers.
3610 .IP "\(bu" 4
3611 The \s-1ISO\s0 type of an integer constant has a different width or
3612 signedness from its traditional type.  This warning is only issued if
3613 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3614 typically represent bit patterns, are not warned about.
3615 .IP "\(bu" 4
3616 Usage of \s-1ISO\s0 string concatenation is detected.
3617 .IP "\(bu" 4
3618 Initialization of automatic aggregates.
3619 .IP "\(bu" 4
3620 Identifier conflicts with labels.  Traditional C lacks a separate
3621 namespace for labels.
3622 .IP "\(bu" 4
3623 Initialization of unions.  If the initializer is zero, the warning is
3624 omitted.  This is done under the assumption that the zero initializer in
3625 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3626 initializer warnings and relies on default initialization to zero in the
3627 traditional C case.
3628 .IP "\(bu" 4
3629 Conversions by prototypes between fixed/floating\-point values and vice
3630 versa.  The absence of these prototypes when compiling with traditional
3631 C would cause serious problems.  This is a subset of the possible
3632 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3633 .IP "\(bu" 4
3634 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3635 \&\fInot\fR issued for prototype declarations or variadic functions
3636 because these \s-1ISO\s0 C features will appear in your code when using
3637 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3638 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3639 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3640 traditional C compatibility.
3641 .RE
3642 .RS 4
3643 .RE
3644 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3645 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3646 Warn if a prototype causes a type conversion that is different from what
3647 would happen to the same argument in the absence of a prototype.  This
3648 includes conversions of fixed point to floating and vice versa, and
3649 conversions changing the width or signedness of a fixed-point argument
3650 except when the same as the default promotion.
3651 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3652 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3653 Warn when a declaration is found after a statement in a block.  This
3654 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3655 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3656 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.
3657 .IP "\fB\-Wundef\fR" 4
3658 .IX Item "-Wundef"
3659 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3660 .IP "\fB\-Wno\-endif\-labels\fR" 4
3661 .IX Item "-Wno-endif-labels"
3662 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3663 .IP "\fB\-Wshadow\fR" 4
3664 .IX Item "-Wshadow"
3665 Warn whenever a local variable or type declaration shadows another variable,
3666 parameter, type, or class member (in \*(C+), or whenever a built-in function
3667 is shadowed. Note that in \*(C+, the compiler will not warn if a local variable
3668 shadows a struct/class/enum, but will warn if it shadows an explicit typedef.
3669 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3670 .IX Item "-Wlarger-than=len"
3671 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3672 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3673 .IX Item "-Wframe-larger-than=len"
3674 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3675 The computation done to determine the stack frame size is approximate
3676 and not conservative.
3677 The actual requirements may be somewhat greater than \fIlen\fR
3678 even if you do not get a warning.  In addition, any space allocated
3679 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3680 is not included by the compiler when determining
3681 whether or not to issue a warning.
3682 .IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
3683 .IX Item "-Wno-free-nonheap-object"
3684 Do not warn when attempting to free an object that was not allocated
3685 on the heap.
3686 .IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
3687 .IX Item "-Wstack-usage=len"
3688 Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
3689 The computation done to determine the stack usage is conservative.
3690 Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
3691 constructs is included by the compiler when determining whether or not to
3692 issue a warning.
3693 .Sp
3694 The message is in keeping with the output of \fB\-fstack\-usage\fR.
3695 .RS 4
3696 .IP "\(bu" 4
3697 If the stack usage is fully static but exceeds the specified amount, it's:
3698 .Sp
3699 .Vb 1
3700 \&          warning: stack usage is 1120 bytes
3701 .Ve
3702 .IP "\(bu" 4
3703 If the stack usage is (partly) dynamic but bounded, it's:
3704 .Sp
3705 .Vb 1
3706 \&          warning: stack usage might be 1648 bytes
3707 .Ve
3708 .IP "\(bu" 4
3709 If the stack usage is (partly) dynamic and not bounded, it's:
3710 .Sp
3711 .Vb 1
3712 \&          warning: stack usage might be unbounded
3713 .Ve
3714 .RE
3715 .RS 4
3716 .RE
3717 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3718 .IX Item "-Wunsafe-loop-optimizations"
3719 Warn if the loop cannot be optimized because the compiler could not
3720 assume anything on the bounds of the loop indices.  With
3721 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3722 such assumptions.
3723 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3724 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3725 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3726 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
3727 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3728 and \fB\-pedantic\fR without gnu-extensions.
3729 .IP "\fB\-Wpointer\-arith\fR" 4
3730 .IX Item "-Wpointer-arith"
3731 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3732 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3733 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3734 to functions.  In \*(C+, warn also when an arithmetic operation involves
3735 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3736 .IP "\fB\-Wtype\-limits\fR" 4
3737 .IX Item "-Wtype-limits"
3738 Warn if a comparison is always true or always false due to the limited
3739 range of the data type, but do not warn for constant expressions.  For
3740 example, warn if an unsigned variable is compared against zero with
3741 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3742 \&\fB\-Wextra\fR.
3743 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3744 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3745 Warn whenever a function call is cast to a non-matching type.
3746 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3747 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3748 .IX Item "-Wc++-compat (C and Objective-C only)"
3749 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3750 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3751 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3752 .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3753 .IX Item "-Wc++11-compat ( and Objective- only)"
3754 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998
3755 and \s-1ISO\s0 \*(C+ 2011, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that are keywords
3756 in \s-1ISO\s0 \*(C+ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
3757 enabled by \fB\-Wall\fR.
3758 .IP "\fB\-Wcast\-qual\fR" 4
3759 .IX Item "-Wcast-qual"
3760 Warn whenever a pointer is cast so as to remove a type qualifier from
3761 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3762 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3763 .Sp
3764 Also warn when making a cast that introduces a type qualifier in an
3765 unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
3766 is unsafe, as in this example:
3767 .Sp
3768 .Vb 6
3769 \&          /* p is char ** value.  */
3770 \&          const char **q = (const char **) p;
3771 \&          /* Assignment of readonly string to const char * is OK.  */
3772 \&          *q = "string";
3773 \&          /* Now char** pointer points to read\-only memory.  */
3774 \&          **p = \*(Aqb\*(Aq;
3775 .Ve
3776 .IP "\fB\-Wcast\-align\fR" 4
3777 .IX Item "-Wcast-align"
3778 Warn whenever a pointer is cast such that the required alignment of the
3779 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3780 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3781 two\- or four-byte boundaries.
3782 .IP "\fB\-Wwrite\-strings\fR" 4
3783 .IX Item "-Wwrite-strings"
3784 When compiling C, give string constants the type \f(CW\*(C`const
3785 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3786 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3787 warnings will help you find at compile time code that can try to write
3788 into a string constant, but only if you have been very careful about
3789 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3790 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3791 these warnings.
3792 .Sp
3793 When compiling \*(C+, warn about the deprecated conversion from string
3794 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3795 programs.
3796 .IP "\fB\-Wclobbered\fR" 4
3797 .IX Item "-Wclobbered"
3798 Warn for variables that might be changed by \fBlongjmp\fR or
3799 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3800 .IP "\fB\-Wconversion\fR" 4
3801 .IX Item "-Wconversion"
3802 Warn for implicit conversions that may alter a value. This includes
3803 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3804 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3805 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3806 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3807 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3808 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3809 conversions between signed and unsigned integers can be disabled by
3810 using \fB\-Wno\-sign\-conversion\fR.
3811 .Sp
3812 For \*(C+, also warn for confusing overload resolution for user-defined
3813 conversions; and conversions that will never use a type conversion
3814 operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
3815 reference to them. Warnings about conversions between signed and
3816 unsigned integers are disabled by default in \*(C+ unless
3817 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3818 .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
3819 .IX Item "-Wno-conversion-null ( and Objective- only)"
3820 Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3821 types. \fB\-Wconversion\-null\fR is enabled by default.
3822 .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
3823 .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
3824 Warn when a literal '0' is used as null pointer constant.  This can
3825 be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
3826 .IP "\fB\-Wempty\-body\fR" 4
3827 .IX Item "-Wempty-body"
3828 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3829 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3830 .IP "\fB\-Wenum\-compare\fR" 4
3831 .IX Item "-Wenum-compare"
3832 Warn about a comparison between values of different enumerated types.
3833 In \*(C+ enumeral mismatches in conditional expressions are also
3834 diagnosed and the warning is enabled by default.  In C this warning is 
3835 enabled by \fB\-Wall\fR.
3836 .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
3837 .IX Item "-Wjump-misses-init (C, Objective-C only)"
3838 Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
3839 forward across the initialization of a variable, or jumps backward to a
3840 label after the variable has been initialized.  This only warns about
3841 variables that are initialized when they are declared.  This warning is
3842 only supported for C and Objective-C; in \*(C+ this sort of branch is an
3843 error in any case.
3844 .Sp
3845 \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
3846 can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
3847 .IP "\fB\-Wsign\-compare\fR" 4
3848 .IX Item "-Wsign-compare"
3849 Warn when a comparison between signed and unsigned values could produce
3850 an incorrect result when the signed value is converted to unsigned.
3851 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3852 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3853 .IP "\fB\-Wsign\-conversion\fR" 4
3854 .IX Item "-Wsign-conversion"
3855 Warn for implicit conversions that may change the sign of an integer
3856 value, like assigning a signed integer expression to an unsigned
3857 integer variable. An explicit cast silences the warning. In C, this
3858 option is enabled also by \fB\-Wconversion\fR.
3859 .IP "\fB\-Waddress\fR" 4
3860 .IX Item "-Waddress"
3861 Warn about suspicious uses of memory addresses. These include using
3862 the address of a function in a conditional expression, such as
3863 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3864 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3865 uses typically indicate a programmer error: the address of a function
3866 always evaluates to true, so their use in a conditional usually
3867 indicate that the programmer forgot the parentheses in a function
3868 call; and comparisons against string literals result in unspecified
3869 behavior and are not portable in C, so they usually indicate that the
3870 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3871 \&\fB\-Wall\fR.
3872 .IP "\fB\-Wlogical\-op\fR" 4
3873 .IX Item "-Wlogical-op"
3874 Warn about suspicious uses of logical operators in expressions.
3875 This includes using logical operators in contexts where a
3876 bit-wise operator is likely to be expected.
3877 .IP "\fB\-Waggregate\-return\fR" 4
3878 .IX Item "-Waggregate-return"
3879 Warn if any functions that return structures or unions are defined or
3880 called.  (In languages where you can return an array, this also elicits
3881 a warning.)
3882 .IP "\fB\-Wno\-attributes\fR" 4
3883 .IX Item "-Wno-attributes"
3884 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3885 unrecognized attributes, function attributes applied to variables,
3886 etc.  This will not stop errors for incorrect use of supported
3887 attributes.
3888 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3889 .IX Item "-Wno-builtin-macro-redefined"
3890 Do not warn if certain built-in macros are redefined.  This suppresses
3891 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3892 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3893 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3894 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3895 Warn if a function is declared or defined without specifying the
3896 argument types.  (An old-style function definition is permitted without
3897 a warning if preceded by a declaration that specifies the argument
3898 types.)
3899 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3900 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3901 Warn for obsolescent usages, according to the C Standard, in a
3902 declaration. For example, warn if storage-class specifiers like
3903 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3904 is also enabled by \fB\-Wextra\fR.
3905 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3906 .IX Item "-Wold-style-definition (C and Objective-C only)"
3907 Warn if an old-style function definition is used.  A warning is given
3908 even if there is a previous prototype.
3909 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3910 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3911 A function parameter is declared without a type specifier in K&R\-style
3912 functions:
3913 .Sp
3914 .Vb 1
3915 \&        void foo(bar) { }
3916 .Ve
3917 .Sp
3918 This warning is also enabled by \fB\-Wextra\fR.
3919 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3920 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3921 Warn if a global function is defined without a previous prototype
3922 declaration.  This warning is issued even if the definition itself
3923 provides a prototype.  The aim is to detect global functions that 
3924 are not declared in header files.
3925 .IP "\fB\-Wmissing\-declarations\fR" 4
3926 .IX Item "-Wmissing-declarations"
3927 Warn if a global function is defined without a previous declaration.
3928 Do so even if the definition itself provides a prototype.
3929 Use this option to detect global functions that are not declared in
3930 header files.  In \*(C+, no warnings are issued for function templates,
3931 or for inline functions, or for functions in anonymous namespaces.
3932 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3933 .IX Item "-Wmissing-field-initializers"
3934 Warn if a structure's initializer has some fields missing.  For
3935 example, the following code would cause such a warning, because
3936 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3937 .Sp
3938 .Vb 2
3939 \&        struct s { int f, g, h; };
3940 \&        struct s x = { 3, 4 };
3941 .Ve
3942 .Sp
3943 This option does not warn about designated initializers, so the following
3944 modification would not trigger a warning:
3945 .Sp
3946 .Vb 2
3947 \&        struct s { int f, g, h; };
3948 \&        struct s x = { .f = 3, .g = 4 };
3949 .Ve
3950 .Sp
3951 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3952 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3953 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3954 .IX Item "-Wmissing-format-attribute"
3955 Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
3956 attributes.  Note these are only possible candidates, not absolute ones.
3957 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3958 are used in assignment, initialization, parameter passing or return
3959 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3960 resulting type.  I.e. the left-hand side of the assignment or
3961 initialization, the type of the parameter variable, or the return type
3962 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3963 attribute to avoid the warning.
3964 .Sp
3965 \&\s-1GCC\s0 will also warn about function definitions that might be
3966 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3967 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3968 might be appropriate for any function that calls a function like
3969 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3970 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3971 appropriate may not be detected.
3972 .IP "\fB\-Wno\-multichar\fR" 4
3973 .IX Item "-Wno-multichar"
3974 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3975 Usually they indicate a typo in the user's code, as they have
3976 implementation-defined values, and should not be used in portable code.
3977 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3978 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3979 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3980 different sequences of characters.  However, sometimes when characters
3981 outside the basic \s-1ASCII\s0 character set are used, you can have two
3982 different character sequences that look the same.  To avoid confusion,
3983 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3984 when applied ensure that two sequences that look the same are turned into
3985 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
3986 have not been normalized; this option controls that warning.
3987 .Sp
3988 There are four levels of warning supported by \s-1GCC\s0.  The default is
3989 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
3990 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3991 recommended form for most uses.
3992 .Sp
3993 Unfortunately, there are some characters allowed in identifiers by
3994 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+ that, when turned into \s-1NFC\s0, are not allowed in 
3995 identifiers.  That is, there's no way to use these symbols in portable
3996 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3997 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3998 It is hoped that future versions of the standards involved will correct
3999 this, which is why this option is not the default.
4000 .Sp
4001 You can switch the warning off for all characters by writing
4002 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
4003 were using some other normalization scheme (like \*(L"D\*(R"), because
4004 otherwise you can easily create bugs that are literally impossible to see.
4005 .Sp
4006 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
4007 in some fonts or display methodologies, especially once formatting has
4008 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
4009 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR that has been
4010 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
4011 normalization scheme to convert all these into a standard form as
4012 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
4013 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
4014 about every identifier that contains the letter O because it might be
4015 confused with the digit 0, and so is not the default, but may be
4016 useful as a local coding convention if the programming environment is
4017 unable to be fixed to display these characters distinctly.
4018 .IP "\fB\-Wno\-deprecated\fR" 4
4019 .IX Item "-Wno-deprecated"
4020 Do not warn about usage of deprecated features.
4021 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
4022 .IX Item "-Wno-deprecated-declarations"
4023 Do not warn about uses of functions,
4024 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
4025 attribute.
4026 .IP "\fB\-Wno\-overflow\fR" 4
4027 .IX Item "-Wno-overflow"
4028 Do not warn about compile-time overflow in constant expressions.
4029 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
4030 .IX Item "-Woverride-init (C and Objective-C only)"
4031 Warn if an initialized field without side effects is overridden when
4032 using designated initializers.
4033 .Sp
4034 This warning is included in \fB\-Wextra\fR.  To get other
4035 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
4036 \&\-Wno\-override\-init\fR.
4037 .IP "\fB\-Wpacked\fR" 4
4038 .IX Item "-Wpacked"
4039 Warn if a structure is given the packed attribute, but the packed
4040 attribute has no effect on the layout or size of the structure.
4041 Such structures may be mis-aligned for little benefit.  For
4042 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
4043 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
4044 have the packed attribute:
4045 .Sp
4046 .Vb 8
4047 \&        struct foo {
4048 \&          int x;
4049 \&          char a, b, c, d;
4050 \&        } _\|_attribute_\|_((packed));
4051 \&        struct bar {
4052 \&          char z;
4053 \&          struct foo f;
4054 \&        };
4055 .Ve
4056 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
4057 .IX Item "-Wpacked-bitfield-compat"
4058 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
4059 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
4060 the change can lead to differences in the structure layout.  \s-1GCC\s0
4061 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
4062 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
4063 and \f(CW\*(C`b\*(C'\fR in this structure:
4064 .Sp
4065 .Vb 5
4066 \&        struct foo
4067 \&        {
4068 \&          char a:4;
4069 \&          char b:8;
4070 \&        } _\|_attribute_\|_ ((packed));
4071 .Ve
4072 .Sp
4073 This warning is enabled by default.  Use
4074 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
4075 .IP "\fB\-Wpadded\fR" 4
4076 .IX Item "-Wpadded"
4077 Warn if padding is included in a structure, either to align an element
4078 of the structure or to align the whole structure.  Sometimes when this
4079 happens it is possible to rearrange the fields of the structure to
4080 reduce the padding and so make the structure smaller.
4081 .IP "\fB\-Wredundant\-decls\fR" 4
4082 .IX Item "-Wredundant-decls"
4083 Warn if anything is declared more than once in the same scope, even in
4084 cases where multiple declaration is valid and changes nothing.
4085 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
4086 .IX Item "-Wnested-externs (C and Objective-C only)"
4087 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
4088 .IP "\fB\-Winline\fR" 4
4089 .IX Item "-Winline"
4090 Warn if a function can not be inlined and it was declared as inline.
4091 Even with this option, the compiler will not warn about failures to
4092 inline functions declared in system headers.
4093 .Sp
4094 The compiler uses a variety of heuristics to determine whether or not
4095 to inline a function.  For example, the compiler takes into account
4096 the size of the function being inlined and the amount of inlining
4097 that has already been done in the current function.  Therefore,
4098 seemingly insignificant changes in the source program can cause the
4099 warnings produced by \fB\-Winline\fR to appear or disappear.
4100 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
4101 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
4102 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
4103 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
4104 to a non-POD type is undefined.  In existing \*(C+ implementations,
4105 however, \fBoffsetof\fR typically gives meaningful results even when
4106 applied to certain kinds of non-POD types. (Such as a simple
4107 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
4108 constructor.)  This flag is for users who are aware that they are
4109 writing nonportable code and who have deliberately chosen to ignore the
4110 warning about it.
4111 .Sp
4112 The restrictions on \fBoffsetof\fR may be relaxed in a future version
4113 of the \*(C+ standard.
4114 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
4115 .IX Item "-Wno-int-to-pointer-cast"
4116 Suppress warnings from casts to pointer type of an integer of a
4117 different size. In \*(C+, casting to a pointer type of smaller size is
4118 an error. \fBWint-to-pointer-cast\fR is enabled by default.
4119 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
4120 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
4121 Suppress warnings from casts from a pointer to an integer type of a
4122 different size.
4123 .IP "\fB\-Winvalid\-pch\fR" 4
4124 .IX Item "-Winvalid-pch"
4125 Warn if a precompiled header is found in
4126 the search path but can't be used.
4127 .IP "\fB\-Wlong\-long\fR" 4