OSDN Git Service

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