OSDN Git Service

* MAINTAINERS (c4x port): Remove.
[pf3gnuchains/gcc-fork.git] / gcc / doc / invoke.texi
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
3 @c Free Software Foundation, Inc.
4 @c This is part of the GCC manual.
5 @c For copying conditions, see the file gcc.texi.
6
7 @ignore
8 @c man begin INCLUDE
9 @include gcc-vers.texi
10 @c man end
11
12 @c man begin COPYRIGHT
13 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
14 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
15 Free Software Foundation, Inc.
16
17 Permission is granted to copy, distribute and/or modify this document
18 under the terms of the GNU Free Documentation License, Version 1.2 or
19 any later version published by the Free Software Foundation; with the
20 Invariant Sections being ``GNU General Public License'' and ``Funding
21 Free Software'', the Front-Cover texts being (a) (see below), and with
22 the Back-Cover Texts being (b) (see below).  A copy of the license is
23 included in the gfdl(7) man page.
24
25 (a) The FSF's Front-Cover Text is:
26
27      A GNU Manual
28
29 (b) The FSF's Back-Cover Text is:
30
31      You have freedom to copy and modify this GNU Manual, like GNU
32      software.  Copies published by the Free Software Foundation raise
33      funds for GNU development.
34 @c man end
35 @c Set file name and title for the man page.
36 @setfilename gcc
37 @settitle GNU project C and C++ compiler
38 @c man begin SYNOPSIS
39 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
40     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
41     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
42     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
43     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
44     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
45     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
46
47 Only the most useful options are listed here; see below for the
48 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
49 @c man end
50 @c man begin SEEALSO
51 gpl(7), gfdl(7), fsf-funding(7),
52 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
53 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
54 @file{ld}, @file{binutils} and @file{gdb}.
55 @c man end
56 @c man begin BUGS
57 For instructions on reporting bugs, see
58 @w{@value{BUGURL}}.
59 @c man end
60 @c man begin AUTHOR
61 See the Info entry for @command{gcc}, or
62 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
63 for contributors to GCC@.
64 @c man end
65 @end ignore
66
67 @node Invoking GCC
68 @chapter GCC Command Options
69 @cindex GCC command options
70 @cindex command options
71 @cindex options, GCC command
72
73 @c man begin DESCRIPTION
74 When you invoke GCC, it normally does preprocessing, compilation,
75 assembly and linking.  The ``overall options'' allow you to stop this
76 process at an intermediate stage.  For example, the @option{-c} option
77 says not to run the linker.  Then the output consists of object files
78 output by the assembler.
79
80 Other options are passed on to one stage of processing.  Some options
81 control the preprocessor and others the compiler itself.  Yet other
82 options control the assembler and linker; most of these are not
83 documented here, since you rarely need to use any of them.
84
85 @cindex C compilation options
86 Most of the command line options that you can use with GCC are useful
87 for C programs; when an option is only useful with another language
88 (usually C++), the explanation says so explicitly.  If the description
89 for a particular option does not mention a source language, you can use
90 that option with all supported languages.
91
92 @cindex C++ compilation options
93 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
94 options for compiling C++ programs.
95
96 @cindex grouping options
97 @cindex options, grouping
98 The @command{gcc} program accepts options and file names as operands.  Many
99 options have multi-letter names; therefore multiple single-letter options
100 may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
101 -r}}.
102
103 @cindex order of options
104 @cindex options, order
105 You can mix options and other arguments.  For the most part, the order
106 you use doesn't matter.  Order does matter when you use several
107 options of the same kind; for example, if you specify @option{-L} more
108 than once, the directories are searched in the order specified.  Also,
109 the placement of the @option{-l} option is significant.
110
111 Many options have long names starting with @samp{-f} or with
112 @samp{-W}---for example,
113 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
114 these have both positive and negative forms; the negative form of
115 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
116 only one of these two forms, whichever one is not the default.
117
118 @c man end
119
120 @xref{Option Index}, for an index to GCC's options.
121
122 @menu
123 * Option Summary::      Brief list of all options, without explanations.
124 * Overall Options::     Controlling the kind of output:
125                         an executable, object files, assembler files,
126                         or preprocessed source.
127 * Invoking G++::        Compiling C++ programs.
128 * C Dialect Options::   Controlling the variant of C language compiled.
129 * C++ Dialect Options:: Variations on C++.
130 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
131                         and Objective-C++.
132 * Language Independent Options:: Controlling how diagnostics should be
133                         formatted.
134 * Warning Options::     How picky should the compiler be?
135 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
136 * Optimize Options::    How much optimization?
137 * Preprocessor Options:: Controlling header files and macro definitions.
138                          Also, getting dependency information for Make.
139 * Assembler Options::   Passing options to the assembler.
140 * Link Options::        Specifying libraries and so on.
141 * Directory Options::   Where to find header files and libraries.
142                         Where to find the compiler executable files.
143 * Spec Files::          How to pass switches to sub-processes.
144 * Target Options::      Running a cross-compiler, or an old version of GCC.
145 * Submodel Options::    Specifying minor hardware or convention variations,
146                         such as 68010 vs 68020.
147 * Code Gen Options::    Specifying conventions for function calls, data layout
148                         and register usage.
149 * Environment Variables:: Env vars that affect GCC.
150 * Precompiled Headers:: Compiling a header once, and using it many times.
151 * Running Protoize::    Automatically adding or removing function prototypes.
152 @end menu
153
154 @c man begin OPTIONS
155
156 @node Option Summary
157 @section Option Summary
158
159 Here is a summary of all the options, grouped by type.  Explanations are
160 in the following sections.
161
162 @table @emph
163 @item Overall Options
164 @xref{Overall Options,,Options Controlling the Kind of Output}.
165 @gccoptlist{-c  -S  -E  -o @var{file}  -combine  -pipe  -pass-exit-codes  @gol
166 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{]}  --target-help  @gol
167 --version @@@var{file}}
168
169 @item C Language Options
170 @xref{C Dialect Options,,Options Controlling C Dialect}.
171 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
172 -aux-info @var{filename} @gol
173 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
174 -fhosted  -ffreestanding -fopenmp -fms-extensions @gol
175 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
176 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
177 -fsigned-bitfields  -fsigned-char @gol
178 -funsigned-bitfields  -funsigned-char}
179
180 @item C++ Language Options
181 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
182 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
183 -fconserve-space  -ffriend-injection @gol
184 -fno-elide-constructors @gol
185 -fno-enforce-eh-specs @gol
186 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
187 -fno-implicit-templates @gol
188 -fno-implicit-inline-templates @gol
189 -fno-implement-inlines  -fms-extensions @gol
190 -fno-nonansi-builtins  -fno-operator-names @gol
191 -fno-optional-diags  -fpermissive @gol
192 -frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
193 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
194 -fno-default-inline  -fvisibility-inlines-hidden @gol
195 -fvisibility-ms-compat @gol
196 -Wabi  -Wctor-dtor-privacy @gol
197 -Wnon-virtual-dtor  -Wreorder @gol
198 -Weffc++  -Wno-deprecated  -Wstrict-null-sentinel @gol
199 -Wno-non-template-friend  -Wold-style-cast @gol
200 -Woverloaded-virtual  -Wno-pmf-conversions @gol
201 -Wsign-promo}
202
203 @item Objective-C and Objective-C++ Language Options
204 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
205 Objective-C and Objective-C++ Dialects}.
206 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
207 -fgnu-runtime  -fnext-runtime @gol
208 -fno-nil-receivers @gol
209 -fobjc-call-cxx-cdtors @gol
210 -fobjc-direct-dispatch @gol
211 -fobjc-exceptions @gol
212 -fobjc-gc @gol
213 -freplace-objc-classes @gol
214 -fzero-link @gol
215 -gen-decls @gol
216 -Wassign-intercept @gol
217 -Wno-protocol  -Wselector @gol
218 -Wstrict-selector-match @gol
219 -Wundeclared-selector}
220
221 @item Language Independent Options
222 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
223 @gccoptlist{-fmessage-length=@var{n}  @gol
224 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
225 -fdiagnostics-show-option}
226
227 @item Warning Options
228 @xref{Warning Options,,Options to Request or Suppress Warnings}.
229 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
230 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds @gol
231 -Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual  @gol
232 -Wchar-subscripts -Wclobbered  -Wcomment @gol
233 -Wconversion  -Wcoverage-mismatch  -Wno-deprecated-declarations @gol
234 -Wdisabled-optimization  -Wno-div-by-zero  @gol
235 -Wempty-body  -Wno-endif-labels @gol
236 -Werror  -Werror=* @gol
237 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
238 -Wno-format-extra-args -Wformat-nonliteral @gol
239 -Wformat-security  -Wformat-y2k -Wignored-qualifiers @gol
240 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
241 -Wimport  -Wno-import  -Winit-self  -Winline @gol
242 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
243 -Winvalid-pch -Wlarger-than-@var{len}  -Wunsafe-loop-optimizations @gol
244 -Wlogical-op -Wlong-long @gol
245 -Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
246 -Wmissing-format-attribute  -Wmissing-include-dirs @gol
247 -Wmissing-noreturn @gol
248 -Wno-multichar  -Wnonnull  -Wno-overflow @gol
249 -Woverlength-strings  -Wpacked  -Wpadded @gol
250 -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast @gol
251 -Wredundant-decls @gol
252 -Wreturn-type  -Wsequence-point  -Wshadow @gol
253 -Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
254 -Wstrict-aliasing -Wstrict-aliasing=n @gol
255 -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
256 -Wswitch  -Wswitch-default  -Wswitch-enum @gol
257 -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized @gol
258 -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
259 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
260 -Wunused-value  -Wunused-variable @gol
261 -Wvariadic-macros -Wvla @gol
262 -Wvolatile-register-var  -Wwrite-strings}
263
264 @item C-only Warning Options
265 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
266 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
267 -Wold-style-declaration  -Wold-style-definition @gol
268 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
269 -Wdeclaration-after-statement -Wpointer-sign}
270
271 @item Debugging Options
272 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
273 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
274 -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
275 -fdump-noaddr -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
276 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
277 -fdump-ipa-all -fdump-ipa-cgraph @gol
278 -fdump-tree-all @gol
279 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
280 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
281 -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
282 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
283 -fdump-tree-ch @gol
284 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
285 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
286 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
287 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
288 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
289 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
290 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
291 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
292 -fdump-tree-nrv -fdump-tree-vect @gol
293 -fdump-tree-sink @gol
294 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
295 -fdump-tree-salias @gol
296 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
297 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
298 -ftree-vectorizer-verbose=@var{n} @gol
299 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
300 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
301 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
302 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
303 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
304 -ftest-coverage  -ftime-report -fvar-tracking @gol
305 -g  -g@var{level}  -gcoff -gdwarf-2 @gol
306 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
307 -fno-merge-debug-strings -fdebug-prefix-map=@var{old}=@var{new} @gol
308 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
309 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
310 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
311 -print-multi-directory  -print-multi-lib @gol
312 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
313 -print-sysroot-headers-suffix @gol
314 -save-temps  -time}
315
316 @item Optimization Options
317 @xref{Optimize Options,,Options that Control Optimization}.
318 @gccoptlist{
319 -falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
320 -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
321 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
322 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
323 -fcheck-data-deps -fcprop-registers -fcrossjumping -fcse-follow-jumps @gol
324 -fcse-skip-blocks -fcx-limited-range -fdata-sections -fdce -fdce @gol
325 -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol
326 -fearly-inlining -fexpensive-optimizations -ffast-math @gol
327 -ffinite-math-only -ffloat-store -fforward-propagate @gol
328 -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol
329 -fgcse-sm -fif-conversion -fif-conversion2 -finline-functions @gol
330 -finline-functions-called-once -finline-limit=@var{n} @gol
331 -finline-small-functions -fipa-cp -fipa-marix-reorg -fipa-pta @gol 
332 -fipa-pure-const -fipa-reference -fipa-struct-reorg @gol
333 -fipa-type-escape -fivopts -fkeep-inline-functions -fkeep-static-consts @gol
334 -fmerge-all-constants -fmerge-constants -fmodulo-sched @gol
335 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap @gol
336 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline @gol
337 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
338 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
339 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
340 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
341 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
342 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol
343 -fprofile-generate -fprofile-use -fprofile-values -freciprocal-math @gol
344 -fregmove -frename-registers -freorder-blocks @gol
345 -freorder-blocks-and-partition -freorder-functions @gol
346 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
347 -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks @gol
348 -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous @gol
349 -fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
350 -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee @gol
351 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol
352 -fsplit-wide-types -fstack-protector -fstack-protector-all @gol
353 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer -ftree-ccp @gol
354 -ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-dce @gol
355 -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im @gol
356 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
357 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-reassoc -ftree-salias @gol
358 -ftree-sink -ftree-sra -ftree-store-ccp -ftree-ter @gol
359 -ftree-vect-loop-version -ftree-vectorize -ftree-vrp -funit-at-a-time @gol
360 -funroll-all-loops -funroll-loops -funsafe-loop-optimizations @gol
361 -funsafe-math-optimizations -funswitch-loops @gol
362 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
363 -fwhole-program @gol
364 --param @var{name}=@var{value}
365 -O  -O0  -O1  -O2  -O3  -Os}
366
367 @item Preprocessor Options
368 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
369 @gccoptlist{-A@var{question}=@var{answer} @gol
370 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
371 -C  -dD  -dI  -dM  -dN @gol
372 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
373 -idirafter @var{dir} @gol
374 -include @var{file}  -imacros @var{file} @gol
375 -iprefix @var{file}  -iwithprefix @var{dir} @gol
376 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
377 -imultilib @var{dir} -isysroot @var{dir} @gol
378 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
379 -P  -fworking-directory  -remap @gol
380 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
381 -Xpreprocessor @var{option}}
382
383 @item Assembler Option
384 @xref{Assembler Options,,Passing Options to the Assembler}.
385 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
386
387 @item Linker Options
388 @xref{Link Options,,Options for Linking}.
389 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
390 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
391 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
392 -Wl,@var{option}  -Xlinker @var{option} @gol
393 -u @var{symbol}}
394
395 @item Directory Options
396 @xref{Directory Options,,Options for Directory Search}.
397 @gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
398 -specs=@var{file}  -I- --sysroot=@var{dir}}
399
400 @item Target Options
401 @c I wrote this xref this way to avoid overfull hbox. -- rms
402 @xref{Target Options}.
403 @gccoptlist{-V @var{version}  -b @var{machine}}
404
405 @item Machine Dependent Options
406 @xref{Submodel Options,,Hardware Models and Configurations}.
407 @c This list is ordered alphanumerically by subsection name.
408 @c Try and put the significant identifier (CPU or system) first,
409 @c so users have a clue at guessing where the ones they want will be.
410
411 @emph{ARC Options}
412 @gccoptlist{-EB  -EL @gol
413 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
414 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
415
416 @emph{ARM Options}
417 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
418 -mabi=@var{name} @gol
419 -mapcs-stack-check  -mno-apcs-stack-check @gol
420 -mapcs-float  -mno-apcs-float @gol
421 -mapcs-reentrant  -mno-apcs-reentrant @gol
422 -msched-prolog  -mno-sched-prolog @gol
423 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
424 -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
425 -mthumb-interwork  -mno-thumb-interwork @gol
426 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
427 -mstructure-size-boundary=@var{n} @gol
428 -mabort-on-noreturn @gol
429 -mlong-calls  -mno-long-calls @gol
430 -msingle-pic-base  -mno-single-pic-base @gol
431 -mpic-register=@var{reg} @gol
432 -mnop-fun-dllimport @gol
433 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
434 -mpoke-function-name @gol
435 -mthumb  -marm @gol
436 -mtpcs-frame  -mtpcs-leaf-frame @gol
437 -mcaller-super-interworking  -mcallee-super-interworking @gol
438 -mtp=@var{name}}
439
440 @emph{AVR Options}
441 @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
442 -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}
443
444 @emph{Blackfin Options}
445 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
446 -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
447 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
448 -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
449 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
450 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
451 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
452 -mfast-fp -minline-plt}
453
454 @emph{CRIS Options}
455 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
456 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
457 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
458 -mstack-align  -mdata-align  -mconst-align @gol
459 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
460 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
461 -mmul-bug-workaround  -mno-mul-bug-workaround}
462
463 @emph{CRX Options}
464 @gccoptlist{-mmac -mpush-args}
465
466 @emph{Darwin Options}
467 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
468 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
469 -client_name  -compatibility_version  -current_version @gol
470 -dead_strip @gol
471 -dependency-file  -dylib_file  -dylinker_install_name @gol
472 -dynamic  -dynamiclib  -exported_symbols_list @gol
473 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
474 -force_flat_namespace  -headerpad_max_install_names @gol
475 -iframework @gol
476 -image_base  -init  -install_name  -keep_private_externs @gol
477 -multi_module  -multiply_defined  -multiply_defined_unused @gol
478 -noall_load   -no_dead_strip_inits_and_terms @gol
479 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
480 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
481 -private_bundle  -read_only_relocs  -sectalign @gol
482 -sectobjectsymbols  -whyload  -seg1addr @gol
483 -sectcreate  -sectobjectsymbols  -sectorder @gol
484 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
485 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
486 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
487 -single_module  -static  -sub_library  -sub_umbrella @gol
488 -twolevel_namespace  -umbrella  -undefined @gol
489 -unexported_symbols_list  -weak_reference_mismatches @gol
490 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
491 -mkernel -mone-byte-bool}
492
493 @emph{DEC Alpha Options}
494 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
495 -mieee  -mieee-with-inexact  -mieee-conformant @gol
496 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
497 -mtrap-precision=@var{mode}  -mbuild-constants @gol
498 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
499 -mbwx  -mmax  -mfix  -mcix @gol
500 -mfloat-vax  -mfloat-ieee @gol
501 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
502 -msmall-text  -mlarge-text @gol
503 -mmemory-latency=@var{time}}
504
505 @emph{DEC Alpha/VMS Options}
506 @gccoptlist{-mvms-return-codes}
507
508 @emph{FRV Options}
509 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
510 -mhard-float  -msoft-float @gol
511 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
512 -mdouble  -mno-double @gol
513 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
514 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
515 -mlinked-fp  -mlong-calls  -malign-labels @gol
516 -mlibrary-pic  -macc-4  -macc-8 @gol
517 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
518 -moptimize-membar -mno-optimize-membar @gol
519 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
520 -mvliw-branch  -mno-vliw-branch @gol
521 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
522 -mno-nested-cond-exec  -mtomcat-stats @gol
523 -mTLS -mtls @gol
524 -mcpu=@var{cpu}}
525
526 @emph{GNU/Linux Options}
527 @gccoptlist{-muclibc}
528
529 @emph{H8/300 Options}
530 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
531
532 @emph{HPPA Options}
533 @gccoptlist{-march=@var{architecture-type} @gol
534 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
535 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
536 -mfixed-range=@var{register-range} @gol
537 -mjump-in-delay -mlinker-opt -mlong-calls @gol
538 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
539 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
540 -mno-jump-in-delay  -mno-long-load-store @gol
541 -mno-portable-runtime  -mno-soft-float @gol
542 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
543 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
544 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
545 -munix=@var{unix-std}  -nolibdld  -static  -threads}
546
547 @emph{i386 and x86-64 Options}
548 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
549 -mfpmath=@var{unit} @gol
550 -masm=@var{dialect}  -mno-fancy-math-387 @gol
551 -mno-fp-ret-in-387  -msoft-float @gol
552 -mno-wide-multiply  -mrtd  -malign-double @gol
553 -mpreferred-stack-boundary=@var{num} -mcx16 -msahf -mrecip @gol
554 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 @gol
555 -msse4a -m3dnow -mpopcnt -mabm -msse5 @gol
556 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
557 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
558 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
559 -mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol
560 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
561 -mcmodel=@var{code-model} @gol
562 -m32  -m64 -mlarge-data-threshold=@var{num} @gol
563 -mfused-madd -mno-fused-madd}
564
565 @emph{IA-64 Options}
566 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
567 -mvolatile-asm-stop  -mregister-names  -mno-sdata @gol
568 -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
569 -minline-float-divide-max-throughput @gol
570 -minline-int-divide-min-latency @gol
571 -minline-int-divide-max-throughput  @gol
572 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
573 -mno-dwarf2-asm -mearly-stop-bits @gol
574 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
575 -mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol
576 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol
577 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
578 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol
579 -mno-sched-prefer-non-data-spec-insns @gol
580 -mno-sched-prefer-non-control-spec-insns @gol
581 -mno-sched-count-spec-in-critical-path}
582
583 @emph{M32R/D Options}
584 @gccoptlist{-m32r2 -m32rx -m32r @gol
585 -mdebug @gol
586 -malign-loops -mno-align-loops @gol
587 -missue-rate=@var{number} @gol
588 -mbranch-cost=@var{number} @gol
589 -mmodel=@var{code-size-model-type} @gol
590 -msdata=@var{sdata-type} @gol
591 -mno-flush-func -mflush-func=@var{name} @gol
592 -mno-flush-trap -mflush-trap=@var{number} @gol
593 -G @var{num}}
594
595 @emph{M32C Options}
596 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
597
598 @emph{M680x0 Options}
599 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
600 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
601 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
602 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
603 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
604 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
605 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
606 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}
607
608 @emph{M68hc1x Options}
609 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
610 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
611 -msoft-reg-count=@var{count}}
612
613 @emph{MCore Options}
614 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
615 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
616 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
617 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
618 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
619
620 @emph{MIPS Options}
621 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
622 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
623 -mips16  -mno-mips16  -mflip-mips16 @gol
624 -minterlink-mips16  -mno-interlink-mips16 @gol
625 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
626 -mshared  -mno-shared  -mxgot  -mno-xgot  -mgp32  -mgp64 @gol
627 -mfp32  -mfp64  -mhard-float  -msoft-float @gol
628 -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
629 -msmartmips  -mno-smartmips @gol
630 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
631 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
632 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
633 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
634 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
635 -membedded-data  -mno-embedded-data @gol
636 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
637 -mcode-readable=@var{setting} @gol
638 -msplit-addresses  -mno-split-addresses @gol
639 -mexplicit-relocs  -mno-explicit-relocs @gol
640 -mcheck-zero-division  -mno-check-zero-division @gol
641 -mdivide-traps  -mdivide-breaks @gol
642 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
643 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
644 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
645 -mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130  -mno-fix-vr4130 @gol
646 -mfix-sb1  -mno-fix-sb1 @gol
647 -mflush-func=@var{func}  -mno-flush-func @gol
648 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
649 -mfp-exceptions -mno-fp-exceptions @gol
650 -mvr4130-align -mno-vr4130-align}
651
652 @emph{MMIX Options}
653 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
654 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
655 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
656 -mno-base-addresses  -msingle-exit  -mno-single-exit}
657
658 @emph{MN10300 Options}
659 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
660 -mam33  -mno-am33 @gol
661 -mam33-2  -mno-am33-2 @gol
662 -mreturn-pointer-on-d0 @gol
663 -mno-crt0  -mrelax}
664
665 @emph{MT Options}
666 @gccoptlist{-mno-crt0 -mbacc -msim @gol
667 -march=@var{cpu-type} }
668
669 @emph{PDP-11 Options}
670 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
671 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
672 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
673 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
674 -mbranch-expensive  -mbranch-cheap @gol
675 -msplit  -mno-split  -munix-asm  -mdec-asm}
676
677 @emph{PowerPC Options}
678 See RS/6000 and PowerPC Options.
679
680 @emph{RS/6000 and PowerPC Options}
681 @gccoptlist{-mcpu=@var{cpu-type} @gol
682 -mtune=@var{cpu-type} @gol
683 -mpower  -mno-power  -mpower2  -mno-power2 @gol
684 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
685 -maltivec  -mno-altivec @gol
686 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
687 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
688 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd @gol
689 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
690 -mnew-mnemonics  -mold-mnemonics @gol
691 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
692 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
693 -malign-power  -malign-natural @gol
694 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
695 -mstring  -mno-string  -mupdate  -mno-update @gol
696 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
697 -mstrict-align  -mno-strict-align  -mrelocatable @gol
698 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
699 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
700 -mdynamic-no-pic  -maltivec  -mswdiv @gol
701 -mprioritize-restricted-insns=@var{priority} @gol
702 -msched-costly-dep=@var{dependence_type} @gol
703 -minsert-sched-nops=@var{scheme} @gol
704 -mcall-sysv  -mcall-netbsd @gol
705 -maix-struct-return  -msvr4-struct-return @gol
706 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
707 -misel -mno-isel @gol
708 -misel=yes  -misel=no @gol
709 -mspe -mno-spe @gol
710 -mspe=yes  -mspe=no @gol
711 -mpaired @gol
712 -mvrsave -mno-vrsave @gol
713 -mmulhw -mno-mulhw @gol
714 -mdlmzb -mno-dlmzb @gol
715 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
716 -mprototype  -mno-prototype @gol
717 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
718 -msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread}
719
720 @emph{S/390 and zSeries Options}
721 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
722 -mhard-float  -msoft-float -mlong-double-64 -mlong-double-128 @gol
723 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
724 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
725 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
726 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
727 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
728
729 @emph{Score Options}
730 @gccoptlist{-meb -mel @gol
731 -mnhwloop @gol
732 -muls @gol
733 -mmac @gol
734 -mscore5 -mscore5u -mscore7 -mscore7d}
735
736 @emph{SH Options}
737 @gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
738 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
739 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
740 -m5-64media  -m5-64media-nofpu @gol
741 -m5-32media  -m5-32media-nofpu @gol
742 -m5-compact  -m5-compact-nofpu @gol
743 -mb  -ml  -mdalign  -mrelax @gol
744 -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
745 -mieee  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
746 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
747 -mdivsi3_libfunc=@var{name}  @gol
748 -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
749  -minvalid-symbols}
750
751 @emph{SPARC Options}
752 @gccoptlist{-mcpu=@var{cpu-type} @gol
753 -mtune=@var{cpu-type} @gol
754 -mcmodel=@var{code-model} @gol
755 -m32  -m64  -mapp-regs  -mno-app-regs @gol
756 -mfaster-structs  -mno-faster-structs @gol
757 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
758 -mhard-quad-float  -msoft-quad-float @gol
759 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
760 -mstack-bias  -mno-stack-bias @gol
761 -munaligned-doubles  -mno-unaligned-doubles @gol
762 -mv8plus  -mno-v8plus  -mvis  -mno-vis
763 -threads -pthreads -pthread}
764
765 @emph{SPU Options}
766 @gccoptlist{-mwarn-reloc -merror-reloc @gol
767 -msafe-dma -munsafe-dma @gol
768 -mbranch-hints @gol
769 -msmall-mem -mlarge-mem -mstdmain @gol
770 -mfixed-range=@var{register-range}}
771
772 @emph{System V Options}
773 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
774
775 @emph{V850 Options}
776 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
777 -mprolog-function  -mno-prolog-function  -mspace @gol
778 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
779 -mapp-regs  -mno-app-regs @gol
780 -mdisable-callt  -mno-disable-callt @gol
781 -mv850e1 @gol
782 -mv850e @gol
783 -mv850  -mbig-switch}
784
785 @emph{VAX Options}
786 @gccoptlist{-mg  -mgnu  -munix}
787
788 @emph{VxWorks Options}
789 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
790 -Xbind-lazy  -Xbind-now}
791
792 @emph{x86-64 Options}
793 See i386 and x86-64 Options.
794
795 @emph{Xstormy16 Options}
796 @gccoptlist{-msim}
797
798 @emph{Xtensa Options}
799 @gccoptlist{-mconst16 -mno-const16 @gol
800 -mfused-madd  -mno-fused-madd @gol
801 -mtext-section-literals  -mno-text-section-literals @gol
802 -mtarget-align  -mno-target-align @gol
803 -mlongcalls  -mno-longcalls}
804
805 @emph{zSeries Options}
806 See S/390 and zSeries Options.
807
808 @item Code Generation Options
809 @xref{Code Gen Options,,Options for Code Generation Conventions}.
810 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
811 -ffixed-@var{reg}  -fexceptions @gol
812 -fnon-call-exceptions  -funwind-tables @gol
813 -fasynchronous-unwind-tables @gol
814 -finhibit-size-directive  -finstrument-functions @gol
815 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
816 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
817 -fno-common  -fno-ident @gol
818 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
819 -fno-jump-tables @gol
820 -frecord-gcc-switches @gol
821 -freg-struct-return  -fshort-enums @gol
822 -fshort-double  -fshort-wchar @gol
823 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
824 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
825 -fno-stack-limit  -fargument-alias  -fargument-noalias @gol
826 -fargument-noalias-global  -fargument-noalias-anything @gol
827 -fleading-underscore  -ftls-model=@var{model} @gol
828 -ftrapv  -fwrapv  -fbounds-check @gol
829 -fvisibility}
830 @end table
831
832 @menu
833 * Overall Options::     Controlling the kind of output:
834                         an executable, object files, assembler files,
835                         or preprocessed source.
836 * C Dialect Options::   Controlling the variant of C language compiled.
837 * C++ Dialect Options:: Variations on C++.
838 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
839                         and Objective-C++.
840 * Language Independent Options:: Controlling how diagnostics should be
841                         formatted.
842 * Warning Options::     How picky should the compiler be?
843 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
844 * Optimize Options::    How much optimization?
845 * Preprocessor Options:: Controlling header files and macro definitions.
846                          Also, getting dependency information for Make.
847 * Assembler Options::   Passing options to the assembler.
848 * Link Options::        Specifying libraries and so on.
849 * Directory Options::   Where to find header files and libraries.
850                         Where to find the compiler executable files.
851 * Spec Files::          How to pass switches to sub-processes.
852 * Target Options::      Running a cross-compiler, or an old version of GCC.
853 @end menu
854
855 @node Overall Options
856 @section Options Controlling the Kind of Output
857
858 Compilation can involve up to four stages: preprocessing, compilation
859 proper, assembly and linking, always in that order.  GCC is capable of
860 preprocessing and compiling several files either into several
861 assembler input files, or into one assembler input file; then each
862 assembler input file produces an object file, and linking combines all
863 the object files (those newly compiled, and those specified as input)
864 into an executable file.
865
866 @cindex file name suffix
867 For any given input file, the file name suffix determines what kind of
868 compilation is done:
869
870 @table @gcctabopt
871 @item @var{file}.c
872 C source code which must be preprocessed.
873
874 @item @var{file}.i
875 C source code which should not be preprocessed.
876
877 @item @var{file}.ii
878 C++ source code which should not be preprocessed.
879
880 @item @var{file}.m
881 Objective-C source code.  Note that you must link with the @file{libobjc}
882 library to make an Objective-C program work.
883
884 @item @var{file}.mi
885 Objective-C source code which should not be preprocessed.
886
887 @item @var{file}.mm
888 @itemx @var{file}.M
889 Objective-C++ source code.  Note that you must link with the @file{libobjc}
890 library to make an Objective-C++ program work.  Note that @samp{.M} refers
891 to a literal capital M@.
892
893 @item @var{file}.mii
894 Objective-C++ source code which should not be preprocessed.
895
896 @item @var{file}.h
897 C, C++, Objective-C or Objective-C++ header file to be turned into a
898 precompiled header.
899
900 @item @var{file}.cc
901 @itemx @var{file}.cp
902 @itemx @var{file}.cxx
903 @itemx @var{file}.cpp
904 @itemx @var{file}.CPP
905 @itemx @var{file}.c++
906 @itemx @var{file}.C
907 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
908 the last two letters must both be literally @samp{x}.  Likewise,
909 @samp{.C} refers to a literal capital C@.
910
911 @item @var{file}.mm
912 @itemx @var{file}.M
913 Objective-C++ source code which must be preprocessed.
914
915 @item @var{file}.mii
916 Objective-C++ source code which should not be preprocessed.
917
918 @item @var{file}.hh
919 @itemx @var{file}.H
920 @itemx @var{file}.hp
921 @itemx @var{file}.hxx
922 @itemx @var{file}.hpp
923 @itemx @var{file}.HPP
924 @itemx @var{file}.h++
925 @itemx @var{file}.tcc
926 C++ header file to be turned into a precompiled header.
927
928 @item @var{file}.f
929 @itemx @var{file}.for
930 @itemx @var{file}.FOR
931 Fixed form Fortran source code which should not be preprocessed.
932
933 @item @var{file}.F
934 @itemx @var{file}.fpp
935 @itemx @var{file}.FPP
936 Fixed form Fortran source code which must be preprocessed (with the traditional
937 preprocessor).
938
939 @item @var{file}.f90
940 @itemx @var{file}.f95
941 Free form Fortran source code which should not be preprocessed.
942
943 @item @var{file}.F90
944 @itemx @var{file}.F95
945 Free form Fortran source code which must be preprocessed (with the
946 traditional preprocessor).
947
948 @c FIXME: Descriptions of Java file types.
949 @c @var{file}.java
950 @c @var{file}.class
951 @c @var{file}.zip
952 @c @var{file}.jar
953
954 @item @var{file}.ads
955 Ada source code file which contains a library unit declaration (a
956 declaration of a package, subprogram, or generic, or a generic
957 instantiation), or a library unit renaming declaration (a package,
958 generic, or subprogram renaming declaration).  Such files are also
959 called @dfn{specs}.
960
961 @itemx @var{file}.adb
962 Ada source code file containing a library unit body (a subprogram or
963 package body).  Such files are also called @dfn{bodies}.
964
965 @c GCC also knows about some suffixes for languages not yet included:
966 @c Pascal:
967 @c @var{file}.p
968 @c @var{file}.pas
969 @c Ratfor:
970 @c @var{file}.r
971
972 @item @var{file}.s
973 Assembler code.
974
975 @item @var{file}.S
976 @itemx @var{file}.sx
977 Assembler code which must be preprocessed.
978
979 @item @var{other}
980 An object file to be fed straight into linking.
981 Any file name with no recognized suffix is treated this way.
982 @end table
983
984 @opindex x
985 You can specify the input language explicitly with the @option{-x} option:
986
987 @table @gcctabopt
988 @item -x @var{language}
989 Specify explicitly the @var{language} for the following input files
990 (rather than letting the compiler choose a default based on the file
991 name suffix).  This option applies to all following input files until
992 the next @option{-x} option.  Possible values for @var{language} are:
993 @smallexample
994 c  c-header  c-cpp-output
995 c++  c++-header  c++-cpp-output
996 objective-c  objective-c-header  objective-c-cpp-output
997 objective-c++ objective-c++-header objective-c++-cpp-output
998 assembler  assembler-with-cpp
999 ada
1000 f95  f95-cpp-input
1001 java
1002 treelang
1003 @end smallexample
1004
1005 @item -x none
1006 Turn off any specification of a language, so that subsequent files are
1007 handled according to their file name suffixes (as they are if @option{-x}
1008 has not been used at all).
1009
1010 @item -pass-exit-codes
1011 @opindex pass-exit-codes
1012 Normally the @command{gcc} program will exit with the code of 1 if any
1013 phase of the compiler returns a non-success return code.  If you specify
1014 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
1015 numerically highest error produced by any phase that returned an error
1016 indication.  The C, C++, and Fortran frontends return 4, if an internal
1017 compiler error is encountered.
1018 @end table
1019
1020 If you only want some of the stages of compilation, you can use
1021 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1022 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1023 @command{gcc} is to stop.  Note that some combinations (for example,
1024 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1025
1026 @table @gcctabopt
1027 @item -c
1028 @opindex c
1029 Compile or assemble the source files, but do not link.  The linking
1030 stage simply is not done.  The ultimate output is in the form of an
1031 object file for each source file.
1032
1033 By default, the object file name for a source file is made by replacing
1034 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1035
1036 Unrecognized input files, not requiring compilation or assembly, are
1037 ignored.
1038
1039 @item -S
1040 @opindex S
1041 Stop after the stage of compilation proper; do not assemble.  The output
1042 is in the form of an assembler code file for each non-assembler input
1043 file specified.
1044
1045 By default, the assembler file name for a source file is made by
1046 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1047
1048 Input files that don't require compilation are ignored.
1049
1050 @item -E
1051 @opindex E
1052 Stop after the preprocessing stage; do not run the compiler proper.  The
1053 output is in the form of preprocessed source code, which is sent to the
1054 standard output.
1055
1056 Input files which don't require preprocessing are ignored.
1057
1058 @cindex output file option
1059 @item -o @var{file}
1060 @opindex o
1061 Place output in file @var{file}.  This applies regardless to whatever
1062 sort of output is being produced, whether it be an executable file,
1063 an object file, an assembler file or preprocessed C code.
1064
1065 If @option{-o} is not specified, the default is to put an executable
1066 file in @file{a.out}, the object file for
1067 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1068 assembler file in @file{@var{source}.s}, a precompiled header file in
1069 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1070 standard output.
1071
1072 @item -v
1073 @opindex v
1074 Print (on standard error output) the commands executed to run the stages
1075 of compilation.  Also print the version number of the compiler driver
1076 program and of the preprocessor and the compiler proper.
1077
1078 @item -###
1079 @opindex ###
1080 Like @option{-v} except the commands are not executed and all command
1081 arguments are quoted.  This is useful for shell scripts to capture the
1082 driver-generated command lines.
1083
1084 @item -pipe
1085 @opindex pipe
1086 Use pipes rather than temporary files for communication between the
1087 various stages of compilation.  This fails to work on some systems where
1088 the assembler is unable to read from a pipe; but the GNU assembler has
1089 no trouble.
1090
1091 @item -combine
1092 @opindex combine
1093 If you are compiling multiple source files, this option tells the driver
1094 to pass all the source files to the compiler at once (for those
1095 languages for which the compiler can handle this).  This will allow
1096 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1097 language for which this is supported is C@.  If you pass source files for
1098 multiple languages to the driver, using this option, the driver will invoke
1099 the compiler(s) that support IMA once each, passing each compiler all the
1100 source files appropriate for it.  For those languages that do not support
1101 IMA this option will be ignored, and the compiler will be invoked once for
1102 each source file in that language.  If you use this option in conjunction
1103 with @option{-save-temps}, the compiler will generate multiple
1104 pre-processed files
1105 (one for each source file), but only one (combined) @file{.o} or
1106 @file{.s} file.
1107
1108 @item --help
1109 @opindex help
1110 Print (on the standard output) a description of the command line options
1111 understood by @command{gcc}.  If the @option{-v} option is also specified
1112 then @option{--help} will also be passed on to the various processes
1113 invoked by @command{gcc}, so that they can display the command line options
1114 they accept.  If the @option{-Wextra} option has also been specified
1115 (prior to the @option{--help} option), then command line options which
1116 have no documentation associated with them will also be displayed.
1117
1118 @item --target-help
1119 @opindex target-help
1120 Print (on the standard output) a description of target-specific command
1121 line options for each tool.  For some targets extra target-specific
1122 information may also be printed.
1123
1124 @item --help=@var{class}@r{[},@var{qualifier}@r{]}
1125 Print (on the standard output) a description of the command line
1126 options understood by the compiler that fit into a specific class.
1127 The class can be one of @samp{optimizers}, @samp{warnings}, @samp{target},
1128 @samp{params}, or @var{language}:
1129
1130 @table @asis
1131 @item @samp{optimizers}
1132 This will display all of the optimization options supported by the
1133 compiler.
1134
1135 @item @samp{warnings}
1136 This will display all of the options controlling warning messages
1137 produced by the compiler.
1138
1139 @item @samp{target}
1140 This will display target-specific options.  Unlike the
1141 @option{--target-help} option however, target-specific options of the
1142 linker and assembler will not be displayed.  This is because those
1143 tools do not currently support the extended @option{--help=} syntax.
1144
1145 @item @samp{params}
1146 This will display the values recognized by the @option{--param}
1147 option.
1148
1149 @item @var{language}
1150 This will display the options supported for @var{language}, where 
1151 @var{language} is the name of one of the languages supported in this 
1152 version of GCC.
1153
1154 @item @samp{common}
1155 This will display the options that are common to all languages.
1156 @end table
1157
1158 It is possible to further refine the output of the @option{--help=}
1159 option by adding a comma separated list of qualifiers after the
1160 class.  These can be any from the following list:
1161
1162 @table @asis
1163 @item @samp{undocumented}
1164 Display only those options which are undocumented.
1165
1166 @item @samp{joined}
1167 Display options which take an argument that appears after an equal
1168 sign in the same continuous piece of text, such as:
1169 @samp{--help=target}.
1170
1171 @item @samp{separate}
1172 Display options which take an argument that appears as a separate word
1173 following the original option, such as: @samp{-o output-file}.
1174 @end table
1175
1176 Thus for example to display all the undocumented target-specific
1177 switches supported by the compiler the following can be used:
1178
1179 @smallexample
1180 --help=target,undocumented
1181 @end smallexample
1182
1183 The sense of a qualifier can be inverted by prefixing it with the
1184 @var{^} character, so for example to display all binary warning
1185 options (i.e. ones that are either on or off and that do not take an
1186 argument), which have a description the following can be used:
1187
1188 @smallexample
1189 --help=warnings,^joined,^undocumented
1190 @end smallexample
1191
1192 A class can also be used as a qualifier, although this usually
1193 restricts the output by so much that there is nothing to display.  One
1194 case where it does work however is when one of the classes is
1195 @var{target}.  So for example to display all the target-specific
1196 optimization options the following can be used:
1197
1198 @smallexample
1199 --help=target,optimizers
1200 @end smallexample
1201
1202 The @option{--help=} option can be repeated on the command line.  Each
1203 successive use will display its requested class of options, skipping
1204 those that have already been displayed.
1205
1206 If the @option{-Q} option appears on the command line before the
1207 @option{--help=} option, then the descriptive text displayed by
1208 @option{--help=} is changed.  Instead of describing the displayed
1209 options, an indication is given as to whether the option is enabled,
1210 disabled or set to a specific value (assuming that the compiler
1211 knows this at the point where the @option{--help=} option is used).
1212
1213 Here is a truncated example from the ARM port of @command{gcc}:
1214
1215 @smallexample
1216   % gcc -Q -mabi=2 --help=target -c
1217   The following options are target specific:
1218   -mabi=                                2
1219   -mabort-on-noreturn                   [disabled]
1220   -mapcs                                [disabled]
1221 @end smallexample
1222
1223 The output is sensitive to the effects of previous command line
1224 options, so for example it is possible to find out which optimizations
1225 are enabled at @option{-O2} by using:
1226
1227 @smallexample
1228 -O2 --help=optimizers
1229 @end smallexample
1230
1231 Alternatively you can discover which binary optimizations are enabled
1232 by @option{-O3} by using:
1233
1234 @smallexample
1235 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1236 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1237 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1238 @end smallexample
1239
1240 @item --version
1241 @opindex version
1242 Display the version number and copyrights of the invoked GCC@.
1243
1244 @include @value{srcdir}/../libiberty/at-file.texi
1245 @end table
1246
1247 @node Invoking G++
1248 @section Compiling C++ Programs
1249
1250 @cindex suffixes for C++ source
1251 @cindex C++ source file suffixes
1252 C++ source files conventionally use one of the suffixes @samp{.C},
1253 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1254 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1255 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1256 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1257 files with these names and compiles them as C++ programs even if you
1258 call the compiler the same way as for compiling C programs (usually
1259 with the name @command{gcc}).
1260
1261 @findex g++
1262 @findex c++
1263 However, the use of @command{gcc} does not add the C++ library.
1264 @command{g++} is a program that calls GCC and treats @samp{.c},
1265 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1266 files unless @option{-x} is used, and automatically specifies linking
1267 against the C++ library.  This program is also useful when
1268 precompiling a C header file with a @samp{.h} extension for use in C++
1269 compilations.  On many systems, @command{g++} is also installed with
1270 the name @command{c++}.
1271
1272 @cindex invoking @command{g++}
1273 When you compile C++ programs, you may specify many of the same
1274 command-line options that you use for compiling programs in any
1275 language; or command-line options meaningful for C and related
1276 languages; or options that are meaningful only for C++ programs.
1277 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1278 explanations of options for languages related to C@.
1279 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1280 explanations of options that are meaningful only for C++ programs.
1281
1282 @node C Dialect Options
1283 @section Options Controlling C Dialect
1284 @cindex dialect options
1285 @cindex language dialect options
1286 @cindex options, dialect
1287
1288 The following options control the dialect of C (or languages derived
1289 from C, such as C++, Objective-C and Objective-C++) that the compiler
1290 accepts:
1291
1292 @table @gcctabopt
1293 @cindex ANSI support
1294 @cindex ISO support
1295 @item -ansi
1296 @opindex ansi
1297 In C mode, support all ISO C90 programs.  In C++ mode,
1298 remove GNU extensions that conflict with ISO C++.
1299
1300 This turns off certain features of GCC that are incompatible with ISO
1301 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1302 such as the @code{asm} and @code{typeof} keywords, and
1303 predefined macros such as @code{unix} and @code{vax} that identify the
1304 type of system you are using.  It also enables the undesirable and
1305 rarely used ISO trigraph feature.  For the C compiler,
1306 it disables recognition of C++ style @samp{//} comments as well as
1307 the @code{inline} keyword.
1308
1309 The alternate keywords @code{__asm__}, @code{__extension__},
1310 @code{__inline__} and @code{__typeof__} continue to work despite
1311 @option{-ansi}.  You would not want to use them in an ISO C program, of
1312 course, but it is useful to put them in header files that might be included
1313 in compilations done with @option{-ansi}.  Alternate predefined macros
1314 such as @code{__unix__} and @code{__vax__} are also available, with or
1315 without @option{-ansi}.
1316
1317 The @option{-ansi} option does not cause non-ISO programs to be
1318 rejected gratuitously.  For that, @option{-pedantic} is required in
1319 addition to @option{-ansi}.  @xref{Warning Options}.
1320
1321 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1322 option is used.  Some header files may notice this macro and refrain
1323 from declaring certain functions or defining certain macros that the
1324 ISO standard doesn't call for; this is to avoid interfering with any
1325 programs that might use these names for other things.
1326
1327 Functions which would normally be built in but do not have semantics
1328 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1329 functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
1330 built-in functions provided by GCC}, for details of the functions
1331 affected.
1332
1333 @item -std=
1334 @opindex std
1335 Determine the language standard.  This option is currently only
1336 supported when compiling C or C++.  A value for this option must be
1337 provided; possible values are
1338
1339 @table @samp
1340 @item c89
1341 @itemx iso9899:1990
1342 ISO C90 (same as @option{-ansi}).
1343
1344 @item iso9899:199409
1345 ISO C90 as modified in amendment 1.
1346
1347 @item c99
1348 @itemx c9x
1349 @itemx iso9899:1999
1350 @itemx iso9899:199x
1351 ISO C99.  Note that this standard is not yet fully supported; see
1352 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1353 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1354
1355 @item gnu89
1356 Default, ISO C90 plus GNU extensions (including some C99 features).
1357
1358 @item gnu99
1359 @itemx gnu9x
1360 ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
1361 this will become the default.  The name @samp{gnu9x} is deprecated.
1362
1363 @item c++98
1364 The 1998 ISO C++ standard plus amendments.
1365
1366 @item gnu++98
1367 The same as @option{-std=c++98} plus GNU extensions.  This is the
1368 default for C++ code.
1369
1370 @item c++0x
1371 The working draft of the upcoming ISO C++0x standard. This option
1372 enables experimental features that are likely to be included in
1373 C++0x. The working draft is constantly changing, and any feature that is
1374 enabled by this flag may be removed from future versions of GCC if it is
1375 not part of the C++0x standard.
1376
1377 @item gnu++0x
1378 The same as @option{-std=c++0x} plus GNU extensions. As with
1379 @option{-std=c++0x}, this option enables experimental features that may
1380 be removed in future versions of GCC.
1381 @end table
1382
1383 Even when this option is not specified, you can still use some of the
1384 features of newer standards in so far as they do not conflict with
1385 previous C standards.  For example, you may use @code{__restrict__} even
1386 when @option{-std=c99} is not specified.
1387
1388 The @option{-std} options specifying some version of ISO C have the same
1389 effects as @option{-ansi}, except that features that were not in ISO C90
1390 but are in the specified version (for example, @samp{//} comments and
1391 the @code{inline} keyword in ISO C99) are not disabled.
1392
1393 @xref{Standards,,Language Standards Supported by GCC}, for details of
1394 these standard versions.
1395
1396 @item -fgnu89-inline
1397 @opindex fgnu89-inline
1398 The option @option{-fgnu89-inline} tells GCC to use the traditional
1399 GNU semantics for @code{inline} functions when in C99 mode.
1400 @xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1401 is accepted and ignored by GCC versions 4.1.3 up to but not including
1402 4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1403 C99 mode.  Using this option is roughly equivalent to adding the
1404 @code{gnu_inline} function attribute to all inline functions
1405 (@pxref{Function Attributes}).
1406
1407 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1408 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1409 specifies the default behavior).  This option was first supported in
1410 GCC 4.3.  This option is not supported in C89 or gnu89 mode.
1411
1412 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1413 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1414 in effect for @code{inline} functions.  @xref{Common Predefined
1415 Macros,,,cpp,The C Preprocessor}.
1416
1417 @item -aux-info @var{filename}
1418 @opindex aux-info
1419 Output to the given filename prototyped declarations for all functions
1420 declared and/or defined in a translation unit, including those in header
1421 files.  This option is silently ignored in any language other than C@.
1422
1423 Besides declarations, the file indicates, in comments, the origin of
1424 each declaration (source file and line), whether the declaration was
1425 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1426 @samp{O} for old, respectively, in the first character after the line
1427 number and the colon), and whether it came from a declaration or a
1428 definition (@samp{C} or @samp{F}, respectively, in the following
1429 character).  In the case of function definitions, a K&R-style list of
1430 arguments followed by their declarations is also provided, inside
1431 comments, after the declaration.
1432
1433 @item -fno-asm
1434 @opindex fno-asm
1435 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1436 keyword, so that code can use these words as identifiers.  You can use
1437 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1438 instead.  @option{-ansi} implies @option{-fno-asm}.
1439
1440 In C++, this switch only affects the @code{typeof} keyword, since
1441 @code{asm} and @code{inline} are standard keywords.  You may want to
1442 use the @option{-fno-gnu-keywords} flag instead, which has the same
1443 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1444 switch only affects the @code{asm} and @code{typeof} keywords, since
1445 @code{inline} is a standard keyword in ISO C99.
1446
1447 @item -fno-builtin
1448 @itemx -fno-builtin-@var{function}
1449 @opindex fno-builtin
1450 @cindex built-in functions
1451 Don't recognize built-in functions that do not begin with
1452 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1453 functions provided by GCC}, for details of the functions affected,
1454 including those which are not built-in functions when @option{-ansi} or
1455 @option{-std} options for strict ISO C conformance are used because they
1456 do not have an ISO standard meaning.
1457
1458 GCC normally generates special code to handle certain built-in functions
1459 more efficiently; for instance, calls to @code{alloca} may become single
1460 instructions that adjust the stack directly, and calls to @code{memcpy}
1461 may become inline copy loops.  The resulting code is often both smaller
1462 and faster, but since the function calls no longer appear as such, you
1463 cannot set a breakpoint on those calls, nor can you change the behavior
1464 of the functions by linking with a different library.  In addition,
1465 when a function is recognized as a built-in function, GCC may use
1466 information about that function to warn about problems with calls to
1467 that function, or to generate more efficient code, even if the
1468 resulting code still contains calls to that function.  For example,
1469 warnings are given with @option{-Wformat} for bad calls to
1470 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1471 known not to modify global memory.
1472
1473 With the @option{-fno-builtin-@var{function}} option
1474 only the built-in function @var{function} is
1475 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1476 function is named this is not built-in in this version of GCC, this
1477 option is ignored.  There is no corresponding
1478 @option{-fbuiltin-@var{function}} option; if you wish to enable
1479 built-in functions selectively when using @option{-fno-builtin} or
1480 @option{-ffreestanding}, you may define macros such as:
1481
1482 @smallexample
1483 #define abs(n)          __builtin_abs ((n))
1484 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1485 @end smallexample
1486
1487 @item -fhosted
1488 @opindex fhosted
1489 @cindex hosted environment
1490
1491 Assert that compilation takes place in a hosted environment.  This implies
1492 @option{-fbuiltin}.  A hosted environment is one in which the
1493 entire standard library is available, and in which @code{main} has a return
1494 type of @code{int}.  Examples are nearly everything except a kernel.
1495 This is equivalent to @option{-fno-freestanding}.
1496
1497 @item -ffreestanding
1498 @opindex ffreestanding
1499 @cindex hosted environment
1500
1501 Assert that compilation takes place in a freestanding environment.  This
1502 implies @option{-fno-builtin}.  A freestanding environment
1503 is one in which the standard library may not exist, and program startup may
1504 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1505 This is equivalent to @option{-fno-hosted}.
1506
1507 @xref{Standards,,Language Standards Supported by GCC}, for details of
1508 freestanding and hosted environments.
1509
1510 @item -fopenmp
1511 @opindex fopenmp
1512 @cindex openmp parallel
1513 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1514 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1515 compiler generates parallel code according to the OpenMP Application
1516 Program Interface v2.5 @w{@uref{http://www.openmp.org/}}.  This option
1517 implies @option{-pthread}, and thus is only supported on targets that
1518 have support for @option{-pthread}.
1519
1520 @item -fms-extensions
1521 @opindex fms-extensions
1522 Accept some non-standard constructs used in Microsoft header files.
1523
1524 Some cases of unnamed fields in structures and unions are only
1525 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1526 fields within structs/unions}, for details.
1527
1528 @item -trigraphs
1529 @opindex trigraphs
1530 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1531 options for strict ISO C conformance) implies @option{-trigraphs}.
1532
1533 @item -no-integrated-cpp
1534 @opindex no-integrated-cpp
1535 Performs a compilation in two passes: preprocessing and compiling.  This
1536 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1537 @option{-B} option.  The user supplied compilation step can then add in
1538 an additional preprocessing step after normal preprocessing but before
1539 compiling.  The default is to use the integrated cpp (internal cpp)
1540
1541 The semantics of this option will change if "cc1", "cc1plus", and
1542 "cc1obj" are merged.
1543
1544 @cindex traditional C language
1545 @cindex C language, traditional
1546 @item -traditional
1547 @itemx -traditional-cpp
1548 @opindex traditional-cpp
1549 @opindex traditional
1550 Formerly, these options caused GCC to attempt to emulate a pre-standard
1551 C compiler.  They are now only supported with the @option{-E} switch.
1552 The preprocessor continues to support a pre-standard mode.  See the GNU
1553 CPP manual for details.
1554
1555 @item -fcond-mismatch
1556 @opindex fcond-mismatch
1557 Allow conditional expressions with mismatched types in the second and
1558 third arguments.  The value of such an expression is void.  This option
1559 is not supported for C++.
1560
1561 @item -flax-vector-conversions
1562 @opindex flax-vector-conversions
1563 Allow implicit conversions between vectors with differing numbers of
1564 elements and/or incompatible element types.  This option should not be
1565 used for new code.
1566
1567 @item -funsigned-char
1568 @opindex funsigned-char
1569 Let the type @code{char} be unsigned, like @code{unsigned char}.
1570
1571 Each kind of machine has a default for what @code{char} should
1572 be.  It is either like @code{unsigned char} by default or like
1573 @code{signed char} by default.
1574
1575 Ideally, a portable program should always use @code{signed char} or
1576 @code{unsigned char} when it depends on the signedness of an object.
1577 But many programs have been written to use plain @code{char} and
1578 expect it to be signed, or expect it to be unsigned, depending on the
1579 machines they were written for.  This option, and its inverse, let you
1580 make such a program work with the opposite default.
1581
1582 The type @code{char} is always a distinct type from each of
1583 @code{signed char} or @code{unsigned char}, even though its behavior
1584 is always just like one of those two.
1585
1586 @item -fsigned-char
1587 @opindex fsigned-char
1588 Let the type @code{char} be signed, like @code{signed char}.
1589
1590 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1591 the negative form of @option{-funsigned-char}.  Likewise, the option
1592 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1593
1594 @item -fsigned-bitfields
1595 @itemx -funsigned-bitfields
1596 @itemx -fno-signed-bitfields
1597 @itemx -fno-unsigned-bitfields
1598 @opindex fsigned-bitfields
1599 @opindex funsigned-bitfields
1600 @opindex fno-signed-bitfields
1601 @opindex fno-unsigned-bitfields
1602 These options control whether a bit-field is signed or unsigned, when the
1603 declaration does not use either @code{signed} or @code{unsigned}.  By
1604 default, such a bit-field is signed, because this is consistent: the
1605 basic integer types such as @code{int} are signed types.
1606 @end table
1607
1608 @node C++ Dialect Options
1609 @section Options Controlling C++ Dialect
1610
1611 @cindex compiler options, C++
1612 @cindex C++ options, command line
1613 @cindex options, C++
1614 This section describes the command-line options that are only meaningful
1615 for C++ programs; but you can also use most of the GNU compiler options
1616 regardless of what language your program is in.  For example, you
1617 might compile a file @code{firstClass.C} like this:
1618
1619 @smallexample
1620 g++ -g -frepo -O -c firstClass.C
1621 @end smallexample
1622
1623 @noindent
1624 In this example, only @option{-frepo} is an option meant
1625 only for C++ programs; you can use the other options with any
1626 language supported by GCC@.
1627
1628 Here is a list of options that are @emph{only} for compiling C++ programs:
1629
1630 @table @gcctabopt
1631
1632 @item -fabi-version=@var{n}
1633 @opindex fabi-version
1634 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1635 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1636 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1637 the version that conforms most closely to the C++ ABI specification.
1638 Therefore, the ABI obtained using version 0 will change as ABI bugs
1639 are fixed.
1640
1641 The default is version 2.
1642
1643 @item -fno-access-control
1644 @opindex fno-access-control
1645 Turn off all access checking.  This switch is mainly useful for working
1646 around bugs in the access control code.
1647
1648 @item -fcheck-new
1649 @opindex fcheck-new
1650 Check that the pointer returned by @code{operator new} is non-null
1651 before attempting to modify the storage allocated.  This check is
1652 normally unnecessary because the C++ standard specifies that
1653 @code{operator new} will only return @code{0} if it is declared
1654 @samp{throw()}, in which case the compiler will always check the
1655 return value even without this option.  In all other cases, when
1656 @code{operator new} has a non-empty exception specification, memory
1657 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1658 @samp{new (nothrow)}.
1659
1660 @item -fconserve-space
1661 @opindex fconserve-space
1662 Put uninitialized or runtime-initialized global variables into the
1663 common segment, as C does.  This saves space in the executable at the
1664 cost of not diagnosing duplicate definitions.  If you compile with this
1665 flag and your program mysteriously crashes after @code{main()} has
1666 completed, you may have an object that is being destroyed twice because
1667 two definitions were merged.
1668
1669 This option is no longer useful on most targets, now that support has
1670 been added for putting variables into BSS without making them common.
1671
1672 @item -ffriend-injection
1673 @opindex ffriend-injection
1674 Inject friend functions into the enclosing namespace, so that they are
1675 visible outside the scope of the class in which they are declared.
1676 Friend functions were documented to work this way in the old Annotated
1677 C++ Reference Manual, and versions of G++ before 4.1 always worked
1678 that way.  However, in ISO C++ a friend function which is not declared
1679 in an enclosing scope can only be found using argument dependent
1680 lookup.  This option causes friends to be injected as they were in
1681 earlier releases.
1682
1683 This option is for compatibility, and may be removed in a future
1684 release of G++.
1685
1686 @item -fno-elide-constructors
1687 @opindex fno-elide-constructors
1688 The C++ standard allows an implementation to omit creating a temporary
1689 which is only used to initialize another object of the same type.
1690 Specifying this option disables that optimization, and forces G++ to
1691 call the copy constructor in all cases.
1692
1693 @item -fno-enforce-eh-specs
1694 @opindex fno-enforce-eh-specs
1695 Don't generate code to check for violation of exception specifications
1696 at runtime.  This option violates the C++ standard, but may be useful
1697 for reducing code size in production builds, much like defining
1698 @samp{NDEBUG}.  This does not give user code permission to throw
1699 exceptions in violation of the exception specifications; the compiler
1700 will still optimize based on the specifications, so throwing an
1701 unexpected exception will result in undefined behavior.
1702
1703 @item -ffor-scope
1704 @itemx -fno-for-scope
1705 @opindex ffor-scope
1706 @opindex fno-for-scope
1707 If @option{-ffor-scope} is specified, the scope of variables declared in
1708 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1709 as specified by the C++ standard.
1710 If @option{-fno-for-scope} is specified, the scope of variables declared in
1711 a @i{for-init-statement} extends to the end of the enclosing scope,
1712 as was the case in old versions of G++, and other (traditional)
1713 implementations of C++.
1714
1715 The default if neither flag is given to follow the standard,
1716 but to allow and give a warning for old-style code that would
1717 otherwise be invalid, or have different behavior.
1718
1719 @item -fno-gnu-keywords
1720 @opindex fno-gnu-keywords
1721 Do not recognize @code{typeof} as a keyword, so that code can use this
1722 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1723 @option{-ansi} implies @option{-fno-gnu-keywords}.
1724
1725 @item -fno-implicit-templates
1726 @opindex fno-implicit-templates
1727 Never emit code for non-inline templates which are instantiated
1728 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1729 @xref{Template Instantiation}, for more information.
1730
1731 @item -fno-implicit-inline-templates
1732 @opindex fno-implicit-inline-templates
1733 Don't emit code for implicit instantiations of inline templates, either.
1734 The default is to handle inlines differently so that compiles with and
1735 without optimization will need the same set of explicit instantiations.
1736
1737 @item -fno-implement-inlines
1738 @opindex fno-implement-inlines
1739 To save space, do not emit out-of-line copies of inline functions
1740 controlled by @samp{#pragma implementation}.  This will cause linker
1741 errors if these functions are not inlined everywhere they are called.
1742
1743 @item -fms-extensions
1744 @opindex fms-extensions
1745 Disable pedantic warnings about constructs used in MFC, such as implicit
1746 int and getting a pointer to member function via non-standard syntax.
1747
1748 @item -fno-nonansi-builtins
1749 @opindex fno-nonansi-builtins
1750 Disable built-in declarations of functions that are not mandated by
1751 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1752 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1753
1754 @item -fno-operator-names
1755 @opindex fno-operator-names
1756 Do not treat the operator name keywords @code{and}, @code{bitand},
1757 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1758 synonyms as keywords.
1759
1760 @item -fno-optional-diags
1761 @opindex fno-optional-diags
1762 Disable diagnostics that the standard says a compiler does not need to
1763 issue.  Currently, the only such diagnostic issued by G++ is the one for
1764 a name having multiple meanings within a class.
1765
1766 @item -fpermissive
1767 @opindex fpermissive
1768 Downgrade some diagnostics about nonconformant code from errors to
1769 warnings.  Thus, using @option{-fpermissive} will allow some
1770 nonconforming code to compile.
1771
1772 @item -frepo
1773 @opindex frepo
1774 Enable automatic template instantiation at link time.  This option also
1775 implies @option{-fno-implicit-templates}.  @xref{Template
1776 Instantiation}, for more information.
1777
1778 @item -fno-rtti
1779 @opindex fno-rtti
1780 Disable generation of information about every class with virtual
1781 functions for use by the C++ runtime type identification features
1782 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1783 of the language, you can save some space by using this flag.  Note that
1784 exception handling uses the same information, but it will generate it as
1785 needed. The @samp{dynamic_cast} operator can still be used for casts that
1786 do not require runtime type information, i.e. casts to @code{void *} or to
1787 unambiguous base classes.
1788
1789 @item -fstats
1790 @opindex fstats
1791 Emit statistics about front-end processing at the end of the compilation.
1792 This information is generally only useful to the G++ development team.
1793
1794 @item -ftemplate-depth-@var{n}
1795 @opindex ftemplate-depth
1796 Set the maximum instantiation depth for template classes to @var{n}.
1797 A limit on the template instantiation depth is needed to detect
1798 endless recursions during template class instantiation.  ANSI/ISO C++
1799 conforming programs must not rely on a maximum depth greater than 17.
1800
1801 @item -fno-threadsafe-statics
1802 @opindex fno-threadsafe-statics
1803 Do not emit the extra code to use the routines specified in the C++
1804 ABI for thread-safe initialization of local statics.  You can use this
1805 option to reduce code size slightly in code that doesn't need to be
1806 thread-safe.
1807
1808 @item -fuse-cxa-atexit
1809 @opindex fuse-cxa-atexit
1810 Register destructors for objects with static storage duration with the
1811 @code{__cxa_atexit} function rather than the @code{atexit} function.
1812 This option is required for fully standards-compliant handling of static
1813 destructors, but will only work if your C library supports
1814 @code{__cxa_atexit}.
1815
1816 @item -fno-use-cxa-get-exception-ptr
1817 @opindex fno-use-cxa-get-exception-ptr
1818 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
1819 will cause @code{std::uncaught_exception} to be incorrect, but is necessary
1820 if the runtime routine is not available.
1821
1822 @item -fvisibility-inlines-hidden
1823 @opindex fvisibility-inlines-hidden
1824 This switch declares that the user does not attempt to compare
1825 pointers to inline methods where the addresses of the two functions
1826 were taken in different shared objects.
1827
1828 The effect of this is that GCC may, effectively, mark inline methods with
1829 @code{__attribute__ ((visibility ("hidden")))} so that they do not
1830 appear in the export table of a DSO and do not require a PLT indirection
1831 when used within the DSO@.  Enabling this option can have a dramatic effect
1832 on load and link times of a DSO as it massively reduces the size of the
1833 dynamic export table when the library makes heavy use of templates.
1834
1835 The behavior of this switch is not quite the same as marking the
1836 methods as hidden directly, because it does not affect static variables
1837 local to the function or cause the compiler to deduce that
1838 the function is defined in only one shared object.
1839
1840 You may mark a method as having a visibility explicitly to negate the
1841 effect of the switch for that method.  For example, if you do want to
1842 compare pointers to a particular inline method, you might mark it as
1843 having default visibility.  Marking the enclosing class with explicit
1844 visibility will have no effect.
1845
1846 Explicitly instantiated inline methods are unaffected by this option
1847 as their linkage might otherwise cross a shared library boundary.
1848 @xref{Template Instantiation}.
1849
1850 @item -fvisibility-ms-compat
1851 @opindex fvisibility-ms-compat
1852 This flag attempts to use visibility settings to make GCC's C++
1853 linkage model compatible with that of Microsoft Visual Studio.
1854
1855 The flag makes these changes to GCC's linkage model:
1856
1857 @enumerate
1858 @item
1859 It sets the default visibility to @code{hidden}, like
1860 @option{-fvisibility=hidden}.
1861
1862 @item
1863 Types, but not their members, are not hidden by default.
1864
1865 @item
1866 The One Definition Rule is relaxed for types without explicit
1867 visibility specifications which are defined in more than one different
1868 shared object: those declarations are permitted if they would have
1869 been permitted when this option was not used.
1870 @end enumerate
1871
1872 In new code it is better to use @option{-fvisibility=hidden} and
1873 export those classes which are intended to be externally visible.
1874 Unfortunately it is possible for code to rely, perhaps accidentally,
1875 on the Visual Studio behavior.
1876
1877 Among the consequences of these changes are that static data members
1878 of the same type with the same name but defined in different shared
1879 objects will be different, so changing one will not change the other;
1880 and that pointers to function members defined in different shared
1881 objects may not compare equal.  When this flag is given, it is a
1882 violation of the ODR to define types with the same name differently.
1883
1884 @item -fno-weak
1885 @opindex fno-weak
1886 Do not use weak symbol support, even if it is provided by the linker.
1887 By default, G++ will use weak symbols if they are available.  This
1888 option exists only for testing, and should not be used by end-users;
1889 it will result in inferior code and has no benefits.  This option may
1890 be removed in a future release of G++.
1891
1892 @item -nostdinc++
1893 @opindex nostdinc++
1894 Do not search for header files in the standard directories specific to
1895 C++, but do still search the other standard directories.  (This option
1896 is used when building the C++ library.)
1897 @end table
1898
1899 In addition, these optimization, warning, and code generation options
1900 have meanings only for C++ programs:
1901
1902 @table @gcctabopt
1903 @item -fno-default-inline
1904 @opindex fno-default-inline
1905 Do not assume @samp{inline} for functions defined inside a class scope.
1906 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1907 functions will have linkage like inline functions; they just won't be
1908 inlined by default.
1909
1910 @item -Wabi @r{(C++ only)}
1911 @opindex Wabi
1912 Warn when G++ generates code that is probably not compatible with the
1913 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
1914 all such cases, there are probably some cases that are not warned about,
1915 even though G++ is generating incompatible code.  There may also be
1916 cases where warnings are emitted even though the code that is generated
1917 will be compatible.
1918
1919 You should rewrite your code to avoid these warnings if you are
1920 concerned about the fact that code generated by G++ may not be binary
1921 compatible with code generated by other compilers.
1922
1923 The known incompatibilities at this point include:
1924
1925 @itemize @bullet
1926
1927 @item
1928 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1929 pack data into the same byte as a base class.  For example:
1930
1931 @smallexample
1932 struct A @{ virtual void f(); int f1 : 1; @};
1933 struct B : public A @{ int f2 : 1; @};
1934 @end smallexample
1935
1936 @noindent
1937 In this case, G++ will place @code{B::f2} into the same byte
1938 as@code{A::f1}; other compilers will not.  You can avoid this problem
1939 by explicitly padding @code{A} so that its size is a multiple of the
1940 byte size on your platform; that will cause G++ and other compilers to
1941 layout @code{B} identically.
1942
1943 @item
1944 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1945 tail padding when laying out virtual bases.  For example:
1946
1947 @smallexample
1948 struct A @{ virtual void f(); char c1; @};
1949 struct B @{ B(); char c2; @};
1950 struct C : public A, public virtual B @{@};
1951 @end smallexample
1952
1953 @noindent
1954 In this case, G++ will not place @code{B} into the tail-padding for
1955 @code{A}; other compilers will.  You can avoid this problem by
1956 explicitly padding @code{A} so that its size is a multiple of its
1957 alignment (ignoring virtual base classes); that will cause G++ and other
1958 compilers to layout @code{C} identically.
1959
1960 @item
1961 Incorrect handling of bit-fields with declared widths greater than that
1962 of their underlying types, when the bit-fields appear in a union.  For
1963 example:
1964
1965 @smallexample
1966 union U @{ int i : 4096; @};
1967 @end smallexample
1968
1969 @noindent
1970 Assuming that an @code{int} does not have 4096 bits, G++ will make the
1971 union too small by the number of bits in an @code{int}.
1972
1973 @item
1974 Empty classes can be placed at incorrect offsets.  For example:
1975
1976 @smallexample
1977 struct A @{@};
1978
1979 struct B @{
1980   A a;
1981   virtual void f ();
1982 @};
1983
1984 struct C : public B, public A @{@};
1985 @end smallexample
1986
1987 @noindent
1988 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
1989 it should be placed at offset zero.  G++ mistakenly believes that the
1990 @code{A} data member of @code{B} is already at offset zero.
1991
1992 @item
1993 Names of template functions whose types involve @code{typename} or
1994 template template parameters can be mangled incorrectly.
1995
1996 @smallexample
1997 template <typename Q>
1998 void f(typename Q::X) @{@}
1999
2000 template <template <typename> class Q>
2001 void f(typename Q<int>::X) @{@}
2002 @end smallexample
2003
2004 @noindent
2005 Instantiations of these templates may be mangled incorrectly.
2006
2007 @end itemize
2008
2009 @item -Wctor-dtor-privacy @r{(C++ only)}
2010 @opindex Wctor-dtor-privacy
2011 Warn when a class seems unusable because all the constructors or
2012 destructors in that class are private, and it has neither friends nor
2013 public static member functions.
2014
2015 @item -Wnon-virtual-dtor @r{(C++ only)}
2016 @opindex Wnon-virtual-dtor
2017 Warn when a class has virtual functions and accessible non-virtual
2018 destructor, in which case it would be possible but unsafe to delete
2019 an instance of a derived class through a pointer to the base class.
2020 This warning is also enabled if -Weffc++ is specified.
2021
2022 @item -Wreorder @r{(C++ only)}
2023 @opindex Wreorder
2024 @cindex reordering, warning
2025 @cindex warning for reordering of member initializers
2026 Warn when the order of member initializers given in the code does not
2027 match the order in which they must be executed.  For instance:
2028
2029 @smallexample
2030 struct A @{
2031   int i;
2032   int j;
2033   A(): j (0), i (1) @{ @}
2034 @};
2035 @end smallexample
2036
2037 The compiler will rearrange the member initializers for @samp{i}
2038 and @samp{j} to match the declaration order of the members, emitting
2039 a warning to that effect.  This warning is enabled by @option{-Wall}.
2040 @end table
2041
2042 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2043
2044 @table @gcctabopt
2045 @item -Weffc++ @r{(C++ only)}
2046 @opindex Weffc++
2047 Warn about violations of the following style guidelines from Scott Meyers'
2048 @cite{Effective C++} book:
2049
2050 @itemize @bullet
2051 @item
2052 Item 11:  Define a copy constructor and an assignment operator for classes
2053 with dynamically allocated memory.
2054
2055 @item
2056 Item 12:  Prefer initialization to assignment in constructors.
2057
2058 @item
2059 Item 14:  Make destructors virtual in base classes.
2060
2061 @item
2062 Item 15:  Have @code{operator=} return a reference to @code{*this}.
2063
2064 @item
2065 Item 23:  Don't try to return a reference when you must return an object.
2066
2067 @end itemize
2068
2069 Also warn about violations of the following style guidelines from
2070 Scott Meyers' @cite{More Effective C++} book:
2071
2072 @itemize @bullet
2073 @item
2074 Item 6:  Distinguish between prefix and postfix forms of increment and
2075 decrement operators.
2076
2077 @item
2078 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
2079
2080 @end itemize
2081
2082 When selecting this option, be aware that the standard library
2083 headers do not obey all of these guidelines; use @samp{grep -v}
2084 to filter out those warnings.
2085
2086 @item -Wno-deprecated @r{(C++ only)}
2087 @opindex Wno-deprecated
2088 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
2089
2090 @item -Wstrict-null-sentinel @r{(C++ only)}
2091 @opindex Wstrict-null-sentinel
2092 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
2093 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2094 to @code{__null}.  Although it is a null pointer constant not a null pointer,
2095 it is guaranteed to of the same size as a pointer.  But this use is
2096 not portable across different compilers.
2097
2098 @item -Wno-non-template-friend @r{(C++ only)}
2099 @opindex Wno-non-template-friend
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 @samp{friend foo(int)}), 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++, @option{-Wnon-template-friend} 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 @option{-Wno-non-template-friend} which keeps the conformant compiler code
2112 but disables the helpful warning.
2113
2114 @item -Wold-style-cast @r{(C++ only)}
2115 @opindex Wold-style-cast
2116 Warn if an old-style (C-style) cast to a non-void type is used within
2117 a C++ program.  The new-style casts (@samp{dynamic_cast},
2118 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2119 less vulnerable to unintended effects and much easier to search for.
2120
2121 @item -Woverloaded-virtual @r{(C++ only)}
2122 @opindex Woverloaded-virtual
2123 @cindex overloaded virtual fn, warning
2124 @cindex warning for overloaded virtual fn
2125 Warn when a function declaration hides virtual functions from a
2126 base class.  For example, in:
2127
2128 @smallexample
2129 struct A @{
2130   virtual void f();
2131 @};
2132
2133 struct B: public A @{
2134   void f(int);
2135 @};
2136 @end smallexample
2137
2138 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2139 like:
2140
2141 @smallexample
2142 B* b;
2143 b->f();
2144 @end smallexample
2145
2146 will fail to compile.
2147
2148 @item -Wno-pmf-conversions @r{(C++ only)}
2149 @opindex Wno-pmf-conversions
2150 Disable the diagnostic for converting a bound pointer to member function
2151 to a plain pointer.
2152
2153 @item -Wsign-promo @r{(C++ only)}
2154 @opindex Wsign-promo
2155 Warn when overload resolution chooses a promotion from unsigned or
2156 enumerated type to a signed type, over a conversion to an unsigned type of
2157 the same size.  Previous versions of G++ would try to preserve
2158 unsignedness, but the standard mandates the current behavior.
2159
2160 @smallexample
2161 struct A @{
2162   operator int ();
2163   A& operator = (int);
2164 @};
2165
2166 main ()
2167 @{
2168   A a,b;
2169   a = b;
2170 @}
2171 @end smallexample
2172
2173 In this example, G++ will synthesize a default @samp{A& operator =
2174 (const A&);}, while cfront will use the user-defined @samp{operator =}.
2175 @end table
2176
2177 @node Objective-C and Objective-C++ Dialect Options
2178 @section Options Controlling Objective-C and Objective-C++ Dialects
2179
2180 @cindex compiler options, Objective-C and Objective-C++
2181 @cindex Objective-C and Objective-C++ options, command line
2182 @cindex options, Objective-C and Objective-C++
2183 (NOTE: This manual does not describe the Objective-C and Objective-C++
2184 languages themselves.  See @xref{Standards,,Language Standards
2185 Supported by GCC}, for references.)
2186
2187 This section describes the command-line options that are only meaningful
2188 for Objective-C and Objective-C++ programs, but you can also use most of
2189 the language-independent GNU compiler options.
2190 For example, you might compile a file @code{some_class.m} like this:
2191
2192 @smallexample
2193 gcc -g -fgnu-runtime -O -c some_class.m
2194 @end smallexample
2195
2196 @noindent
2197 In this example, @option{-fgnu-runtime} is an option meant only for
2198 Objective-C and Objective-C++ programs; you can use the other options with
2199 any language supported by GCC@.
2200
2201 Note that since Objective-C is an extension of the C language, Objective-C
2202 compilations may also use options specific to the C front-end (e.g.,
2203 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2204 C++-specific options (e.g., @option{-Wabi}).
2205
2206 Here is a list of options that are @emph{only} for compiling Objective-C
2207 and Objective-C++ programs:
2208
2209 @table @gcctabopt
2210 @item -fconstant-string-class=@var{class-name}
2211 @opindex fconstant-string-class
2212 Use @var{class-name} as the name of the class to instantiate for each
2213 literal string specified with the syntax @code{@@"@dots{}"}.  The default
2214 class name is @code{NXConstantString} if the GNU runtime is being used, and
2215 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
2216 @option{-fconstant-cfstrings} option, if also present, will override the
2217 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2218 to be laid out as constant CoreFoundation strings.
2219
2220 @item -fgnu-runtime
2221 @opindex fgnu-runtime
2222 Generate object code compatible with the standard GNU Objective-C
2223 runtime.  This is the default for most types of systems.
2224
2225 @item -fnext-runtime
2226 @opindex fnext-runtime
2227 Generate output compatible with the NeXT runtime.  This is the default
2228 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2229 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2230 used.
2231
2232 @item -fno-nil-receivers
2233 @opindex fno-nil-receivers
2234 Assume that all Objective-C message dispatches (e.g.,
2235 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
2236 is not @code{nil}.  This allows for more efficient entry points in the runtime
2237 to be used.  Currently, this option is only available in conjunction with
2238 the NeXT runtime on Mac OS X 10.3 and later.
2239
2240 @item -fobjc-call-cxx-cdtors
2241 @opindex fobjc-call-cxx-cdtors
2242 For each Objective-C class, check if any of its instance variables is a
2243 C++ object with a non-trivial default constructor.  If so, synthesize a
2244 special @code{- (id) .cxx_construct} instance method that will run
2245 non-trivial default constructors on any such instance variables, in order,
2246 and then return @code{self}.  Similarly, check if any instance variable
2247 is a C++ object with a non-trivial destructor, and if so, synthesize a
2248 special @code{- (void) .cxx_destruct} method that will run
2249 all such default destructors, in reverse order.
2250
2251 The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
2252 thusly generated will only operate on instance variables declared in the
2253 current Objective-C class, and not those inherited from superclasses.  It
2254 is the responsibility of the Objective-C runtime to invoke all such methods
2255 in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
2256 will be invoked by the runtime immediately after a new object
2257 instance is allocated; the @code{- (void) .cxx_destruct} methods will
2258 be invoked immediately before the runtime deallocates an object instance.
2259
2260 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2261 support for invoking the @code{- (id) .cxx_construct} and
2262 @code{- (void) .cxx_destruct} methods.
2263
2264 @item -fobjc-direct-dispatch
2265 @opindex fobjc-direct-dispatch
2266 Allow fast jumps to the message dispatcher.  On Darwin this is
2267 accomplished via the comm page.
2268
2269 @item -fobjc-exceptions
2270 @opindex fobjc-exceptions
2271 Enable syntactic support for structured exception handling in Objective-C,
2272 similar to what is offered by C++ and Java.  This option is
2273 unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
2274 earlier.
2275
2276 @smallexample
2277   @@try @{
2278     @dots{}
2279        @@throw expr;
2280     @dots{}
2281   @}
2282   @@catch (AnObjCClass *exc) @{
2283     @dots{}
2284       @@throw expr;
2285     @dots{}
2286       @@throw;
2287     @dots{}
2288   @}
2289   @@catch (AnotherClass *exc) @{
2290     @dots{}
2291   @}
2292   @@catch (id allOthers) @{
2293     @dots{}
2294   @}
2295   @@finally @{
2296     @dots{}
2297       @@throw expr;
2298     @dots{}
2299   @}
2300 @end smallexample
2301
2302 The @code{@@throw} statement may appear anywhere in an Objective-C or
2303 Objective-C++ program; when used inside of a @code{@@catch} block, the
2304 @code{@@throw} may appear without an argument (as shown above), in which case
2305 the object caught by the @code{@@catch} will be rethrown.
2306
2307 Note that only (pointers to) Objective-C objects may be thrown and
2308 caught using this scheme.  When an object is thrown, it will be caught
2309 by the nearest @code{@@catch} clause capable of handling objects of that type,
2310 analogously to how @code{catch} blocks work in C++ and Java.  A
2311 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
2312 any and all Objective-C exceptions not caught by previous @code{@@catch}
2313 clauses (if any).
2314
2315 The @code{@@finally} clause, if present, will be executed upon exit from the
2316 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
2317 regardless of whether any exceptions are thrown, caught or rethrown
2318 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
2319 of the @code{finally} clause in Java.
2320
2321 There are several caveats to using the new exception mechanism:
2322
2323 @itemize @bullet
2324 @item
2325 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2326 idioms provided by the @code{NSException} class, the new
2327 exceptions can only be used on Mac OS X 10.3 (Panther) and later
2328 systems, due to additional functionality needed in the (NeXT) Objective-C
2329 runtime.
2330
2331 @item
2332 As mentioned above, the new exceptions do not support handling
2333 types other than Objective-C objects.   Furthermore, when used from
2334 Objective-C++, the Objective-C exception model does not interoperate with C++
2335 exceptions at this time.  This means you cannot @code{@@throw} an exception
2336 from Objective-C and @code{catch} it in C++, or vice versa
2337 (i.e., @code{throw @dots{} @@catch}).
2338 @end itemize
2339
2340 The @option{-fobjc-exceptions} switch also enables the use of synchronization
2341 blocks for thread-safe execution:
2342
2343 @smallexample
2344   @@synchronized (ObjCClass *guard) @{
2345     @dots{}
2346   @}
2347 @end smallexample
2348
2349 Upon entering the @code{@@synchronized} block, a thread of execution shall
2350 first check whether a lock has been placed on the corresponding @code{guard}
2351 object by another thread.  If it has, the current thread shall wait until
2352 the other thread relinquishes its lock.  Once @code{guard} becomes available,
2353 the current thread will place its own lock on it, execute the code contained in
2354 the @code{@@synchronized} block, and finally relinquish the lock (thereby
2355 making @code{guard} available to other threads).
2356
2357 Unlike Java, Objective-C does not allow for entire methods to be marked
2358 @code{@@synchronized}.  Note that throwing exceptions out of
2359 @code{@@synchronized} blocks is allowed, and will cause the guarding object
2360 to be unlocked properly.
2361
2362 @item -fobjc-gc
2363 @opindex fobjc-gc
2364 Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2365
2366 @item -freplace-objc-classes
2367 @opindex freplace-objc-classes
2368 Emit a special marker instructing @command{ld(1)} not to statically link in
2369 the resulting object file, and allow @command{dyld(1)} to load it in at
2370 run time instead.  This is used in conjunction with the Fix-and-Continue
2371 debugging mode, where the object file in question may be recompiled and
2372 dynamically reloaded in the course of program execution, without the need
2373 to restart the program itself.  Currently, Fix-and-Continue functionality
2374 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2375 and later.
2376
2377 @item -fzero-link
2378 @opindex fzero-link
2379 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2380 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2381 compile time) with static class references that get initialized at load time,
2382 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2383 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2384 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2385 for individual class implementations to be modified during program execution.
2386
2387 @item -gen-decls
2388 @opindex gen-decls
2389 Dump interface declarations for all classes seen in the source file to a
2390 file named @file{@var{sourcename}.decl}.
2391
2392 @item -Wassign-intercept
2393 @opindex Wassign-intercept
2394 Warn whenever an Objective-C assignment is being intercepted by the
2395 garbage collector.
2396
2397 @item -Wno-protocol
2398 @opindex Wno-protocol
2399 If a class is declared to implement a protocol, a warning is issued for
2400 every method in the protocol that is not implemented by the class.  The
2401 default behavior is to issue a warning for every method not explicitly
2402 implemented in the class, even if a method implementation is inherited
2403 from the superclass.  If you use the @option{-Wno-protocol} option, then
2404 methods inherited from the superclass are considered to be implemented,
2405 and no warning is issued for them.
2406
2407 @item -Wselector
2408 @opindex Wselector
2409 Warn if multiple methods of different types for the same selector are
2410 found during compilation.  The check is performed on the list of methods
2411 in the final stage of compilation.  Additionally, a check is performed
2412 for each selector appearing in a @code{@@selector(@dots{})}
2413 expression, and a corresponding method for that selector has been found
2414 during compilation.  Because these checks scan the method table only at
2415 the end of compilation, these warnings are not produced if the final
2416 stage of compilation is not reached, for example because an error is
2417 found during compilation, or because the @option{-fsyntax-only} option is
2418 being used.
2419
2420 @item -Wstrict-selector-match
2421 @opindex Wstrict-selector-match
2422 Warn if multiple methods with differing argument and/or return types are
2423 found for a given selector when attempting to send a message using this
2424 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2425 is off (which is the default behavior), the compiler will omit such warnings
2426 if any differences found are confined to types which share the same size
2427 and alignment.
2428
2429 @item -Wundeclared-selector
2430 @opindex Wundeclared-selector
2431 Warn if a @code{@@selector(@dots{})} expression referring to an
2432 undeclared selector is found.  A selector is considered undeclared if no
2433 method with that name has been declared before the
2434 @code{@@selector(@dots{})} expression, either explicitly in an
2435 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2436 an @code{@@implementation} section.  This option always performs its
2437 checks as soon as a @code{@@selector(@dots{})} expression is found,
2438 while @option{-Wselector} only performs its checks in the final stage of
2439 compilation.  This also enforces the coding style convention
2440 that methods and selectors must be declared before being used.
2441
2442 @item -print-objc-runtime-info
2443 @opindex print-objc-runtime-info
2444 Generate C header describing the largest structure that is passed by
2445 value, if any.
2446
2447 @end table
2448
2449 @node Language Independent Options
2450 @section Options to Control Diagnostic Messages Formatting
2451 @cindex options to control diagnostics formatting
2452 @cindex diagnostic messages
2453 @cindex message formatting
2454
2455 Traditionally, diagnostic messages have been formatted irrespective of
2456 the output device's aspect (e.g.@: its width, @dots{}).  The options described
2457 below can be used to control the diagnostic messages formatting
2458 algorithm, e.g.@: how many characters per line, how often source location
2459 information should be reported.  Right now, only the C++ front end can
2460 honor these options.  However it is expected, in the near future, that
2461 the remaining front ends would be able to digest them correctly.
2462
2463 @table @gcctabopt
2464 @item -fmessage-length=@var{n}
2465 @opindex fmessage-length
2466 Try to format error messages so that they fit on lines of about @var{n}
2467 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2468 the front ends supported by GCC@.  If @var{n} is zero, then no
2469 line-wrapping will be done; each error message will appear on a single
2470 line.
2471
2472 @opindex fdiagnostics-show-location
2473 @item -fdiagnostics-show-location=once
2474 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2475 reporter to emit @emph{once} source location information; that is, in
2476 case the message is too long to fit on a single physical line and has to
2477 be wrapped, the source location won't be emitted (as prefix) again,
2478 over and over, in subsequent continuation lines.  This is the default
2479 behavior.
2480
2481 @item -fdiagnostics-show-location=every-line
2482 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2483 messages reporter to emit the same source location information (as
2484 prefix) for physical lines that result from the process of breaking
2485 a message which is too long to fit on a single line.
2486
2487 @item -fdiagnostics-show-option
2488 @opindex fdiagnostics-show-option
2489 This option instructs the diagnostic machinery to add text to each
2490 diagnostic emitted, which indicates which command line option directly
2491 controls that diagnostic, when such an option is known to the
2492 diagnostic machinery.
2493
2494 @item -Wcoverage-mismatch
2495 @opindex Wcoverage-mismatch
2496 Warn if feedback profiles do not match when using the
2497 @option{-fprofile-use} option.
2498 If a source file was changed between @option{-fprofile-gen} and
2499 @option{-fprofile-use}, the files with the profile feedback can fail
2500 to match the source file and GCC can not use the profile feedback
2501 information.  By default, GCC emits an error message in this case.
2502 The option @option{-Wcoverage-mismatch} emits a warning instead of an
2503 error.  GCC does not use appropriate feedback profiles, so using this
2504 option can result in poorly optimized code.  This option is useful
2505 only in the case of very minor changes such as bug fixes to an
2506 existing code-base.
2507
2508 @end table
2509
2510 @node Warning Options
2511 @section Options to Request or Suppress Warnings
2512 @cindex options to control warnings
2513 @cindex warning messages
2514 @cindex messages, warning
2515 @cindex suppressing warnings
2516
2517 Warnings are diagnostic messages that report constructions which
2518 are not inherently erroneous but which are risky or suggest there
2519 may have been an error.
2520
2521 The following language-independent options do not enable specific
2522 warnings but control the kinds of diagnostics produced by GCC.
2523
2524 @table @gcctabopt
2525 @cindex syntax checking
2526 @item -fsyntax-only
2527 @opindex fsyntax-only
2528 Check the code for syntax errors, but don't do anything beyond that.
2529
2530 @item -w
2531 @opindex w
2532 Inhibit all warning messages.
2533
2534 @item -Werror
2535 @opindex Werror
2536 Make all warnings into errors.
2537
2538 @item -Werror=
2539 @opindex Werror=
2540 Make the specified warning into an error.  The specifier for a warning
2541 is appended, for example @option{-Werror=switch} turns the warnings
2542 controlled by @option{-Wswitch} into errors.  This switch takes a
2543 negative form, to be used to negate @option{-Werror} for specific
2544 warnings, for example @option{-Wno-error=switch} makes
2545 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
2546 is in effect.  You can use the @option{-fdiagnostics-show-option}
2547 option to have each controllable warning amended with the option which
2548 controls it, to determine what to use with this option.
2549
2550 Note that specifying @option{-Werror=}@var{foo} automatically implies
2551 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
2552 imply anything.
2553
2554 @item -Wfatal-errors
2555 @opindex Wfatal-errors
2556 This option causes the compiler to abort compilation on the first error
2557 occurred rather than trying to keep going and printing further error
2558 messages.
2559
2560 @end table
2561
2562 You can request many specific warnings with options beginning
2563 @samp{-W}, for example @option{-Wimplicit} to request warnings on
2564 implicit declarations.  Each of these specific warning options also
2565 has a negative form beginning @samp{-Wno-} to turn off warnings; for
2566 example, @option{-Wno-implicit}.  This manual lists only one of the
2567 two forms, whichever is not the default.  For further,
2568 language-specific options also refer to @ref{C++ Dialect Options} and
2569 @ref{Objective-C and Objective-C++ Dialect Options}.
2570
2571 @table @gcctabopt
2572 @item -pedantic
2573 @opindex pedantic
2574 Issue all the warnings demanded by strict ISO C and ISO C++;
2575 reject all programs that use forbidden extensions, and some other
2576 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2577 version of the ISO C standard specified by any @option{-std} option used.
2578
2579 Valid ISO C and ISO C++ programs should compile properly with or without
2580 this option (though a rare few will require @option{-ansi} or a
2581 @option{-std} option specifying the required version of ISO C)@.  However,
2582 without this option, certain GNU extensions and traditional C and C++
2583 features are supported as well.  With this option, they are rejected.
2584
2585 @option{-pedantic} does not cause warning messages for use of the
2586 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2587 warnings are also disabled in the expression that follows
2588 @code{__extension__}.  However, only system header files should use
2589 these escape routes; application programs should avoid them.
2590 @xref{Alternate Keywords}.
2591
2592 Some users try to use @option{-pedantic} to check programs for strict ISO
2593 C conformance.  They soon find that it does not do quite what they want:
2594 it finds some non-ISO practices, but not all---only those for which
2595 ISO C @emph{requires} a diagnostic, and some others for which
2596 diagnostics have been added.
2597
2598 A feature to report any failure to conform to ISO C might be useful in
2599 some instances, but would require considerable additional work and would
2600 be quite different from @option{-pedantic}.  We don't have plans to
2601 support such a feature in the near future.
2602
2603 Where the standard specified with @option{-std} represents a GNU
2604 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2605 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2606 extended dialect is based.  Warnings from @option{-pedantic} are given
2607 where they are required by the base standard.  (It would not make sense
2608 for such warnings to be given only for features not in the specified GNU
2609 C dialect, since by definition the GNU dialects of C include all
2610 features the compiler supports with the given option, and there would be
2611 nothing to warn about.)
2612
2613 @item -pedantic-errors
2614 @opindex pedantic-errors
2615 Like @option{-pedantic}, except that errors are produced rather than
2616 warnings.
2617
2618 @item -Wall
2619 @opindex Wall
2620 This enables all the warnings about constructions that some users
2621 consider questionable, and that are easy to avoid (or modify to
2622 prevent the warning), even in conjunction with macros.  This also
2623 enables some language-specific warnings described in @ref{C++ Dialect
2624 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
2625
2626 @option{-Wall} turns on the following warning flags:
2627
2628 @gccoptlist{-Waddress   @gol
2629 -Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
2630 -Wc++0x-compat  @gol
2631 -Wchar-subscripts  @gol
2632 -Wimplicit-int  @gol
2633 -Wimplicit-function-declaration  @gol
2634 -Wcomment  @gol
2635 -Wformat   @gol
2636 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
2637 -Wmissing-braces  @gol
2638 -Wnonnull  @gol
2639 -Wparentheses  @gol
2640 -Wpointer-sign  @gol
2641 -Wreorder   @gol
2642 -Wreturn-type  @gol
2643 -Wsequence-point  @gol
2644 -Wsign-compare @r{(only in C++)}  @gol
2645 -Wstrict-aliasing  @gol
2646 -Wstrict-overflow=1  @gol
2647 -Wswitch  @gol
2648 -Wtrigraphs  @gol
2649 -Wuninitialized @r{(only with} @option{-O1} @r{and above)}  @gol
2650 -Wunknown-pragmas  @gol
2651 -Wunused-function  @gol
2652 -Wunused-label     @gol
2653 -Wunused-value     @gol
2654 -Wunused-variable  @gol
2655 }
2656
2657 Note that some warning flags are not implied by @option{-Wall}.  Some of
2658 them warn about constructions that users generally do not consider
2659 questionable, but which occasionally you might wish to check for;
2660 others warn about constructions that are necessary or hard to avoid in
2661 some cases, and there is no simple way to modify the code to suppress
2662 the warning. Some of them are enabled by @option{-Wextra} but many of
2663 them must be enabled individually.
2664
2665 @item -Wextra
2666 @opindex W
2667 @opindex Wextra
2668 This enables some extra warning flags that are not enabled by
2669 @option{-Wall}. (This option used to be called @option{-W}.  The older
2670 name is still supported, but the newer name is more descriptive.)
2671
2672 @gccoptlist{-Wclobbered  @gol
2673 -Wempty-body  @gol
2674 -Wignored-qualifiers @gol
2675 -Wmissing-field-initializers  @gol
2676 -Wmissing-parameter-type @r{(C only)}  @gol
2677 -Wold-style-declaration @r{(C only)}  @gol
2678 -Woverride-init  @gol
2679 -Wsign-compare  @gol
2680 -Wtype-limits  @gol
2681 -Wuninitialized @r{(only with} @option{-O1} @r{and above)}  @gol
2682 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
2683 }
2684
2685 The option @option{-Wextra} also prints warning messages for the
2686 following cases:
2687
2688 @itemize @bullet
2689
2690 @item
2691 A pointer is compared against integer zero with @samp{<}, @samp{<=},
2692 @samp{>}, or @samp{>=}.
2693
2694 @item 
2695 (C++ only) An enumerator and a non-enumerator both appear in a
2696 conditional expression.
2697
2698 @item 
2699 (C++ only) A non-static reference or non-static @samp{const} member
2700 appears in a class without constructors.
2701
2702 @item 
2703 (C++ only) Ambiguous virtual bases.
2704
2705 @item 
2706 (C++ only) Subscripting an array which has been declared @samp{register}.
2707
2708 @item 
2709 (C++ only) Taking the address of a variable which has been declared
2710 @samp{register}.
2711
2712 @item 
2713 (C++ only) A base class is not initialized in a derived class' copy
2714 constructor.
2715
2716 @end itemize
2717
2718 @item -Wno-import
2719 @opindex Wno-import
2720 Inhibit warning messages about the use of @samp{#import}.
2721
2722 @item -Wchar-subscripts
2723 @opindex Wchar-subscripts
2724 Warn if an array subscript has type @code{char}.  This is a common cause
2725 of error, as programmers often forget that this type is signed on some
2726 machines.
2727 This warning is enabled by @option{-Wall}.
2728
2729 @item -Wcomment
2730 @opindex Wcomment
2731 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2732 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2733 This warning is enabled by @option{-Wall}.
2734
2735 @item -Wformat
2736 @opindex Wformat
2737 @opindex ffreestanding
2738 @opindex fno-builtin
2739 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2740 the arguments supplied have types appropriate to the format string
2741 specified, and that the conversions specified in the format string make
2742 sense.  This includes standard functions, and others specified by format
2743 attributes (@pxref{Function Attributes}), in the @code{printf},
2744 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2745 not in the C standard) families (or other target-specific families).
2746 Which functions are checked without format attributes having been
2747 specified depends on the standard version selected, and such checks of
2748 functions without the attribute specified are disabled by
2749 @option{-ffreestanding} or @option{-fno-builtin}.
2750
2751 The formats are checked against the format features supported by GNU
2752 libc version 2.2.  These include all ISO C90 and C99 features, as well
2753 as features from the Single Unix Specification and some BSD and GNU
2754 extensions.  Other library implementations may not support all these
2755 features; GCC does not support warning about features that go beyond a
2756 particular library's limitations.  However, if @option{-pedantic} is used
2757 with @option{-Wformat}, warnings will be given about format features not
2758 in the selected standard version (but not for @code{strfmon} formats,
2759 since those are not in any version of the C standard).  @xref{C Dialect
2760 Options,,Options Controlling C Dialect}.
2761
2762 Since @option{-Wformat} also checks for null format arguments for
2763 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2764
2765 @option{-Wformat} is included in @option{-Wall}.  For more control over some
2766 aspects of format checking, the options @option{-Wformat-y2k},
2767 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2768 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2769 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
2770
2771 @item -Wformat-y2k
2772 @opindex Wformat-y2k
2773 If @option{-Wformat} is specified, also warn about @code{strftime}
2774 formats which may yield only a two-digit year.
2775
2776 @item -Wno-format-extra-args
2777 @opindex Wno-format-extra-args
2778 If @option{-Wformat} is specified, do not warn about excess arguments to a
2779 @code{printf} or @code{scanf} format function.  The C standard specifies
2780 that such arguments are ignored.
2781
2782 Where the unused arguments lie between used arguments that are
2783 specified with @samp{$} operand number specifications, normally
2784 warnings are still given, since the implementation could not know what
2785 type to pass to @code{va_arg} to skip the unused arguments.  However,
2786 in the case of @code{scanf} formats, this option will suppress the
2787 warning if the unused arguments are all pointers, since the Single
2788 Unix Specification says that such unused arguments are allowed.
2789
2790 @item -Wno-format-zero-length
2791 @opindex Wno-format-zero-length
2792 If @option{-Wformat} is specified, do not warn about zero-length formats.
2793 The C standard specifies that zero-length formats are allowed.
2794
2795 @item -Wformat-nonliteral
2796 @opindex Wformat-nonliteral
2797 If @option{-Wformat} is specified, also warn if the format string is not a
2798 string literal and so cannot be checked, unless the format function
2799 takes its format arguments as a @code{va_list}.
2800
2801 @item -Wformat-security
2802 @opindex Wformat-security
2803 If @option{-Wformat} is specified, also warn about uses of format
2804 functions that represent possible security problems.  At present, this
2805 warns about calls to @code{printf} and @code{scanf} functions where the
2806 format string is not a string literal and there are no format arguments,
2807 as in @code{printf (foo);}.  This may be a security hole if the format
2808 string came from untrusted input and contains @samp{%n}.  (This is
2809 currently a subset of what @option{-Wformat-nonliteral} warns about, but
2810 in future warnings may be added to @option{-Wformat-security} that are not
2811 included in @option{-Wformat-nonliteral}.)
2812
2813 @item -Wformat=2
2814 @opindex Wformat=2
2815 Enable @option{-Wformat} plus format checks not included in
2816 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
2817 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2818
2819 @item -Wnonnull
2820 @opindex Wnonnull
2821 Warn about passing a null pointer for arguments marked as
2822 requiring a non-null value by the @code{nonnull} function attribute.
2823
2824 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2825 can be disabled with the @option{-Wno-nonnull} option.
2826
2827 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
2828 @opindex Winit-self
2829 Warn about uninitialized variables which are initialized with themselves.
2830 Note this option can only be used with the @option{-Wuninitialized} option,
2831 which in turn only works with @option{-O1} and above.
2832
2833 For example, GCC will warn about @code{i} being uninitialized in the
2834 following snippet only when @option{-Winit-self} has been specified:
2835 @smallexample
2836 @group
2837 int f()
2838 @{
2839   int i = i;
2840   return i;
2841 @}
2842 @end group
2843 @end smallexample
2844
2845 @item -Wimplicit-int
2846 @opindex Wimplicit-int
2847 Warn when a declaration does not specify a type.
2848 This warning is enabled by @option{-Wall}.
2849
2850 @item -Wimplicit-function-declaration
2851 @opindex Wimplicit-function-declaration
2852 @opindex Wno-implicit-function-declaration
2853 Give a warning whenever a function is used before being declared. In
2854 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
2855 enabled by default and it is made into an error by
2856 @option{-pedantic-errors}. This warning is also enabled by
2857 @option{-Wall}.
2858
2859 @item -Wimplicit
2860 @opindex Wimplicit
2861 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2862 This warning is enabled by @option{-Wall}.
2863
2864 @item -Wignored-qualifiers
2865 @opindex Wignored-qualifiers
2866 @opindex Wno-ignored-qualifiers
2867 Warn if the return type of a function has a type qualifier
2868 such as @code{const}.  For ISO C such a type qualifier has no effect,
2869 since the value returned by a function is not an lvalue.
2870 For C++, the warning is only emitted for scalar types or @code{void}.
2871 ISO C prohibits qualified @code{void} return types on function
2872 definitions, so such return types always receive a warning
2873 even without this option.
2874
2875 This warning is also enabled by @option{-Wextra}.
2876
2877 @item -Wmain
2878 @opindex Wmain
2879 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
2880 function with external linkage, returning int, taking either zero
2881 arguments, two, or three arguments of appropriate types.
2882 This warning is enabled by @option{-Wall}.
2883
2884 @item -Wmissing-braces
2885 @opindex Wmissing-braces
2886 Warn if an aggregate or union initializer is not fully bracketed.  In
2887 the following example, the initializer for @samp{a} is not fully
2888 bracketed, but that for @samp{b} is fully bracketed.
2889
2890 @smallexample
2891 int a[2][2] = @{ 0, 1, 2, 3 @};
2892 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2893 @end smallexample
2894
2895 This warning is enabled by @option{-Wall}.
2896
2897 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
2898 @opindex Wmissing-include-dirs
2899 Warn if a user-supplied include directory does not exist.
2900
2901 @item -Wparentheses
2902 @opindex Wparentheses
2903 Warn if parentheses are omitted in certain contexts, such
2904 as when there is an assignment in a context where a truth value
2905 is expected, or when operators are nested whose precedence people
2906 often get confused about.
2907
2908 Also warn if a comparison like @samp{x<=y<=z} appears; this is
2909 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
2910 interpretation from that of ordinary mathematical notation.
2911
2912 Also warn about constructions where there may be confusion to which
2913 @code{if} statement an @code{else} branch belongs.  Here is an example of
2914 such a case:
2915
2916 @smallexample
2917 @group
2918 @{
2919   if (a)
2920     if (b)
2921       foo ();
2922   else
2923     bar ();
2924 @}
2925 @end group
2926 @end smallexample
2927
2928 In C/C++, every @code{else} branch belongs to the innermost possible
2929 @code{if} statement, which in this example is @code{if (b)}.  This is
2930 often not what the programmer expected, as illustrated in the above
2931 example by indentation the programmer chose.  When there is the
2932 potential for this confusion, GCC will issue a warning when this flag
2933 is specified.  To eliminate the warning, add explicit braces around
2934 the innermost @code{if} statement so there is no way the @code{else}
2935 could belong to the enclosing @code{if}.  The resulting code would
2936 look like this:
2937
2938 @smallexample
2939 @group
2940 @{
2941   if (a)
2942     @{
2943       if (b)
2944         foo ();
2945       else
2946         bar ();
2947     @}
2948 @}
2949 @end group
2950 @end smallexample
2951
2952 This warning is enabled by @option{-Wall}.
2953
2954 @item -Wsequence-point
2955 @opindex Wsequence-point
2956 Warn about code that may have undefined semantics because of violations
2957 of sequence point rules in the C and C++ standards.
2958
2959 The C and C++ standards defines the order in which expressions in a C/C++
2960 program are evaluated in terms of @dfn{sequence points}, which represent
2961 a partial ordering between the execution of parts of the program: those
2962 executed before the sequence point, and those executed after it.  These
2963 occur after the evaluation of a full expression (one which is not part
2964 of a larger expression), after the evaluation of the first operand of a
2965 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2966 function is called (but after the evaluation of its arguments and the
2967 expression denoting the called function), and in certain other places.
2968 Other than as expressed by the sequence point rules, the order of
2969 evaluation of subexpressions of an expression is not specified.  All
2970 these rules describe only a partial order rather than a total order,
2971 since, for example, if two functions are called within one expression
2972 with no sequence point between them, the order in which the functions
2973 are called is not specified.  However, the standards committee have
2974 ruled that function calls do not overlap.
2975
2976 It is not specified when between sequence points modifications to the
2977 values of objects take effect.  Programs whose behavior depends on this
2978 have undefined behavior; the C and C++ standards specify that ``Between
2979 the previous and next sequence point an object shall have its stored
2980 value modified at most once by the evaluation of an expression.
2981 Furthermore, the prior value shall be read only to determine the value
2982 to be stored.''.  If a program breaks these rules, the results on any
2983 particular implementation are entirely unpredictable.
2984
2985 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2986 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
2987 diagnosed by this option, and it may give an occasional false positive
2988 result, but in general it has been found fairly effective at detecting
2989 this sort of problem in programs.
2990
2991 The standard is worded confusingly, therefore there is some debate
2992 over the precise meaning of the sequence point rules in subtle cases.
2993 Links to discussions of the problem, including proposed formal
2994 definitions, may be found on the GCC readings page, at
2995 @w{@uref{http://gcc.gnu.org/readings.html}}.
2996
2997 This warning is enabled by @option{-Wall} for C and C++.
2998
2999 @item -Wreturn-type
3000 @opindex Wreturn-type
3001 @opindex Wno-return-type
3002 Warn whenever a function is defined with a return-type that defaults
3003 to @code{int}.  Also warn about any @code{return} statement with no
3004 return-value in a function whose return-type is not @code{void}
3005 (falling off the end of the function body is considered returning
3006 without a value), and about a @code{return} statement with a
3007 expression in a function whose return-type is @code{void}.
3008
3009 For C++, a function without return type always produces a diagnostic
3010 message, even when @option{-Wno-return-type} is specified.  The only
3011 exceptions are @samp{main} and functions defined in system headers.
3012
3013 This warning is enabled by @option{-Wall}.
3014
3015 @item -Wswitch
3016 @opindex Wswitch
3017 Warn whenever a @code{switch} statement has an index of enumerated type
3018 and lacks a @code{case} for one or more of the named codes of that
3019 enumeration.  (The presence of a @code{default} label prevents this
3020 warning.)  @code{case} labels outside the enumeration range also
3021 provoke warnings when this option is used.
3022 This warning is enabled by @option{-Wall}.
3023
3024 @item -Wswitch-default
3025 @opindex Wswitch-switch
3026 Warn whenever a @code{switch} statement does not have a @code{default}
3027 case.
3028
3029 @item -Wswitch-enum
3030 @opindex Wswitch-enum
3031 Warn whenever a @code{switch} statement has an index of enumerated type
3032 and lacks a @code{case} for one or more of the named codes of that
3033 enumeration.  @code{case} labels outside the enumeration range also
3034 provoke warnings when this option is used.
3035
3036 @item -Wtrigraphs
3037 @opindex Wtrigraphs
3038 Warn if any trigraphs are encountered that might change the meaning of
3039 the program (trigraphs within comments are not warned about).
3040 This warning is enabled by @option{-Wall}.
3041
3042 @item -Wunused-function
3043 @opindex Wunused-function
3044 Warn whenever a static function is declared but not defined or a
3045 non-inline static function is unused.
3046 This warning is enabled by @option{-Wall}.
3047
3048 @item -Wunused-label
3049 @opindex Wunused-label
3050 Warn whenever a label is declared but not used.
3051 This warning is enabled by @option{-Wall}.
3052
3053 To suppress this warning use the @samp{unused} attribute
3054 (@pxref{Variable Attributes}).
3055
3056 @item -Wunused-parameter
3057 @opindex Wunused-parameter
3058 Warn whenever a function parameter is unused aside from its declaration.
3059
3060 To suppress this warning use the @samp{unused} attribute
3061 (@pxref{Variable Attributes}).
3062
3063 @item -Wunused-variable
3064 @opindex Wunused-variable
3065 Warn whenever a local variable or non-constant static variable is unused
3066 aside from its declaration.
3067 This warning is enabled by @option{-Wall}.
3068
3069 To suppress this warning use the @samp{unused} attribute
3070 (@pxref{Variable Attributes}).
3071
3072 @item -Wunused-value
3073 @opindex Wunused-value
3074 Warn whenever a statement computes a result that is explicitly not
3075 used. To suppress this warning cast the unused expression to
3076 @samp{void}. This includes an expression-statement or the left-hand
3077 side of a comma expression that contains no side effects. For example,
3078 an expression such as @samp{x[i,j]} will cause a warning, while
3079 @samp{x[(void)i,j]} will not.
3080
3081 This warning is enabled by @option{-Wall}.
3082
3083 @item -Wunused
3084 @opindex Wunused
3085 All the above @option{-Wunused} options combined.
3086
3087 In order to get a warning about an unused function parameter, you must
3088 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
3089 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
3090
3091 @item -Wuninitialized
3092 @opindex Wuninitialized
3093 Warn if an automatic variable is used without first being initialized or
3094 if a variable may be clobbered by a @code{setjmp} call.
3095
3096 These warnings are possible only in optimizing compilation,
3097 because they require data flow information that is computed only
3098 when optimizing.  If you do not specify @option{-O}, you will not get
3099 these warnings. Instead, GCC will issue a warning about @option{-Wuninitialized}
3100 requiring @option{-O}.
3101
3102 If you want to warn about code which uses the uninitialized value of the
3103 variable in its own initializer, use the @option{-Winit-self} option.
3104
3105 These warnings occur for individual uninitialized or clobbered
3106 elements of structure, union or array variables as well as for
3107 variables which are uninitialized or clobbered as a whole.  They do
3108 not occur for variables or elements declared @code{volatile}.  Because
3109 these warnings depend on optimization, the exact variables or elements
3110 for which there are warnings will depend on the precise optimization
3111 options and version of GCC used.
3112
3113 Note that there may be no warning about a variable that is used only
3114 to compute a value that itself is never used, because such
3115 computations may be deleted by data flow analysis before the warnings
3116 are printed.
3117
3118 These warnings are made optional because GCC is not smart
3119 enough to see all the reasons why the code might be correct
3120 despite appearing to have an error.  Here is one example of how
3121 this can happen:
3122
3123 @smallexample
3124 @group
3125 @{
3126   int x;
3127   switch (y)
3128     @{
3129     case 1: x = 1;
3130       break;
3131     case 2: x = 4;
3132       break;
3133     case 3: x = 5;
3134     @}
3135   foo (x);
3136 @}
3137 @end group
3138 @end smallexample
3139
3140 @noindent
3141 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
3142 always initialized, but GCC doesn't know this.  Here is
3143 another common case:
3144
3145 @smallexample
3146 @{
3147   int save_y;
3148   if (change_y) save_y = y, y = new_y;
3149   @dots{}
3150   if (change_y) y = save_y;
3151 @}
3152 @end smallexample
3153
3154 @noindent
3155 This has no bug because @code{save_y} is used only if it is set.
3156
3157 @cindex @code{longjmp} warnings
3158 This option also warns when a non-volatile automatic variable might be
3159 changed by a call to @code{longjmp}.  These warnings as well are possible
3160 only in optimizing compilation.
3161
3162 The compiler sees only the calls to @code{setjmp}.  It cannot know
3163 where @code{longjmp} will be called; in fact, a signal handler could
3164 call it at any point in the code.  As a result, you may get a warning
3165 even when there is in fact no problem because @code{longjmp} cannot
3166 in fact be called at the place which would cause a problem.
3167
3168 Some spurious warnings can be avoided if you declare all the functions
3169 you use that never return as @code{noreturn}.  @xref{Function
3170 Attributes}.
3171
3172 This warning is enabled by @option{-Wall} or @option{-Wextra} in
3173 optimizing compilations (@option{-O1} and above).
3174
3175 @item -Wunknown-pragmas
3176 @opindex Wunknown-pragmas
3177 @cindex warning for unknown pragmas
3178 @cindex unknown pragmas, warning
3179 @cindex pragmas, warning of unknown
3180 Warn when a #pragma directive is encountered which is not understood by
3181 GCC@.  If this command line option is used, warnings will even be issued
3182 for unknown pragmas in system header files.  This is not the case if
3183 the warnings were only enabled by the @option{-Wall} command line option.
3184
3185 @item -Wno-pragmas
3186 @opindex Wno-pragmas
3187 @opindex Wpragmas
3188 Do not warn about misuses of pragmas, such as incorrect parameters,
3189 invalid syntax, or conflicts between pragmas.  See also
3190 @samp{-Wunknown-pragmas}.
3191
3192 @item -Wstrict-aliasing
3193 @opindex Wstrict-aliasing
3194 This option is only active when @option{-fstrict-aliasing} is active.
3195 It warns about code which might break the strict aliasing rules that the
3196 compiler is using for optimization.  The warning does not catch all
3197 cases, but does attempt to catch the more common pitfalls.  It is
3198 included in @option{-Wall}.
3199 It is equivalent to @option{-Wstrict-aliasing=3}
3200
3201 @item -Wstrict-aliasing=n
3202 @opindex Wstrict-aliasing=n
3203 This option is only active when @option{-fstrict-aliasing} is active.
3204 It warns about code which might break the strict aliasing rules that the
3205 compiler is using for optimization.
3206 Higher levels correspond to higher accuracy (fewer false positives).
3207 Higher levels also correspond to more effort, similar to the way -O works.
3208 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=n},
3209 with n=3.
3210
3211 Level 1: Most aggressive, quick, least accurate.
3212 Possibly useful when higher levels
3213 do not warn but -fstrict-aliasing still breaks the code, as it has very few 
3214 false negatives.  However, it has many false positives.
3215 Warns for all pointer conversions between possibly incompatible types, 
3216 even if never dereferenced.  Runs in the frontend only.
3217
3218 Level 2: Aggressive, quick, not too precise.
3219 May still have many false positives (not as many as level 1 though),
3220 and few false negatives (but possibly more than level 1).
3221 Unlike level 1, it only warns when an address is taken.  Warns about
3222 incomplete types.  Runs in the frontend only.
3223
3224 Level 3 (default for @option{-Wstrict-aliasing}): 
3225 Should have very few false positives and few false 
3226 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3227 Takes care of the common punn+dereference pattern in the frontend:
3228 @code{*(int*)&some_float}.
3229 If optimization is enabled, it also runs in the backend, where it deals 
3230 with multiple statement cases using flow-sensitive points-to information.
3231 Only warns when the converted pointer is dereferenced.
3232 Does not warn about incomplete types.
3233
3234 @item -Wstrict-overflow
3235 @itemx -Wstrict-overflow=@var{n}
3236 @opindex Wstrict-overflow
3237 This option is only active when @option{-fstrict-overflow} is active.
3238 It warns about cases where the compiler optimizes based on the
3239 assumption that signed overflow does not occur.  Note that it does not
3240 warn about all cases where the code might overflow: it only warns
3241 about cases where the compiler implements some optimization.  Thus
3242 this warning depends on the optimization level.
3243
3244 An optimization which assumes that signed overflow does not occur is
3245 perfectly safe if the values of the variables involved are such that
3246 overflow never does, in fact, occur.  Therefore this warning can
3247 easily give a false positive: a warning about code which is not
3248 actually a problem.  To help focus on important issues, several
3249 warning levels are defined.  No warnings are issued for the use of
3250 undefined signed overflow when estimating how many iterations a loop
3251 will require, in particular when determining whether a loop will be
3252 executed at all.
3253
3254 @table @gcctabopt
3255 @item -Wstrict-overflow=1
3256 Warn about cases which are both questionable and easy to avoid.  For
3257 example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
3258 compiler will simplify this to @code{1}.  This level of
3259 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
3260 are not, and must be explicitly requested.
3261
3262 @item -Wstrict-overflow=2
3263 Also warn about other cases where a comparison is simplified to a
3264 constant.  For example: @code{abs (x) >= 0}.  This can only be
3265 simplified when @option{-fstrict-overflow} is in effect, because
3266 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
3267 zero.  @option{-Wstrict-overflow} (with no level) is the same as
3268 @option{-Wstrict-overflow=2}.
3269
3270 @item -Wstrict-overflow=3
3271 Also warn about other cases where a comparison is simplified.  For
3272 example: @code{x + 1 > 1} will be simplified to @code{x > 0}.
3273
3274 @item -Wstrict-overflow=4
3275 Also warn about other simplifications not covered by the above cases.
3276 For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}.
3277
3278 @item -Wstrict-overflow=5
3279 Also warn about cases where the compiler reduces the magnitude of a
3280 constant involved in a comparison.  For example: @code{x + 2 > y} will
3281 be simplified to @code{x + 1 >= y}.  This is reported only at the
3282 highest warning level because this simplification applies to many
3283 comparisons, so this warning level will give a very large number of
3284 false positives.
3285 @end table
3286
3287 @item -Warray-bounds
3288 @opindex Wno-array-bounds
3289 @opindex Warray-bounds
3290 This option is only active when @option{-ftree-vrp} is active
3291 (default for -O2 and above). It warns about subscripts to arrays
3292 that are always out of bounds. This warning is enabled by @option{-Wall}.
3293
3294 @item -Wno-div-by-zero
3295 @opindex Wno-div-by-zero
3296 @opindex Wdiv-by-zero
3297 Do not warn about compile-time integer division by zero.  Floating point
3298 division by zero is not warned about, as it can be a legitimate way of
3299 obtaining infinities and NaNs.
3300
3301 @item -Wsystem-headers
3302 @opindex Wsystem-headers
3303 @cindex warnings from system headers
3304 @cindex system headers, warnings from
3305 Print warning messages for constructs found in system header files.
3306 Warnings from system headers are normally suppressed, on the assumption
3307 that they usually do not indicate real problems and would only make the
3308 compiler output harder to read.  Using this command line option tells
3309 GCC to emit warnings from system headers as if they occurred in user
3310 code.  However, note that using @option{-Wall} in conjunction with this
3311 option will @emph{not} warn about unknown pragmas in system
3312 headers---for that, @option{-Wunknown-pragmas} must also be used.
3313
3314 @item -Wfloat-equal
3315 @opindex Wfloat-equal
3316 Warn if floating point values are used in equality comparisons.
3317
3318 The idea behind this is that sometimes it is convenient (for the
3319 programmer) to consider floating-point values as approximations to
3320 infinitely precise real numbers.  If you are doing this, then you need
3321 to compute (by analyzing the code, or in some other way) the maximum or
3322 likely maximum error that the computation introduces, and allow for it
3323 when performing comparisons (and when producing output, but that's a
3324 different problem).  In particular, instead of testing for equality, you
3325 would check to see whether the two values have ranges that overlap; and
3326 this is done with the relational operators, so equality comparisons are
3327 probably mistaken.
3328
3329 @item -Wtraditional @r{(C only)}
3330 @opindex Wtraditional
3331 Warn about certain constructs that behave differently in traditional and
3332 ISO C@.  Also warn about ISO C constructs that have no traditional C
3333 equivalent, and/or problematic constructs which should be avoided.
3334
3335 @itemize @bullet
3336 @item
3337 Macro parameters that appear within string literals in the macro body.
3338 In traditional C macro replacement takes place within string literals,
3339 but does not in ISO C@.
3340
3341 @item
3342 In traditional C, some preprocessor directives did not exist.
3343 Traditional preprocessors would only consider a line to be a directive
3344 if the @samp{#} appeared in column 1 on the line.  Therefore
3345 @option{-Wtraditional} warns about directives that traditional C
3346 understands but would ignore because the @samp{#} does not appear as the
3347 first character on the line.  It also suggests you hide directives like
3348 @samp{#pragma} not understood by traditional C by indenting them.  Some
3349 traditional implementations would not recognize @samp{#elif}, so it
3350 suggests avoiding it altogether.
3351
3352 @item
3353 A function-like macro that appears without arguments.
3354
3355 @item
3356 The unary plus operator.
3357
3358 @item
3359 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
3360 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3361 constants.)  Note, these suffixes appear in macros defined in the system
3362 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
3363 Use of these macros in user code might normally lead to spurious
3364 warnings, however GCC's integrated preprocessor has enough context to
3365 avoid warning in these cases.
3366
3367 @item
3368 A function declared external in one block and then used after the end of
3369 the block.
3370
3371 @item
3372 A @code{switch} statement has an operand of type @code{long}.
3373
3374 @item
3375 A non-@code{static} function declaration follows a @code{static} one.
3376 This construct is not accepted by some traditional C compilers.
3377
3378 @item
3379 The ISO type of an integer constant has a different width or
3380 signedness from its traditional type.  This warning is only issued if
3381 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
3382 typically represent bit patterns, are not warned about.
3383
3384 @item
3385 Usage of ISO string concatenation is detected.
3386
3387 @item
3388 Initialization of automatic aggregates.
3389
3390 @item
3391 Identifier conflicts with labels.  Traditional C lacks a separate
3392 namespace for labels.
3393
3394 @item
3395 Initialization of unions.  If the initializer is zero, the warning is
3396 omitted.  This is done under the assumption that the zero initializer in
3397 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
3398 initializer warnings and relies on default initialization to zero in the
3399 traditional C case.
3400
3401 @item
3402 Conversions by prototypes between fixed/floating point values and vice
3403 versa.  The absence of these prototypes when compiling with traditional
3404 C would cause serious problems.  This is a subset of the possible
3405 conversion warnings, for the full set use @option{-Wtraditional-conversion}.
3406
3407 @item
3408 Use of ISO C style function definitions.  This warning intentionally is
3409 @emph{not} issued for prototype declarations or variadic functions
3410 because these ISO C features will appear in your code when using
3411 libiberty's traditional C compatibility macros, @code{PARAMS} and
3412 @code{VPARAMS}.  This warning is also bypassed for nested functions
3413 because that feature is already a GCC extension and thus not relevant to
3414 traditional C compatibility.
3415 @end itemize
3416
3417 @item -Wtraditional-conversion @r{(C only)}
3418 @opindex Wtraditional-conversion
3419 Warn if a prototype causes a type conversion that is different from what
3420 would happen to the same argument in the absence of a prototype.  This
3421 includes conversions of fixed point to floating and vice versa, and
3422 conversions changing the width or signedness of a fixed point argument
3423 except when the same as the default promotion.
3424
3425 @item -Wdeclaration-after-statement @r{(C only)}
3426 @opindex Wdeclaration-after-statement
3427 Warn when a declaration is found after a statement in a block.  This
3428 construct, known from C++, was introduced with ISO C99 and is by default
3429 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
3430 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
3431
3432 @item -Wundef
3433 @opindex Wundef
3434 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
3435
3436 @item -Wno-endif-labels
3437 @opindex Wno-endif-labels
3438 @opindex Wendif-labels
3439 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
3440
3441 @item -Wshadow
3442 @opindex Wshadow
3443 Warn whenever a local variable shadows another local variable, parameter or
3444 global variable or whenever a built-in function is shadowed.
3445
3446 @item -Wlarger-than-@var{len}
3447 @opindex Wlarger-than
3448 Warn whenever an object of larger than @var{len} bytes is defined.
3449
3450 @item -Wunsafe-loop-optimizations
3451 @opindex Wunsafe-loop-optimizations
3452 Warn if the loop cannot be optimized because the compiler could not
3453 assume anything on the bounds of the loop indices.  With
3454 @option{-funsafe-loop-optimizations} warn if the compiler made
3455 such assumptions.
3456
3457 @item -Wpointer-arith
3458 @opindex Wpointer-arith
3459 Warn about anything that depends on the ``size of'' a function type or
3460 of @code{void}.  GNU C assigns these types a size of 1, for
3461 convenience in calculations with @code{void *} pointers and pointers
3462 to functions.  In C++, warn also when an arithmetic operation involves
3463 @code{NULL}.  This warning is also enabled by @option{-pedantic}.
3464
3465 @item -Wtype-limits
3466 @opindex Wtype-limits
3467 @opindex Wno-type-limits
3468 Warn if a comparison is always true or always false due to the limited
3469 range of the data type, but do not warn for constant expressions.  For
3470 example, warn if an unsigned variable is compared against zero with
3471 @samp{<} or @samp{>=}.  This warning is also enabled by
3472 @option{-Wextra}.
3473
3474 @item -Wbad-function-cast @r{(C only)}
3475 @opindex Wbad-function-cast
3476 Warn whenever a function call is cast to a non-matching type.
3477 For example, warn if @code{int malloc()} is cast to @code{anything *}.
3478
3479 @item -Wc++-compat
3480 Warn about ISO C constructs that are outside of the common subset of
3481 ISO C and ISO C++, e.g.@: request for implicit conversion from
3482 @code{void *} to a pointer to non-@code{void} type.
3483
3484 @item -Wc++0x-compat @r{(C++ and Objective-C++ only)}
3485 Warn about C++ constructs whose meaning differs between ISO C++ 1998 and
3486 ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will become keywords
3487 in ISO C++ 200x.  This warning is enabled by @option{-Wall}.
3488
3489 @item -Wcast-qual
3490 @opindex Wcast-qual
3491 Warn whenever a pointer is cast so as to remove a type qualifier from
3492 the target type.  For example, warn if a @code{const char *} is cast
3493 to an ordinary @code{char *}.
3494
3495 @item -Wcast-align
3496 @opindex Wcast-align
3497 Warn whenever a pointer is cast such that the required alignment of the
3498 target is increased.  For example, warn if a @code{char *} is cast to
3499 an @code{int *} on machines where integers can only be accessed at
3500 two- or four-byte boundaries.
3501
3502 @item -Wwrite-strings
3503 @opindex Wwrite-strings
3504 When compiling C, give string constants the type @code{const
3505 char[@var{length}]} so that
3506 copying the address of one into a non-@code{const} @code{char *}
3507 pointer will get a warning; when compiling C++, warn about the
3508 deprecated conversion from string literals to @code{char *}.  This
3509 warning, by default, is enabled for C++ programs.
3510 These warnings will help you find at
3511 compile time code that can try to write into a string constant, but
3512 only if you have been very careful about using @code{const} in
3513 declarations and prototypes.  Otherwise, it will just be a nuisance;
3514 this is why we did not make @option{-Wall} request these warnings.
3515
3516 @item -Wclobbered
3517 @opindex Wclobbered
3518 Warn for variables that might be changed by @samp{longjmp} or
3519 @samp{vfork}.  This warning is also enabled by @option{-Wextra}.
3520
3521 @item -Wconversion
3522 @opindex Wconversion
3523 @opindex Wno-conversion
3524 Warn for implicit conversions that may alter a value. This includes
3525 conversions between real and integer, like @code{abs (x)} when
3526 @code{x} is @code{double}; conversions between signed and unsigned,
3527 like @code{unsigned ui = -1}; and conversions to smaller types, like
3528 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
3529 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
3530 changed by the conversion like in @code{abs (2.0)}.  Warnings about
3531 conversions between signed and unsigned integers can be disabled by
3532 using @option{-Wno-sign-conversion}.
3533
3534 For C++, also warn for conversions between @code{NULL} and non-pointer
3535 types; confusing overload resolution for user-defined conversions; and
3536 conversions that will never use a type conversion operator:
3537 conversions to @code{void}, the same type, a base class or a reference
3538 to them. Warnings about conversions between signed and unsigned
3539 integers are disabled by default in C++ unless
3540 @option{-Wsign-conversion} is explicitly enabled.
3541
3542 @item -Wempty-body
3543 @opindex Wempty-body
3544 Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
3545 while} statement.  Additionally, in C++, warn when an empty body occurs
3546 in a @samp{while} or @samp{for} statement with no whitespacing before
3547 the semicolon.  This warning is also enabled by @option{-Wextra}.
3548
3549 @item -Wsign-compare
3550 @opindex Wsign-compare
3551 @cindex warning for comparison of signed and unsigned values
3552 @cindex comparison of signed and unsigned values, warning
3553 @cindex signed and unsigned values, comparison warning
3554 Warn when a comparison between signed and unsigned values could produce
3555 an incorrect result when the signed value is converted to unsigned.
3556 This warning is also enabled by @option{-Wextra}; to get the other warnings
3557 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3558
3559 @item -Wsign-conversion
3560 @opindex Wsign-conversion
3561 @opindex Wno-sign-conversion
3562 Warn for implicit conversions that may change the sign of an integer
3563 value, like assigning a signed integer expression to an unsigned
3564 integer variable. An explicit cast silences the warning. In C, this
3565 option is enabled also by @option{-Wconversion}.
3566
3567 @item -Waddress
3568 @opindex Waddress
3569 @opindex Wno-address
3570 Warn about suspicious uses of memory addresses. These include using
3571 the address of a function in a conditional expression, such as
3572 @code{void func(void); if (func)}, and comparisons against the memory
3573 address of a string literal, such as @code{if (x == "abc")}.  Such
3574 uses typically indicate a programmer error: the address of a function
3575 always evaluates to true, so their use in a conditional usually
3576 indicate that the programmer forgot the parentheses in a function
3577 call; and comparisons against string literals result in unspecified
3578 behavior and are not portable in C, so they usually indicate that the
3579 programmer intended to use @code{strcmp}.  This warning is enabled by
3580 @option{-Wall}.
3581
3582 @item -Wlogical-op
3583 @opindex Wlogical-op
3584 @opindex Wno-logical-op
3585 Warn about suspicious uses of logical operators in expressions.
3586 This includes using logical operators in contexts where a
3587 bit-wise operator is likely to be expected.
3588
3589 @item -Waggregate-return
3590 @opindex Waggregate-return
3591 Warn if any functions that return structures or unions are defined or
3592 called.  (In languages where you can return an array, this also elicits
3593 a warning.)
3594
3595 @item -Wno-attributes
3596 @opindex Wno-attributes
3597 @opindex Wattributes
3598 Do not warn if an unexpected @code{__attribute__} is used, such as
3599 unrecognized attributes, function attributes applied to variables,
3600 etc.  This will not stop errors for incorrect use of supported
3601 attributes.
3602
3603 @item -Wstrict-prototypes @r{(C only)}
3604 @opindex Wstrict-prototypes
3605 Warn if a function is declared or defined without specifying the
3606 argument types.  (An old-style function definition is permitted without
3607 a warning if preceded by a declaration which specifies the argument
3608 types.)
3609
3610 @item -Wold-style-declaration @r{(C only)}
3611 @opindex Wold-style-declaration
3612 Warn for obsolescent usages, according to the C Standard, in a
3613 declaration. For example, warn if storage-class specifiers like
3614 @code{static} are not the first things in a declaration.  This warning
3615 is also enabled by @option{-Wextra}.
3616
3617 @item -Wold-style-definition @r{(C only)}
3618 @opindex Wold-style-definition