OSDN Git Service

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