From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/doc/invoke.texi | 18730 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 18730 insertions(+) create mode 100644 gcc/doc/invoke.texi (limited to 'gcc/doc/invoke.texi') diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi new file mode 100644 index 000000000..acd457064 --- /dev/null +++ b/gcc/doc/invoke.texi @@ -0,0 +1,18730 @@ +@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +@c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +@c Free Software Foundation, Inc. +@c This is part of the GCC manual. +@c For copying conditions, see the file gcc.texi. + +@ignore +@c man begin INCLUDE +@include gcc-vers.texi +@c man end + +@c man begin COPYRIGHT +Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'' and ``Funding +Free Software'', the Front-Cover texts being (a) (see below), and with +the Back-Cover Texts being (b) (see below). A copy of the license is +included in the gfdl(7) man page. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@c man end +@c Set file name and title for the man page. +@setfilename gcc +@settitle GNU project C and C++ compiler +@c man begin SYNOPSIS +gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}] + [@option{-g}] [@option{-pg}] [@option{-O}@var{level}] + [@option{-W}@var{warn}@dots{}] [@option{-pedantic}] + [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] + [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] + [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}] + [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{} + +Only the most useful options are listed here; see below for the +remainder. @samp{g++} accepts mostly the same options as @samp{gcc}. +@c man end +@c man begin SEEALSO +gpl(7), gfdl(7), fsf-funding(7), +cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) +and the Info entries for @file{gcc}, @file{cpp}, @file{as}, +@file{ld}, @file{binutils} and @file{gdb}. +@c man end +@c man begin BUGS +For instructions on reporting bugs, see +@w{@value{BUGURL}}. +@c man end +@c man begin AUTHOR +See the Info entry for @command{gcc}, or +@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}}, +for contributors to GCC@. +@c man end +@end ignore + +@node Invoking GCC +@chapter GCC Command Options +@cindex GCC command options +@cindex command options +@cindex options, GCC command + +@c man begin DESCRIPTION +When you invoke GCC, it normally does preprocessing, compilation, +assembly and linking. The ``overall options'' allow you to stop this +process at an intermediate stage. For example, the @option{-c} option +says not to run the linker. Then the output consists of object files +output by the assembler. + +Other options are passed on to one stage of processing. Some options +control the preprocessor and others the compiler itself. Yet other +options control the assembler and linker; most of these are not +documented here, since you rarely need to use any of them. + +@cindex C compilation options +Most of the command line options that you can use with GCC are useful +for C programs; when an option is only useful with another language +(usually C++), the explanation says so explicitly. If the description +for a particular option does not mention a source language, you can use +that option with all supported languages. + +@cindex C++ compilation options +@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special +options for compiling C++ programs. + +@cindex grouping options +@cindex options, grouping +The @command{gcc} program accepts options and file names as operands. Many +options have multi-letter names; therefore multiple single-letter options +may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d +-v}}. + +@cindex order of options +@cindex options, order +You can mix options and other arguments. For the most part, the order +you use doesn't matter. Order does matter when you use several +options of the same kind; for example, if you specify @option{-L} more +than once, the directories are searched in the order specified. Also, +the placement of the @option{-l} option is significant. + +Many options have long names starting with @samp{-f} or with +@samp{-W}---for example, +@option{-fmove-loop-invariants}, @option{-Wformat} and so on. Most of +these have both positive and negative forms; the negative form of +@option{-ffoo} would be @option{-fno-foo}. This manual documents +only one of these two forms, whichever one is not the default. + +@c man end + +@xref{Option Index}, for an index to GCC's options. + +@menu +* Option Summary:: Brief list of all options, without explanations. +* Overall Options:: Controlling the kind of output: + an executable, object files, assembler files, + or preprocessed source. +* Invoking G++:: Compiling C++ programs. +* C Dialect Options:: Controlling the variant of C language compiled. +* C++ Dialect Options:: Variations on C++. +* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C + and Objective-C++. +* Language Independent Options:: Controlling how diagnostics should be + formatted. +* Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Optimize Options:: How much optimization? +* Preprocessor Options:: Controlling header files and macro definitions. + Also, getting dependency information for Make. +* Assembler Options:: Passing options to the assembler. +* Link Options:: Specifying libraries and so on. +* Directory Options:: Where to find header files and libraries. + Where to find the compiler executable files. +* Spec Files:: How to pass switches to sub-processes. +* Target Options:: Running a cross-compiler, or an old version of GCC. +* Submodel Options:: Specifying minor hardware or convention variations, + such as 68010 vs 68020. +* Code Gen Options:: Specifying conventions for function calls, data layout + and register usage. +* Environment Variables:: Env vars that affect GCC. +* Precompiled Headers:: Compiling a header once, and using it many times. +@end menu + +@c man begin OPTIONS + +@node Option Summary +@section Option Summary + +Here is a summary of all the options, grouped by type. Explanations are +in the following sections. + +@table @emph +@item Overall Options +@xref{Overall Options,,Options Controlling the Kind of Output}. +@gccoptlist{-c -S -E -o @var{file} -no-canonical-prefixes @gol +-pipe -pass-exit-codes @gol +-x @var{language} -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help @gol +--version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg} @gol +-fdump-ada-spec@r{[}-slim@r{]} -fdump-go-spec=@var{file}} + +@item C Language Options +@xref{C Dialect Options,,Options Controlling C Dialect}. +@gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol +-aux-info @var{filename} @gol +-fno-asm -fno-builtin -fno-builtin-@var{function} @gol +-fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions @gol +-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol +-fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol +-fsigned-bitfields -fsigned-char @gol +-funsigned-bitfields -funsigned-char} + +@item C++ Language Options +@xref{C++ Dialect Options,,Options Controlling C++ Dialect}. +@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol +-fconserve-space -fconstexpr-depth=@var{n} -ffriend-injection @gol +-fno-elide-constructors @gol +-fno-enforce-eh-specs @gol +-ffor-scope -fno-for-scope -fno-gnu-keywords @gol +-fno-implicit-templates @gol +-fno-implicit-inline-templates @gol +-fno-implement-inlines -fms-extensions @gol +-fno-nonansi-builtins -fnothrow-opt -fno-operator-names @gol +-fno-optional-diags -fpermissive @gol +-fno-pretty-templates @gol +-frepo -fno-rtti -fstats -ftemplate-depth=@var{n} @gol +-fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ @gol +-fno-default-inline -fvisibility-inlines-hidden @gol +-fvisibility-ms-compat @gol +-Wabi -Wconversion-null -Wctor-dtor-privacy @gol +-Wnoexcept -Wnon-virtual-dtor -Wreorder @gol +-Weffc++ -Wstrict-null-sentinel @gol +-Wno-non-template-friend -Wold-style-cast @gol +-Woverloaded-virtual -Wno-pmf-conversions @gol +-Wsign-promo} + +@item Objective-C and Objective-C++ Language Options +@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling +Objective-C and Objective-C++ Dialects}. +@gccoptlist{-fconstant-string-class=@var{class-name} @gol +-fgnu-runtime -fnext-runtime @gol +-fno-nil-receivers @gol +-fobjc-abi-version=@var{n} @gol +-fobjc-call-cxx-cdtors @gol +-fobjc-direct-dispatch @gol +-fobjc-exceptions @gol +-fobjc-gc @gol +-fobjc-nilcheck @gol +-fobjc-std=objc1 @gol +-freplace-objc-classes @gol +-fzero-link @gol +-gen-decls @gol +-Wassign-intercept @gol +-Wno-protocol -Wselector @gol +-Wstrict-selector-match @gol +-Wundeclared-selector} + +@item Language Independent Options +@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. +@gccoptlist{-fmessage-length=@var{n} @gol +-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol +-fno-diagnostics-show-option} + +@item Warning Options +@xref{Warning Options,,Options to Request or Suppress Warnings}. +@gccoptlist{-fsyntax-only -fmax-errors=@var{n} -pedantic @gol +-pedantic-errors @gol +-w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol +-Wno-attributes -Wno-builtin-macro-redefined @gol +-Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol +-Wchar-subscripts -Wclobbered -Wcomment @gol +-Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol +-Wno-deprecated-declarations -Wdisabled-optimization @gol +-Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol +-Wno-endif-labels -Werror -Werror=* @gol +-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol +-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol +-Wformat-security -Wformat-y2k @gol +-Wframe-larger-than=@var{len} -Wjump-misses-init -Wignored-qualifiers @gol +-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol +-Winit-self -Winline @gol +-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol +-Winvalid-pch -Wlarger-than=@var{len} -Wunsafe-loop-optimizations @gol +-Wlogical-op -Wlong-long @gol +-Wmain -Wmissing-braces -Wmissing-field-initializers @gol +-Wmissing-format-attribute -Wmissing-include-dirs @gol +-Wno-mudflap @gol +-Wno-multichar -Wnonnull -Wno-overflow @gol +-Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol +-Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol +-Wpointer-arith -Wno-pointer-to-int-cast @gol +-Wredundant-decls @gol +-Wreturn-type -Wsequence-point -Wshadow @gol +-Wsign-compare -Wsign-conversion -Wstack-protector @gol +-Wstrict-aliasing -Wstrict-aliasing=n @gol +-Wstrict-overflow -Wstrict-overflow=@var{n} @gol +-Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{]} @gol +-Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand @gol +-Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef @gol +-Wuninitialized -Wunknown-pragmas -Wno-pragmas @gol +-Wunsuffixed-float-constants -Wunused -Wunused-function @gol +-Wunused-label -Wunused-parameter -Wno-unused-result -Wunused-value @gol +-Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable @gol +-Wvariadic-macros -Wvla -Wvolatile-register-var -Wwrite-strings} + +@item C and Objective-C-only Warning Options +@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol +-Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs @gol +-Wold-style-declaration -Wold-style-definition @gol +-Wstrict-prototypes -Wtraditional -Wtraditional-conversion @gol +-Wdeclaration-after-statement -Wpointer-sign} + +@item Debugging Options +@xref{Debugging Options,,Options for Debugging Your Program or GCC}. +@gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol +-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol +-fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol +-fdump-translation-unit@r{[}-@var{n}@r{]} @gol +-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol +-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol +-fdump-statistics @gol +-fdump-tree-all @gol +-fdump-tree-original@r{[}-@var{n}@r{]} @gol +-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol +-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol +-fdump-tree-ch @gol +-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol +-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol +-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol +-fdump-tree-dom@r{[}-@var{n}@r{]} @gol +-fdump-tree-dse@r{[}-@var{n}@r{]} @gol +-fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol +-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol +-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol +-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol +-fdump-tree-nrv -fdump-tree-vect @gol +-fdump-tree-sink @gol +-fdump-tree-sra@r{[}-@var{n}@r{]} @gol +-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol +-fdump-tree-fre@r{[}-@var{n}@r{]} @gol +-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol +-ftree-vectorizer-verbose=@var{n} @gol +-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol +-fdump-final-insns=@var{file} @gol +-fcompare-debug@r{[}=@var{opts}@r{]} -fcompare-debug-second @gol +-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol +-feliminate-unused-debug-symbols -femit-class-debug-always @gol +-fenable-icf-debug @gol +-fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol +-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol +-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol +-fstack-usage -ftest-coverage -ftime-report -fvar-tracking @gol +-fvar-tracking-assignments -fvar-tracking-assignments-toggle @gol +-g -g@var{level} -gtoggle -gcoff -gdwarf-@var{version} @gol +-ggdb -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf @gol +-gvms -gxcoff -gxcoff+ @gol +-fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol +-fdebug-prefix-map=@var{old}=@var{new} @gol +-femit-struct-debug-baseonly -femit-struct-debug-reduced @gol +-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol +-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol +-print-multi-directory -print-multi-lib -print-multi-os-directory @gol +-print-prog-name=@var{program} -print-search-dirs -Q @gol +-print-sysroot -print-sysroot-headers-suffix @gol +-save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}} + +@item Optimization Options +@xref{Optimize Options,,Options that Control Optimization}. +@gccoptlist{-falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol +-falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol +-fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol +-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol +-fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol +-fcompare-elim -fcprop-registers -fcrossjumping @gol +-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol +-fcx-limited-range @gol +-fdata-sections -fdce -fdce -fdelayed-branch @gol +-fdelete-null-pointer-checks -fdse -fdevirtualize -fdse @gol +-fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math @gol +-ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol +-fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol +-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol +-fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol +-finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol +-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg @gol +-fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol +-fipa-struct-reorg -fira-algorithm=@var{algorithm} @gol +-fira-region=@var{region} @gol +-fira-loop-pressure -fno-ira-share-save-slots @gol +-fno-ira-share-spill-slots -fira-verbose=@var{n} @gol +-fivopts -fkeep-inline-functions -fkeep-static-consts @gol +-floop-block -floop-flatten -floop-interchange -floop-strip-mine @gol +-floop-parallelize-all -flto -flto-compression-level +-flto-partition=@var{alg} -flto-report -fmerge-all-constants @gol +-fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol +-fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg @gol +-fno-default-inline @gol +-fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol +-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol +-fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol +-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol +-fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol +-fpartial-inlining -fpeel-loops -fpredictive-commoning @gol +-fprefetch-loop-arrays @gol +-fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol +-fprofile-generate=@var{path} @gol +-fprofile-use -fprofile-use=@var{path} -fprofile-values @gol +-freciprocal-math -fregmove -frename-registers -freorder-blocks @gol +-freorder-blocks-and-partition -freorder-functions @gol +-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol +-frounding-math -fsched2-use-superblocks -fsched-pressure @gol +-fsched-spec-load -fsched-spec-load-dangerous @gol +-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol +-fsched-group-heuristic -fsched-critical-path-heuristic @gol +-fsched-spec-insn-heuristic -fsched-rank-heuristic @gol +-fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol +-fschedule-insns -fschedule-insns2 -fsection-anchors @gol +-fselective-scheduling -fselective-scheduling2 @gol +-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol +-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol +-fsplit-wide-types -fstack-protector -fstack-protector-all @gol +-fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer @gol +-ftree-bit-ccp @gol +-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol +-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol +-ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol +-ftree-loop-if-convert-stores -ftree-loop-im @gol +-ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol +-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol +-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-pta -ftree-reassoc @gol +-ftree-sink -ftree-sra -ftree-switch-conversion @gol +-ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol +-funit-at-a-time -funroll-all-loops -funroll-loops @gol +-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol +-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol +-fwhole-program -fwpa -fuse-linker-plugin @gol +--param @var{name}=@var{value} +-O -O0 -O1 -O2 -O3 -Os -Ofast} + +@item Preprocessor Options +@xref{Preprocessor Options,,Options Controlling the Preprocessor}. +@gccoptlist{-A@var{question}=@var{answer} @gol +-A-@var{question}@r{[}=@var{answer}@r{]} @gol +-C -dD -dI -dM -dN @gol +-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol +-idirafter @var{dir} @gol +-include @var{file} -imacros @var{file} @gol +-iprefix @var{file} -iwithprefix @var{dir} @gol +-iwithprefixbefore @var{dir} -isystem @var{dir} @gol +-imultilib @var{dir} -isysroot @var{dir} @gol +-M -MM -MF -MG -MP -MQ -MT -nostdinc @gol +-P -fworking-directory -remap @gol +-trigraphs -undef -U@var{macro} -Wp,@var{option} @gol +-Xpreprocessor @var{option}} + +@item Assembler Option +@xref{Assembler Options,,Passing Options to the Assembler}. +@gccoptlist{-Wa,@var{option} -Xassembler @var{option}} + +@item Linker Options +@xref{Link Options,,Options for Linking}. +@gccoptlist{@var{object-file-name} -l@var{library} @gol +-nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic @gol +-s -static -static-libgcc -static-libstdc++ -shared @gol +-shared-libgcc -symbolic @gol +-T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol +-u @var{symbol}} + +@item Directory Options +@xref{Directory Options,,Options for Directory Search}. +@gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir}} +-iquote@var{dir} -L@var{dir} -specs=@var{file} -I- +--sysroot=@var{dir} + +@item Machine Dependent Options +@xref{Submodel Options,,Hardware Models and Configurations}. +@c This list is ordered alphanumerically by subsection name. +@c Try and put the significant identifier (CPU or system) first, +@c so users have a clue at guessing where the ones they want will be. + +@emph{ARC Options} +@gccoptlist{-EB -EL @gol +-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text-section} @gol +-mdata=@var{data-section} -mrodata=@var{readonly-data-section}} + +@emph{ARM Options} +@gccoptlist{-mapcs-frame -mno-apcs-frame @gol +-mabi=@var{name} @gol +-mapcs-stack-check -mno-apcs-stack-check @gol +-mapcs-float -mno-apcs-float @gol +-mapcs-reentrant -mno-apcs-reentrant @gol +-msched-prolog -mno-sched-prolog @gol +-mlittle-endian -mbig-endian -mwords-little-endian @gol +-mfloat-abi=@var{name} -msoft-float -mhard-float -mfpe @gol +-mfp16-format=@var{name} +-mthumb-interwork -mno-thumb-interwork @gol +-mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol +-mstructure-size-boundary=@var{n} @gol +-mabort-on-noreturn @gol +-mlong-calls -mno-long-calls @gol +-msingle-pic-base -mno-single-pic-base @gol +-mpic-register=@var{reg} @gol +-mnop-fun-dllimport @gol +-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol +-mpoke-function-name @gol +-mthumb -marm @gol +-mtpcs-frame -mtpcs-leaf-frame @gol +-mcaller-super-interworking -mcallee-super-interworking @gol +-mtp=@var{name} @gol +-mword-relocations @gol +-mfix-cortex-m3-ldrd} + +@emph{AVR Options} +@gccoptlist{-mmcu=@var{mcu} -mno-interrupts @gol +-mcall-prologues -mtiny-stack -mint8} + +@emph{Blackfin Options} +@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol +-msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol +-mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol +-mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library @gol +-mno-id-shared-library -mshared-library-id=@var{n} @gol +-mleaf-id-shared-library -mno-leaf-id-shared-library @gol +-msep-data -mno-sep-data -mlong-calls -mno-long-calls @gol +-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram @gol +-micplb} + +@emph{CRIS Options} +@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol +-mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol +-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol +-mstack-align -mdata-align -mconst-align @gol +-m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol +-melf -maout -melinux -mlinux -sim -sim2 @gol +-mmul-bug-workaround -mno-mul-bug-workaround} + +@emph{CRX Options} +@gccoptlist{-mmac -mpush-args} + +@emph{Darwin Options} +@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal @gol +-arch_only -bind_at_load -bundle -bundle_loader @gol +-client_name -compatibility_version -current_version @gol +-dead_strip @gol +-dependency-file -dylib_file -dylinker_install_name @gol +-dynamic -dynamiclib -exported_symbols_list @gol +-filelist -flat_namespace -force_cpusubtype_ALL @gol +-force_flat_namespace -headerpad_max_install_names @gol +-iframework @gol +-image_base -init -install_name -keep_private_externs @gol +-multi_module -multiply_defined -multiply_defined_unused @gol +-noall_load -no_dead_strip_inits_and_terms @gol +-nofixprebinding -nomultidefs -noprebind -noseglinkedit @gol +-pagezero_size -prebind -prebind_all_twolevel_modules @gol +-private_bundle -read_only_relocs -sectalign @gol +-sectobjectsymbols -whyload -seg1addr @gol +-sectcreate -sectobjectsymbols -sectorder @gol +-segaddr -segs_read_only_addr -segs_read_write_addr @gol +-seg_addr_table -seg_addr_table_filename -seglinkedit @gol +-segprot -segs_read_only_addr -segs_read_write_addr @gol +-single_module -static -sub_library -sub_umbrella @gol +-twolevel_namespace -umbrella -undefined @gol +-unexported_symbols_list -weak_reference_mismatches @gol +-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol +-mkernel -mone-byte-bool} + +@emph{DEC Alpha Options} +@gccoptlist{-mno-fp-regs -msoft-float -malpha-as -mgas @gol +-mieee -mieee-with-inexact -mieee-conformant @gol +-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol +-mtrap-precision=@var{mode} -mbuild-constants @gol +-mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol +-mbwx -mmax -mfix -mcix @gol +-mfloat-vax -mfloat-ieee @gol +-mexplicit-relocs -msmall-data -mlarge-data @gol +-msmall-text -mlarge-text @gol +-mmemory-latency=@var{time}} + +@emph{DEC Alpha/VMS Options} +@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64} + +@emph{FR30 Options} +@gccoptlist{-msmall-model -mno-lsim} + +@emph{FRV Options} +@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol +-mhard-float -msoft-float @gol +-malloc-cc -mfixed-cc -mdword -mno-dword @gol +-mdouble -mno-double @gol +-mmedia -mno-media -mmuladd -mno-muladd @gol +-mfdpic -minline-plt -mgprel-ro -multilib-library-pic @gol +-mlinked-fp -mlong-calls -malign-labels @gol +-mlibrary-pic -macc-4 -macc-8 @gol +-mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move @gol +-moptimize-membar -mno-optimize-membar @gol +-mscc -mno-scc -mcond-exec -mno-cond-exec @gol +-mvliw-branch -mno-vliw-branch @gol +-mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec @gol +-mno-nested-cond-exec -mtomcat-stats @gol +-mTLS -mtls @gol +-mcpu=@var{cpu}} + +@emph{GNU/Linux Options} +@gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol +-tno-android-cc -tno-android-ld} + +@emph{H8/300 Options} +@gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300} + +@emph{HPPA Options} +@gccoptlist{-march=@var{architecture-type} @gol +-mbig-switch -mdisable-fpregs -mdisable-indexing @gol +-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol +-mfixed-range=@var{register-range} @gol +-mjump-in-delay -mlinker-opt -mlong-calls @gol +-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol +-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol +-mno-jump-in-delay -mno-long-load-store @gol +-mno-portable-runtime -mno-soft-float @gol +-mno-space-regs -msoft-float -mpa-risc-1-0 @gol +-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol +-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol +-munix=@var{unix-std} -nolibdld -static -threads} + +@emph{i386 and x86-64 Options} +@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol +-mfpmath=@var{unit} @gol +-masm=@var{dialect} -mno-fancy-math-387 @gol +-mno-fp-ret-in-387 -msoft-float @gol +-mno-wide-multiply -mrtd -malign-double @gol +-mpreferred-stack-boundary=@var{num} +-mincoming-stack-boundary=@var{num} @gol +-mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip @gol +-mvzeroupper -mprefer-avx128 @gol +-mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol +-maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfused-madd @gol +-msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlwp @gol +-mthreads -mno-align-stringops -minline-all-stringops @gol +-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol +-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol +-m96bit-long-double -mregparm=@var{num} -msseregparm @gol +-mveclibabi=@var{type} -mvect8-ret-in-mem @gol +-mpc32 -mpc64 -mpc80 -mstackrealign @gol +-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol +-mcmodel=@var{code-model} -mabi=@var{name} @gol +-m32 -m64 -mlarge-data-threshold=@var{num} @gol +-msse2avx -mfentry -m8bit-idiv @gol +-mavx256-split-unaligned-load -mavx256-split-unaligned-store} + +@emph{i386 and x86-64 Windows Options} +@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll +-mnop-fun-dllimport -mthread @gol +-municode -mwin32 -mwindows -fno-set-stack-executable} + +@emph{IA-64 Options} +@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol +-mvolatile-asm-stop -mregister-names -msdata -mno-sdata @gol +-mconstant-gp -mauto-pic -mfused-madd @gol +-minline-float-divide-min-latency @gol +-minline-float-divide-max-throughput @gol +-mno-inline-float-divide @gol +-minline-int-divide-min-latency @gol +-minline-int-divide-max-throughput @gol +-mno-inline-int-divide @gol +-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol +-mno-inline-sqrt @gol +-mdwarf2-asm -mearly-stop-bits @gol +-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol +-mtune=@var{cpu-type} -milp32 -mlp64 @gol +-msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol +-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol +-msched-spec-ldc -msched-spec-control-ldc @gol +-msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol +-msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol +-msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol +-msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}} + +@emph{IA-64/VMS Options} +@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64} + +@emph{LM32 Options} +@gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol +-msign-extend-enabled -muser-enabled} + +@emph{M32R/D Options} +@gccoptlist{-m32r2 -m32rx -m32r @gol +-mdebug @gol +-malign-loops -mno-align-loops @gol +-missue-rate=@var{number} @gol +-mbranch-cost=@var{number} @gol +-mmodel=@var{code-size-model-type} @gol +-msdata=@var{sdata-type} @gol +-mno-flush-func -mflush-func=@var{name} @gol +-mno-flush-trap -mflush-trap=@var{number} @gol +-G @var{num}} + +@emph{M32C Options} +@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}} + +@emph{M680x0 Options} +@gccoptlist{-march=@var{arch} -mcpu=@var{cpu} -mtune=@var{tune} +-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol +-m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 @gol +-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 @gol +-mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort @gol +-mno-short -mhard-float -m68881 -msoft-float -mpcrel @gol +-malign-int -mstrict-align -msep-data -mno-sep-data @gol +-mshared-library-id=n -mid-shared-library -mno-id-shared-library @gol +-mxgot -mno-xgot} + +@emph{M68hc1x Options} +@gccoptlist{-m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 @gol +-mauto-incdec -minmax -mlong-calls -mshort @gol +-msoft-reg-count=@var{count}} + +@emph{MCore Options} +@gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol +-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol +-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol +-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol +-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} + +@emph{MeP Options} +@gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol +-mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol +-mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol +-mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol +-mtiny=@var{n}} + +@emph{MicroBlaze Options} +@gccoptlist{-msoft-float -mhard-float -msmall-divides -mcpu=@var{cpu} @gol +-mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift @gol +-mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss @gol +-mxl-multiply-high -mxl-float-convert -mxl-float-sqrt @gol +-mxl-mode-@var{app-model}} + +@emph{MIPS Options} +@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol +-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 @gol +-mips64 -mips64r2 @gol +-mips16 -mno-mips16 -mflip-mips16 @gol +-minterlink-mips16 -mno-interlink-mips16 @gol +-mabi=@var{abi} -mabicalls -mno-abicalls @gol +-mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot @gol +-mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float @gol +-msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol +-mfpu=@var{fpu-type} @gol +-msmartmips -mno-smartmips @gol +-mpaired-single -mno-paired-single -mdmx -mno-mdmx @gol +-mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc @gol +-mlong64 -mlong32 -msym32 -mno-sym32 @gol +-G@var{num} -mlocal-sdata -mno-local-sdata @gol +-mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt @gol +-membedded-data -mno-embedded-data @gol +-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol +-mcode-readable=@var{setting} @gol +-msplit-addresses -mno-split-addresses @gol +-mexplicit-relocs -mno-explicit-relocs @gol +-mcheck-zero-division -mno-check-zero-division @gol +-mdivide-traps -mdivide-breaks @gol +-mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol +-mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol +-mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol +-mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 @gol +-mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 @gol +-mflush-func=@var{func} -mno-flush-func @gol +-mbranch-cost=@var{num} -mbranch-likely -mno-branch-likely @gol +-mfp-exceptions -mno-fp-exceptions @gol +-mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol +-mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address} + +@emph{MMIX Options} +@gccoptlist{-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol +-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol +-melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol +-mno-base-addresses -msingle-exit -mno-single-exit} + +@emph{MN10300 Options} +@gccoptlist{-mmult-bug -mno-mult-bug @gol +-mno-am33 -mam33 -mam33-2 -mam34 @gol +-mtune=@var{cpu-type} @gol +-mreturn-pointer-on-d0 @gol +-mno-crt0 -mrelax -mliw} + +@emph{PDP-11 Options} +@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol +-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol +-mint16 -mno-int32 -mfloat32 -mno-float64 @gol +-mfloat64 -mno-float32 -mabshi -mno-abshi @gol +-mbranch-expensive -mbranch-cheap @gol +-munix-asm -mdec-asm} + +@emph{picoChip Options} +@gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} @gol +-msymbol-as-address -mno-inefficient-warnings} + +@emph{PowerPC Options} +See RS/6000 and PowerPC Options. + +@emph{RS/6000 and PowerPC Options} +@gccoptlist{-mcpu=@var{cpu-type} @gol +-mtune=@var{cpu-type} @gol +-mcmodel=@var{code-model} @gol +-mpower -mno-power -mpower2 -mno-power2 @gol +-mpowerpc -mpowerpc64 -mno-powerpc @gol +-maltivec -mno-altivec @gol +-mpowerpc-gpopt -mno-powerpc-gpopt @gol +-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol +-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd @gol +-mfprnd -mno-fprnd @gol +-mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol +-mnew-mnemonics -mold-mnemonics @gol +-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol +-m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol +-malign-power -malign-natural @gol +-msoft-float -mhard-float -mmultiple -mno-multiple @gol +-msingle-float -mdouble-float -msimple-fpu @gol +-mstring -mno-string -mupdate -mno-update @gol +-mavoid-indexed-addresses -mno-avoid-indexed-addresses @gol +-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol +-mstrict-align -mno-strict-align -mrelocatable @gol +-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol +-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol +-mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base @gol +-mprioritize-restricted-insns=@var{priority} @gol +-msched-costly-dep=@var{dependence_type} @gol +-minsert-sched-nops=@var{scheme} @gol +-mcall-sysv -mcall-netbsd @gol +-maix-struct-return -msvr4-struct-return @gol +-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol +-mblock-move-inline-limit=@var{num} @gol +-misel -mno-isel @gol +-misel=yes -misel=no @gol +-mspe -mno-spe @gol +-mspe=yes -mspe=no @gol +-mpaired @gol +-mgen-cell-microcode -mwarn-cell-microcode @gol +-mvrsave -mno-vrsave @gol +-mmulhw -mno-mulhw @gol +-mdlmzb -mno-dlmzb @gol +-mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol +-mprototype -mno-prototype @gol +-msim -mmvme -mads -myellowknife -memb -msdata @gol +-msdata=@var{opt} -mvxworks -G @var{num} -pthread @gol +-mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision +-mno-recip-precision @gol +-mveclibabi=@var{type} -mfriz -mno-friz} + +@emph{RX Options} +@gccoptlist{-m64bit-doubles -m32bit-doubles -fpu -nofpu@gol +-mcpu=@gol +-mbig-endian-data -mlittle-endian-data @gol +-msmall-data @gol +-msim -mno-sim@gol +-mas100-syntax -mno-as100-syntax@gol +-mrelax@gol +-mmax-constant-size=@gol +-mint-register=@gol +-msave-acc-in-interrupts} + +@emph{S/390 and zSeries Options} +@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol +-mhard-float -msoft-float -mhard-dfp -mno-hard-dfp @gol +-mlong-double-64 -mlong-double-128 @gol +-mbackchain -mno-backchain -mpacked-stack -mno-packed-stack @gol +-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol +-m64 -m31 -mdebug -mno-debug -mesa -mzarch @gol +-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd @gol +-mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard} + +@emph{Score Options} +@gccoptlist{-meb -mel @gol +-mnhwloop @gol +-muls @gol +-mmac @gol +-mscore5 -mscore5u -mscore7 -mscore7d} + +@emph{SH Options} +@gccoptlist{-m1 -m2 -m2e @gol +-m2a-nofpu -m2a-single-only -m2a-single -m2a @gol +-m3 -m3e @gol +-m4-nofpu -m4-single-only -m4-single -m4 @gol +-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol +-m5-64media -m5-64media-nofpu @gol +-m5-32media -m5-32media-nofpu @gol +-m5-compact -m5-compact-nofpu @gol +-mb -ml -mdalign -mrelax @gol +-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol +-mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct @gol +-mspace -mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol +-mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol +-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol +-maccumulate-outgoing-args -minvalid-symbols} + +@emph{Solaris 2 Options} +@gccoptlist{-mimpure-text -mno-impure-text @gol +-threads -pthreads -pthread} + +@emph{SPARC Options} +@gccoptlist{-mcpu=@var{cpu-type} @gol +-mtune=@var{cpu-type} @gol +-mcmodel=@var{code-model} @gol +-m32 -m64 -mapp-regs -mno-app-regs @gol +-mfaster-structs -mno-faster-structs @gol +-mfpu -mno-fpu -mhard-float -msoft-float @gol +-mhard-quad-float -msoft-quad-float @gol +-mlittle-endian @gol +-mstack-bias -mno-stack-bias @gol +-munaligned-doubles -mno-unaligned-doubles @gol +-mv8plus -mno-v8plus -mvis -mno-vis @gol +-mfix-at697f} + +@emph{SPU Options} +@gccoptlist{-mwarn-reloc -merror-reloc @gol +-msafe-dma -munsafe-dma @gol +-mbranch-hints @gol +-msmall-mem -mlarge-mem -mstdmain @gol +-mfixed-range=@var{register-range} @gol +-mea32 -mea64 @gol +-maddress-space-conversion -mno-address-space-conversion @gol +-mcache-size=@var{cache-size} @gol +-matomic-updates -mno-atomic-updates} + +@emph{System V Options} +@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}} + +@emph{V850 Options} +@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol +-mprolog-function -mno-prolog-function -mspace @gol +-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol +-mapp-regs -mno-app-regs @gol +-mdisable-callt -mno-disable-callt @gol +-mv850e2v3 @gol +-mv850e2 @gol +-mv850e1 -mv850es @gol +-mv850e @gol +-mv850 -mbig-switch} + +@emph{VAX Options} +@gccoptlist{-mg -mgnu -munix} + +@emph{VxWorks Options} +@gccoptlist{-mrtp -non-static -Bstatic -Bdynamic @gol +-Xbind-lazy -Xbind-now} + +@emph{x86-64 Options} +See i386 and x86-64 Options. + +@emph{Xstormy16 Options} +@gccoptlist{-msim} + +@emph{Xtensa Options} +@gccoptlist{-mconst16 -mno-const16 @gol +-mfused-madd -mno-fused-madd @gol +-mforce-no-pic @gol +-mserialize-volatile -mno-serialize-volatile @gol +-mtext-section-literals -mno-text-section-literals @gol +-mtarget-align -mno-target-align @gol +-mlongcalls -mno-longcalls} + +@emph{zSeries Options} +See S/390 and zSeries Options. + +@item Code Generation Options +@xref{Code Gen Options,,Options for Code Generation Conventions}. +@gccoptlist{-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol +-ffixed-@var{reg} -fexceptions @gol +-fnon-call-exceptions -funwind-tables @gol +-fasynchronous-unwind-tables @gol +-finhibit-size-directive -finstrument-functions @gol +-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol +-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol +-fno-common -fno-ident @gol +-fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol +-fno-jump-tables @gol +-frecord-gcc-switches @gol +-freg-struct-return -fshort-enums @gol +-fshort-double -fshort-wchar @gol +-fverbose-asm -fpack-struct[=@var{n}] -fstack-check @gol +-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol +-fno-stack-limit -fsplit-stack @gol +-fleading-underscore -ftls-model=@var{model} @gol +-ftrapv -fwrapv -fbounds-check @gol +-fvisibility -fstrict-volatile-bitfields} +@end table + +@menu +* Overall Options:: Controlling the kind of output: + an executable, object files, assembler files, + or preprocessed source. +* C Dialect Options:: Controlling the variant of C language compiled. +* C++ Dialect Options:: Variations on C++. +* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C + and Objective-C++. +* Language Independent Options:: Controlling how diagnostics should be + formatted. +* Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Optimize Options:: How much optimization? +* Preprocessor Options:: Controlling header files and macro definitions. + Also, getting dependency information for Make. +* Assembler Options:: Passing options to the assembler. +* Link Options:: Specifying libraries and so on. +* Directory Options:: Where to find header files and libraries. + Where to find the compiler executable files. +* Spec Files:: How to pass switches to sub-processes. +* Target Options:: Running a cross-compiler, or an old version of GCC. +@end menu + +@node Overall Options +@section Options Controlling the Kind of Output + +Compilation can involve up to four stages: preprocessing, compilation +proper, assembly and linking, always in that order. GCC is capable of +preprocessing and compiling several files either into several +assembler input files, or into one assembler input file; then each +assembler input file produces an object file, and linking combines all +the object files (those newly compiled, and those specified as input) +into an executable file. + +@cindex file name suffix +For any given input file, the file name suffix determines what kind of +compilation is done: + +@table @gcctabopt +@item @var{file}.c +C source code which must be preprocessed. + +@item @var{file}.i +C source code which should not be preprocessed. + +@item @var{file}.ii +C++ source code which should not be preprocessed. + +@item @var{file}.m +Objective-C source code. Note that you must link with the @file{libobjc} +library to make an Objective-C program work. + +@item @var{file}.mi +Objective-C source code which should not be preprocessed. + +@item @var{file}.mm +@itemx @var{file}.M +Objective-C++ source code. Note that you must link with the @file{libobjc} +library to make an Objective-C++ program work. Note that @samp{.M} refers +to a literal capital M@. + +@item @var{file}.mii +Objective-C++ source code which should not be preprocessed. + +@item @var{file}.h +C, C++, Objective-C or Objective-C++ header file to be turned into a +precompiled header (default), or C, C++ header file to be turned into an +Ada spec (via the @option{-fdump-ada-spec} switch). + +@item @var{file}.cc +@itemx @var{file}.cp +@itemx @var{file}.cxx +@itemx @var{file}.cpp +@itemx @var{file}.CPP +@itemx @var{file}.c++ +@itemx @var{file}.C +C++ source code which must be preprocessed. Note that in @samp{.cxx}, +the last two letters must both be literally @samp{x}. Likewise, +@samp{.C} refers to a literal capital C@. + +@item @var{file}.mm +@itemx @var{file}.M +Objective-C++ source code which must be preprocessed. + +@item @var{file}.mii +Objective-C++ source code which should not be preprocessed. + +@item @var{file}.hh +@itemx @var{file}.H +@itemx @var{file}.hp +@itemx @var{file}.hxx +@itemx @var{file}.hpp +@itemx @var{file}.HPP +@itemx @var{file}.h++ +@itemx @var{file}.tcc +C++ header file to be turned into a precompiled header or Ada spec. + +@item @var{file}.f +@itemx @var{file}.for +@itemx @var{file}.ftn +Fixed form Fortran source code which should not be preprocessed. + +@item @var{file}.F +@itemx @var{file}.FOR +@itemx @var{file}.fpp +@itemx @var{file}.FPP +@itemx @var{file}.FTN +Fixed form Fortran source code which must be preprocessed (with the traditional +preprocessor). + +@item @var{file}.f90 +@itemx @var{file}.f95 +@itemx @var{file}.f03 +@itemx @var{file}.f08 +Free form Fortran source code which should not be preprocessed. + +@item @var{file}.F90 +@itemx @var{file}.F95 +@itemx @var{file}.F03 +@itemx @var{file}.F08 +Free form Fortran source code which must be preprocessed (with the +traditional preprocessor). + +@item @var{file}.go +Go source code. + +@c FIXME: Descriptions of Java file types. +@c @var{file}.java +@c @var{file}.class +@c @var{file}.zip +@c @var{file}.jar + +@item @var{file}.ads +Ada source code file which contains a library unit declaration (a +declaration of a package, subprogram, or generic, or a generic +instantiation), or a library unit renaming declaration (a package, +generic, or subprogram renaming declaration). Such files are also +called @dfn{specs}. + +@item @var{file}.adb +Ada source code file containing a library unit body (a subprogram or +package body). Such files are also called @dfn{bodies}. + +@c GCC also knows about some suffixes for languages not yet included: +@c Pascal: +@c @var{file}.p +@c @var{file}.pas +@c Ratfor: +@c @var{file}.r + +@item @var{file}.s +Assembler code. + +@item @var{file}.S +@itemx @var{file}.sx +Assembler code which must be preprocessed. + +@item @var{other} +An object file to be fed straight into linking. +Any file name with no recognized suffix is treated this way. +@end table + +@opindex x +You can specify the input language explicitly with the @option{-x} option: + +@table @gcctabopt +@item -x @var{language} +Specify explicitly the @var{language} for the following input files +(rather than letting the compiler choose a default based on the file +name suffix). This option applies to all following input files until +the next @option{-x} option. Possible values for @var{language} are: +@smallexample +c c-header cpp-output +c++ c++-header c++-cpp-output +objective-c objective-c-header objective-c-cpp-output +objective-c++ objective-c++-header objective-c++-cpp-output +assembler assembler-with-cpp +ada +f77 f77-cpp-input f95 f95-cpp-input +go +java +@end smallexample + +@item -x none +Turn off any specification of a language, so that subsequent files are +handled according to their file name suffixes (as they are if @option{-x} +has not been used at all). + +@item -pass-exit-codes +@opindex pass-exit-codes +Normally the @command{gcc} program will exit with the code of 1 if any +phase of the compiler returns a non-success return code. If you specify +@option{-pass-exit-codes}, the @command{gcc} program will instead return with +numerically highest error produced by any phase that returned an error +indication. The C, C++, and Fortran frontends return 4, if an internal +compiler error is encountered. +@end table + +If you only want some of the stages of compilation, you can use +@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and +one of the options @option{-c}, @option{-S}, or @option{-E} to say where +@command{gcc} is to stop. Note that some combinations (for example, +@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all. + +@table @gcctabopt +@item -c +@opindex c +Compile or assemble the source files, but do not link. The linking +stage simply is not done. The ultimate output is in the form of an +object file for each source file. + +By default, the object file name for a source file is made by replacing +the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}. + +Unrecognized input files, not requiring compilation or assembly, are +ignored. + +@item -S +@opindex S +Stop after the stage of compilation proper; do not assemble. The output +is in the form of an assembler code file for each non-assembler input +file specified. + +By default, the assembler file name for a source file is made by +replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}. + +Input files that don't require compilation are ignored. + +@item -E +@opindex E +Stop after the preprocessing stage; do not run the compiler proper. The +output is in the form of preprocessed source code, which is sent to the +standard output. + +Input files which don't require preprocessing are ignored. + +@cindex output file option +@item -o @var{file} +@opindex o +Place output in file @var{file}. This applies regardless to whatever +sort of output is being produced, whether it be an executable file, +an object file, an assembler file or preprocessed C code. + +If @option{-o} is not specified, the default is to put an executable +file in @file{a.out}, the object file for +@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its +assembler file in @file{@var{source}.s}, a precompiled header file in +@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on +standard output. + +@item -v +@opindex v +Print (on standard error output) the commands executed to run the stages +of compilation. Also print the version number of the compiler driver +program and of the preprocessor and the compiler proper. + +@item -### +@opindex ### +Like @option{-v} except the commands are not executed and arguments +are quoted unless they contain only alphanumeric characters or @code{./-_}. +This is useful for shell scripts to capture the driver-generated command lines. + +@item -pipe +@opindex pipe +Use pipes rather than temporary files for communication between the +various stages of compilation. This fails to work on some systems where +the assembler is unable to read from a pipe; but the GNU assembler has +no trouble. + +@item --help +@opindex help +Print (on the standard output) a description of the command line options +understood by @command{gcc}. If the @option{-v} option is also specified +then @option{--help} will also be passed on to the various processes +invoked by @command{gcc}, so that they can display the command line options +they accept. If the @option{-Wextra} option has also been specified +(prior to the @option{--help} option), then command line options which +have no documentation associated with them will also be displayed. + +@item --target-help +@opindex target-help +Print (on the standard output) a description of target-specific command +line options for each tool. For some targets extra target-specific +information may also be printed. + +@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]} +Print (on the standard output) a description of the command line +options understood by the compiler that fit into all specified classes +and qualifiers. These are the supported classes: + +@table @asis +@item @samp{optimizers} +This will display all of the optimization options supported by the +compiler. + +@item @samp{warnings} +This will display all of the options controlling warning messages +produced by the compiler. + +@item @samp{target} +This will display target-specific options. Unlike the +@option{--target-help} option however, target-specific options of the +linker and assembler will not be displayed. This is because those +tools do not currently support the extended @option{--help=} syntax. + +@item @samp{params} +This will display the values recognized by the @option{--param} +option. + +@item @var{language} +This will display the options supported for @var{language}, where +@var{language} is the name of one of the languages supported in this +version of GCC. + +@item @samp{common} +This will display the options that are common to all languages. +@end table + +These are the supported qualifiers: + +@table @asis +@item @samp{undocumented} +Display only those options which are undocumented. + +@item @samp{joined} +Display options which take an argument that appears after an equal +sign in the same continuous piece of text, such as: +@samp{--help=target}. + +@item @samp{separate} +Display options which take an argument that appears as a separate word +following the original option, such as: @samp{-o output-file}. +@end table + +Thus for example to display all the undocumented target-specific +switches supported by the compiler the following can be used: + +@smallexample +--help=target,undocumented +@end smallexample + +The sense of a qualifier can be inverted by prefixing it with the +@samp{^} character, so for example to display all binary warning +options (i.e., ones that are either on or off and that do not take an +argument), which have a description the following can be used: + +@smallexample +--help=warnings,^joined,^undocumented +@end smallexample + +The argument to @option{--help=} should not consist solely of inverted +qualifiers. + +Combining several classes is possible, although this usually +restricts the output by so much that there is nothing to display. One +case where it does work however is when one of the classes is +@var{target}. So for example to display all the target-specific +optimization options the following can be used: + +@smallexample +--help=target,optimizers +@end smallexample + +The @option{--help=} option can be repeated on the command line. Each +successive use will display its requested class of options, skipping +those that have already been displayed. + +If the @option{-Q} option appears on the command line before the +@option{--help=} option, then the descriptive text displayed by +@option{--help=} is changed. Instead of describing the displayed +options, an indication is given as to whether the option is enabled, +disabled or set to a specific value (assuming that the compiler +knows this at the point where the @option{--help=} option is used). + +Here is a truncated example from the ARM port of @command{gcc}: + +@smallexample + % gcc -Q -mabi=2 --help=target -c + The following options are target specific: + -mabi= 2 + -mabort-on-noreturn [disabled] + -mapcs [disabled] +@end smallexample + +The output is sensitive to the effects of previous command line +options, so for example it is possible to find out which optimizations +are enabled at @option{-O2} by using: + +@smallexample +-Q -O2 --help=optimizers +@end smallexample + +Alternatively you can discover which binary optimizations are enabled +by @option{-O3} by using: + +@smallexample +gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts +gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts +diff /tmp/O2-opts /tmp/O3-opts | grep enabled +@end smallexample + +@item -no-canonical-prefixes +@opindex no-canonical-prefixes +Do not expand any symbolic links, resolve references to @samp{/../} +or @samp{/./}, or make the path absolute when generating a relative +prefix. + +@item --version +@opindex version +Display the version number and copyrights of the invoked GCC@. + +@item -wrapper +@opindex wrapper +Invoke all subcommands under a wrapper program. The name of the +wrapper program and its parameters are passed as a comma separated +list. + +@smallexample +gcc -c t.c -wrapper gdb,--args +@end smallexample + +This will invoke all subprograms of @command{gcc} under +@samp{gdb --args}, thus the invocation of @command{cc1} will be +@samp{gdb --args cc1 @dots{}}. + +@item -fplugin=@var{name}.so +Load the plugin code in file @var{name}.so, assumed to be a +shared object to be dlopen'd by the compiler. The base name of +the shared object file is used to identify the plugin for the +purposes of argument parsing (See +@option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below). +Each plugin should define the callback functions specified in the +Plugins API. + +@item -fplugin-arg-@var{name}-@var{key}=@var{value} +Define an argument called @var{key} with a value of @var{value} +for the plugin called @var{name}. + +@item -fdump-ada-spec@r{[}-slim@r{]} +For C and C++ source and include files, generate corresponding Ada +specs. @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn, +GNAT User's Guide}, which provides detailed documentation on this feature. + +@item -fdump-go-spec=@var{file} +For input files in any language, generate corresponding Go +declarations in @var{file}. This generates Go @code{const}, +@code{type}, @code{var}, and @code{func} declarations which may be a +useful way to start writing a Go interface to code written in some +other language. + +@include @value{srcdir}/../libiberty/at-file.texi +@end table + +@node Invoking G++ +@section Compiling C++ Programs + +@cindex suffixes for C++ source +@cindex C++ source file suffixes +C++ source files conventionally use one of the suffixes @samp{.C}, +@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or +@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp}, +@samp{.H}, or (for shared template code) @samp{.tcc}; and +preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes +files with these names and compiles them as C++ programs even if you +call the compiler the same way as for compiling C programs (usually +with the name @command{gcc}). + +@findex g++ +@findex c++ +However, the use of @command{gcc} does not add the C++ library. +@command{g++} is a program that calls GCC and treats @samp{.c}, +@samp{.h} and @samp{.i} files as C++ source files instead of C source +files unless @option{-x} is used, and automatically specifies linking +against the C++ library. This program is also useful when +precompiling a C header file with a @samp{.h} extension for use in C++ +compilations. On many systems, @command{g++} is also installed with +the name @command{c++}. + +@cindex invoking @command{g++} +When you compile C++ programs, you may specify many of the same +command-line options that you use for compiling programs in any +language; or command-line options meaningful for C and related +languages; or options that are meaningful only for C++ programs. +@xref{C Dialect Options,,Options Controlling C Dialect}, for +explanations of options for languages related to C@. +@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for +explanations of options that are meaningful only for C++ programs. + +@node C Dialect Options +@section Options Controlling C Dialect +@cindex dialect options +@cindex language dialect options +@cindex options, dialect + +The following options control the dialect of C (or languages derived +from C, such as C++, Objective-C and Objective-C++) that the compiler +accepts: + +@table @gcctabopt +@cindex ANSI support +@cindex ISO support +@item -ansi +@opindex ansi +In C mode, this is equivalent to @samp{-std=c90}. In C++ mode, it is +equivalent to @samp{-std=c++98}. + +This turns off certain features of GCC that are incompatible with ISO +C90 (when compiling C code), or of standard C++ (when compiling C++ code), +such as the @code{asm} and @code{typeof} keywords, and +predefined macros such as @code{unix} and @code{vax} that identify the +type of system you are using. It also enables the undesirable and +rarely used ISO trigraph feature. For the C compiler, +it disables recognition of C++ style @samp{//} comments as well as +the @code{inline} keyword. + +The alternate keywords @code{__asm__}, @code{__extension__}, +@code{__inline__} and @code{__typeof__} continue to work despite +@option{-ansi}. You would not want to use them in an ISO C program, of +course, but it is useful to put them in header files that might be included +in compilations done with @option{-ansi}. Alternate predefined macros +such as @code{__unix__} and @code{__vax__} are also available, with or +without @option{-ansi}. + +The @option{-ansi} option does not cause non-ISO programs to be +rejected gratuitously. For that, @option{-pedantic} is required in +addition to @option{-ansi}. @xref{Warning Options}. + +The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi} +option is used. Some header files may notice this macro and refrain +from declaring certain functions or defining certain macros that the +ISO standard doesn't call for; this is to avoid interfering with any +programs that might use these names for other things. + +Functions that would normally be built in but do not have semantics +defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in +functions when @option{-ansi} is used. @xref{Other Builtins,,Other +built-in functions provided by GCC}, for details of the functions +affected. + +@item -std= +@opindex std +Determine the language standard. @xref{Standards,,Language Standards +Supported by GCC}, for details of these standard versions. This option +is currently only supported when compiling C or C++. + +The compiler can accept several base standards, such as @samp{c90} or +@samp{c++98}, and GNU dialects of those standards, such as +@samp{gnu90} or @samp{gnu++98}. By specifying a base standard, the +compiler will accept all programs following that standard and those +using GNU extensions that do not contradict it. For example, +@samp{-std=c90} turns off certain features of GCC that are +incompatible with ISO C90, such as the @code{asm} and @code{typeof} +keywords, but not other GNU extensions that do not have a meaning in +ISO C90, such as omitting the middle term of a @code{?:} +expression. On the other hand, by specifying a GNU dialect of a +standard, all features the compiler support are enabled, even when +those features change the meaning of the base standard and some +strict-conforming programs may be rejected. The particular standard +is used by @option{-pedantic} to identify which features are GNU +extensions given that version of the standard. For example +@samp{-std=gnu90 -pedantic} would warn about C++ style @samp{//} +comments, while @samp{-std=gnu99 -pedantic} would not. + +A value for this option must be provided; possible values are + +@table @samp +@item c90 +@itemx c89 +@itemx iso9899:1990 +Support all ISO C90 programs (certain GNU extensions that conflict +with ISO C90 are disabled). Same as @option{-ansi} for C code. + +@item iso9899:199409 +ISO C90 as modified in amendment 1. + +@item c99 +@itemx c9x +@itemx iso9899:1999 +@itemx iso9899:199x +ISO C99. Note that this standard is not yet fully supported; see +@w{@uref{http://gcc.gnu.org/gcc-4.6/c99status.html}} for more information. The +names @samp{c9x} and @samp{iso9899:199x} are deprecated. + +@item c1x +ISO C1X, the draft of the next revision of the ISO C standard. +Support is limited and experimental and features enabled by this +option may be changed or removed if changed in or removed from the +standard draft. + +@item gnu90 +@itemx gnu89 +GNU dialect of ISO C90 (including some C99 features). This +is the default for C code. + +@item gnu99 +@itemx gnu9x +GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC, +this will become the default. The name @samp{gnu9x} is deprecated. + +@item gnu1x +GNU dialect of ISO C1X. Support is limited and experimental and +features enabled by this option may be changed or removed if changed +in or removed from the standard draft. + +@item c++98 +The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for +C++ code. + +@item gnu++98 +GNU dialect of @option{-std=c++98}. This is the default for +C++ code. + +@item c++0x +The working draft of the upcoming ISO C++0x standard. This option +enables experimental features that are likely to be included in +C++0x. The working draft is constantly changing, and any feature that is +enabled by this flag may be removed from future versions of GCC if it is +not part of the C++0x standard. + +@item gnu++0x +GNU dialect of @option{-std=c++0x}. This option enables +experimental features that may be removed in future versions of GCC. +@end table + +@item -fgnu89-inline +@opindex fgnu89-inline +The option @option{-fgnu89-inline} tells GCC to use the traditional +GNU semantics for @code{inline} functions when in C99 mode. +@xref{Inline,,An Inline Function is As Fast As a Macro}. This option +is accepted and ignored by GCC versions 4.1.3 up to but not including +4.3. In GCC versions 4.3 and later it changes the behavior of GCC in +C99 mode. Using this option is roughly equivalent to adding the +@code{gnu_inline} function attribute to all inline functions +(@pxref{Function Attributes}). + +The option @option{-fno-gnu89-inline} explicitly tells GCC to use the +C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it +specifies the default behavior). This option was first supported in +GCC 4.3. This option is not supported in @option{-std=c90} or +@option{-std=gnu90} mode. + +The preprocessor macros @code{__GNUC_GNU_INLINE__} and +@code{__GNUC_STDC_INLINE__} may be used to check which semantics are +in effect for @code{inline} functions. @xref{Common Predefined +Macros,,,cpp,The C Preprocessor}. + +@item -aux-info @var{filename} +@opindex aux-info +Output to the given filename prototyped declarations for all functions +declared and/or defined in a translation unit, including those in header +files. This option is silently ignored in any language other than C@. + +Besides declarations, the file indicates, in comments, the origin of +each declaration (source file and line), whether the declaration was +implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or +@samp{O} for old, respectively, in the first character after the line +number and the colon), and whether it came from a declaration or a +definition (@samp{C} or @samp{F}, respectively, in the following +character). In the case of function definitions, a K&R-style list of +arguments followed by their declarations is also provided, inside +comments, after the declaration. + +@item -fno-asm +@opindex fno-asm +Do not recognize @code{asm}, @code{inline} or @code{typeof} as a +keyword, so that code can use these words as identifiers. You can use +the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__} +instead. @option{-ansi} implies @option{-fno-asm}. + +In C++, this switch only affects the @code{typeof} keyword, since +@code{asm} and @code{inline} are standard keywords. You may want to +use the @option{-fno-gnu-keywords} flag instead, which has the same +effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this +switch only affects the @code{asm} and @code{typeof} keywords, since +@code{inline} is a standard keyword in ISO C99. + +@item -fno-builtin +@itemx -fno-builtin-@var{function} +@opindex fno-builtin +@cindex built-in functions +Don't recognize built-in functions that do not begin with +@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in +functions provided by GCC}, for details of the functions affected, +including those which are not built-in functions when @option{-ansi} or +@option{-std} options for strict ISO C conformance are used because they +do not have an ISO standard meaning. + +GCC normally generates special code to handle certain built-in functions +more efficiently; for instance, calls to @code{alloca} may become single +instructions that adjust the stack directly, and calls to @code{memcpy} +may become inline copy loops. The resulting code is often both smaller +and faster, but since the function calls no longer appear as such, you +cannot set a breakpoint on those calls, nor can you change the behavior +of the functions by linking with a different library. In addition, +when a function is recognized as a built-in function, GCC may use +information about that function to warn about problems with calls to +that function, or to generate more efficient code, even if the +resulting code still contains calls to that function. For example, +warnings are given with @option{-Wformat} for bad calls to +@code{printf}, when @code{printf} is built in, and @code{strlen} is +known not to modify global memory. + +With the @option{-fno-builtin-@var{function}} option +only the built-in function @var{function} is +disabled. @var{function} must not begin with @samp{__builtin_}. If a +function is named that is not built-in in this version of GCC, this +option is ignored. There is no corresponding +@option{-fbuiltin-@var{function}} option; if you wish to enable +built-in functions selectively when using @option{-fno-builtin} or +@option{-ffreestanding}, you may define macros such as: + +@smallexample +#define abs(n) __builtin_abs ((n)) +#define strcpy(d, s) __builtin_strcpy ((d), (s)) +@end smallexample + +@item -fhosted +@opindex fhosted +@cindex hosted environment + +Assert that compilation takes place in a hosted environment. This implies +@option{-fbuiltin}. A hosted environment is one in which the +entire standard library is available, and in which @code{main} has a return +type of @code{int}. Examples are nearly everything except a kernel. +This is equivalent to @option{-fno-freestanding}. + +@item -ffreestanding +@opindex ffreestanding +@cindex hosted environment + +Assert that compilation takes place in a freestanding environment. This +implies @option{-fno-builtin}. A freestanding environment +is one in which the standard library may not exist, and program startup may +not necessarily be at @code{main}. The most obvious example is an OS kernel. +This is equivalent to @option{-fno-hosted}. + +@xref{Standards,,Language Standards Supported by GCC}, for details of +freestanding and hosted environments. + +@item -fopenmp +@opindex fopenmp +@cindex OpenMP parallel +Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and +@code{!$omp} in Fortran. When @option{-fopenmp} is specified, the +compiler generates parallel code according to the OpenMP Application +Program Interface v3.0 @w{@uref{http://www.openmp.org/}}. This option +implies @option{-pthread}, and thus is only supported on targets that +have support for @option{-pthread}. + +@item -fms-extensions +@opindex fms-extensions +Accept some non-standard constructs used in Microsoft header files. + +In C++ code, this allows member names in structures to be similar +to previous types declarations. + +@smallexample +typedef int UOW; +struct ABC @{ + UOW UOW; +@}; +@end smallexample + +Some cases of unnamed fields in structures and unions are only +accepted with this option. @xref{Unnamed Fields,,Unnamed struct/union +fields within structs/unions}, for details. + +@item -fplan9-extensions +Accept some non-standard constructs used in Plan 9 code. + +This enables @option{-fms-extensions}, permits passing pointers to +structures with anonymous fields to functions which expect pointers to +elements of the type of the field, and permits referring to anonymous +fields declared using a typedef. @xref{Unnamed Fields,,Unnamed +struct/union fields within structs/unions}, for details. This is only +supported for C, not C++. + +@item -trigraphs +@opindex trigraphs +Support ISO C trigraphs. The @option{-ansi} option (and @option{-std} +options for strict ISO C conformance) implies @option{-trigraphs}. + +@item -no-integrated-cpp +@opindex no-integrated-cpp +Performs a compilation in two passes: preprocessing and compiling. This +option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the +@option{-B} option. The user supplied compilation step can then add in +an additional preprocessing step after normal preprocessing but before +compiling. The default is to use the integrated cpp (internal cpp) + +The semantics of this option will change if "cc1", "cc1plus", and +"cc1obj" are merged. + +@cindex traditional C language +@cindex C language, traditional +@item -traditional +@itemx -traditional-cpp +@opindex traditional-cpp +@opindex traditional +Formerly, these options caused GCC to attempt to emulate a pre-standard +C compiler. They are now only supported with the @option{-E} switch. +The preprocessor continues to support a pre-standard mode. See the GNU +CPP manual for details. + +@item -fcond-mismatch +@opindex fcond-mismatch +Allow conditional expressions with mismatched types in the second and +third arguments. The value of such an expression is void. This option +is not supported for C++. + +@item -flax-vector-conversions +@opindex flax-vector-conversions +Allow implicit conversions between vectors with differing numbers of +elements and/or incompatible element types. This option should not be +used for new code. + +@item -funsigned-char +@opindex funsigned-char +Let the type @code{char} be unsigned, like @code{unsigned char}. + +Each kind of machine has a default for what @code{char} should +be. It is either like @code{unsigned char} by default or like +@code{signed char} by default. + +Ideally, a portable program should always use @code{signed char} or +@code{unsigned char} when it depends on the signedness of an object. +But many programs have been written to use plain @code{char} and +expect it to be signed, or expect it to be unsigned, depending on the +machines they were written for. This option, and its inverse, let you +make such a program work with the opposite default. + +The type @code{char} is always a distinct type from each of +@code{signed char} or @code{unsigned char}, even though its behavior +is always just like one of those two. + +@item -fsigned-char +@opindex fsigned-char +Let the type @code{char} be signed, like @code{signed char}. + +Note that this is equivalent to @option{-fno-unsigned-char}, which is +the negative form of @option{-funsigned-char}. Likewise, the option +@option{-fno-signed-char} is equivalent to @option{-funsigned-char}. + +@item -fsigned-bitfields +@itemx -funsigned-bitfields +@itemx -fno-signed-bitfields +@itemx -fno-unsigned-bitfields +@opindex fsigned-bitfields +@opindex funsigned-bitfields +@opindex fno-signed-bitfields +@opindex fno-unsigned-bitfields +These options control whether a bit-field is signed or unsigned, when the +declaration does not use either @code{signed} or @code{unsigned}. By +default, such a bit-field is signed, because this is consistent: the +basic integer types such as @code{int} are signed types. +@end table + +@node C++ Dialect Options +@section Options Controlling C++ Dialect + +@cindex compiler options, C++ +@cindex C++ options, command line +@cindex options, C++ +This section describes the command-line options that are only meaningful +for C++ programs; but you can also use most of the GNU compiler options +regardless of what language your program is in. For example, you +might compile a file @code{firstClass.C} like this: + +@smallexample +g++ -g -frepo -O -c firstClass.C +@end smallexample + +@noindent +In this example, only @option{-frepo} is an option meant +only for C++ programs; you can use the other options with any +language supported by GCC@. + +Here is a list of options that are @emph{only} for compiling C++ programs: + +@table @gcctabopt + +@item -fabi-version=@var{n} +@opindex fabi-version +Use version @var{n} of the C++ ABI@. Version 2 is the version of the +C++ ABI that first appeared in G++ 3.4. Version 1 is the version of +the C++ ABI that first appeared in G++ 3.2. Version 0 will always be +the version that conforms most closely to the C++ ABI specification. +Therefore, the ABI obtained using version 0 will change as ABI bugs +are fixed. + +The default is version 2. + +Version 3 corrects an error in mangling a constant address as a +template argument. + +Version 4 implements a standard mangling for vector types. + +Version 5 corrects the mangling of attribute const/volatile on +function pointer types, decltype of a plain decl, and use of a +function parameter in the declaration of another parameter. + +See also @option{-Wabi}. + +@item -fno-access-control +@opindex fno-access-control +Turn off all access checking. This switch is mainly useful for working +around bugs in the access control code. + +@item -fcheck-new +@opindex fcheck-new +Check that the pointer returned by @code{operator new} is non-null +before attempting to modify the storage allocated. This check is +normally unnecessary because the C++ standard specifies that +@code{operator new} will only return @code{0} if it is declared +@samp{throw()}, in which case the compiler will always check the +return value even without this option. In all other cases, when +@code{operator new} has a non-empty exception specification, memory +exhaustion is signalled by throwing @code{std::bad_alloc}. See also +@samp{new (nothrow)}. + +@item -fconserve-space +@opindex fconserve-space +Put uninitialized or runtime-initialized global variables into the +common segment, as C does. This saves space in the executable at the +cost of not diagnosing duplicate definitions. If you compile with this +flag and your program mysteriously crashes after @code{main()} has +completed, you may have an object that is being destroyed twice because +two definitions were merged. + +This option is no longer useful on most targets, now that support has +been added for putting variables into BSS without making them common. + +@item -fconstexpr-depth=@var{n} +@opindex fconstexpr-depth +Set the maximum nested evaluation depth for C++0x constexpr functions +to @var{n}. A limit is needed to detect endless recursion during +constant expression evaluation. The minimum specified by the standard +is 512. + +@item -fno-deduce-init-list +@opindex fno-deduce-init-list +Disable deduction of a template type parameter as +std::initializer_list from a brace-enclosed initializer list, i.e. + +@smallexample +template auto forward(T t) -> decltype (realfn (t)) +@{ + return realfn (t); +@} + +void f() +@{ + forward(@{1,2@}); // call forward> +@} +@end smallexample + +This option is present because this deduction is an extension to the +current specification in the C++0x working draft, and there was +some concern about potential overload resolution problems. + +@item -ffriend-injection +@opindex ffriend-injection +Inject friend functions into the enclosing namespace, so that they are +visible outside the scope of the class in which they are declared. +Friend functions were documented to work this way in the old Annotated +C++ Reference Manual, and versions of G++ before 4.1 always worked +that way. However, in ISO C++ a friend function which is not declared +in an enclosing scope can only be found using argument dependent +lookup. This option causes friends to be injected as they were in +earlier releases. + +This option is for compatibility, and may be removed in a future +release of G++. + +@item -fno-elide-constructors +@opindex fno-elide-constructors +The C++ standard allows an implementation to omit creating a temporary +which is only used to initialize another object of the same type. +Specifying this option disables that optimization, and forces G++ to +call the copy constructor in all cases. + +@item -fno-enforce-eh-specs +@opindex fno-enforce-eh-specs +Don't generate code to check for violation of exception specifications +at runtime. This option violates the C++ standard, but may be useful +for reducing code size in production builds, much like defining +@samp{NDEBUG}. This does not give user code permission to throw +exceptions in violation of the exception specifications; the compiler +will still optimize based on the specifications, so throwing an +unexpected exception will result in undefined behavior. + +@item -ffor-scope +@itemx -fno-for-scope +@opindex ffor-scope +@opindex fno-for-scope +If @option{-ffor-scope} is specified, the scope of variables declared in +a @i{for-init-statement} is limited to the @samp{for} loop itself, +as specified by the C++ standard. +If @option{-fno-for-scope} is specified, the scope of variables declared in +a @i{for-init-statement} extends to the end of the enclosing scope, +as was the case in old versions of G++, and other (traditional) +implementations of C++. + +The default if neither flag is given to follow the standard, +but to allow and give a warning for old-style code that would +otherwise be invalid, or have different behavior. + +@item -fno-gnu-keywords +@opindex fno-gnu-keywords +Do not recognize @code{typeof} as a keyword, so that code can use this +word as an identifier. You can use the keyword @code{__typeof__} instead. +@option{-ansi} implies @option{-fno-gnu-keywords}. + +@item -fno-implicit-templates +@opindex fno-implicit-templates +Never emit code for non-inline templates which are instantiated +implicitly (i.e.@: by use); only emit code for explicit instantiations. +@xref{Template Instantiation}, for more information. + +@item -fno-implicit-inline-templates +@opindex fno-implicit-inline-templates +Don't emit code for implicit instantiations of inline templates, either. +The default is to handle inlines differently so that compiles with and +without optimization will need the same set of explicit instantiations. + +@item -fno-implement-inlines +@opindex fno-implement-inlines +To save space, do not emit out-of-line copies of inline functions +controlled by @samp{#pragma implementation}. This will cause linker +errors if these functions are not inlined everywhere they are called. + +@item -fms-extensions +@opindex fms-extensions +Disable pedantic warnings about constructs used in MFC, such as implicit +int and getting a pointer to member function via non-standard syntax. + +@item -fno-nonansi-builtins +@opindex fno-nonansi-builtins +Disable built-in declarations of functions that are not mandated by +ANSI/ISO C@. These include @code{ffs}, @code{alloca}, @code{_exit}, +@code{index}, @code{bzero}, @code{conjf}, and other related functions. + +@item -fnothrow-opt +@opindex fnothrow-opt +Treat a @code{throw()} exception specification as though it were a +@code{noexcept} specification to reduce or eliminate the text size +overhead relative to a function with no exception specification. If +the function has local variables of types with non-trivial +destructors, the exception specification will actually make the +function smaller because the EH cleanups for those variables can be +optimized away. The semantic effect is that an exception thrown out of +a function with such an exception specification will result in a call +to @code{terminate} rather than @code{unexpected}. + +@item -fno-operator-names +@opindex fno-operator-names +Do not treat the operator name keywords @code{and}, @code{bitand}, +@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as +synonyms as keywords. + +@item -fno-optional-diags +@opindex fno-optional-diags +Disable diagnostics that the standard says a compiler does not need to +issue. Currently, the only such diagnostic issued by G++ is the one for +a name having multiple meanings within a class. + +@item -fpermissive +@opindex fpermissive +Downgrade some diagnostics about nonconformant code from errors to +warnings. Thus, using @option{-fpermissive} will allow some +nonconforming code to compile. + +@item -fno-pretty-templates +@opindex fno-pretty-templates +When an error message refers to a specialization of a function +template, the compiler will normally print the signature of the +template followed by the template arguments and any typedefs or +typenames in the signature (e.g. @code{void f(T) [with T = int]} +rather than @code{void f(int)}) so that it's clear which template is +involved. When an error message refers to a specialization of a class +template, the compiler will omit any template arguments which match +the default template arguments for that template. If either of these +behaviors make it harder to understand the error message rather than +easier, using @option{-fno-pretty-templates} will disable them. + +@item -frepo +@opindex frepo +Enable automatic template instantiation at link time. This option also +implies @option{-fno-implicit-templates}. @xref{Template +Instantiation}, for more information. + +@item -fno-rtti +@opindex fno-rtti +Disable generation of information about every class with virtual +functions for use by the C++ runtime type identification features +(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts +of the language, you can save some space by using this flag. Note that +exception handling uses the same information, but it will generate it as +needed. The @samp{dynamic_cast} operator can still be used for casts that +do not require runtime type information, i.e.@: casts to @code{void *} or to +unambiguous base classes. + +@item -fstats +@opindex fstats +Emit statistics about front-end processing at the end of the compilation. +This information is generally only useful to the G++ development team. + +@item -fstrict-enums +@opindex fstrict-enums +Allow the compiler to optimize using the assumption that a value of +enumeration type can only be one of the values of the enumeration (as +defined in the C++ standard; basically, a value which can be +represented in the minimum number of bits needed to represent all the +enumerators). This assumption may not be valid if the program uses a +cast to convert an arbitrary integer value to the enumeration type. + +@item -ftemplate-depth=@var{n} +@opindex ftemplate-depth +Set the maximum instantiation depth for template classes to @var{n}. +A limit on the template instantiation depth is needed to detect +endless recursions during template class instantiation. ANSI/ISO C++ +conforming programs must not rely on a maximum depth greater than 17 +(changed to 1024 in C++0x). + +@item -fno-threadsafe-statics +@opindex fno-threadsafe-statics +Do not emit the extra code to use the routines specified in the C++ +ABI for thread-safe initialization of local statics. You can use this +option to reduce code size slightly in code that doesn't need to be +thread-safe. + +@item -fuse-cxa-atexit +@opindex fuse-cxa-atexit +Register destructors for objects with static storage duration with the +@code{__cxa_atexit} function rather than the @code{atexit} function. +This option is required for fully standards-compliant handling of static +destructors, but will only work if your C library supports +@code{__cxa_atexit}. + +@item -fno-use-cxa-get-exception-ptr +@opindex fno-use-cxa-get-exception-ptr +Don't use the @code{__cxa_get_exception_ptr} runtime routine. This +will cause @code{std::uncaught_exception} to be incorrect, but is necessary +if the runtime routine is not available. + +@item -fvisibility-inlines-hidden +@opindex fvisibility-inlines-hidden +This switch declares that the user does not attempt to compare +pointers to inline methods where the addresses of the two functions +were taken in different shared objects. + +The effect of this is that GCC may, effectively, mark inline methods with +@code{__attribute__ ((visibility ("hidden")))} so that they do not +appear in the export table of a DSO and do not require a PLT indirection +when used within the DSO@. Enabling this option can have a dramatic effect +on load and link times of a DSO as it massively reduces the size of the +dynamic export table when the library makes heavy use of templates. + +The behavior of this switch is not quite the same as marking the +methods as hidden directly, because it does not affect static variables +local to the function or cause the compiler to deduce that +the function is defined in only one shared object. + +You may mark a method as having a visibility explicitly to negate the +effect of the switch for that method. For example, if you do want to +compare pointers to a particular inline method, you might mark it as +having default visibility. Marking the enclosing class with explicit +visibility will have no effect. + +Explicitly instantiated inline methods are unaffected by this option +as their linkage might otherwise cross a shared library boundary. +@xref{Template Instantiation}. + +@item -fvisibility-ms-compat +@opindex fvisibility-ms-compat +This flag attempts to use visibility settings to make GCC's C++ +linkage model compatible with that of Microsoft Visual Studio. + +The flag makes these changes to GCC's linkage model: + +@enumerate +@item +It sets the default visibility to @code{hidden}, like +@option{-fvisibility=hidden}. + +@item +Types, but not their members, are not hidden by default. + +@item +The One Definition Rule is relaxed for types without explicit +visibility specifications which are defined in more than one different +shared object: those declarations are permitted if they would have +been permitted when this option was not used. +@end enumerate + +In new code it is better to use @option{-fvisibility=hidden} and +export those classes which are intended to be externally visible. +Unfortunately it is possible for code to rely, perhaps accidentally, +on the Visual Studio behavior. + +Among the consequences of these changes are that static data members +of the same type with the same name but defined in different shared +objects will be different, so changing one will not change the other; +and that pointers to function members defined in different shared +objects may not compare equal. When this flag is given, it is a +violation of the ODR to define types with the same name differently. + +@item -fno-weak +@opindex fno-weak +Do not use weak symbol support, even if it is provided by the linker. +By default, G++ will use weak symbols if they are available. This +option exists only for testing, and should not be used by end-users; +it will result in inferior code and has no benefits. This option may +be removed in a future release of G++. + +@item -nostdinc++ +@opindex nostdinc++ +Do not search for header files in the standard directories specific to +C++, but do still search the other standard directories. (This option +is used when building the C++ library.) +@end table + +In addition, these optimization, warning, and code generation options +have meanings only for C++ programs: + +@table @gcctabopt +@item -fno-default-inline +@opindex fno-default-inline +Do not assume @samp{inline} for functions defined inside a class scope. +@xref{Optimize Options,,Options That Control Optimization}. Note that these +functions will have linkage like inline functions; they just won't be +inlined by default. + +@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)} +@opindex Wabi +@opindex Wno-abi +Warn when G++ generates code that is probably not compatible with the +vendor-neutral C++ ABI@. Although an effort has been made to warn about +all such cases, there are probably some cases that are not warned about, +even though G++ is generating incompatible code. There may also be +cases where warnings are emitted even though the code that is generated +will be compatible. + +You should rewrite your code to avoid these warnings if you are +concerned about the fact that code generated by G++ may not be binary +compatible with code generated by other compilers. + +The known incompatibilities in @option{-fabi-version=2} (the default) include: + +@itemize @bullet + +@item +A template with a non-type template parameter of reference type is +mangled incorrectly: +@smallexample +extern int N; +template struct S @{@}; +void n (S) @{2@} +@end smallexample + +This is fixed in @option{-fabi-version=3}. + +@item +SIMD vector types declared using @code{__attribute ((vector_size))} are +mangled in a non-standard way that does not allow for overloading of +functions taking vectors of different sizes. + +The mangling is changed in @option{-fabi-version=4}. +@end itemize + +The known incompatibilities in @option{-fabi-version=1} include: + +@itemize @bullet + +@item +Incorrect handling of tail-padding for bit-fields. G++ may attempt to +pack data into the same byte as a base class. For example: + +@smallexample +struct A @{ virtual void f(); int f1 : 1; @}; +struct B : public A @{ int f2 : 1; @}; +@end smallexample + +@noindent +In this case, G++ will place @code{B::f2} into the same byte +as@code{A::f1}; other compilers will not. You can avoid this problem +by explicitly padding @code{A} so that its size is a multiple of the +byte size on your platform; that will cause G++ and other compilers to +layout @code{B} identically. + +@item +Incorrect handling of tail-padding for virtual bases. G++ does not use +tail padding when laying out virtual bases. For example: + +@smallexample +struct A @{ virtual void f(); char c1; @}; +struct B @{ B(); char c2; @}; +struct C : public A, public virtual B @{@}; +@end smallexample + +@noindent +In this case, G++ will not place @code{B} into the tail-padding for +@code{A}; other compilers will. You can avoid this problem by +explicitly padding @code{A} so that its size is a multiple of its +alignment (ignoring virtual base classes); that will cause G++ and other +compilers to layout @code{C} identically. + +@item +Incorrect handling of bit-fields with declared widths greater than that +of their underlying types, when the bit-fields appear in a union. For +example: + +@smallexample +union U @{ int i : 4096; @}; +@end smallexample + +@noindent +Assuming that an @code{int} does not have 4096 bits, G++ will make the +union too small by the number of bits in an @code{int}. + +@item +Empty classes can be placed at incorrect offsets. For example: + +@smallexample +struct A @{@}; + +struct B @{ + A a; + virtual void f (); +@}; + +struct C : public B, public A @{@}; +@end smallexample + +@noindent +G++ will place the @code{A} base class of @code{C} at a nonzero offset; +it should be placed at offset zero. G++ mistakenly believes that the +@code{A} data member of @code{B} is already at offset zero. + +@item +Names of template functions whose types involve @code{typename} or +template template parameters can be mangled incorrectly. + +@smallexample +template +void f(typename Q::X) @{@} + +template