binutils221: Fix missing section start/end label generation
[dragonfly.git] / contrib / gcc-4.4 / gcc / doc / g++.1
1 .\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.07)
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 "2009-10-15" "gcc-4.4.2" "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\-combine  \-pipe  \-pass\-exit\-codes  
198 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
199 \&\-\-version \-wrapper@\fR\fIfile\fR
200 .IP "\fIC Language Options\fR" 4
201 .IX Item "C Language Options"
202 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
203 \&\-aux\-info\fR \fIfilename\fR 
204 \&\fB\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
205 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fms\-extensions 
206 \&\-trigraphs  \-no\-integrated\-cpp  \-traditional  \-traditional\-cpp 
207 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
208 \&\-fsigned\-bitfields  \-fsigned\-char 
209 \&\-funsigned\-bitfields  \-funsigned\-char\fR
210 .IP "\fI\*(C+ Language Options\fR" 4
211 .IX Item " Language Options"
212 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
213 \&\-fconserve\-space  \-ffriend\-injection 
214 \&\-fno\-elide\-constructors 
215 \&\-fno\-enforce\-eh\-specs 
216 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
217 \&\-fno\-implicit\-templates 
218 \&\-fno\-implicit\-inline\-templates 
219 \&\-fno\-implement\-inlines  \-fms\-extensions 
220 \&\-fno\-nonansi\-builtins  \-fno\-operator\-names 
221 \&\-fno\-optional\-diags  \-fpermissive 
222 \&\-frepo  \-fno\-rtti  \-fstats  \-ftemplate\-depth\-\fR\fIn\fR 
223 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
224 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
225 \&\-fvisibility\-ms\-compat 
226 \&\-Wabi  \-Wctor\-dtor\-privacy 
227 \&\-Wnon\-virtual\-dtor  \-Wreorder 
228 \&\-Weffc++  \-Wstrict\-null\-sentinel 
229 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
230 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
231 \&\-Wsign\-promo\fR
232 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
233 .IX Item "Objective-C and Objective- Language Options"
234 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
235 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
236 \&\-fno\-nil\-receivers 
237 \&\-fobjc\-call\-cxx\-cdtors 
238 \&\-fobjc\-direct\-dispatch 
239 \&\-fobjc\-exceptions 
240 \&\-fobjc\-gc 
241 \&\-freplace\-objc\-classes 
242 \&\-fzero\-link 
243 \&\-gen\-decls 
244 \&\-Wassign\-intercept 
245 \&\-Wno\-protocol  \-Wselector 
246 \&\-Wstrict\-selector\-match 
247 \&\-Wundeclared\-selector\fR
248 .IP "\fILanguage Independent Options\fR" 4
249 .IX Item "Language Independent Options"
250 \&\fB\-fmessage\-length=\fR\fIn\fR  
251 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
252 \&\fB\-fdiagnostics\-show\-option\fR
253 .IP "\fIWarning Options\fR" 4
254 .IX Item "Warning Options"
255 \&\fB\-fsyntax\-only  \-pedantic  \-pedantic\-errors 
256 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
257 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
258 \&\-Wc++\-compat \-Wc++0x\-compat \-Wcast\-align  \-Wcast\-qual  
259 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
260 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-deprecated  
261 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
262 \&\-Wno\-div\-by\-zero \-Wempty\-body  \-Wenum\-compare \-Wno\-endif\-labels 
263 \&\-Werror  \-Werror=* 
264 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
265 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
266 \&\-Wformat\-security  \-Wformat\-y2k 
267 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wignored\-qualifiers 
268 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
269 \&\-Winit\-self  \-Winline 
270 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
271 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
272 \&\-Wlogical\-op \-Wlong\-long 
273 \&\-Wmain  \-Wmissing\-braces  \-Wmissing\-field\-initializers 
274 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
275 \&\-Wmissing\-noreturn  \-Wno\-mudflap 
276 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
277 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
278 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
279 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
280 \&\-Wredundant\-decls 
281 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow 
282 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
283 \&\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
284 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
285 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
286 \&\-Wsystem\-headers  \-Wtrigraphs  \-Wtype\-limits  \-Wundef  \-Wuninitialized 
287 \&\-Wunknown\-pragmas  \-Wno\-pragmas \-Wunreachable\-code 
288 \&\-Wunused  \-Wunused\-function  \-Wunused\-label  \-Wunused\-parameter 
289 \&\-Wunused\-value  \-Wunused\-variable 
290 \&\-Wvariadic\-macros \-Wvla 
291 \&\-Wvolatile\-register\-var  \-Wwrite\-strings\fR
292 .IP "\fIC and Objective-C-only Warning Options\fR" 4
293 .IX Item "C and Objective-C-only Warning Options"
294 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
295 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
296 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
297 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
298 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
299 .IP "\fIDebugging Options\fR" 4
300 .IX Item "Debugging Options"
301 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
302 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
303 \&\fB\-fdump\-noaddr \-fdump\-unnumbered 
304 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
305 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
306 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
307 \&\-fdump\-statistics 
308 \&\-fdump\-tree\-all 
309 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
310 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
311 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
312 \&\-fdump\-tree\-ch 
313 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
314 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
315 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
316 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
317 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
318 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
319 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
320 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
321 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
322 \&\-fdump\-tree\-sink 
323 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
324 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
325 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
326 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
327 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
328 \&\fB\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
329 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
330 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
331 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
332 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
333 \&\-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
334 \&\-g  \-g\fR\fIlevel\fR  \fB\-gcoff \-gdwarf\-2 
335 \&\-ggdb  \-gstabs  \-gstabs+  \-gvms  \-gxcoff  \-gxcoff+ 
336 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
337 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
338 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
339 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
340 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
341 \&\-print\-multi\-directory  \-print\-multi\-lib 
342 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
343 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
344 \&\-save\-temps  \-time\fR
345 .IP "\fIOptimization Options\fR" 4
346 .IX Item "Optimization Options"
347 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
348 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
349 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
350 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
351 \&\-fcheck\-data\-deps \-fconserve\-stack \-fcprop\-registers \-fcrossjumping 
352 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules \-fcx\-limited\-range 
353 \&\-fdata\-sections \-fdce \-fdce 
354 \&\-fdelayed\-branch \-fdelete\-null\-pointer\-checks \-fdse \-fdse 
355 \&\-fearly\-inlining \-fexpensive\-optimizations \-ffast\-math 
356 \&\-ffinite\-math\-only \-ffloat\-store \-fforward\-propagate 
357 \&\-ffunction\-sections \-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm 
358 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
359 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
360 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg \-fipa\-pta  
361 \&\-fipa\-pure\-const \-fipa\-reference \-fipa\-struct\-reorg 
362 \&\-fipa\-type\-escape \-fira\-algorithm=\fR\fIalgorithm\fR 
363 \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-coalesce \-fno\-ira\-share\-save\-slots 
364 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
365 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
366 \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine 
367 \&\-fmerge\-all\-constants \-fmerge\-constants \-fmodulo\-sched 
368 \&\-fmodulo\-sched\-allow\-regmoves \-fmove\-loop\-invariants \-fmudflap 
369 \&\-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg \-fno\-default\-inline 
370 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
371 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
372 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
373 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
374 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
375 \&\-fpeel\-loops \-fpredictive\-commoning \-fprefetch\-loop\-arrays 
376 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
377 \&\-fprofile\-generate=\fR\fIpath\fR 
378 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
379 \&\-freciprocal\-math \-fregmove \-frename\-registers \-freorder\-blocks 
380 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
381 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
382 \&\-frounding\-math \-frtl\-abstract\-sequences \-fsched2\-use\-superblocks 
383 \&\-fsched2\-use\-traces \-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
384 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
385 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors \-fsee 
386 \&\-fselective\-scheduling \-fselective\-scheduling2 
387 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
388 \&\-fsignaling\-nans \-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller 
389 \&\-fsplit\-wide\-types \-fstack\-protector \-fstack\-protector\-all 
390 \&\-fstrict\-aliasing \-fstrict\-overflow \-fthread\-jumps \-ftracer 
391 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
392 \&\-ftree\-copyrename \-ftree\-dce 
393 \&\-ftree\-dominator\-opts \-ftree\-dse \-ftree\-fre \-ftree\-loop\-im 
394 \&\-ftree\-loop\-distribution 
395 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
396 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-reassoc 
397 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion 
398 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
399 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
400 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
401 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
402 \&\-fwhole\-program 
403 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
404 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os\fR
405 .IP "\fIPreprocessor Options\fR" 4
406 .IX Item "Preprocessor Options"
407 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
408 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
409 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
410 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
411 \&\-idirafter\fR \fIdir\fR 
412 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
413 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
414 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
415 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
416 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
417 \&\-P  \-fworking\-directory  \-remap 
418 \&\-trigraphs  \-undef  \-U\fR\fImacro\fR  \fB\-Wp,\fR\fIoption\fR 
419 \&\fB\-Xpreprocessor\fR \fIoption\fR
420 .IP "\fIAssembler Option\fR" 4
421 .IX Item "Assembler Option"
422 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
423 .IP "\fILinker Options\fR" 4
424 .IX Item "Linker Options"
425 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
426 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
427 \&\-s  \-static  \-static\-libgcc  \-shared  \-shared\-libgcc  \-symbolic 
428 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
429 \&\fB\-u\fR \fIsymbol\fR
430 .IP "\fIDirectory Options\fR" 4
431 .IX Item "Directory Options"
432 \&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-iquote\fR\fIdir\fR  \fB\-L\fR\fIdir\fR
433 \&\fB\-specs=\fR\fIfile\fR  \fB\-I\- \-\-sysroot=\fR\fIdir\fR
434 .IP "\fITarget Options\fR" 4
435 .IX Item "Target Options"
436 \&\fB\-V\fR \fIversion\fR  \fB\-b\fR \fImachine\fR
437 .IP "\fIMachine Dependent Options\fR" 4
438 .IX Item "Machine Dependent Options"
439 \&\fI\s-1ARC\s0 Options\fR
440 \&\fB\-EB  \-EL 
441 \&\-mmangle\-cpu  \-mcpu=\fR\fIcpu\fR  \fB\-mtext=\fR\fItext-section\fR 
442 \&\fB\-mdata=\fR\fIdata-section\fR  \fB\-mrodata=\fR\fIreadonly-data-section\fR
443 .Sp
444 \&\fI\s-1ARM\s0 Options\fR
445 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
446 \&\-mabi=\fR\fIname\fR 
447 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
448 \&\-mapcs\-float  \-mno\-apcs\-float 
449 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
450 \&\-msched\-prolog  \-mno\-sched\-prolog 
451 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
452 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-msoft\-float  \-mhard\-float  \-mfpe 
453 \&\-mthumb\-interwork  \-mno\-thumb\-interwork 
454 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
455 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
456 \&\fB\-mabort\-on\-noreturn 
457 \&\-mlong\-calls  \-mno\-long\-calls 
458 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
459 \&\-mpic\-register=\fR\fIreg\fR 
460 \&\fB\-mnop\-fun\-dllimport 
461 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
462 \&\-mpoke\-function\-name 
463 \&\-mthumb  \-marm 
464 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
465 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
466 \&\-mtp=\fR\fIname\fR 
467 \&\fB\-mword\-relocations 
468 \&\-mfix\-cortex\-m3\-ldrd\fR
469 .Sp
470 \&\fI\s-1AVR\s0 Options\fR
471 \&\fB\-mmcu=\fR\fImcu\fR  \fB\-msize  \-mno\-interrupts 
472 \&\-mcall\-prologues  \-mno\-tablejump  \-mtiny\-stack  \-mint8\fR
473 .Sp
474 \&\fIBlackfin Options\fR
475 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
476 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
477 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
478 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
479 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
480 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
481 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
482 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
483 \&\-micplb\fR
484 .Sp
485 \&\fI\s-1CRIS\s0 Options\fR
486 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
487 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
488 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
489 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
490 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
491 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
492 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
493 .Sp
494 \&\fI\s-1CRX\s0 Options\fR
495 \&\fB\-mmac \-mpush\-args\fR
496 .Sp
497 \&\fIDarwin Options\fR
498 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
499 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
500 \&\-client_name  \-compatibility_version  \-current_version 
501 \&\-dead_strip 
502 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
503 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
504 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
505 \&\-force_flat_namespace  \-headerpad_max_install_names 
506 \&\-iframework 
507 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
508 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
509 \&\-noall_load   \-no_dead_strip_inits_and_terms 
510 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
511 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
512 \&\-private_bundle  \-read_only_relocs  \-sectalign 
513 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
514 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
515 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
516 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
517 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
518 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
519 \&\-twolevel_namespace  \-umbrella  \-undefined 
520 \&\-unexported_symbols_list  \-weak_reference_mismatches 
521 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
522 \&\fB\-mkernel \-mone\-byte\-bool\fR
523 .Sp
524 \&\fI\s-1DEC\s0 Alpha Options\fR
525 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
526 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
527 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
528 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
529 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
530 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
531 \&\-mfloat\-vax  \-mfloat\-ieee 
532 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
533 \&\-msmall\-text  \-mlarge\-text 
534 \&\-mmemory\-latency=\fR\fItime\fR
535 .Sp
536 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
537 \&\fB\-mvms\-return\-codes\fR
538 .Sp
539 \&\fI\s-1FR30\s0 Options\fR
540 \&\fB\-msmall\-model \-mno\-lsim\fR
541 .Sp
542 \&\fI\s-1FRV\s0 Options\fR
543 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
544 \&\-mhard\-float  \-msoft\-float 
545 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
546 \&\-mdouble  \-mno\-double 
547 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
548 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
549 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
550 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
551 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
552 \&\-moptimize\-membar \-mno\-optimize\-membar 
553 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
554 \&\-mvliw\-branch  \-mno\-vliw\-branch 
555 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
556 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
557 \&\-mTLS \-mtls 
558 \&\-mcpu=\fR\fIcpu\fR
559 .Sp
560 \&\fIGNU/Linux Options\fR
561 \&\fB\-muclibc\fR
562 .Sp
563 \&\fIH8/300 Options\fR
564 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
565 .Sp
566 \&\fI\s-1HPPA\s0 Options\fR
567 \&\fB\-march=\fR\fIarchitecture-type\fR 
568 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
569 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
570 \&\-mfixed\-range=\fR\fIregister-range\fR 
571 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
572 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
573 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
574 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
575 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
576 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
577 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
578 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
579 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
580 .Sp
581 \&\fIi386 and x86\-64 Options\fR
582 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
583 \&\fB\-mfpmath=\fR\fIunit\fR 
584 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
585 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
586 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
587 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR
588 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR
589 \&\fB\-mcld \-mcx16 \-msahf \-mrecip 
590 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
591 \&\-maes \-mpclmul 
592 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-msse5 
593 \&\-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
594 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
595 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
596 \&\-m96bit\-long\-double  \-mregparm=\fR\fInum\fR  \fB\-msseregparm 
597 \&\-mveclibabi=\fR\fItype\fR \fB\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
598 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
599 \&\-mcmodel=\fR\fIcode-model\fR 
600 \&\fB\-m32  \-m64 \-mlarge\-data\-threshold=\fR\fInum\fR 
601 \&\fB\-mfused\-madd \-mno\-fused\-madd \-msse2avx\fR
602 .Sp
603 \&\fI\s-1IA\-64\s0 Options\fR
604 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
605 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-mno\-sdata 
606 \&\-mconstant\-gp  \-mauto\-pic  \-minline\-float\-divide\-min\-latency 
607 \&\-minline\-float\-divide\-max\-throughput 
608 \&\-minline\-int\-divide\-min\-latency 
609 \&\-minline\-int\-divide\-max\-throughput  
610 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
611 \&\-mno\-dwarf2\-asm \-mearly\-stop\-bits 
612 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
613 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-mt \-pthread \-milp32 \-mlp64 
614 \&\-mno\-sched\-br\-data\-spec \-msched\-ar\-data\-spec \-mno\-sched\-control\-spec 
615 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
616 \&\-msched\-ldc \-mno\-sched\-control\-ldc \-mno\-sched\-spec\-verbose 
617 \&\-mno\-sched\-prefer\-non\-data\-spec\-insns 
618 \&\-mno\-sched\-prefer\-non\-control\-spec\-insns 
619 \&\-mno\-sched\-count\-spec\-in\-critical\-path\fR
620 .Sp
621 \&\fIM32R/D Options\fR
622 \&\fB\-m32r2 \-m32rx \-m32r 
623 \&\-mdebug 
624 \&\-malign\-loops \-mno\-align\-loops 
625 \&\-missue\-rate=\fR\fInumber\fR 
626 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
627 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
628 \&\fB\-msdata=\fR\fIsdata-type\fR 
629 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
630 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
631 \&\fB\-G\fR \fInum\fR
632 .Sp
633 \&\fIM32C Options\fR
634 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
635 .Sp
636 \&\fIM680x0 Options\fR
637 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
638 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
639 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
640 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
641 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
642 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
643 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
644 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
645 \&\-mxgot \-mno\-xgot\fR
646 .Sp
647 \&\fIM68hc1x Options\fR
648 \&\fB\-m6811  \-m6812  \-m68hc11  \-m68hc12   \-m68hcs12 
649 \&\-mauto\-incdec  \-minmax  \-mlong\-calls  \-mshort 
650 \&\-msoft\-reg\-count=\fR\fIcount\fR
651 .Sp
652 \&\fIMCore Options\fR
653 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
654 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
655 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
656 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
657 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
658 .Sp
659 \&\fI\s-1MIPS\s0 Options\fR
660 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
661 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
662 \&\-mips64  \-mips64r2 
663 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
664 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
665 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
666 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
667 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
668 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
669 \&\-mfpu=\fR\fIfpu-type\fR 
670 \&\fB\-msmartmips  \-mno\-smartmips 
671 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
672 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
673 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
674 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
675 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
676 \&\-membedded\-data  \-mno\-embedded\-data 
677 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
678 \&\-mcode\-readable=\fR\fIsetting\fR 
679 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
680 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
681 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
682 \&\-mdivide\-traps  \-mdivide\-breaks 
683 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
684 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
685 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
686 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
687 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
688 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
689 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
690 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
691 \&\-mvr4130\-align \-mno\-vr4130\-align\fR
692 .Sp
693 \&\fI\s-1MMIX\s0 Options\fR
694 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
695 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
696 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
697 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
698 .Sp
699 \&\fI\s-1MN10300\s0 Options\fR
700 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
701 \&\-mam33  \-mno\-am33 
702 \&\-mam33\-2  \-mno\-am33\-2 
703 \&\-mreturn\-pointer\-on\-d0 
704 \&\-mno\-crt0  \-mrelax\fR
705 .Sp
706 \&\fI\s-1PDP\-11\s0 Options\fR
707 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
708 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
709 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
710 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
711 \&\-mbranch\-expensive  \-mbranch\-cheap 
712 \&\-msplit  \-mno\-split  \-munix\-asm  \-mdec\-asm\fR
713 .Sp
714 \&\fIpicoChip Options\fR
715 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR
716 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
717 .Sp
718 \&\fIPowerPC Options\fR
719 See \s-1RS/6000\s0 and PowerPC Options.
720 .Sp
721 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
722 \&\fB\-mcpu=\fR\fIcpu-type\fR 
723 \&\fB\-mtune=\fR\fIcpu-type\fR 
724 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
725 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
726 \&\-maltivec  \-mno\-altivec 
727 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
728 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
729 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb  \-mfprnd  \-mno\-fprnd 
730 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
731 \&\-mnew\-mnemonics  \-mold\-mnemonics 
732 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
733 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
734 \&\-malign\-power  \-malign\-natural 
735 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
736 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
737 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
738 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
739 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
740 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
741 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
742 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
743 \&\-mdynamic\-no\-pic  \-maltivec  \-mswdiv 
744 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
745 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
746 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
747 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
748 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
749 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
750 \&\-misel \-mno\-isel 
751 \&\-misel=yes  \-misel=no 
752 \&\-mspe \-mno\-spe 
753 \&\-mspe=yes  \-mspe=no 
754 \&\-mpaired 
755 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
756 \&\-mvrsave \-mno\-vrsave 
757 \&\-mmulhw \-mno\-mulhw 
758 \&\-mdlmzb \-mno\-dlmzb 
759 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
760 \&\-mprototype  \-mno\-prototype 
761 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
762 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread\fR
763 .Sp
764 \&\fIS/390 and zSeries Options\fR
765 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
766 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
767 \&\-mlong\-double\-64 \-mlong\-double\-128 
768 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
769 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
770 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
771 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
772 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
773 .Sp
774 \&\fIScore Options\fR
775 \&\fB\-meb \-mel 
776 \&\-mnhwloop 
777 \&\-muls 
778 \&\-mmac 
779 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
780 .Sp
781 \&\fI\s-1SH\s0 Options\fR
782 \&\fB\-m1  \-m2  \-m2e  \-m3  \-m3e 
783 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
784 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
785 \&\-m5\-64media  \-m5\-64media\-nofpu 
786 \&\-m5\-32media  \-m5\-32media\-nofpu 
787 \&\-m5\-compact  \-m5\-compact\-nofpu 
788 \&\-mb  \-ml  \-mdalign  \-mrelax 
789 \&\-mbigtable  \-mfmovd  \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
790 \&\-mieee  \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct  \-mspace 
791 \&\-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
792 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
793 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
794 \&\-minvalid\-symbols\fR
795 .Sp
796 \&\fI\s-1SPARC\s0 Options\fR
797 \&\fB\-mcpu=\fR\fIcpu-type\fR 
798 \&\fB\-mtune=\fR\fIcpu-type\fR 
799 \&\fB\-mcmodel=\fR\fIcode-model\fR 
800 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
801 \&\-mfaster\-structs  \-mno\-faster\-structs 
802 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
803 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
804 \&\-mimpure\-text  \-mno\-impure\-text  \-mlittle\-endian 
805 \&\-mstack\-bias  \-mno\-stack\-bias 
806 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
807 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis
808 \&\-threads \-pthreads \-pthread\fR
809 .Sp
810 \&\fI\s-1SPU\s0 Options\fR
811 \&\fB\-mwarn\-reloc \-merror\-reloc 
812 \&\-msafe\-dma \-munsafe\-dma 
813 \&\-mbranch\-hints 
814 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
815 \&\-mfixed\-range=\fR\fIregister-range\fR
816 .Sp
817 \&\fISystem V Options\fR
818 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
819 .Sp
820 \&\fIV850 Options\fR
821 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
822 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
823 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
824 \&\fB\-mapp\-regs  \-mno\-app\-regs 
825 \&\-mdisable\-callt  \-mno\-disable\-callt 
826 \&\-mv850e1 
827 \&\-mv850e 
828 \&\-mv850  \-mbig\-switch\fR
829 .Sp
830 \&\fI\s-1VAX\s0 Options\fR
831 \&\fB\-mg  \-mgnu  \-munix\fR
832 .Sp
833 \&\fIVxWorks Options\fR
834 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
835 \&\-Xbind\-lazy  \-Xbind\-now\fR
836 .Sp
837 \&\fIx86\-64 Options\fR
838 See i386 and x86\-64 Options.
839 .Sp
840 \&\fIi386 and x86\-64 Windows Options\fR
841 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll
842 \&\-mnop\-fun\-dllimport \-mthread \-mwin32 \-mwindows\fR
843 .Sp
844 \&\fIXstormy16 Options\fR
845 \&\fB\-msim\fR
846 .Sp
847 \&\fIXtensa Options\fR
848 \&\fB\-mconst16 \-mno\-const16 
849 \&\-mfused\-madd  \-mno\-fused\-madd 
850 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
851 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
852 \&\-mtarget\-align  \-mno\-target\-align 
853 \&\-mlongcalls  \-mno\-longcalls\fR
854 .Sp
855 \&\fIzSeries Options\fR
856 See S/390 and zSeries Options.
857 .IP "\fICode Generation Options\fR" 4
858 .IX Item "Code Generation Options"
859 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
860 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
861 \&\-fnon\-call\-exceptions  \-funwind\-tables 
862 \&\-fasynchronous\-unwind\-tables 
863 \&\-finhibit\-size\-directive  \-finstrument\-functions 
864 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
865 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
866 \&\-fno\-common  \-fno\-ident 
867 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
868 \&\-fno\-jump\-tables 
869 \&\-frecord\-gcc\-switches 
870 \&\-freg\-struct\-return  \-fshort\-enums 
871 \&\-fshort\-double  \-fshort\-wchar 
872 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
873 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
874 \&\fB\-fno\-stack\-limit  \-fargument\-alias  \-fargument\-noalias 
875 \&\-fargument\-noalias\-global  \-fargument\-noalias\-anything 
876 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
877 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
878 \&\-fvisibility\fR
879 .Sh "Options Controlling the Kind of Output"
880 .IX Subsection "Options Controlling the Kind of Output"
881 Compilation can involve up to four stages: preprocessing, compilation
882 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
883 preprocessing and compiling several files either into several
884 assembler input files, or into one assembler input file; then each
885 assembler input file produces an object file, and linking combines all
886 the object files (those newly compiled, and those specified as input)
887 into an executable file.
888 .PP
889 For any given input file, the file name suffix determines what kind of
890 compilation is done:
891 .IP "\fIfile\fR\fB.c\fR" 4
892 .IX Item "file.c"
893 C source code which must be preprocessed.
894 .IP "\fIfile\fR\fB.i\fR" 4
895 .IX Item "file.i"
896 C source code which should not be preprocessed.
897 .IP "\fIfile\fR\fB.ii\fR" 4
898 .IX Item "file.ii"
899 \&\*(C+ source code which should not be preprocessed.
900 .IP "\fIfile\fR\fB.m\fR" 4
901 .IX Item "file.m"
902 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
903 library to make an Objective-C program work.
904 .IP "\fIfile\fR\fB.mi\fR" 4
905 .IX Item "file.mi"
906 Objective-C source code which should not be preprocessed.
907 .IP "\fIfile\fR\\fR" 4
908 .IX Item ""
909 .PD 0
910 .IP "\fIfile\fR\fB.M\fR" 4
911 .IX Item "file.M"
912 .PD
913 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
914 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
915 to a literal capital M.
916 .IP "\fIfile\fR\fB.mii\fR" 4
917 .IX Item "file.mii"
918 Objective\-\*(C+ source code which should not be preprocessed.
919 .IP "\fIfile\fR\fB.h\fR" 4
920 .IX Item "file.h"
921 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
922 precompiled header.
923 .IP "\fIfile\fR\\fR" 4
924 .IX Item ""
925 .PD 0
926 .IP "\fIfile\fR\fB.cp\fR" 4
927 .IX Item "file.cp"
928 .IP "\fIfile\fR\fB.cxx\fR" 4
929 .IX Item "file.cxx"
930 .IP "\fIfile\fR\fB.cpp\fR" 4
931 .IX Item "file.cpp"
932 .IP "\fIfile\fR\fB.CPP\fR" 4
933 .IX Item "file.CPP"
934 .IP "\fIfile\fR\fB.c++\fR" 4
935 .IX Item "file.c++"
936 .IP "\fIfile\fR\fB.C\fR" 4
937 .IX Item "file.C"
938 .PD
939 \&\*(C+ source code which must be preprocessed.  Note that in \fB.cxx\fR,
940 the last two letters must both be literally \fBx\fR.  Likewise,
941 \&\fB.C\fR refers to a literal capital C.
942 .IP "\fIfile\fR\\fR" 4
943 .IX Item ""
944 .PD 0
945 .IP "\fIfile\fR\fB.M\fR" 4
946 .IX Item "file.M"
947 .PD
948 Objective\-\*(C+ source code which must be preprocessed.
949 .IP "\fIfile\fR\fB.mii\fR" 4
950 .IX Item "file.mii"
951 Objective\-\*(C+ source code which should not be preprocessed.
952 .IP "\fIfile\fR\fB.hh\fR" 4
953 .IX Item "file.hh"
954 .PD 0
955 .IP "\fIfile\fR\fB.H\fR" 4
956 .IX Item "file.H"
957 .IP "\fIfile\fR\fB.hp\fR" 4
958 .IX Item "file.hp"
959 .IP "\fIfile\fR\fB.hxx\fR" 4
960 .IX Item "file.hxx"
961 .IP "\fIfile\fR\fB.hpp\fR" 4
962 .IX Item "file.hpp"
963 .IP "\fIfile\fR\fB.HPP\fR" 4
964 .IX Item "file.HPP"
965 .IP "\fIfile\fR\fB.h++\fR" 4
966 .IX Item "file.h++"
967 .IP "\fIfile\fR\fB.tcc\fR" 4
968 .IX Item "file.tcc"
969 .PD
970 \&\*(C+ header file to be turned into a precompiled header.
971 .IP "\fIfile\fR\fB.f\fR" 4
972 .IX Item "file.f"
973 .PD 0
974 .IP "\fIfile\fR\fB.for\fR" 4
975 .IX Item "file.for"
976 .IP "\fIfile\fR\fB.ftn\fR" 4
977 .IX Item "file.ftn"
978 .PD
979 Fixed form Fortran source code which should not be preprocessed.
980 .IP "\fIfile\fR\fB.F\fR" 4
981 .IX Item "file.F"
982 .PD 0
983 .IP "\fIfile\fR\fB.FOR\fR" 4
984 .IX Item "file.FOR"
985 .IP "\fIfile\fR\fB.fpp\fR" 4
986 .IX Item "file.fpp"
987 .IP "\fIfile\fR\fB.FPP\fR" 4
988 .IX Item "file.FPP"
989 .IP "\fIfile\fR\fB.FTN\fR" 4
990 .IX Item "file.FTN"
991 .PD
992 Fixed form Fortran source code which must be preprocessed (with the traditional
993 preprocessor).
994 .IP "\fIfile\fR\fB.f90\fR" 4
995 .IX Item "file.f90"
996 .PD 0
997 .IP "\fIfile\fR\fB.f95\fR" 4
998 .IX Item "file.f95"
999 .IP "\fIfile\fR\fB.f03\fR" 4
1000 .IX Item "file.f03"
1001 .IP "\fIfile\fR\fB.f08\fR" 4
1002 .IX Item "file.f08"
1003 .PD
1004 Free form Fortran source code which should not be preprocessed.
1005 .IP "\fIfile\fR\fB.F90\fR" 4
1006 .IX Item "file.F90"
1007 .PD 0
1008 .IP "\fIfile\fR\fB.F95\fR" 4
1009 .IX Item "file.F95"
1010 .IP "\fIfile\fR\fB.F03\fR" 4
1011 .IX Item "file.F03"
1012 .IP "\fIfile\fR\fB.F08\fR" 4
1013 .IX Item "file.F08"
1014 .PD
1015 Free form Fortran source code which must be preprocessed (with the
1016 traditional preprocessor).
1017 .IP "\fIfile\fR\\fR" 4
1018 .IX Item ""
1019 Ada source code file which contains a library unit declaration (a
1020 declaration of a package, subprogram, or generic, or a generic
1021 instantiation), or a library unit renaming declaration (a package,
1022 generic, or subprogram renaming declaration).  Such files are also
1023 called \fIspecs\fR.
1024 .IP "\fIfile\fR\fB.adb\fR" 4
1025 .IX Item "file.adb"
1026 Ada source code file containing a library unit body (a subprogram or
1027 package body).  Such files are also called \fIbodies\fR.
1028 .IP "\fIfile\fR\fB.s\fR" 4
1029 .IX Item "file.s"
1030 Assembler code.
1031 .IP "\fIfile\fR\fB.S\fR" 4
1032 .IX Item "file.S"
1033 .PD 0
1034 .IP "\fIfile\fR\\fR" 4
1035 .IX Item ""
1036 .PD
1037 Assembler code which must be preprocessed.
1038 .IP "\fIother\fR" 4
1039 .IX Item "other"
1040 An object file to be fed straight into linking.
1041 Any file name with no recognized suffix is treated this way.
1042 .PP
1043 You can specify the input language explicitly with the \fB\-x\fR option:
1044 .IP "\fB\-x\fR \fIlanguage\fR" 4
1045 .IX Item "-x language"
1046 Specify explicitly the \fIlanguage\fR for the following input files
1047 (rather than letting the compiler choose a default based on the file
1048 name suffix).  This option applies to all following input files until
1049 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1050 .Sp
1051 .Vb 8
1052 \&        c  c\-header  c\-cpp\-output
1053 \&        c++  c++\-header  c++\-cpp\-output
1054 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1055 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1056 \&        assembler  assembler\-with\-cpp
1057 \&        ada
1058 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1059 \&        java
1060 .Ve
1061 .IP "\fB\-x none\fR" 4
1062 .IX Item "-x none"
1063 Turn off any specification of a language, so that subsequent files are
1064 handled according to their file name suffixes (as they are if \fB\-x\fR
1065 has not been used at all).
1066 .IP "\fB\-pass\-exit\-codes\fR" 4
1067 .IX Item "-pass-exit-codes"
1068 Normally the \fBgcc\fR program will exit with the code of 1 if any
1069 phase of the compiler returns a non-success return code.  If you specify
1070 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1071 numerically highest error produced by any phase that returned an error
1072 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1073 compiler error is encountered.
1074 .PP
1075 If you only want some of the stages of compilation, you can use
1076 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1077 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1078 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1079 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1080 .IP "\fB\-c\fR" 4
1081 .IX Item "-c"
1082 Compile or assemble the source files, but do not link.  The linking
1083 stage simply is not done.  The ultimate output is in the form of an
1084 object file for each source file.
1085 .Sp
1086 By default, the object file name for a source file is made by replacing
1087 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1088 .Sp
1089 Unrecognized input files, not requiring compilation or assembly, are
1090 ignored.
1091 .IP "\fB\-S\fR" 4
1092 .IX Item "-S"
1093 Stop after the stage of compilation proper; do not assemble.  The output
1094 is in the form of an assembler code file for each non-assembler input
1095 file specified.
1096 .Sp
1097 By default, the assembler file name for a source file is made by
1098 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1099 .Sp
1100 Input files that don't require compilation are ignored.
1101 .IP "\fB\-E\fR" 4
1102 .IX Item "-E"
1103 Stop after the preprocessing stage; do not run the compiler proper.  The
1104 output is in the form of preprocessed source code, which is sent to the
1105 standard output.
1106 .Sp
1107 Input files which don't require preprocessing are ignored.
1108 .IP "\fB\-o\fR \fIfile\fR" 4
1109 .IX Item "-o file"
1110 Place output in file \fIfile\fR.  This applies regardless to whatever
1111 sort of output is being produced, whether it be an executable file,
1112 an object file, an assembler file or preprocessed C code.
1113 .Sp
1114 If \fB\-o\fR is not specified, the default is to put an executable
1115 file in \fIa.out\fR, the object file for
1116 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1117 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1118 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1119 standard output.
1120 .IP "\fB\-v\fR" 4
1121 .IX Item "-v"
1122 Print (on standard error output) the commands executed to run the stages
1123 of compilation.  Also print the version number of the compiler driver
1124 program and of the preprocessor and the compiler proper.
1125 .IP "\fB\-###\fR" 4
1126 .IX Item "-###"
1127 Like \fB\-v\fR except the commands are not executed and all command
1128 arguments are quoted.  This is useful for shell scripts to capture the
1129 driver-generated command lines.
1130 .IP "\fB\-pipe\fR" 4
1131 .IX Item "-pipe"
1132 Use pipes rather than temporary files for communication between the
1133 various stages of compilation.  This fails to work on some systems where
1134 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1135 no trouble.
1136 .IP "\fB\-combine\fR" 4
1137 .IX Item "-combine"
1138 If you are compiling multiple source files, this option tells the driver
1139 to pass all the source files to the compiler at once (for those
1140 languages for which the compiler can handle this).  This will allow
1141 intermodule analysis (\s-1IMA\s0) to be performed by the compiler.  Currently the only
1142 language for which this is supported is C.  If you pass source files for
1143 multiple languages to the driver, using this option, the driver will invoke
1144 the compiler(s) that support \s-1IMA\s0 once each, passing each compiler all the
1145 source files appropriate for it.  For those languages that do not support
1146 \&\s-1IMA\s0 this option will be ignored, and the compiler will be invoked once for
1147 each source file in that language.  If you use this option in conjunction
1148 with \fB\-save\-temps\fR, the compiler will generate multiple
1149 pre-processed files
1150 (one for each source file), but only one (combined) \fI.o\fR or
1151 \&\fI.s\fR file.
1152 .IP "\fB\-\-help\fR" 4
1153 .IX Item "--help"
1154 Print (on the standard output) a description of the command line options
1155 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1156 then \fB\-\-help\fR will also be passed on to the various processes
1157 invoked by \fBgcc\fR, so that they can display the command line options
1158 they accept.  If the \fB\-Wextra\fR option has also been specified
1159 (prior to the \fB\-\-help\fR option), then command line options which
1160 have no documentation associated with them will also be displayed.
1161 .IP "\fB\-\-target\-help\fR" 4
1162 .IX Item "--target-help"
1163 Print (on the standard output) a description of target-specific command
1164 line options for each tool.  For some targets extra target-specific
1165 information may also be printed.
1166 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1167 .IX Item "--help={class|[^]qualifier}[,...]"
1168 Print (on the standard output) a description of the command line
1169 options understood by the compiler that fit into all specified classes
1170 and qualifiers.  These are the supported classes:
1171 .RS 4
1172 .IP "\fBoptimizers\fR" 4
1173 .IX Item "optimizers"
1174 This will display all of the optimization options supported by the
1175 compiler.
1176 .IP "\fBwarnings\fR" 4
1177 .IX Item "warnings"
1178 This will display all of the options controlling warning messages
1179 produced by the compiler.
1180 .IP "\fBtarget\fR" 4
1181 .IX Item "target"
1182 This will display target-specific options.  Unlike the
1183 \&\fB\-\-target\-help\fR option however, target-specific options of the
1184 linker and assembler will not be displayed.  This is because those
1185 tools do not currently support the extended \fB\-\-help=\fR syntax.
1186 .IP "\fBparams\fR" 4
1187 .IX Item "params"
1188 This will display the values recognized by the \fB\-\-param\fR
1189 option.
1190 .IP "\fIlanguage\fR" 4
1191 .IX Item "language"
1192 This will display the options supported for \fIlanguage\fR, where 
1193 \&\fIlanguage\fR is the name of one of the languages supported in this 
1194 version of \s-1GCC\s0.
1195 .IP "\fBcommon\fR" 4
1196 .IX Item "common"
1197 This will display the options that are common to all languages.
1198 .RE
1199 .RS 4
1200 .Sp
1201 These are the supported qualifiers:
1202 .IP "\fBundocumented\fR" 4
1203 .IX Item "undocumented"
1204 Display only those options which are undocumented.
1205 .IP "\fBjoined\fR" 4
1206 .IX Item "joined"
1207 Display options which take an argument that appears after an equal
1208 sign in the same continuous piece of text, such as:
1209 \&\fB\-\-help=target\fR.
1210 .IP "\fBseparate\fR" 4
1211 .IX Item "separate"
1212 Display options which take an argument that appears as a separate word
1213 following the original option, such as: \fB\-o output-file\fR.
1214 .RE
1215 .RS 4
1216 .Sp
1217 Thus for example to display all the undocumented target-specific
1218 switches supported by the compiler the following can be used:
1219 .Sp
1220 .Vb 1
1221 \&        \-\-help=target,undocumented
1222 .Ve
1223 .Sp
1224 The sense of a qualifier can be inverted by prefixing it with the
1225 \&\fB^\fR character, so for example to display all binary warning
1226 options (i.e., ones that are either on or off and that do not take an
1227 argument), which have a description the following can be used:
1228 .Sp
1229 .Vb 1
1230 \&        \-\-help=warnings,^joined,^undocumented
1231 .Ve
1232 .Sp
1233 The argument to \fB\-\-help=\fR should not consist solely of inverted
1234 qualifiers.
1235 .Sp
1236 Combining several classes is possible, although this usually
1237 restricts the output by so much that there is nothing to display.  One
1238 case where it does work however is when one of the classes is
1239 \&\fItarget\fR.  So for example to display all the target-specific
1240 optimization options the following can be used:
1241 .Sp
1242 .Vb 1
1243 \&        \-\-help=target,optimizers
1244 .Ve
1245 .Sp
1246 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1247 successive use will display its requested class of options, skipping
1248 those that have already been displayed.
1249 .Sp
1250 If the \fB\-Q\fR option appears on the command line before the
1251 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1252 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1253 options, an indication is given as to whether the option is enabled,
1254 disabled or set to a specific value (assuming that the compiler
1255 knows this at the point where the \fB\-\-help=\fR option is used).
1256 .Sp
1257 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1258 .Sp
1259 .Vb 5
1260 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1261 \&          The following options are target specific:
1262 \&          \-mabi=                                2
1263 \&          \-mabort\-on\-noreturn                   [disabled]
1264 \&          \-mapcs                                [disabled]
1265 .Ve
1266 .Sp
1267 The output is sensitive to the effects of previous command line
1268 options, so for example it is possible to find out which optimizations
1269 are enabled at \fB\-O2\fR by using:
1270 .Sp
1271 .Vb 1
1272 \&        \-Q \-O2 \-\-help=optimizers
1273 .Ve
1274 .Sp
1275 Alternatively you can discover which binary optimizations are enabled
1276 by \fB\-O3\fR by using:
1277 .Sp
1278 .Vb 3
1279 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1280 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1281 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1282 .Ve
1283 .RE
1284 .IP "\fB\-\-version\fR" 4
1285 .IX Item "--version"
1286 Display the version number and copyrights of the invoked \s-1GCC\s0.
1287 .IP "\fB\-wrapper\fR" 4
1288 .IX Item "-wrapper"
1289 Invoke all subcommands under a wrapper program. It takes a single
1290 comma separated list as an argument, which will be used to invoke
1291 the wrapper:
1292 .Sp
1293 .Vb 1
1294 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1295 .Ve
1296 .Sp
1297 This will invoke all subprograms of gcc under \*(L"gdb \-\-args\*(R",
1298 thus cc1 invocation will be \*(L"gdb \-\-args cc1 ...\*(R".
1299 .IP "\fB@\fR\fIfile\fR" 4
1300 .IX Item "@file"
1301 Read command-line options from \fIfile\fR.  The options read are
1302 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1303 does not exist, or cannot be read, then the option will be treated
1304 literally, and not removed.
1305 .Sp
1306 Options in \fIfile\fR are separated by whitespace.  A whitespace
1307 character may be included in an option by surrounding the entire
1308 option in either single or double quotes.  Any character (including a
1309 backslash) may be included by prefixing the character to be included
1310 with a backslash.  The \fIfile\fR may itself contain additional
1311 @\fIfile\fR options; any such options will be processed recursively.
1312 .Sh "Compiling \*(C+ Programs"
1313 .IX Subsection "Compiling  Programs"
1314 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1315 \&\\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1316 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1317 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1318 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1319 files with these names and compiles them as \*(C+ programs even if you
1320 call the compiler the same way as for compiling C programs (usually
1321 with the name \fBgcc\fR).
1322 .PP
1323 However, the use of \fBgcc\fR does not add the \*(C+ library.
1324 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1325 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1326 files unless \fB\-x\fR is used, and automatically specifies linking
1327 against the \*(C+ library.  This program is also useful when
1328 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1329 compilations.  On many systems, \fBg++\fR is also installed with
1330 the name \fBc++\fR.
1331 .PP
1332 When you compile \*(C+ programs, you may specify many of the same
1333 command-line options that you use for compiling programs in any
1334 language; or command-line options meaningful for C and related
1335 languages; or options that are meaningful only for \*(C+ programs.
1336 .Sh "Options Controlling C Dialect"
1337 .IX Subsection "Options Controlling C Dialect"
1338 The following options control the dialect of C (or languages derived
1339 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1340 accepts:
1341 .IP "\fB\-ansi\fR" 4
1342 .IX Item "-ansi"
1343 In C mode, this is equivalent to \fB\-std=c89\fR. In \*(C+ mode, it is
1344 equivalent to \fB\-std=c++98\fR.
1345 .Sp
1346 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1347 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1348 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1349 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1350 type of system you are using.  It also enables the undesirable and
1351 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1352 it disables recognition of \*(C+ style \fB//\fR comments as well as
1353 the \f(CW\*(C`inline\*(C'\fR keyword.
1354 .Sp
1355 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1356 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1357 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1358 course, but it is useful to put them in header files that might be included
1359 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1360 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1361 without \fB\-ansi\fR.
1362 .Sp
1363 The \fB\-ansi\fR option does not cause non-ISO programs to be
1364 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1365 addition to \fB\-ansi\fR.
1366 .Sp
1367 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1368 option is used.  Some header files may notice this macro and refrain
1369 from declaring certain functions or defining certain macros that the
1370 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1371 programs that might use these names for other things.
1372 .Sp
1373 Functions that would normally be built in but do not have semantics
1374 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
1375 functions when \fB\-ansi\fR is used.
1376 .IP "\fB\-std=\fR" 4
1377 .IX Item "-std="
1378 Determine the language standard.   This option
1379 is currently only supported when compiling C or \*(C+.
1380 .Sp
1381 The compiler can accept several base standards, such as \fBc89\fR or
1382 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1383 \&\fBgnu89\fR or \fBgnu++98\fR.  By specifying a base standard, the
1384 compiler will accept all programs following that standard and those
1385 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1386 \&\fB\-std=c89\fR turns off certain features of \s-1GCC\s0 that are
1387 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1388 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1389 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1390 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1391 standard, all features the compiler support are enabled, even when
1392 those features change the meaning of the base standard and some
1393 strict-conforming programs may be rejected.  The particular standard
1394 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1395 extensions given that version of the standard. For example
1396 \&\fB\-std=gnu89 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1397 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1398 .Sp
1399 A value for this option must be provided; possible values are
1400 .RS 4
1401 .IP "\fBc89\fR" 4
1402 .IX Item "c89"
1403 .PD 0
1404 .IP "\fBiso9899:1990\fR" 4
1405 .IX Item "iso9899:1990"
1406 .PD
1407 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1408 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1409 .IP "\fBiso9899:199409\fR" 4
1410 .IX Item "iso9899:199409"
1411 \&\s-1ISO\s0 C90 as modified in amendment 1.
1412 .IP "\fBc99\fR" 4
1413 .IX Item "c99"
1414 .PD 0
1415 .IP "\fBc9x\fR" 4
1416 .IX Item "c9x"
1417 .IP "\fBiso9899:1999\fR" 4
1418 .IX Item "iso9899:1999"
1419 .IP "\fBiso9899:199x\fR" 4
1420 .IX Item "iso9899:199x"
1421 .PD
1422 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1423 <\fB\-4.4/c99status.html\fR> for more information.  The
1424 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1425 .IP "\fBgnu89\fR" 4
1426 .IX Item "gnu89"
1427 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1428 is the default for C code.
1429 .IP "\fBgnu99\fR" 4
1430 .IX Item "gnu99"
1431 .PD 0
1432 .IP "\fBgnu9x\fR" 4
1433 .IX Item "gnu9x"
1434 .PD
1435 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1436 this will become the default.  The name \fBgnu9x\fR is deprecated.
1437 .IP "\fBc++98\fR" 4
1438 .IX Item "c++98"
1439 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1440 \&\*(C+ code.
1441 .IP "\fBgnu++98\fR" 4
1442 .IX Item "gnu++98"
1443 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1444 \&\*(C+ code.
1445 .IP "\fBc++0x\fR" 4
1446 .IX Item "c++0x"
1447 The working draft of the upcoming \s-1ISO\s0 \*(C+0x standard. This option
1448 enables experimental features that are likely to be included in
1449 \&\*(C+0x. The working draft is constantly changing, and any feature that is
1450 enabled by this flag may be removed from future versions of \s-1GCC\s0 if it is
1451 not part of the \*(C+0x standard.
1452 .IP "\fBgnu++0x\fR" 4
1453 .IX Item "gnu++0x"
1454 \&\s-1GNU\s0 dialect of \fB\-std=c++0x\fR. This option enables
1455 experimental features that may be removed in future versions of \s-1GCC\s0.
1456 .RE
1457 .RS 4
1458 .RE
1459 .IP "\fB\-fgnu89\-inline\fR" 4
1460 .IX Item "-fgnu89-inline"
1461 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1462 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1463   This option
1464 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1465 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1466 C99 mode.  Using this option is roughly equivalent to adding the
1467 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1468 .Sp
1469 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1470 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1471 specifies the default behavior).  This option was first supported in
1472 \&\s-1GCC\s0 4.3.  This option is not supported in C89 or gnu89 mode.
1473 .Sp
1474 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1475 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1476 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1477 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1478 .IX Item "-aux-info filename"
1479 Output to the given filename prototyped declarations for all functions
1480 declared and/or defined in a translation unit, including those in header
1481 files.  This option is silently ignored in any language other than C.
1482 .Sp
1483 Besides declarations, the file indicates, in comments, the origin of
1484 each declaration (source file and line), whether the declaration was
1485 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1486 \&\fBO\fR for old, respectively, in the first character after the line
1487 number and the colon), and whether it came from a declaration or a
1488 definition (\fBC\fR or \fBF\fR, respectively, in the following
1489 character).  In the case of function definitions, a K&R\-style list of
1490 arguments followed by their declarations is also provided, inside
1491 comments, after the declaration.
1492 .IP "\fB\-fno\-asm\fR" 4
1493 .IX Item "-fno-asm"
1494 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1495 keyword, so that code can use these words as identifiers.  You can use
1496 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1497 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1498 .Sp
1499 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1500 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1501 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1502 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1503 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1504 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1505 .IP "\fB\-fno\-builtin\fR" 4
1506 .IX Item "-fno-builtin"
1507 .PD 0
1508 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1509 .IX Item "-fno-builtin-function"
1510 .PD
1511 Don't recognize built-in functions that do not begin with
1512 \&\fB_\|_builtin_\fR as prefix.
1513 .Sp
1514 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1515 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1516 instructions that adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1517 may become inline copy loops.  The resulting code is often both smaller
1518 and faster, but since the function calls no longer appear as such, you
1519 cannot set a breakpoint on those calls, nor can you change the behavior
1520 of the functions by linking with a different library.  In addition,
1521 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1522 information about that function to warn about problems with calls to
1523 that function, or to generate more efficient code, even if the
1524 resulting code still contains calls to that function.  For example,
1525 warnings are given with \fB\-Wformat\fR for bad calls to
1526 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1527 known not to modify global memory.
1528 .Sp
1529 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1530 only the built-in function \fIfunction\fR is
1531 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1532 function is named that is not built-in in this version of \s-1GCC\s0, this
1533 option is ignored.  There is no corresponding
1534 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1535 built-in functions selectively when using \fB\-fno\-builtin\fR or
1536 \&\fB\-ffreestanding\fR, you may define macros such as:
1537 .Sp
1538 .Vb 2
1539 \&        #define abs(n)          _\|_builtin_abs ((n))
1540 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1541 .Ve
1542 .IP "\fB\-fhosted\fR" 4
1543 .IX Item "-fhosted"
1544 Assert that compilation takes place in a hosted environment.  This implies
1545 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1546 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1547 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1548 This is equivalent to \fB\-fno\-freestanding\fR.
1549 .IP "\fB\-ffreestanding\fR" 4
1550 .IX Item "-ffreestanding"
1551 Assert that compilation takes place in a freestanding environment.  This
1552 implies \fB\-fno\-builtin\fR.  A freestanding environment
1553 is one in which the standard library may not exist, and program startup may
1554 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1555 This is equivalent to \fB\-fno\-hosted\fR.
1556 .IP "\fB\-fopenmp\fR" 4
1557 .IX Item "-fopenmp"
1558 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1559 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1560 compiler generates parallel code according to the OpenMP Application
1561 Program Interface v2.5 <\fB\fR>.  This option
1562 implies \fB\-pthread\fR, and thus is only supported on targets that
1563 have support for \fB\-pthread\fR.
1564 .IP "\fB\-fms\-extensions\fR" 4
1565 .IX Item "-fms-extensions"
1566 Accept some non-standard constructs used in Microsoft header files.
1567 .Sp
1568 Some cases of unnamed fields in structures and unions are only
1569 accepted with this option.
1570 .IP "\fB\-trigraphs\fR" 4
1571 .IX Item "-trigraphs"
1572 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1573 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1574 .IP "\fB\-no\-integrated\-cpp\fR" 4
1575 .IX Item "-no-integrated-cpp"
1576 Performs a compilation in two passes: preprocessing and compiling.  This
1577 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1578 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1579 an additional preprocessing step after normal preprocessing but before
1580 compiling.  The default is to use the integrated cpp (internal cpp)
1581 .Sp
1582 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1583 \&\*(L"cc1obj\*(R" are merged.
1584 .IP "\fB\-traditional\fR" 4
1585 .IX Item "-traditional"
1586 .PD 0
1587 .IP "\fB\-traditional\-cpp\fR" 4
1588 .IX Item "-traditional-cpp"
1589 .PD
1590 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1591 C compiler.  They are now only supported with the \fB\-E\fR switch.
1592 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1593 \&\s-1CPP\s0 manual for details.
1594 .IP "\fB\-fcond\-mismatch\fR" 4
1595 .IX Item "-fcond-mismatch"
1596 Allow conditional expressions with mismatched types in the second and
1597 third arguments.  The value of such an expression is void.  This option
1598 is not supported for \*(C+.
1599 .IP "\fB\-flax\-vector\-conversions\fR" 4
1600 .IX Item "-flax-vector-conversions"
1601 Allow implicit conversions between vectors with differing numbers of
1602 elements and/or incompatible element types.  This option should not be
1603 used for new code.
1604 .IP "\fB\-funsigned\-char\fR" 4
1605 .IX Item "-funsigned-char"
1606 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1607 .Sp
1608 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1609 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1610 \&\f(CW\*(C`signed char\*(C'\fR by default.
1611 .Sp
1612 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1613 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1614 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1615 expect it to be signed, or expect it to be unsigned, depending on the
1616 machines they were written for.  This option, and its inverse, let you
1617 make such a program work with the opposite default.
1618 .Sp
1619 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1620 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1621 is always just like one of those two.
1622 .IP "\fB\-fsigned\-char\fR" 4
1623 .IX Item "-fsigned-char"
1624 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1625 .Sp
1626 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1627 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1628 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1629 .IP "\fB\-fsigned\-bitfields\fR" 4
1630 .IX Item "-fsigned-bitfields"
1631 .PD 0
1632 .IP "\fB\-funsigned\-bitfields\fR" 4
1633 .IX Item "-funsigned-bitfields"
1634 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1635 .IX Item "-fno-signed-bitfields"
1636 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1637 .IX Item "-fno-unsigned-bitfields"
1638 .PD
1639 These options control whether a bit-field is signed or unsigned, when the
1640 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1641 default, such a bit-field is signed, because this is consistent: the
1642 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1643 .Sh "Options Controlling \*(C+ Dialect"
1644 .IX Subsection "Options Controlling  Dialect"
1645 This section describes the command-line options that are only meaningful
1646 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1647 regardless of what language your program is in.  For example, you
1648 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1649 .PP
1650 .Vb 1
1651 \&        g++ \-g \-frepo \-O \-c firstClass.C
1652 .Ve
1653 .PP
1654 In this example, only \fB\-frepo\fR is an option meant
1655 only for \*(C+ programs; you can use the other options with any
1656 language supported by \s-1GCC\s0.
1657 .PP
1658 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1659 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1660 .IX Item "-fabi-version=n"
1661 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1662 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1663 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1664 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1665 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1666 are fixed.
1667 .Sp
1668 The default is version 2.
1669 .IP "\fB\-fno\-access\-control\fR" 4
1670 .IX Item "-fno-access-control"
1671 Turn off all access checking.  This switch is mainly useful for working
1672 around bugs in the access control code.
1673 .IP "\fB\-fcheck\-new\fR" 4
1674 .IX Item "-fcheck-new"
1675 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1676 before attempting to modify the storage allocated.  This check is
1677 normally unnecessary because the \*(C+ standard specifies that
1678 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1679 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1680 return value even without this option.  In all other cases, when
1681 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1682 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1683 \&\fBnew (nothrow)\fR.
1684 .IP "\fB\-fconserve\-space\fR" 4
1685 .IX Item "-fconserve-space"
1686 Put uninitialized or runtime-initialized global variables into the
1687 common segment, as C does.  This saves space in the executable at the
1688 cost of not diagnosing duplicate definitions.  If you compile with this
1689 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1690 completed, you may have an object that is being destroyed twice because
1691 two definitions were merged.
1692 .Sp
1693 This option is no longer useful on most targets, now that support has
1694 been added for putting variables into \s-1BSS\s0 without making them common.
1695 .IP "\fB\-fno\-deduce\-init\-list\fR" 4
1696 .IX Item "-fno-deduce-init-list"
1697 Disable deduction of a template type parameter as
1698 std::initializer_list from a brace-enclosed initializer list, i.e.
1699 .Sp
1700 .Vb 4
1701 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
1702 \&        {
1703 \&          return realfn (t);
1704 \&        }
1705 \&        
1706 \&        void f()
1707 \&        {
1708 \&          forward({1,2}); // call forward<std::initializer_list<int>>
1709 \&        }
1710 .Ve
1711 .Sp
1712 This option is present because this deduction is an extension to the
1713 current specification in the \*(C+0x working draft, and there was
1714 some concern about potential overload resolution problems.
1715 .IP "\fB\-ffriend\-injection\fR" 4
1716 .IX Item "-ffriend-injection"
1717 Inject friend functions into the enclosing namespace, so that they are
1718 visible outside the scope of the class in which they are declared.
1719 Friend functions were documented to work this way in the old Annotated
1720 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1721 that way.  However, in \s-1ISO\s0 \*(C+ a friend function which is not declared
1722 in an enclosing scope can only be found using argument dependent
1723 lookup.  This option causes friends to be injected as they were in
1724 earlier releases.
1725 .Sp
1726 This option is for compatibility, and may be removed in a future
1727 release of G++.
1728 .IP "\fB\-fno\-elide\-constructors\fR" 4
1729 .IX Item "-fno-elide-constructors"
1730 The \*(C+ standard allows an implementation to omit creating a temporary
1731 which is only used to initialize another object of the same type.
1732 Specifying this option disables that optimization, and forces G++ to
1733 call the copy constructor in all cases.
1734 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1735 .IX Item "-fno-enforce-eh-specs"
1736 Don't generate code to check for violation of exception specifications
1737 at runtime.  This option violates the \*(C+ standard, but may be useful
1738 for reducing code size in production builds, much like defining
1739 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1740 exceptions in violation of the exception specifications; the compiler
1741 will still optimize based on the specifications, so throwing an
1742 unexpected exception will result in undefined behavior.
1743 .IP "\fB\-ffor\-scope\fR" 4
1744 .IX Item "-ffor-scope"
1745 .PD 0
1746 .IP "\fB\-fno\-for\-scope\fR" 4
1747 .IX Item "-fno-for-scope"
1748 .PD
1749 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1750 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1751 as specified by the \*(C+ standard.
1752 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1753 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1754 as was the case in old versions of G++, and other (traditional)
1755 implementations of \*(C+.
1756 .Sp
1757 The default if neither flag is given to follow the standard,
1758 but to allow and give a warning for old-style code that would
1759 otherwise be invalid, or have different behavior.
1760 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1761 .IX Item "-fno-gnu-keywords"
1762 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1763 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1764 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1765 .IP "\fB\-fno\-implicit\-templates\fR" 4
1766 .IX Item "-fno-implicit-templates"
1767 Never emit code for non-inline templates which are instantiated
1768 implicitly (i.e. by use); only emit code for explicit instantiations.
1769 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
1770 .IX Item "-fno-implicit-inline-templates"
1771 Don't emit code for implicit instantiations of inline templates, either.
1772 The default is to handle inlines differently so that compiles with and
1773 without optimization will need the same set of explicit instantiations.
1774 .IP "\fB\-fno\-implement\-inlines\fR" 4
1775 .IX Item "-fno-implement-inlines"
1776 To save space, do not emit out-of-line copies of inline functions
1777 controlled by \fB#pragma implementation\fR.  This will cause linker
1778 errors if these functions are not inlined everywhere they are called.
1779 .IP "\fB\-fms\-extensions\fR" 4
1780 .IX Item "-fms-extensions"
1781 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
1782 int and getting a pointer to member function via non-standard syntax.
1783 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
1784 .IX Item "-fno-nonansi-builtins"
1785 Disable built-in declarations of functions that are not mandated by
1786 \&\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,
1787 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
1788 .IP "\fB\-fno\-operator\-names\fR" 4
1789 .IX Item "-fno-operator-names"
1790 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
1791 \&\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
1792 synonyms as keywords.
1793 .IP "\fB\-fno\-optional\-diags\fR" 4
1794 .IX Item "-fno-optional-diags"
1795 Disable diagnostics that the standard says a compiler does not need to
1796 issue.  Currently, the only such diagnostic issued by G++ is the one for
1797 a name having multiple meanings within a class.
1798 .IP "\fB\-fpermissive\fR" 4
1799 .IX Item "-fpermissive"
1800 Downgrade some diagnostics about nonconformant code from errors to
1801 warnings.  Thus, using \fB\-fpermissive\fR will allow some
1802 nonconforming code to compile.
1803 .IP "\fB\-frepo\fR" 4
1804 .IX Item "-frepo"
1805 Enable automatic template instantiation at link time.  This option also
1806 implies \fB\-fno\-implicit\-templates\fR.
1807 .IP "\fB\-fno\-rtti\fR" 4
1808 .IX Item "-fno-rtti"
1809 Disable generation of information about every class with virtual
1810 functions for use by the \*(C+ runtime type identification features
1811 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
1812 of the language, you can save some space by using this flag.  Note that
1813 exception handling uses the same information, but it will generate it as
1814 needed. The \fBdynamic_cast\fR operator can still be used for casts that
1815 do not require runtime type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
1816 unambiguous base classes.
1817 .IP "\fB\-fstats\fR" 4
1818 .IX Item "-fstats"
1819 Emit statistics about front-end processing at the end of the compilation.
1820 This information is generally only useful to the G++ development team.
1821 .IP "\fB\-ftemplate\-depth\-\fR\fIn\fR" 4
1822 .IX Item "-ftemplate-depth-n"
1823 Set the maximum instantiation depth for template classes to \fIn\fR.
1824 A limit on the template instantiation depth is needed to detect
1825 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
1826 conforming programs must not rely on a maximum depth greater than 17.
1827 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
1828 .IX Item "-fno-threadsafe-statics"
1829 Do not emit the extra code to use the routines specified in the \*(C+
1830 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
1831 option to reduce code size slightly in code that doesn't need to be
1832 thread-safe.
1833 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
1834 .IX Item "-fuse-cxa-atexit"
1835 Register destructors for objects with static storage duration with the
1836 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
1837 This option is required for fully standards-compliant handling of static
1838 destructors, but will only work if your C library supports
1839 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
1840 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
1841 .IX Item "-fno-use-cxa-get-exception-ptr"
1842 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
1843 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
1844 if the runtime routine is not available.
1845 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
1846 .IX Item "-fvisibility-inlines-hidden"
1847 This switch declares that the user does not attempt to compare
1848 pointers to inline methods where the addresses of the two functions
1849 were taken in different shared objects.
1850 .Sp
1851 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
1852 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
1853 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
1854 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
1855 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
1856 dynamic export table when the library makes heavy use of templates.
1857 .Sp
1858 The behavior of this switch is not quite the same as marking the
1859 methods as hidden directly, because it does not affect static variables
1860 local to the function or cause the compiler to deduce that
1861 the function is defined in only one shared object.
1862 .Sp
1863 You may mark a method as having a visibility explicitly to negate the
1864 effect of the switch for that method.  For example, if you do want to
1865 compare pointers to a particular inline method, you might mark it as
1866 having default visibility.  Marking the enclosing class with explicit
1867 visibility will have no effect.
1868 .Sp
1869 Explicitly instantiated inline methods are unaffected by this option
1870 as their linkage might otherwise cross a shared library boundary.
1871 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
1872 .IX Item "-fvisibility-ms-compat"
1873 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
1874 linkage model compatible with that of Microsoft Visual Studio.
1875 .Sp
1876 The flag makes these changes to \s-1GCC\s0's linkage model:
1877 .RS 4
1878 .IP "1." 4
1879 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
1880 \&\fB\-fvisibility=hidden\fR.
1881 .IP "2." 4
1882 Types, but not their members, are not hidden by default.
1883 .IP "3." 4
1884 The One Definition Rule is relaxed for types without explicit
1885 visibility specifications which are defined in more than one different
1886 shared object: those declarations are permitted if they would have
1887 been permitted when this option was not used.
1888 .RE
1889 .RS 4
1890 .Sp
1891 In new code it is better to use \fB\-fvisibility=hidden\fR and
1892 export those classes which are intended to be externally visible.
1893 Unfortunately it is possible for code to rely, perhaps accidentally,
1894 on the Visual Studio behavior.
1895 .Sp
1896 Among the consequences of these changes are that static data members
1897 of the same type with the same name but defined in different shared
1898 objects will be different, so changing one will not change the other;
1899 and that pointers to function members defined in different shared
1900 objects may not compare equal.  When this flag is given, it is a
1901 violation of the \s-1ODR\s0 to define types with the same name differently.
1902 .RE
1903 .IP "\fB\-fno\-weak\fR" 4
1904 .IX Item "-fno-weak"
1905 Do not use weak symbol support, even if it is provided by the linker.
1906 By default, G++ will use weak symbols if they are available.  This
1907 option exists only for testing, and should not be used by end-users;
1908 it will result in inferior code and has no benefits.  This option may
1909 be removed in a future release of G++.
1910 .IP "\fB\-nostdinc++\fR" 4
1911 .IX Item "-nostdinc++"
1912 Do not search for header files in the standard directories specific to
1913 \&\*(C+, but do still search the other standard directories.  (This option
1914 is used when building the \*(C+ library.)
1915 .PP
1916 In addition, these optimization, warning, and code generation options
1917 have meanings only for \*(C+ programs:
1918 .IP "\fB\-fno\-default\-inline\fR" 4
1919 .IX Item "-fno-default-inline"
1920 Do not assume \fBinline\fR for functions defined inside a class scope.
1921   Note that these
1922 functions will have linkage like inline functions; they just won't be
1923 inlined by default.
1924 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
1925 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
1926 Warn when G++ generates code that is probably not compatible with the
1927 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
1928 all such cases, there are probably some cases that are not warned about,
1929 even though G++ is generating incompatible code.  There may also be
1930 cases where warnings are emitted even though the code that is generated
1931 will be compatible.
1932 .Sp
1933 You should rewrite your code to avoid these warnings if you are
1934 concerned about the fact that code generated by G++ may not be binary
1935 compatible with code generated by other compilers.
1936 .Sp
1937 The known incompatibilities at this point include:
1938 .RS 4
1939 .IP "\(bu" 4
1940 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1941 pack data into the same byte as a base class.  For example:
1942 .Sp
1943 .Vb 2
1944 \&        struct A { virtual void f(); int f1 : 1; };
1945 \&        struct B : public A { int f2 : 1; };
1946 .Ve
1947 .Sp
1948 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
1949 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
1950 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
1951 byte size on your platform; that will cause G++ and other compilers to
1952 layout \f(CW\*(C`B\*(C'\fR identically.
1953 .IP "\(bu" 4
1954 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1955 tail padding when laying out virtual bases.  For example:
1956 .Sp
1957 .Vb 3
1958 \&        struct A { virtual void f(); char c1; };
1959 \&        struct B { B(); char c2; };
1960 \&        struct C : public A, public virtual B {};
1961 .Ve
1962 .Sp
1963 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
1964 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
1965 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
1966 alignment (ignoring virtual base classes); that will cause G++ and other
1967 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
1968 .IP "\(bu" 4
1969 Incorrect handling of bit-fields with declared widths greater than that
1970 of their underlying types, when the bit-fields appear in a union.  For
1971 example:
1972 .Sp
1973 .Vb 1
1974 \&        union U { int i : 4096; };
1975 .Ve
1976 .Sp
1977 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
1978 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
1979 .IP "\(bu" 4
1980 Empty classes can be placed at incorrect offsets.  For example:
1981 .Sp
1982 .Vb 1
1983 \&        struct A {};
1984 \&        
1985 \&        struct B {
1986 \&          A a;
1987 \&          virtual void f ();
1988 \&        };
1989 \&        
1990 \&        struct C : public B, public A {};
1991 .Ve
1992 .Sp
1993 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
1994 it should be placed at offset zero.  G++ mistakenly believes that the
1995 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
1996 .IP "\(bu" 4
1997 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
1998 template template parameters can be mangled incorrectly.
1999 .Sp
2000 .Vb 2
2001 \&        template <typename Q>
2002 \&        void f(typename Q::X) {}
2003 \&        
2004 \&        template <template <typename> class Q>
2005 \&        void f(typename Q<int>::X) {}
2006 .Ve
2007 .Sp
2008 Instantiations of these templates may be mangled incorrectly.
2009 .RE
2010 .RS 4
2011 .Sp
2012 It also warns psABI related changes.  The known psABI changes at this
2013 point include:
2014 .IP "\(bu" 4
2015 For SYSV/x86\-64, when passing union with long double, it is changed to
2016 pass in memory as specified in psABI.  For example:
2017 .Sp
2018 .Vb 4
2019 \&        union U {
2020 \&          long double ld;
2021 \&          int i;
2022 \&        };
2023 .Ve
2024 .Sp
2025 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2026 .RE
2027 .RS 4
2028 .RE
2029 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2030 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2031 Warn when a class seems unusable because all the constructors or
2032 destructors in that class are private, and it has neither friends nor
2033 public static member functions.
2034 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2035 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2036 Warn when a class has virtual functions and accessible non-virtual
2037 destructor, in which case it would be possible but unsafe to delete
2038 an instance of a derived class through a pointer to the base class.
2039 This warning is also enabled if \-Weffc++ is specified.
2040 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2041 .IX Item "-Wreorder ( and Objective- only)"
2042 Warn when the order of member initializers given in the code does not
2043 match the order in which they must be executed.  For instance:
2044 .Sp
2045 .Vb 5
2046 \&        struct A {
2047 \&          int i;
2048 \&          int j;
2049 \&          A(): j (0), i (1) { }
2050 \&        };
2051 .Ve
2052 .Sp
2053 The compiler will rearrange the member initializers for \fBi\fR
2054 and \fBj\fR to match the declaration order of the members, emitting
2055 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2056 .PP
2057 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2058 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2059 .IX Item "-Weffc++ ( and Objective- only)"
2060 Warn about violations of the following style guidelines from Scott Meyers'
2061 \&\fIEffective \*(C+\fR book:
2062 .RS 4
2063 .IP "\(bu" 4
2064 Item 11:  Define a copy constructor and an assignment operator for classes
2065 with dynamically allocated memory.
2066 .IP "\(bu" 4
2067 Item 12:  Prefer initialization to assignment in constructors.
2068 .IP "\(bu" 4
2069 Item 14:  Make destructors virtual in base classes.
2070 .IP "\(bu" 4
2071 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2072 .IP "\(bu" 4
2073 Item 23:  Don't try to return a reference when you must return an object.
2074 .RE
2075 .RS 4
2076 .Sp
2077 Also warn about violations of the following style guidelines from
2078 Scott Meyers' \fIMore Effective \*(C+\fR book:
2079 .IP "\(bu" 4
2080 Item 6:  Distinguish between prefix and postfix forms of increment and
2081 decrement operators.
2082 .IP "\(bu" 4
2083 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2084 .RE
2085 .RS 4
2086 .Sp
2087 When selecting this option, be aware that the standard library
2088 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2089 to filter out those warnings.
2090 .RE
2091 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2092 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2093 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2094 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2095 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2096 it is guaranteed to be of the same size as a pointer.  But this use is
2097 not portable across different compilers.
2098 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2099 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2100 Disable warnings when non-templatized friend functions are declared
2101 within a template.  Since the advent of explicit template specification
2102 support in G++, if the name of the friend is an unqualified-id (i.e.,
2103 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2104 friend declare or define an ordinary, nontemplate function.  (Section
2105 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2106 could be interpreted as a particular specialization of a templatized
2107 function.  Because this non-conforming behavior is no longer the default
2108 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2109 check existing code for potential trouble spots and is on by default.
2110 This new compiler behavior can be turned off with
2111 \&\fB\-Wno\-non\-template\-friend\fR which keeps the conformant compiler code
2112 but disables the helpful warning.
2113 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2114 .IX Item "-Wold-style-cast ( and Objective- only)"
2115 Warn if an old-style (C\-style) cast to a non-void type is used within
2116 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2117 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2118 less vulnerable to unintended effects and much easier to search for.
2119 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2120 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2121 Warn when a function declaration hides virtual functions from a
2122 base class.  For example, in:
2123 .Sp
2124 .Vb 3
2125 \&        struct A {
2126 \&          virtual void f();
2127 \&        };
2128 \&        
2129 \&        struct B: public A {
2130 \&          void f(int);
2131 \&        };
2132 .Ve
2133 .Sp
2134 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
2135 like:
2136 .Sp
2137 .Vb 2
2138 \&        B* b;
2139 \&        b\->f();
2140 .Ve
2141 .Sp
2142 will fail to compile.
2143 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2144 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2145 Disable the diagnostic for converting a bound pointer to member function
2146 to a plain pointer.
2147 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2148 .IX Item "-Wsign-promo ( and Objective- only)"
2149 Warn when overload resolution chooses a promotion from unsigned or
2150 enumerated type to a signed type, over a conversion to an unsigned type of
2151 the same size.  Previous versions of G++ would try to preserve
2152 unsignedness, but the standard mandates the current behavior.
2153 .Sp
2154 .Vb 4
2155 \&        struct A {
2156 \&          operator int ();
2157 \&          A& operator = (int);
2158 \&        };
2159 \&        
2160 \&        main ()
2161 \&        {
2162 \&          A a,b;
2163 \&          a = b;
2164 \&        }
2165 .Ve
2166 .Sp
2167 In this example, G++ will synthesize a default \fBA& operator =
2168 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2169 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2170 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2171 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2172 languages themselves.  See
2173 .PP
2174 This section describes the command-line options that are only meaningful
2175 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2176 the language-independent \s-1GNU\s0 compiler options.
2177 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2178 .PP
2179 .Vb 1
2180 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2181 .Ve
2182 .PP
2183 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2184 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2185 any language supported by \s-1GCC\s0.
2186 .PP
2187 Note that since Objective-C is an extension of the C language, Objective-C
2188 compilations may also use options specific to the C front-end (e.g.,
2189 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2190 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2191 .PP
2192 Here is a list of options that are \fIonly\fR for compiling Objective-C
2193 and Objective\-\*(C+ programs:
2194 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2195 .IX Item "-fconstant-string-class=class-name"
2196 Use \fIclass-name\fR as the name of the class to instantiate for each
2197 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2198 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2199 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2200 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2201 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2202 to be laid out as constant CoreFoundation strings.
2203 .IP "\fB\-fgnu\-runtime\fR" 4
2204 .IX Item "-fgnu-runtime"
2205 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2206 runtime.  This is the default for most types of systems.
2207 .IP "\fB\-fnext\-runtime\fR" 4
2208 .IX Item "-fnext-runtime"
2209 Generate output compatible with the NeXT runtime.  This is the default
2210 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2211 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2212 used.
2213 .IP "\fB\-fno\-nil\-receivers\fR" 4
2214 .IX Item "-fno-nil-receivers"
2215 Assume that all Objective-C message dispatches (e.g.,
2216 \&\f(CW\*(C`[receiver message:arg]\*(C'\fR) in this translation unit ensure that the receiver
2217 is not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the runtime
2218 to be used.  Currently, this option is only available in conjunction with
2219 the NeXT runtime on Mac \s-1OS\s0 X 10.3 and later.
2220 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2221 .IX Item "-fobjc-call-cxx-cdtors"
2222 For each Objective-C class, check if any of its instance variables is a
2223 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2224 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method that will run
2225 non-trivial default constructors on any such instance variables, in order,
2226 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2227 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2228 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method that will run
2229 all such default destructors, in reverse order.
2230 .Sp
2231 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and/or \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods
2232 thusly generated will only operate on instance variables declared in the
2233 current Objective-C class, and not those inherited from superclasses.  It
2234 is the responsibility of the Objective-C runtime to invoke all such methods
2235 in an object's inheritance hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods
2236 will be invoked by the runtime immediately after a new object
2237 instance is allocated; the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will
2238 be invoked immediately before the runtime deallocates an object instance.
2239 .Sp
2240 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2241 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2242 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2243 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2244 .IX Item "-fobjc-direct-dispatch"
2245 Allow fast jumps to the message dispatcher.  On Darwin this is
2246 accomplished via the comm page.
2247 .IP "\fB\-fobjc\-exceptions\fR" 4
2248 .IX Item "-fobjc-exceptions"
2249 Enable syntactic support for structured exception handling in Objective-C,
2250 similar to what is offered by \*(C+ and Java.  This option is
2251 unavailable in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.2 and
2252 earlier.
2253 .Sp
2254 .Vb 10
2255 \&          @try {
2256 \&            ...
2257 \&               @throw expr;
2258 \&            ...
2259 \&          }
2260 \&          @catch (AnObjCClass *exc) {
2261 \&            ...
2262 \&              @throw expr;
2263 \&            ...
2264 \&              @throw;
2265 \&            ...
2266 \&          }
2267 \&          @catch (AnotherClass *exc) {
2268 \&            ...
2269 \&          }
2270 \&          @catch (id allOthers) {
2271 \&            ...
2272 \&          }
2273 \&          @finally {
2274 \&            ...
2275 \&              @throw expr;
2276 \&            ...
2277 \&          }
2278 .Ve
2279 .Sp
2280 The \f(CW@throw\fR statement may appear anywhere in an Objective-C or
2281 Objective\-\*(C+ program; when used inside of a \f(CW@catch\fR block, the
2282 \&\f(CW@throw\fR may appear without an argument (as shown above), in which case
2283 the object caught by the \f(CW@catch\fR will be rethrown.
2284 .Sp
2285 Note that only (pointers to) Objective-C objects may be thrown and
2286 caught using this scheme.  When an object is thrown, it will be caught
2287 by the nearest \f(CW@catch\fR clause capable of handling objects of that type,
2288 analogously to how \f(CW\*(C`catch\*(C'\fR blocks work in \*(C+ and Java.  A
2289 \&\f(CW\*(C`@catch(id ...)\*(C'\fR clause (as shown above) may also be provided to catch
2290 any and all Objective-C exceptions not caught by previous \f(CW@catch\fR
2291 clauses (if any).
2292 .Sp
2293 The \f(CW@finally\fR clause, if present, will be executed upon exit from the
2294 immediately preceding \f(CW\*(C`@try ... @catch\*(C'\fR section.  This will happen
2295 regardless of whether any exceptions are thrown, caught or rethrown
2296 inside the \f(CW\*(C`@try ... @catch\*(C'\fR section, analogously to the behavior
2297 of the \f(CW\*(C`finally\*(C'\fR clause in Java.
2298 .Sp
2299 There are several caveats to using the new exception mechanism:
2300 .RS 4
2301 .IP "\(bu" 4
2302 Although currently designed to be binary compatible with \f(CW\*(C`NS_HANDLER\*(C'\fR\-style
2303 idioms provided by the \f(CW\*(C`NSException\*(C'\fR class, the new
2304 exceptions can only be used on Mac \s-1OS\s0 X 10.3 (Panther) and later
2305 systems, due to additional functionality needed in the (NeXT) Objective-C
2306 runtime.
2307 .IP "\(bu" 4
2308 As mentioned above, the new exceptions do not support handling
2309 types other than Objective-C objects.   Furthermore, when used from
2310 Objective\-\*(C+, the Objective-C exception model does not interoperate with \*(C+
2311 exceptions at this time.  This means you cannot \f(CW@throw\fR an exception
2312 from Objective-C and \f(CW\*(C`catch\*(C'\fR it in \*(C+, or vice versa
2313 (i.e., \f(CW\*(C`throw ... @catch\*(C'\fR).
2314 .RE
2315 .RS 4
2316 .Sp
2317 The \fB\-fobjc\-exceptions\fR switch also enables the use of synchronization
2318 blocks for thread-safe execution:
2319 .Sp
2320 .Vb 3
2321 \&          @synchronized (ObjCClass *guard) {
2322 \&            ...
2323 \&          }
2324 .Ve
2325 .Sp
2326 Upon entering the \f(CW@synchronized\fR block, a thread of execution shall
2327 first check whether a lock has been placed on the corresponding \f(CW\*(C`guard\*(C'\fR
2328 object by another thread.  If it has, the current thread shall wait until
2329 the other thread relinquishes its lock.  Once \f(CW\*(C`guard\*(C'\fR becomes available,
2330 the current thread will place its own lock on it, execute the code contained in
2331 the \f(CW@synchronized\fR block, and finally relinquish the lock (thereby
2332 making \f(CW\*(C`guard\*(C'\fR available to other threads).
2333 .Sp
2334 Unlike Java, Objective-C does not allow for entire methods to be marked
2335 \&\f(CW@synchronized\fR.  Note that throwing exceptions out of
2336 \&\f(CW@synchronized\fR blocks is allowed, and will cause the guarding object
2337 to be unlocked properly.
2338 .RE
2339 .IP "\fB\-fobjc\-gc\fR" 4
2340 .IX Item "-fobjc-gc"
2341 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+ programs.
2342 .IP "\fB\-freplace\-objc\-classes\fR" 4
2343 .IX Item "-freplace-objc-classes"
2344 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2345 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2346 run time instead.  This is used in conjunction with the Fix-and-Continue
2347 debugging mode, where the object file in question may be recompiled and
2348 dynamically reloaded in the course of program execution, without the need
2349 to restart the program itself.  Currently, Fix-and-Continue functionality
2350 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2351 and later.
2352 .IP "\fB\-fzero\-link\fR" 4
2353 .IX Item "-fzero-link"
2354 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2355 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2356 compile time) with static class references that get initialized at load time,
2357 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2358 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2359 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2360 for individual class implementations to be modified during program execution.
2361 .IP "\fB\-gen\-decls\fR" 4
2362 .IX Item "-gen-decls"
2363 Dump interface declarations for all classes seen in the source file to a
2364 file named \fI\fIsourcename\fI.decl\fR.
2365 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2366 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2367 Warn whenever an Objective-C assignment is being intercepted by the
2368 garbage collector.
2369 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2370 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2371 If a class is declared to implement a protocol, a warning is issued for
2372 every method in the protocol that is not implemented by the class.  The
2373 default behavior is to issue a warning for every method not explicitly
2374 implemented in the class, even if a method implementation is inherited
2375 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2376 methods inherited from the superclass are considered to be implemented,
2377 and no warning is issued for them.
2378 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2379 .IX Item "-Wselector (Objective-C and Objective- only)"
2380 Warn if multiple methods of different types for the same selector are
2381 found during compilation.  The check is performed on the list of methods
2382 in the final stage of compilation.  Additionally, a check is performed
2383 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2384 expression, and a corresponding method for that selector has been found
2385 during compilation.  Because these checks scan the method table only at
2386 the end of compilation, these warnings are not produced if the final
2387 stage of compilation is not reached, for example because an error is
2388 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2389 being used.
2390 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2391 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2392 Warn if multiple methods with differing argument and/or return types are
2393 found for a given selector when attempting to send a message using this
2394 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2395 is off (which is the default behavior), the compiler will omit such warnings
2396 if any differences found are confined to types which share the same size
2397 and alignment.
2398 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2399 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2400 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2401 undeclared selector is found.  A selector is considered undeclared if no
2402 method with that name has been declared before the
2403 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2404 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2405 an \f(CW@implementation\fR section.  This option always performs its
2406 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2407 while \fB\-Wselector\fR only performs its checks in the final stage of
2408 compilation.  This also enforces the coding style convention
2409 that methods and selectors must be declared before being used.
2410 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2411 .IX Item "-print-objc-runtime-info"
2412 Generate C header describing the largest structure that is passed by
2413 value, if any.
2414 .Sh "Options to Control Diagnostic Messages Formatting"
2415 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2416 Traditionally, diagnostic messages have been formatted irrespective of
2417 the output device's aspect (e.g. its width, ...).  The options described
2418 below can be used to control the diagnostic messages formatting
2419 algorithm, e.g. how many characters per line, how often source location
2420 information should be reported.  Right now, only the \*(C+ front end can
2421 honor these options.  However it is expected, in the near future, that
2422 the remaining front ends would be able to digest them correctly.
2423 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2424 .IX Item "-fmessage-length=n"
2425 Try to format error messages so that they fit on lines of about \fIn\fR
2426 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2427 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2428 line-wrapping will be done; each error message will appear on a single
2429 line.
2430 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2431 .IX Item "-fdiagnostics-show-location=once"
2432 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2433 reporter to emit \fIonce\fR source location information; that is, in
2434 case the message is too long to fit on a single physical line and has to
2435 be wrapped, the source location won't be emitted (as prefix) again,
2436 over and over, in subsequent continuation lines.  This is the default
2437 behavior.
2438 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2439 .IX Item "-fdiagnostics-show-location=every-line"
2440 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2441 messages reporter to emit the same source location information (as
2442 prefix) for physical lines that result from the process of breaking
2443 a message which is too long to fit on a single line.
2444 .IP "\fB\-fdiagnostics\-show\-option\fR" 4
2445 .IX Item "-fdiagnostics-show-option"
2446 This option instructs the diagnostic machinery to add text to each
2447 diagnostic emitted, which indicates which command line option directly
2448 controls that diagnostic, when such an option is known to the
2449 diagnostic machinery.
2450 .IP "\fB\-Wcoverage\-mismatch\fR" 4
2451 .IX Item "-Wcoverage-mismatch"
2452 Warn if feedback profiles do not match when using the
2453 \&\fB\-fprofile\-use\fR option.
2454 If a source file was changed between \fB\-fprofile\-gen\fR and
2455 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2456 to match the source file and \s-1GCC\s0 can not use the profile feedback
2457 information.  By default, \s-1GCC\s0 emits an error message in this case.
2458 The option \fB\-Wcoverage\-mismatch\fR emits a warning instead of an
2459 error.  \s-1GCC\s0 does not use appropriate feedback profiles, so using this
2460 option can result in poorly optimized code.  This option is useful
2461 only in the case of very minor changes such as bug fixes to an
2462 existing code-base.
2463 .Sh "Options to Request or Suppress Warnings"
2464 .IX Subsection "Options to Request or Suppress Warnings"
2465 Warnings are diagnostic messages that report constructions which
2466 are not inherently erroneous but which are risky or suggest there
2467 may have been an error.
2468 .PP
2469 The following language-independent options do not enable specific
2470 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2471 .IP "\fB\-fsyntax\-only\fR" 4
2472 .IX Item "-fsyntax-only"
2473 Check the code for syntax errors, but don't do anything beyond that.
2474 .IP "\fB\-w\fR" 4
2475 .IX Item "-w"
2476 Inhibit all warning messages.
2477 .IP "\fB\-Werror\fR" 4
2478 .IX Item "-Werror"
2479 Make all warnings into errors.
2480 .IP "\fB\-Werror=\fR" 4
2481 .IX Item "-Werror="
2482 Make the specified warning into an error.  The specifier for a warning
2483 is appended, for example \fB\-Werror=switch\fR turns the warnings
2484 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2485 negative form, to be used to negate \fB\-Werror\fR for specific
2486 warnings, for example \fB\-Wno\-error=switch\fR makes
2487 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2488 is in effect.  You can use the \fB\-fdiagnostics\-show\-option\fR
2489 option to have each controllable warning amended with the option which
2490 controls it, to determine what to use with this option.
2491 .Sp
2492 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2493 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2494 imply anything.
2495 .IP "\fB\-Wfatal\-errors\fR" 4
2496 .IX Item "-Wfatal-errors"
2497 This option causes the compiler to abort compilation on the first error
2498 occurred rather than trying to keep going and printing further error
2499 messages.
2500 .PP
2501 You can request many specific warnings with options beginning
2502 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2503 implicit declarations.  Each of these specific warning options also
2504 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2505 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2506 two forms, whichever is not the default.  For further,
2507 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2508 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2509 .IP "\fB\-pedantic\fR" 4
2510 .IX Item "-pedantic"
2511 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2512 reject all programs that use forbidden extensions, and some other
2513 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2514 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2515 .Sp
2516 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2517 this option (though a rare few will require \fB\-ansi\fR or a
2518 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2519 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2520 features are supported as well.  With this option, they are rejected.
2521 .Sp
2522 \&\fB\-pedantic\fR does not cause warning messages for use of the
2523 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2524 warnings are also disabled in the expression that follows
2525 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2526 these escape routes; application programs should avoid them.
2527 .Sp
2528 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2529 C conformance.  They soon find that it does not do quite what they want:
2530 it finds some non-ISO practices, but not all\-\-\-only those for which
2531 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2532 diagnostics have been added.
2533 .Sp
2534 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2535 some instances, but would require considerable additional work and would
2536 be quite different from \fB\-pedantic\fR.  We don't have plans to
2537 support such a feature in the near future.
2538 .Sp
2539 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2540 extended dialect of C, such as \fBgnu89\fR or \fBgnu99\fR, there is a
2541 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2542 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2543 where they are required by the base standard.  (It would not make sense
2544 for such warnings to be given only for features not in the specified \s-1GNU\s0
2545 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2546 features the compiler supports with the given option, and there would be
2547 nothing to warn about.)
2548 .IP "\fB\-pedantic\-errors\fR" 4
2549 .IX Item "-pedantic-errors"
2550 Like \fB\-pedantic\fR, except that errors are produced rather than
2551 warnings.
2552 .IP "\fB\-Wall\fR" 4
2553 .IX Item "-Wall"
2554 This enables all the warnings about constructions that some users
2555 consider questionable, and that are easy to avoid (or modify to
2556 prevent the warning), even in conjunction with macros.  This also
2557 enables some language-specific warnings described in \fB\*(C+ Dialect
2558 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2559 .Sp
2560 \&\fB\-Wall\fR turns on the following warning flags:
2561 .Sp
2562 \&\fB\-Waddress   
2563 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2564 \&\fB\-Wc++0x\-compat  
2565 \&\-Wchar\-subscripts  
2566 \&\-Wimplicit\-int  
2567 \&\-Wimplicit\-function\-declaration  
2568 \&\-Wcomment  
2569 \&\-Wformat   
2570 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2571 \&\fB\-Wmissing\-braces  
2572 \&\-Wnonnull  
2573 \&\-Wparentheses  
2574 \&\-Wpointer\-sign  
2575 \&\-Wreorder   
2576 \&\-Wreturn\-type  
2577 \&\-Wsequence\-point  
2578 \&\-Wsign\-compare\fR (only in \*(C+)  
2579 \&\fB\-Wstrict\-aliasing  
2580 \&\-Wstrict\-overflow=1  
2581 \&\-Wswitch  
2582 \&\-Wtrigraphs  
2583 \&\-Wuninitialized  
2584 \&\-Wunknown\-pragmas  
2585 \&\-Wunused\-function  
2586 \&\-Wunused\-label     
2587 \&\-Wunused\-value     
2588 \&\-Wunused\-variable  
2589 \&\-Wvolatile\-register\-var\fR
2590 .Sp
2591 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2592 them warn about constructions that users generally do not consider
2593 questionable, but which occasionally you might wish to check for;
2594 others warn about constructions that are necessary or hard to avoid in
2595 some cases, and there is no simple way to modify the code to suppress
2596 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2597 them must be enabled individually.
2598 .IP "\fB\-Wextra\fR" 4
2599 .IX Item "-Wextra"
2600 This enables some extra warning flags that are not enabled by
2601 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2602 name is still supported, but the newer name is more descriptive.)
2603 .Sp
2604 \&\fB\-Wclobbered  
2605 \&\-Wempty\-body  
2606 \&\-Wignored\-qualifiers 
2607 \&\-Wmissing\-field\-initializers  
2608 \&\-Wmissing\-parameter\-type\fR (C only)  
2609 \&\fB\-Wold\-style\-declaration\fR (C only)  
2610 \&\fB\-Woverride\-init  
2611 \&\-Wsign\-compare  
2612 \&\-Wtype\-limits  
2613 \&\-Wuninitialized  
2614 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
2615 .Sp
2616 The option \fB\-Wextra\fR also prints warning messages for the
2617 following cases:
2618 .RS 4
2619 .IP "\(bu" 4
2620 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2621 \&\fB>\fR, or \fB>=\fR.
2622 .IP "\(bu" 4
2623 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2624 conditional expression.
2625 .IP "\(bu" 4
2626 (\*(C+ only) Ambiguous virtual bases.
2627 .IP "\(bu" 4
2628 (\*(C+ only) Subscripting an array which has been declared \fBregister\fR.
2629 .IP "\(bu" 4
2630 (\*(C+ only) Taking the address of a variable which has been declared
2631 \&\fBregister\fR.
2632 .IP "\(bu" 4
2633 (\*(C+ only) A base class is not initialized in a derived class' copy
2634 constructor.
2635 .RE
2636 .RS 4
2637 .RE
2638 .IP "\fB\-Wchar\-subscripts\fR" 4
2639 .IX Item "-Wchar-subscripts"
2640 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2641 of error, as programmers often forget that this type is signed on some
2642 machines.
2643 This warning is enabled by \fB\-Wall\fR.
2644 .IP "\fB\-Wcomment\fR" 4
2645 .IX Item "-Wcomment"
2646 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2647 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2648 This warning is enabled by \fB\-Wall\fR.
2649 .IP "\fB\-Wformat\fR" 4
2650 .IX Item "-Wformat"
2651 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2652 the arguments supplied have types appropriate to the format string
2653 specified, and that the conversions specified in the format string make
2654 sense.  This includes standard functions, and others specified by format
2655 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2656 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2657 not in the C standard) families (or other target-specific families).
2658 Which functions are checked without format attributes having been
2659 specified depends on the standard version selected, and such checks of
2660 functions without the attribute specified are disabled by
2661 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2662 .Sp
2663 The formats are checked against the format features supported by \s-1GNU\s0
2664 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2665 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2666 extensions.  Other library implementations may not support all these
2667 features; \s-1GCC\s0 does not support warning about features that go beyond a
2668 particular library's limitations.  However, if \fB\-pedantic\fR is used
2669 with \fB\-Wformat\fR, warnings will be given about format features not
2670 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2671 since those are not in any version of the C standard).
2672 .Sp
2673 Since \fB\-Wformat\fR also checks for null format arguments for
2674 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2675 .Sp
2676 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2677 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2678 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2679 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2680 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2681 .IP "\fB\-Wformat\-y2k\fR" 4
2682 .IX Item "-Wformat-y2k"
2683 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
2684 formats which may yield only a two-digit year.
2685 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
2686 .IX Item "-Wno-format-contains-nul"
2687 If \fB\-Wformat\fR is specified, do not warn about format strings that
2688 contain \s-1NUL\s0 bytes.
2689 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
2690 .IX Item "-Wno-format-extra-args"
2691 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
2692 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
2693 that such arguments are ignored.
2694 .Sp
2695 Where the unused arguments lie between used arguments that are
2696 specified with \fB$\fR operand number specifications, normally
2697 warnings are still given, since the implementation could not know what
2698 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
2699 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
2700 warning if the unused arguments are all pointers, since the Single
2701 Unix Specification says that such unused arguments are allowed.
2702 .IP "\fB\-Wno\-format\-zero\-length\fR (C and Objective-C only)" 4
2703 .IX Item "-Wno-format-zero-length (C and Objective-C only)"
2704 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
2705 The C standard specifies that zero-length formats are allowed.
2706 .IP "\fB\-Wformat\-nonliteral\fR" 4
2707 .IX Item "-Wformat-nonliteral"
2708 If \fB\-Wformat\fR is specified, also warn if the format string is not a
2709 string literal and so cannot be checked, unless the format function
2710 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
2711 .IP "\fB\-Wformat\-security\fR" 4
2712 .IX Item "-Wformat-security"
2713 If \fB\-Wformat\fR is specified, also warn about uses of format
2714 functions that represent possible security problems.  At present, this
2715 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
2716 format string is not a string literal and there are no format arguments,
2717 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
2718 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
2719 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
2720 in future warnings may be added to \fB\-Wformat\-security\fR that are not
2721 included in \fB\-Wformat\-nonliteral\fR.)
2722 .IP "\fB\-Wformat=2\fR" 4
2723 .IX Item "-Wformat=2"
2724 Enable \fB\-Wformat\fR plus format checks not included in
2725 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
2726 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
2727 .IP "\fB\-Wnonnull\fR (C and Objective-C only)" 4
2728 .IX Item "-Wnonnull (C and Objective-C only)"
2729 Warn about passing a null pointer for arguments marked as
2730 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
2731 .Sp
2732 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
2733 can be disabled with the \fB\-Wno\-nonnull\fR option.
2734 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2735 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
2736 Warn about uninitialized variables which are initialized with themselves.
2737 Note this option can only be used with the \fB\-Wuninitialized\fR option.
2738 .Sp
2739 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
2740 following snippet only when \fB\-Winit\-self\fR has been specified:
2741 .Sp
2742 .Vb 5
2743 \&        int f()
2744 \&        {
2745 \&          int i = i;
2746 \&          return i;
2747 \&        }
2748 .Ve
2749 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
2750 .IX Item "-Wimplicit-int (C and Objective-C only)"
2751 Warn when a declaration does not specify a type.
2752 This warning is enabled by \fB\-Wall\fR.
2753 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
2754 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
2755 Give a warning whenever a function is used before being declared. In
2756 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
2757 enabled by default and it is made into an error by
2758 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
2759 \&\fB\-Wall\fR.
2760 .IP "\fB\-Wimplicit\fR" 4
2761 .IX Item "-Wimplicit"
2762 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
2763 This warning is enabled by \fB\-Wall\fR.
2764 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
2765 .IX Item "-Wignored-qualifiers (C and  only)"
2766 Warn if the return type of a function has a type qualifier
2767 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
2768 since the value returned by a function is not an lvalue.
2769 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
2770 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
2771 definitions, so such return types always receive a warning
2772 even without this option.
2773 .Sp
2774 This warning is also enabled by \fB\-Wextra\fR.
2775 .IP "\fB\-Wmain\fR" 4
2776 .IX Item "-Wmain"
2777 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
2778 a function with external linkage, returning int, taking either zero
2779 arguments, two, or three arguments of appropriate types.  This warning
2780 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
2781 or \fB\-pedantic\fR.
2782 .IP "\fB\-Wmissing\-braces\fR" 4
2783 .IX Item "-Wmissing-braces"
2784 Warn if an aggregate or union initializer is not fully bracketed.  In
2785 the following example, the initializer for \fBa\fR is not fully
2786 bracketed, but that for \fBb\fR is fully bracketed.
2787 .Sp
2788 .Vb 2
2789 \&        int a[2][2] = { 0, 1, 2, 3 };
2790 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
2791 .Ve
2792 .Sp
2793 This warning is enabled by \fB\-Wall\fR.
2794 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2795 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
2796 Warn if a user-supplied include directory does not exist.
2797 .IP "\fB\-Wparentheses\fR" 4
2798 .IX Item "-Wparentheses"
2799 Warn if parentheses are omitted in certain contexts, such
2800 as when there is an assignment in a context where a truth value
2801 is expected, or when operators are nested whose precedence people
2802 often get confused about.
2803 .Sp
2804 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
2805 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
2806 interpretation from that of ordinary mathematical notation.
2807 .Sp
2808 Also warn about constructions where there may be confusion to which
2809 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
2810 such a case:
2811 .Sp
2812 .Vb 7
2813 \&        {
2814 \&          if (a)
2815 \&            if (b)
2816 \&              foo ();
2817 \&          else
2818 \&            bar ();
2819 \&        }
2820 .Ve
2821 .Sp
2822 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
2823 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
2824 often not what the programmer expected, as illustrated in the above
2825 example by indentation the programmer chose.  When there is the
2826 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
2827 is specified.  To eliminate the warning, add explicit braces around
2828 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
2829 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
2830 look like this:
2831 .Sp
2832 .Vb 9
2833 \&        {
2834 \&          if (a)
2835 \&            {
2836 \&              if (b)
2837 \&                foo ();
2838 \&              else
2839 \&                bar ();
2840 \&            }
2841 \&        }
2842 .Ve
2843 .Sp
2844 This warning is enabled by \fB\-Wall\fR.
2845 .IP "\fB\-Wsequence\-point\fR" 4
2846 .IX Item "-Wsequence-point"
2847 Warn about code that may have undefined semantics because of violations
2848 of sequence point rules in the C and \*(C+ standards.
2849 .Sp
2850 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
2851 program are evaluated in terms of \fIsequence points\fR, which represent
2852 a partial ordering between the execution of parts of the program: those
2853 executed before the sequence point, and those executed after it.  These
2854 occur after the evaluation of a full expression (one which is not part
2855 of a larger expression), after the evaluation of the first operand of a
2856 \&\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
2857 function is called (but after the evaluation of its arguments and the
2858 expression denoting the called function), and in certain other places.
2859 Other than as expressed by the sequence point rules, the order of
2860 evaluation of subexpressions of an expression is not specified.  All
2861 these rules describe only a partial order rather than a total order,
2862 since, for example, if two functions are called within one expression
2863 with no sequence point between them, the order in which the functions
2864 are called is not specified.  However, the standards committee have
2865 ruled that function calls do not overlap.
2866 .Sp
2867 It is not specified when between sequence points modifications to the
2868 values of objects take effect.  Programs whose behavior depends on this
2869 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
2870 the previous and next sequence point an object shall have its stored
2871 value modified at most once by the evaluation of an expression.
2872 Furthermore, the prior value shall be read only to determine the value
2873 to be stored.\*(R".  If a program breaks these rules, the results on any
2874 particular implementation are entirely unpredictable.
2875 .Sp
2876 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
2877 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
2878 diagnosed by this option, and it may give an occasional false positive
2879 result, but in general it has been found fairly effective at detecting
2880 this sort of problem in programs.
2881 .Sp
2882 The standard is worded confusingly, therefore there is some debate
2883 over the precise meaning of the sequence point rules in subtle cases.
2884 Links to discussions of the problem, including proposed formal
2885 definitions, may be found on the \s-1GCC\s0 readings page, at
2886 <\fB\fR>.
2887 .Sp
2888 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
2889 .IP "\fB\-Wreturn\-type\fR" 4
2890 .IX Item "-Wreturn-type"
2891 Warn whenever a function is defined with a return-type that defaults
2892 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
2893 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
2894 (falling off the end of the function body is considered returning
2895 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with a
2896 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
2897 .Sp
2898 For \*(C+, a function without return type always produces a diagnostic
2899 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
2900 exceptions are \fBmain\fR and functions defined in system headers.
2901 .Sp
2902 This warning is enabled by \fB\-Wall\fR.
2903 .IP "\fB\-Wswitch\fR" 4
2904 .IX Item "-Wswitch"
2905 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2906 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2907 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
2908 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2909 provoke warnings when this option is used.
2910 This warning is enabled by \fB\-Wall\fR.
2911 .IP "\fB\-Wswitch\-default\fR" 4
2912 .IX Item "-Wswitch-default"
2913 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
2914 case.
2915 .IP "\fB\-Wswitch\-enum\fR" 4
2916 .IX Item "-Wswitch-enum"
2917 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2918 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2919 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2920 provoke warnings when this option is used.
2921 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
2922 .IX Item "-Wsync-nand (C and  only)"
2923 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
2924 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
2925 .IP "\fB\-Wtrigraphs\fR" 4
2926 .IX Item "-Wtrigraphs"
2927 Warn if any trigraphs are encountered that might change the meaning of
2928 the program (trigraphs within comments are not warned about).
2929 This warning is enabled by \fB\-Wall\fR.
2930 .IP "\fB\-Wunused\-function\fR" 4
2931 .IX Item "-Wunused-function"
2932 Warn whenever a static function is declared but not defined or a
2933 non-inline static function is unused.
2934 This warning is enabled by \fB\-Wall\fR.
2935 .IP "\fB\-Wunused\-label\fR" 4
2936 .IX Item "-Wunused-label"
2937 Warn whenever a label is declared but not used.
2938 This warning is enabled by \fB\-Wall\fR.
2939 .Sp
2940 To suppress this warning use the \fBunused\fR attribute.
2941 .IP "\fB\-Wunused\-parameter\fR" 4
2942 .IX Item "-Wunused-parameter"
2943 Warn whenever a function parameter is unused aside from its declaration.
2944 .Sp
2945 To suppress this warning use the \fBunused\fR attribute.
2946 .IP "\fB\-Wunused\-variable\fR" 4
2947 .IX Item "-Wunused-variable"
2948 Warn whenever a local variable or non-constant static variable is unused
2949 aside from its declaration.
2950 This warning is enabled by \fB\-Wall\fR.
2951 .Sp
2952 To suppress this warning use the \fBunused\fR attribute.
2953 .IP "\fB\-Wunused\-value\fR" 4
2954 .IX Item "-Wunused-value"
2955 Warn whenever a statement computes a result that is explicitly not
2956 used. To suppress this warning cast the unused expression to
2957 \&\fBvoid\fR. This includes an expression-statement or the left-hand
2958 side of a comma expression that contains no side effects. For example,
2959 an expression such as \fBx[i,j]\fR will cause a warning, while
2960 \&\fBx[(void)i,j]\fR will not.
2961 .Sp
2962 This warning is enabled by \fB\-Wall\fR.
2963 .IP "\fB\-Wunused\fR" 4
2964 .IX Item "-Wunused"
2965 All the above \fB\-Wunused\fR options combined.
2966 .Sp
2967 In order to get a warning about an unused function parameter, you must
2968 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
2969 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
2970 .IP "\fB\-Wuninitialized\fR" 4
2971 .IX Item "-Wuninitialized"
2972 Warn if an automatic variable is used without first being initialized
2973 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
2974 warn if a non-static reference or non-static \fBconst\fR member
2975 appears in a class without constructors.
2976 .Sp
2977 If you want to warn about code which uses the uninitialized value of the
2978 variable in its own initializer, use the \fB\-Winit\-self\fR option.
2979 .Sp
2980 These warnings occur for individual uninitialized or clobbered
2981 elements of structure, union or array variables as well as for
2982 variables which are uninitialized or clobbered as a whole.  They do
2983 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
2984 these warnings depend on optimization, the exact variables or elements
2985 for which there are warnings will depend on the precise optimization
2986 options and version of \s-1GCC\s0 used.
2987 .Sp
2988 Note that there may be no warning about a variable that is used only
2989 to compute a value that itself is never used, because such
2990 computations may be deleted by data flow analysis before the warnings
2991 are printed.
2992 .Sp
2993 These warnings are made optional because \s-1GCC\s0 is not smart
2994 enough to see all the reasons why the code might be correct
2995 despite appearing to have an error.  Here is one example of how
2996 this can happen:
2997 .Sp
2998 .Vb 12
2999 \&        {
3000 \&          int x;
3001 \&          switch (y)
3002 \&            {
3003 \&            case 1: x = 1;
3004 \&              break;
3005 \&            case 2: x = 4;
3006 \&              break;
3007 \&            case 3: x = 5;
3008 \&            }
3009 \&          foo (x);
3010 \&        }
3011 .Ve
3012 .Sp
3013 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3014 always initialized, but \s-1GCC\s0 doesn't know this.  Here is
3015 another common case:
3016 .Sp
3017 .Vb 6
3018 \&        {
3019 \&          int save_y;