| @c Copyright (C) 1988-2017 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-2017 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{-Wpedantic}] |
| [@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. @command{g++} accepts mostly the same options as @command{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. |
| @xref{Overall Options,,Options Controlling the Kind of Output}. |
| |
| Other options are passed on to one or more stages 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 cross compiling |
| @cindex specifying machine version |
| @cindex specifying compiler version and target machine |
| @cindex compiler version, specifying |
| @cindex target machine, specifying |
| The usual way to run GCC is to run the executable called @command{gcc}, or |
| @command{@var{machine}-gcc} when cross-compiling, or |
| @command{@var{machine}-gcc-@var{version}} to run a specific version of GCC. |
| When you compile C++ programs, you should invoke GCC as @command{g++} |
| instead. @xref{Invoking G++,,Compiling C++ Programs}, |
| for information about the differences in behavior between @command{gcc} |
| and @code{g++} when 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} is @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++. |
| * Diagnostic Message Formatting Options:: Controlling how diagnostics should |
| be formatted. |
| * Warning Options:: How picky should the compiler be? |
| * Debugging Options:: Producing debuggable code. |
| * Optimize Options:: How much optimization? |
| * Instrumentation Options:: Enabling profiling and extra run-time error checking. |
| * 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. |
| * Code Gen Options:: Specifying conventions for function calls, data layout |
| and register usage. |
| * Developer Options:: Printing GCC configuration info, statistics, and |
| debugging dumps. |
| * Submodel Options:: Target-specific options, such as compiling for a |
| specific processor variant. |
| * Spec Files:: How to pass switches to sub-processes. |
| * 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} -x @var{language} @gol |
| -v -### --help@r{[}=@var{class}@r{[},@dots{}@r{]]} --target-help --version @gol |
| -pass-exit-codes -pipe -specs=@var{file} -wrapper @gol |
| @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg} @gol |
| -fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{unit} -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 |
| -fpermitted-flt-eval-methods=@var{standard} @gol |
| -aux-info @var{filename} -fallow-parameterless-variadic-functions @gol |
| -fno-asm -fno-builtin -fno-builtin-@var{function} -fgimple@gol |
| -fhosted -ffreestanding -fopenacc -fopenmp -fopenmp-simd @gol |
| -fms-extensions -fplan9-extensions -fsso-struct=@var{endianness} @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 @gol |
| -faligned-new=@var{n} -fargs-in-order=@var{n} -fcheck-new @gol |
| -fconstexpr-depth=@var{n} -fconstexpr-loop-limit=@var{n} @gol |
| -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 |
| -fnew-inheriting-ctors @gol |
| -fnew-ttp-matching @gol |
| -fno-nonansi-builtins -fnothrow-opt -fno-operator-names @gol |
| -fno-optional-diags -fpermissive @gol |
| -fno-pretty-templates @gol |
| -frepo -fno-rtti -fsized-deallocation @gol |
| -ftemplate-backtrace-limit=@var{n} @gol |
| -ftemplate-depth=@var{n} @gol |
| -fno-threadsafe-statics -fuse-cxa-atexit @gol |
| -fno-weak -nostdinc++ @gol |
| -fvisibility-inlines-hidden @gol |
| -fvisibility-ms-compat @gol |
| -fext-numeric-literals @gol |
| -Wabi=@var{n} -Wabi-tag -Wconversion-null -Wctor-dtor-privacy @gol |
| -Wdelete-non-virtual-dtor -Wliteral-suffix -Wmultiple-inheritance @gol |
| -Wnamespaces -Wnarrowing @gol |
| -Wnoexcept -Wnoexcept-type -Wnon-virtual-dtor -Wreorder -Wregister @gol |
| -Weffc++ -Wstrict-null-sentinel -Wtemplates @gol |
| -Wno-non-template-friend -Wold-style-cast @gol |
| -Woverloaded-virtual -Wno-pmf-conversions @gol |
| -Wsign-promo -Wvirtual-inheritance} |
| |
| @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 |
| -fno-local-ivars @gol |
| -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]} @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 Diagnostic Message Formatting Options |
| @xref{Diagnostic Message Formatting Options,,Options to Control Diagnostic Messages Formatting}. |
| @gccoptlist{-fmessage-length=@var{n} @gol |
| -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol |
| -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]} @gol |
| -fno-diagnostics-show-option -fno-diagnostics-show-caret @gol |
| -fdiagnostics-parseable-fixits -fdiagnostics-generate-patch @gol |
| -fno-show-column} |
| |
| @item Warning Options |
| @xref{Warning Options,,Options to Request or Suppress Warnings}. |
| @gccoptlist{-fsyntax-only -fmax-errors=@var{n} -Wpedantic @gol |
| -pedantic-errors @gol |
| -w -Wextra -Wall -Waddress -Waggregate-return -Waligned-new @gol |
| -Walloc-zero -Walloc-size-larger-than=@var{n} |
| -Walloca -Walloca-larger-than=@var{n} @gol |
| -Wno-aggressive-loop-optimizations -Warray-bounds -Warray-bounds=@var{n} @gol |
| -Wno-attributes -Wbool-compare -Wbool-operation @gol |
| -Wno-builtin-declaration-mismatch @gol |
| -Wno-builtin-macro-redefined -Wc90-c99-compat -Wc99-c11-compat @gol |
| -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align -Wcast-qual @gol |
| -Wchar-subscripts -Wchkp -Wclobbered -Wcomment @gol |
| -Wconditionally-supported @gol |
| -Wconversion -Wcoverage-mismatch -Wno-cpp -Wdangling-else -Wdate-time @gol |
| -Wdelete-incomplete @gol |
| -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init @gol |
| -Wdisabled-optimization @gol |
| -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers @gol |
| -Wno-div-by-zero -Wdouble-promotion @gol |
| -Wduplicated-branches -Wduplicated-cond @gol |
| -Wempty-body -Wenum-compare -Wno-endif-labels -Wexpansion-to-defined @gol |
| -Werror -Werror=* -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol |
| -Wno-format-contains-nul -Wno-format-extra-args @gol |
| -Wformat-nonliteral -Wformat-overflow=@var{n} @gol |
| -Wformat-security -Wformat-signedness -Wformat-truncation=@var{n} @gol |
| -Wformat-y2k -Wframe-address @gol |
| -Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol |
| -Wignored-qualifiers -Wignored-attributes -Wincompatible-pointer-types @gol |
| -Wimplicit -Wimplicit-fallthrough -Wimplicit-fallthrough=@var{n} @gol |
| -Wimplicit-function-declaration -Wimplicit-int @gol |
| -Winit-self -Winline -Wno-int-conversion -Wint-in-bool-context @gol |
| -Wno-int-to-pointer-cast -Winvalid-memory-model -Wno-invalid-offsetof @gol |
| -Winvalid-pch -Wlarger-than=@var{len} @gol |
| -Wlogical-op -Wlogical-not-parentheses -Wlong-long @gol |
| -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args @gol |
| -Wmisleading-indentation -Wmissing-braces @gol |
| -Wmissing-field-initializers -Wmissing-include-dirs @gol |
| -Wno-multichar -Wnonnull -Wnonnull-compare @gol |
| -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol |
| -Wnull-dereference -Wodr -Wno-overflow -Wopenmp-simd @gol |
| -Woverride-init-side-effects -Woverlength-strings @gol |
| -Wpacked -Wpacked-bitfield-compat -Wpadded @gol |
| -Wparentheses -Wno-pedantic-ms-format @gol |
| -Wplacement-new -Wplacement-new=@var{n} @gol |
| -Wpointer-arith -Wpointer-compare -Wno-pointer-to-int-cast @gol |
| -Wno-pragmas -Wredundant-decls -Wrestrict -Wno-return-local-addr @gol |
| -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol |
| -Wshadow=global, -Wshadow=local, -Wshadow=compatible-local @gol |
| -Wshift-overflow -Wshift-overflow=@var{n} @gol |
| -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value @gol |
| -Wsign-compare -Wsign-conversion -Wfloat-conversion @gol |
| -Wno-scalar-storage-order @gol |
| -Wsizeof-pointer-memaccess -Wsizeof-array-argument @gol |
| -Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol |
| -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=@var{n} @gol |
| -Wstringop-overflow=@var{n} @gol |
| -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol |
| -Wsuggest-final-types @gol -Wsuggest-final-methods -Wsuggest-override @gol |
| -Wmissing-format-attribute -Wsubobject-linkage @gol |
| -Wswitch -Wswitch-bool -Wswitch-default -Wswitch-enum @gol |
| -Wswitch-unreachable -Wsync-nand @gol |
| -Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol |
| -Wtype-limits -Wundef @gol |
| -Wuninitialized -Wunknown-pragmas -Wunsafe-loop-optimizations @gol |
| -Wunsuffixed-float-constants -Wunused -Wunused-function @gol |
| -Wunused-label -Wunused-local-typedefs -Wunused-macros @gol |
| -Wunused-parameter -Wno-unused-result @gol |
| -Wunused-value -Wunused-variable @gol |
| -Wunused-const-variable -Wunused-const-variable=@var{n} @gol |
| -Wunused-but-set-parameter -Wunused-but-set-variable @gol |
| -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol |
| -Wvla -Wvla-larger-than=@var{n} -Wvolatile-register-var -Wwrite-strings @gol |
| -Wzero-as-null-pointer-constant -Whsa} |
| |
| @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}. |
| @gccoptlist{-g -g@var{level} -gcoff -gdwarf -gdwarf-@var{version} @gol |
| -ggdb -grecord-gcc-switches -gno-record-gcc-switches @gol |
| -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf @gol |
| -gcolumn-info -gno-column-info @gol |
| -gvms -gxcoff -gxcoff+ -gz@r{[}=@var{type}@r{]} @gol |
| -fdebug-prefix-map=@var{old}=@var{new} -fdebug-types-section @gol |
| -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types @gol |
| -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol |
| -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol |
| -feliminate-unused-debug-symbols -femit-class-debug-always @gol |
| -fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol |
| -fvar-tracking -fvar-tracking-assignments} |
| |
| @item Optimization Options |
| @xref{Optimize Options,,Options that Control Optimization}. |
| @gccoptlist{-faggressive-loop-optimizations -falign-functions[=@var{n}] @gol |
| -falign-jumps[=@var{n}] @gol |
| -falign-labels[=@var{n}] -falign-loops[=@var{n}] @gol |
| -fassociative-math -fauto-profile -fauto-profile[=@var{path}] @gol |
| -fauto-inc-dec -fbranch-probabilities @gol |
| -fbranch-target-load-optimize -fbranch-target-load-optimize2 @gol |
| -fbtr-bb-exclusive -fcaller-saves @gol |
| -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 -fdelayed-branch @gol |
| -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively @gol |
| -fdevirtualize-at-ltrans -fdse @gol |
| -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol |
| -ffast-math -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 -fhoist-adjacent-loads -fif-conversion @gol |
| -fif-conversion2 -findirect-inlining @gol |
| -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol |
| -finline-small-functions -fipa-cp -fipa-cp-clone @gol |
| -fipa-bit-cp -fipa-vrp @gol |
| -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-icf @gol |
| -fira-algorithm=@var{algorithm} @gol |
| -fira-region=@var{region} -fira-hoist-pressure @gol |
| -fira-loop-pressure -fno-ira-share-save-slots @gol |
| -fno-ira-share-spill-slots @gol |
| -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute @gol |
| -fivopts -fkeep-inline-functions -fkeep-static-functions @gol |
| -fkeep-static-consts -flimit-function-alignment -flive-range-shrinkage @gol |
| -floop-block -floop-interchange -floop-strip-mine @gol |
| -floop-unroll-and-jam -floop-nest-optimize @gol |
| -floop-parallelize-all -flra-remat -flto -flto-compression-level @gol |
| -flto-partition=@var{alg} -fmerge-all-constants @gol |
| -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol |
| -fmove-loop-invariants -fno-branch-count-reg @gol |
| -fno-defer-pop -fno-fp-int-builtin-inexact -fno-function-cse @gol |
| -fno-guess-branch-probability -fno-inline -fno-math-errno -fno-peephole @gol |
| -fno-peephole2 -fno-printf-return-value -fno-sched-interblock @gol |
| -fno-sched-spec -fno-signed-zeros @gol |
| -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol |
| -fomit-frame-pointer -foptimize-sibling-calls @gol |
| -fpartial-inlining -fpeel-loops -fpredictive-commoning @gol |
| -fprefetch-loop-arrays @gol |
| -fprofile-correction @gol |
| -fprofile-use -fprofile-use=@var{path} -fprofile-values @gol |
| -fprofile-reorder-functions @gol |
| -freciprocal-math -free -frename-registers -freorder-blocks @gol |
| -freorder-blocks-algorithm=@var{algorithm} @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-fusion @gol |
| -fschedule-insns -fschedule-insns2 -fsection-anchors @gol |
| -fselective-scheduling -fselective-scheduling2 @gol |
| -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol |
| -fsemantic-interposition -fshrink-wrap -fshrink-wrap-separate @gol |
| -fsignaling-nans @gol |
| -fsingle-precision-constant -fsplit-ivs-in-unroller -fsplit-loops@gol |
| -fsplit-paths @gol |
| -fsplit-wide-types -fssa-backprop -fssa-phiopt @gol |
| -fstdarg-opt -fstore-merging -fstrict-aliasing @gol |
| -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp @gol |
| -ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol |
| -ftree-coalesce-vars -ftree-copy-prop -ftree-dce -ftree-dominator-opts @gol |
| -ftree-dse -ftree-forwprop -ftree-fre -fcode-hoisting @gol |
| -ftree-loop-if-convert -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-loop-vectorize @gol |
| -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol |
| -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra @gol |
| -ftree-switch-conversion -ftree-tail-merge @gol |
| -ftree-ter -ftree-vectorize -ftree-vrp -funconstrained-commons @gol |
| -funit-at-a-time -funroll-all-loops -funroll-loops @gol |
| -funsafe-math-optimizations -funswitch-loops @gol |
| -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol |
| -fweb -fwhole-program -fwpa -fuse-linker-plugin @gol |
| --param @var{name}=@var{value} |
| -O -O0 -O1 -O2 -O3 -Os -Ofast -Og} |
| |
| @item Program Instrumentation Options |
| @xref{Instrumentation Options,,Program Instrumentation Options}. |
| @gccoptlist{-p -pg -fprofile-arcs --coverage -ftest-coverage @gol |
| -fprofile-dir=@var{path} -fprofile-generate -fprofile-generate=@var{path} @gol |
| -fsanitize=@var{style} -fsanitize-recover -fsanitize-recover=@var{style} @gol |
| -fasan-shadow-offset=@var{number} -fsanitize-sections=@var{s1},@var{s2},... @gol |
| -fsanitize-undefined-trap-on-error -fbounds-check @gol |
| -fcheck-pointer-bounds -fchkp-check-incomplete-type @gol |
| -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds @gol |
| -fchkp-narrow-to-innermost-array -fchkp-optimize @gol |
| -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions @gol |
| -fchkp-use-static-bounds -fchkp-use-static-const-bounds @gol |
| -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read @gol |
| -fchkp-check-read -fchkp-check-write -fchkp-store-bounds @gol |
| -fchkp-instrument-calls -fchkp-instrument-marked-only @gol |
| -fchkp-use-wrappers -fchkp-flexible-struct-trailing-arrays@gol |
| -fstack-protector -fstack-protector-all -fstack-protector-strong @gol |
| -fstack-protector-explicit -fstack-check @gol |
| -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol |
| -fno-stack-limit -fsplit-stack @gol |
| -fvtable-verify=@r{[}std@r{|}preinit@r{|}none@r{]} @gol |
| -fvtv-counts -fvtv-debug @gol |
| -finstrument-functions @gol |
| -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol |
| -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}} |
| |
| @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 -CC -D@var{macro}@r{[}=@var{defn}@r{]} @gol |
| -dD -dI -dM -dN -dU @gol |
| -fdebug-cpp -fdirectives-only -fdollars-in-identifiers @gol |
| -fexec-charset=@var{charset} -fextended-identifiers @gol |
| -finput-charset=@var{charset} -fno-canonical-system-headers @gol |
| -fpch-deps -fpch-preprocess -fpreprocessed @gol |
| -ftabstop=@var{width} -ftrack-macro-expansion @gol |
| -fwide-exec-charset=@var{charset} -fworking-directory @gol |
| -H -imacros @var{file} -include @var{file} @gol |
| -M -MD -MF -MG -MM -MMD -MP -MQ -MT @gol |
| -no-integrated-cpp -P -pthread -remap @gol |
| -traditional -traditional-cpp -trigraphs @gol |
| -U@var{macro} -undef @gol |
| -Wp,@var{option} -Xpreprocessor @var{option}} |
| |
| @item Assembler Options |
| @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} -fuse-ld=@var{linker} -l@var{library} @gol |
| -nostartfiles -nodefaultlibs -nostdlib -pie -pthread -rdynamic @gol |
| -s -static -static-libgcc -static-libstdc++ @gol |
| -static-libasan -static-libtsan -static-liblsan -static-libubsan @gol |
| -static-libmpx -static-libmpxwrappers @gol |
| -shared -shared-libgcc -symbolic @gol |
| -T @var{script} -Wl,@var{option} -Xlinker @var{option} @gol |
| -u @var{symbol} -z @var{keyword}} |
| |
| @item Directory Options |
| @xref{Directory Options,,Options for Directory Search}. |
| @gccoptlist{-B@var{prefix} -I@var{dir} -I- @gol |
| -idirafter @var{dir} @gol |
| -imacros @var{file} -imultilib @var{dir} @gol |
| -iplugindir=@var{dir} -iprefix @var{file} @gol |
| -iquote @var{dir} -isysroot @var{dir} -isystem @var{dir} @gol |
| -iwithprefix @var{dir} -iwithprefixbefore @var{dir} @gol |
| -L@var{dir} -no-canonical-prefixes --no-sysroot-suffix @gol |
| -nostdinc -nostdinc++ --sysroot=@var{dir}} |
| |
| @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 -fdelete-dead-exceptions -funwind-tables @gol |
| -fasynchronous-unwind-tables @gol |
| -fno-gnu-unique @gol |
| -finhibit-size-directive -fno-common -fno-ident @gol |
| -fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-plt @gol |
| -fno-jump-tables @gol |
| -frecord-gcc-switches @gol |
| -freg-struct-return -fshort-enums -fshort-wchar @gol |
| -fverbose-asm -fpack-struct[=@var{n}] @gol |
| -fleading-underscore -ftls-model=@var{model} @gol |
| -fstack-reuse=@var{reuse_level} @gol |
| -ftrampolines -ftrapv -fwrapv @gol |
| -fvisibility=@r{[}default@r{|}internal@r{|}hidden@r{|}protected@r{]} @gol |
| -fstrict-volatile-bitfields -fsync-libcalls} |
| |
| @item Developer Options |
| @xref{Developer Options,,GCC Developer Options}. |
| @gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol |
| -dumpfullversion -fchecking -fchecking=@var{n} -fdbg-cnt-list @gol |
| -fdbg-cnt=@var{counter-value-list} @gol |
| -fdisable-ipa-@var{pass_name} @gol |
| -fdisable-rtl-@var{pass_name} @gol |
| -fdisable-rtl-@var{pass-name}=@var{range-list} @gol |
| -fdisable-tree-@var{pass_name} @gol |
| -fdisable-tree-@var{pass-name}=@var{range-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-passes @gol |
| -fdump-rtl-@var{pass} -fdump-rtl-@var{pass}=@var{filename} @gol |
| -fdump-statistics @gol |
| -fdump-final-insns@r{[}=@var{file}@r{]} |
| -fdump-tree-all @gol |
| -fdump-tree-@var{switch} @gol |
| -fdump-tree-@var{switch}-@var{options} @gol |
| -fdump-tree-@var{switch}-@var{options}=@var{filename} @gol |
| -fcompare-debug@r{[}=@var{opts}@r{]} -fcompare-debug-second @gol |
| -fenable-@var{kind}-@var{pass} @gol |
| -fenable-@var{kind}-@var{pass}=@var{range-list} @gol |
| -fira-verbose=@var{n} @gol |
| -flto-report -flto-report-wpa -fmem-report-wpa @gol |
| -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report @gol |
| -fopt-info -fopt-info-@var{options}@r{[}=@var{file}@r{]} @gol |
| -fprofile-report @gol |
| -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol |
| -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol |
| -fstats -fstack-usage -ftime-report -ftime-report-details @gol |
| -fvar-tracking-assignments-toggle -gtoggle @gol |
| -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 Machine-Dependent Options |
| @xref{Submodel Options,,Machine-Dependent Options}. |
| @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{AArch64 Options} |
| @gccoptlist{-mabi=@var{name} -mbig-endian -mlittle-endian @gol |
| -mgeneral-regs-only @gol |
| -mcmodel=tiny -mcmodel=small -mcmodel=large @gol |
| -mstrict-align @gol |
| -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol |
| -mtls-dialect=desc -mtls-dialect=traditional @gol |
| -mtls-size=@var{size} @gol |
| -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 @gol |
| -mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 @gol |
| -mlow-precision-recip-sqrt -mno-low-precision-recip-sqrt@gol |
| -mlow-precision-sqrt -mno-low-precision-sqrt@gol |
| -mlow-precision-div -mno-low-precision-div @gol |
| -march=@var{name} -mcpu=@var{name} -mtune=@var{name}} |
| |
| @emph{Adapteva Epiphany Options} |
| @gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol |
| -mbranch-cost=@var{num} -mcmove -mnops=@var{num} -msoft-cmpsf @gol |
| -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=@var{num} @gol |
| -mround-nearest -mlong-calls -mshort-calls -msmall16 @gol |
| -mfp-mode=@var{mode} -mvect-double -max-vect-align=@var{num} @gol |
| -msplit-vecmove-early -m1reg-@var{reg}} |
| |
| @emph{ARC Options} |
| @gccoptlist{-mbarrel-shifter @gol |
| -mcpu=@var{cpu} -mA6 -mARC600 -mA7 -mARC700 @gol |
| -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr @gol |
| -mea -mno-mpy -mmul32x16 -mmul64 -matomic @gol |
| -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap @gol |
| -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape @gol |
| -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof @gol |
| -mlong-calls -mmedium-calls -msdata @gol |
| -mvolatile-cache -mtp-regno=@var{regno} @gol |
| -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc @gol |
| -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi @gol |
| -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none @gol |
| -mlra-priority-compact mlra-priority-noncompact -mno-millicode @gol |
| -mmixed-code -mq-class -mRcq -mRcw -msize-level=@var{level} @gol |
| -mtune=@var{cpu} -mmultcost=@var{num} @gol |
| -munalign-prob-threshold=@var{probability} -mmpy-option=@var{multo} @gol |
| -mdiv-rem -mcode-density -mll64 -mfpu=@var{fpu}} |
| |
| @emph{ARM Options} |
| @gccoptlist{-mapcs-frame -mno-apcs-frame @gol |
| -mabi=@var{name} @gol |
| -mapcs-stack-check -mno-apcs-stack-check @gol |
| -mapcs-reentrant -mno-apcs-reentrant @gol |
| -msched-prolog -mno-sched-prolog @gol |
| -mlittle-endian -mbig-endian @gol |
| -mfloat-abi=@var{name} @gol |
| -mfp16-format=@var{name} |
| -mthumb-interwork -mno-thumb-interwork @gol |
| -mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol |
| -mtune=@var{name} -mprint-tune-info @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 |
| -mpoke-function-name @gol |
| -mthumb -marm @gol |
| -mtpcs-frame -mtpcs-leaf-frame @gol |
| -mcaller-super-interworking -mcallee-super-interworking @gol |
| -mtp=@var{name} -mtls-dialect=@var{dialect} @gol |
| -mword-relocations @gol |
| -mfix-cortex-m3-ldrd @gol |
| -munaligned-access @gol |
| -mneon-for-64bits @gol |
| -mslow-flash-data @gol |
| -masm-syntax-unified @gol |
| -mrestrict-it @gol |
| -mpure-code @gol |
| -mcmse} |
| |
| @emph{AVR Options} |
| @gccoptlist{-mmcu=@var{mcu} -mabsdata -maccumulate-args @gol |
| -mbranch-cost=@var{cost} @gol |
| -mcall-prologues -mint8 -mn_flash=@var{size} -mno-interrupts @gol |
| -mrelax -mrmw -mstrict-X -mtiny-stack -mfract-convert-truncate @gol |
| -nodevicelib @gol |
| -Waddr-space-convert -Wmisspelled-isr} |
| |
| @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{C6X Options} |
| @gccoptlist{-mbig-endian -mlittle-endian -march=@var{cpu} @gol |
| -msim -msdata=@var{sdata-type}} |
| |
| @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{CR16 Options} |
| @gccoptlist{-mmac @gol |
| -mcr16cplus -mcr16c @gol |
| -msim -mint32 -mbit-ops |
| -mdata-model=@var{model}} |
| |
| @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 @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{FR30 Options} |
| @gccoptlist{-msmall-model -mno-lsim} |
| |
| @emph{FT32 Options} |
| @gccoptlist{-msim -mlra -mnodiv} |
| |
| @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 -mmusl -mbionic -mandroid @gol |
| -tno-android-cc -tno-android-ld} |
| |
| @emph{H8/300 Options} |
| @gccoptlist{-mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300} |
| |
| @emph{HPPA Options} |
| @gccoptlist{-march=@var{architecture-type} @gol |
| -mcaller-copies -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-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{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{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} @gol |
| -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 -mlong-jump-table-offsets} |
| |
| @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 |
| -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-@var{app-model}} |
| |
| @emph{MIPS Options} |
| @gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol |
| -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips32r3 -mips32r5 @gol |
| -mips32r6 -mips64 -mips64r2 -mips64r3 -mips64r5 -mips64r6 @gol |
| -mips16 -mno-mips16 -mflip-mips16 @gol |
| -minterlink-compressed -mno-interlink-compressed @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 -mfpxx -mfp64 -mhard-float -msoft-float @gol |
| -mno-float -msingle-float -mdouble-float @gol |
| -modd-spreg -mno-odd-spreg @gol |
| -mabs=@var{mode} -mnan=@var{encoding} @gol |
| -mdsp -mno-dsp -mdspr2 -mno-dspr2 @gol |
| -mmcu -mmno-mcu @gol |
| -meva -mno-eva @gol |
| -mvirt -mno-virt @gol |
| -mxpa -mno-xpa @gol |
| -mmicromips -mno-micromips @gol |
| -mmsa -mno-msa @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 |
| -mload-store-pairs -mno-load-store-pairs @gol |
| -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol |
| -mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp @gol |
| -mfix-24k -mno-fix-24k @gol |
| -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol |
| -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000 @gol |
| -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 |
| -mcompact-branches=@var{policy} @gol |
| -mfp-exceptions -mno-fp-exceptions @gol |
| -mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol |
| -mlxc1-sxc1 -mno-lxc1-sxc1 -mmadd4 -mno-madd4 @gol |
| -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address @gol |
| -mframe-header-opt -mno-frame-header-opt} |
| |
| @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 -msetlb} |
| |
| @emph{Moxie Options} |
| @gccoptlist{-meb -mel -mmul.x -mno-crt0} |
| |
| @emph{MSP430 Options} |
| @gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol |
| -mwarn-mcu @gol |
| -mcode-region= -mdata-region= @gol |
| -msilicon-errata= -msilicon-errata-warn= @gol |
| -mhwmult= -minrt} |
| |
| @emph{NDS32 Options} |
| @gccoptlist{-mbig-endian -mlittle-endian @gol |
| -mreduced-regs -mfull-regs @gol |
| -mcmov -mno-cmov @gol |
| -mperf-ext -mno-perf-ext @gol |
| -mv3push -mno-v3push @gol |
| -m16bit -mno-16bit @gol |
| -misr-vector-size=@var{num} @gol |
| -mcache-block-size=@var{num} @gol |
| -march=@var{arch} @gol |
| -mcmodel=@var{code-model} @gol |
| -mctor-dtor -mrelax} |
| |
| @emph{Nios II Options} |
| @gccoptlist{-G @var{num} -mgpopt=@var{option} -mgpopt -mno-gpopt @gol |
| -mel -meb @gol |
| -mno-bypass-cache -mbypass-cache @gol |
| -mno-cache-volatile -mcache-volatile @gol |
| -mno-fast-sw-div -mfast-sw-div @gol |
| -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div @gol |
| -mcustom-@var{insn}=@var{N} -mno-custom-@var{insn} @gol |
| -mcustom-fpu-cfg=@var{name} @gol |
| -mhal -msmallc -msys-crt0=@var{name} -msys-lib=@var{name} @gol |
| -march=@var{arch} -mbmx -mno-bmx -mcdx -mno-cdx} |
| |
| @emph{Nvidia PTX Options} |
| @gccoptlist{-m32 -m64 -mmainkernel -moptimize} |
| |
| @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{RISC-V Options} |
| @gccoptlist{-mbranch-cost=@var{N-instruction} @gol |
| -mplt -mno-plt @gol |
| -mabi=@var{ABI-string} @gol |
| -mfdiv -mno-fdiv @gol |
| -mdiv -mno-div @gol |
| -march=@var{ISA-string} @gol |
| -mtune=@var{processor-string} @gol |
| -msmall-data-limit=@var{N-bytes} @gol |
| -msave-restore -mno-save-restore @gol |
| -mstrict-align -mno-strict-align @gol |
| -mcmodel=medlow -mcmodel=medany @gol |
| -mexplicit-relocs -mno-explicit-relocs @gol} |
| |
| @emph{RL78 Options} |
| @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs @gol |
| -mcpu=g10 -mcpu=g13 -mcpu=g14 -mg10 -mg13 -mg14 @gol |
| -m64bit-doubles -m32bit-doubles -msave-mduc-in-interrupts} |
| |
| @emph{RS/6000 and PowerPC Options} |
| @gccoptlist{-mcpu=@var{cpu-type} @gol |
| -mtune=@var{cpu-type} @gol |
| -mcmodel=@var{code-model} @gol |
| -mpowerpc64 @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 |
| -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} -mreadonly-in-sdata -mvxworks -G @var{num} @gol |
| -mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision @gol |
| -mno-recip-precision @gol |
| -mveclibabi=@var{type} -mfriz -mno-friz @gol |
| -mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol |
| -msave-toc-indirect -mno-save-toc-indirect @gol |
| -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector @gol |
| -mcrypto -mno-crypto -mhtm -mno-htm -mdirect-move -mno-direct-move @gol |
| -mquad-memory -mno-quad-memory @gol |
| -mquad-memory-atomic -mno-quad-memory-atomic @gol |
| -mcompat-align-parm -mno-compat-align-parm @gol |
| -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf @gol |
| -mupper-regs-di -mno-upper-regs-di @gol |
| -mupper-regs -mno-upper-regs @gol |
| -mfloat128 -mno-float128 -mfloat128-hardware -mno-float128-hardware @gol |
| -mgnu-attribute -mno-gnu-attribute @gol |
| -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol |
| -mstack-protector-guard-offset=@var{offset} @gol |
| -mlra -mno-lra} |
| |
| @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 |
| -mpid@gol |
| -mallow-string-insns -mno-allow-string-insns@gol |
| -mjsr@gol |
| -mno-warn-multiple-fast-interrupts@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 |
| -mhtm -mvx -mzvector @gol |
| -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd @gol |
| -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard @gol |
| -mhotpatch=@var{halfwords},@var{halfwords}} |
| |
| @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 |
| -mb -ml -mdalign -mrelax @gol |
| -mbigtable -mfmovd -mrenesas -mno-renesas -mnomacsave @gol |
| -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct @gol |
| -mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol |
| -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol |
| -maccumulate-outgoing-args @gol |
| -matomic-model=@var{atomic-model} @gol |
| -mbranch-cost=@var{num} -mzdcbranch -mno-zdcbranch @gol |
| -mcbranch-force-delay-slot @gol |
| -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra @gol |
| -mpretend-cmove -mtas} |
| |
| @emph{Solaris 2 Options} |
| @gccoptlist{-mclear-hwcap -mno-clear-hwcap -mimpure-text -mno-impure-text @gol |
| -pthreads} |
| |
| @emph{SPARC Options} |
| @gccoptlist{-mcpu=@var{cpu-type} @gol |
| -mtune=@var{cpu-type} @gol |
| -mcmodel=@var{code-model} @gol |
| -mmemory-model=@var{mem-model} @gol |
| -m32 -m64 -mapp-regs -mno-app-regs @gol |
| -mfaster-structs -mno-faster-structs -mflat -mno-flat @gol |
| -mfpu -mno-fpu -mhard-float -msoft-float @gol |
| -mhard-quad-float -msoft-quad-float @gol |
| -mstack-bias -mno-stack-bias @gol |
| -mstd-struct-return -mno-std-struct-return @gol |
| -munaligned-doubles -mno-unaligned-doubles @gol |
| -muser-mode -mno-user-mode @gol |
| -mv8plus -mno-v8plus -mvis -mno-vis @gol |
| -mvis2 -mno-vis2 -mvis3 -mno-vis3 @gol |
| -mvis4 -mno-vis4 -mvis4b -mno-vis4b @gol |
| -mcbcond -mno-cbcond -mfmaf -mno-fmaf -mfsmuld -mno-fsmuld @gol |
| -mpopc -mno-popc -msubxc -mno-subxc @gol |
| -mfix-at697f -mfix-ut699 -mfix-ut700 -mfix-gr712rc @gol |
| -mlra -mno-lra} |
| |
| @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{TILE-Gx Options} |
| @gccoptlist{-mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian @gol |
| -mcmodel=@var{code-model}} |
| |
| @emph{TILEPro Options} |
| @gccoptlist{-mcpu=@var{cpu} -m32} |
| |
| @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 -mv850e2 -mv850e1 -mv850es @gol |
| -mv850e -mv850 -mv850e3v5 @gol |
| -mloop @gol |
| -mrelax @gol |
| -mlong-jumps @gol |
| -msoft-float @gol |
| -mhard-float @gol |
| -mgcc-abi @gol |
| -mrh850-abi @gol |
| -mbig-switch} |
| |
| @emph{VAX Options} |
| @gccoptlist{-mg -mgnu -munix} |
| |
| @emph{Visium Options} |
| @gccoptlist{-mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float @gol |
| -mcpu=@var{cpu-type} -mtune=@var{cpu-type} -msv-mode -muser-mode} |
| |
| @emph{VMS Options} |
| @gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64 @gol |
| -mpointer-size=@var{size}} |
| |
| @emph{VxWorks Options} |
| @gccoptlist{-mrtp -non-static -Bstatic -Bdynamic @gol |
| -Xbind-lazy -Xbind-now} |
| |
| @emph{x86 Options} |
| @gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol |
| -mtune-ctrl=@var{feature-list} -mdump-tune-features -mno-default @gol |
| -mfpmath=@var{unit} @gol |
| -masm=@var{dialect} -mno-fancy-math-387 @gol |
| -mno-fp-ret-in-387 -m80387 -mhard-float -msoft-float @gol |
| -mno-wide-multiply -mrtd -malign-double @gol |
| -mpreferred-stack-boundary=@var{num} @gol |
| -mincoming-stack-boundary=@var{num} @gol |
| -mcld -mcx16 -msahf -mmovbe -mcrc32 @gol |
| -mrecip -mrecip=@var{opt} @gol |
| -mvzeroupper -mprefer-avx128 @gol |
| -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol |
| -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -mavx512vl @gol |
| -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi -msha -maes @gol |
| -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma @gol |
| -mprefetchwt1 -mclflushopt -mxsavec -mxsaves @gol |
| -msse4a -m3dnow -m3dnowa -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop @gol |
| -mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx @gol |
| -mmwaitx -mclzero -mpku -mthreads @gol |
| -mms-bitfields -mno-align-stringops -minline-all-stringops @gol |
| -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol |
| -mmemcpy-strategy=@var{strategy} -mmemset-strategy=@var{strategy} @gol |
| -mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol |
| -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 @gol |
| -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} -maddress-mode=@var{mode} @gol |
| -m32 -m64 -mx32 -m16 -miamcu -mlarge-data-threshold=@var{num} @gol |
| -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol |
| -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol |
| -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol |
| -mmitigate-rop -mgeneral-regs-only @gol |
| -mindirect-branch=@var{choice} -mfunction-return=@var{choice} @gol |
| -mindirect-branch-register} |
| |
| @emph{x86 Windows Options} |
| @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol |
| -mnop-fun-dllimport -mthread @gol |
| -municode -mwin32 -mwindows -fno-set-stack-executable} |
| |
| @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 |
| -mauto-litpools -mno-auto-litpools @gol |
| -mtarget-align -mno-target-align @gol |
| -mlongcalls -mno-longcalls} |
| |
| @emph{zSeries Options} |
| See S/390 and zSeries Options. |
| @end table |
| |
| |
| @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 that must be preprocessed. |
| |
| @item @var{file}.i |
| C source code that should not be preprocessed. |
| |
| @item @var{file}.ii |
| C++ source code that 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 that 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 that 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 that 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 that must be preprocessed. |
| |
| @item @var{file}.mii |
| Objective-C++ source code that 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 that 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 that 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 that 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 that must be preprocessed (with the |
| traditional preprocessor). |
| |
| @item @var{file}.go |
| Go source code. |
| |
| @item @var{file}.brig |
| BRIG files (binary representation of HSAIL). |
| |
| @item @var{file}.ads |
| Ada source code file that 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 that 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 |
| brig |
| @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). |
| @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 that don't require preprocessing are ignored. |
| |
| @cindex output file option |
| @item -o @var{file} |
| @opindex o |
| Place output in file @var{file}. This applies 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 --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} is also 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 that |
| have no documentation associated with them are also 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} |
| Display all of the optimization options supported by the |
| compiler. |
| |
| @item @samp{warnings} |
| Display all of the options controlling warning messages |
| produced by the compiler. |
| |
| @item @samp{target} |
| Display target-specific options. Unlike the |
| @option{--target-help} option however, target-specific options of the |
| linker and assembler are not displayed. This is because those |
| tools do not currently support the extended @option{--help=} syntax. |
| |
| @item @samp{params} |
| Display the values recognized by the @option{--param} |
| option. |
| |
| @item @var{language} |
| 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} |
| 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 that are undocumented. |
| |
| @item @samp{joined} |
| Display options taking 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 taking 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, use: |
| |
| @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) that have a description, use: |
| |
| @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 so much that there is nothing to display. One |
| case where it does work, however, is when one of the classes is |
| @var{target}. For example, to display all the target-specific |
| optimization options, use: |
| |
| @smallexample |
| --help=target,optimizers |
| @end smallexample |
| |
| The @option{--help=} option can be repeated on the command line. Each |
| successive use displays 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 --version |
| @opindex version |
| Display the version number and copyrights of the invoked GCC@. |
| |
| @item -pass-exit-codes |
| @opindex pass-exit-codes |
| Normally the @command{gcc} program exits 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 instead returns with |
| the numerically highest error produced by any phase returning an error |
| indication. The C, C++, and Fortran front ends return 4 if an internal |
| compiler error is encountered. |
| |
| @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 -specs=@var{file} |
| @opindex specs |
| Process @var{file} after the compiler reads in the standard @file{specs} |
| file, in order to override the defaults which the @command{gcc} driver |
| program uses when determining what switches to pass to @command{cc1}, |
| @command{cc1plus}, @command{as}, @command{ld}, etc. More than one |
| @option{-specs=@var{file}} can be specified on the command line, and they |
| are processed in order, from left to right. @xref{Spec Files}, for |
| information about the format of the @var{file}. |
| |
| @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 |
| |
| @noindent |
| This invokes all subprograms of @command{gcc} under |
| @samp{gdb --args}, thus the invocation of @command{cc1} is |
| @samp{gdb --args cc1 @dots{}}. |
| |
| @item -fplugin=@var{name}.so |
| @opindex fplugin |
| 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} |
| @opindex fplugin-arg |
| 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{]} |
| @opindex fdump-ada-spec |
| 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 -fada-spec-parent=@var{unit} |
| @opindex fada-spec-parent |
| In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate |
| Ada specs as child units of parent @var{unit}. |
| |
| @item -fdump-go-spec=@var{file} |
| @opindex fdump-go-spec |
| 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 automatically specifies linking |
| against the C++ library. It treats @samp{.c}, |
| @samp{.h} and @samp{.i} files as C++ source files instead of C source |
| files unless @option{-x} is used. 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 @option{-std=c90}. In C++ mode, it is |
| equivalent to @option{-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{-Wpedantic} 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 are normally 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}. When a base standard is specified, the |
| compiler accepts all programs following that standard plus those |
| using GNU extensions that do not contradict it. For example, |
| @option{-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, when a GNU dialect of a standard is |
| specified, all features supported by the compiler are enabled, even when |
| those features change the meaning of the base standard. As a result, some |
| strict-conforming programs may be rejected. The particular standard |
| is used by @option{-Wpedantic} to identify which features are GNU |
| extensions given that version of the standard. For example |
| @option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//} |
| comments, while @option{-std=gnu99 -Wpedantic} does 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. This standard is substantially completely supported, modulo |
| bugs and floating-point issues |
| (mainly but not entirely relating to optional C99 features from |
| Annexes F and G). See |
| @w{@uref{http://gcc.gnu.org/c99status.html}} for more information. The |
| names @samp{c9x} and @samp{iso9899:199x} are deprecated. |
| |
| @item c11 |
| @itemx c1x |
| @itemx iso9899:2011 |
| ISO C11, the 2011 revision of the ISO C standard. This standard is |
| substantially completely supported, modulo bugs, floating-point issues |
| (mainly but not entirely relating to optional C11 features from |
| Annexes F and G) and the optional Annexes K (Bounds-checking |
| interfaces) and L (Analyzability). The name @samp{c1x} is deprecated. |
| |
| @item gnu90 |
| @itemx gnu89 |
| GNU dialect of ISO C90 (including some C99 features). |
| |
| @item gnu99 |
| @itemx gnu9x |
| GNU dialect of ISO C99. The name @samp{gnu9x} is deprecated. |
| |
| @item gnu11 |
| @itemx gnu1x |
| GNU dialect of ISO C11. This is the default for C code. |
| The name @samp{gnu1x} is deprecated. |
| |
| @item c++98 |
| @itemx c++03 |
| The 1998 ISO C++ standard plus the 2003 technical corrigendum and some |
| additional defect reports. Same as @option{-ansi} for C++ code. |
| |
| @item gnu++98 |
| @itemx gnu++03 |
| GNU dialect of @option{-std=c++98}. |
| |
| @item c++11 |
| @itemx c++0x |
| The 2011 ISO C++ standard plus amendments. |
| The name @samp{c++0x} is deprecated. |
| |
| @item gnu++11 |
| @itemx gnu++0x |
| GNU dialect of @option{-std=c++11}. |
| The name @samp{gnu++0x} is deprecated. |
| |
| @item c++14 |
| @itemx c++1y |
| The 2014 ISO C++ standard plus amendments. |
| The name @samp{c++1y} is deprecated. |
| |
| @item gnu++14 |
| @itemx gnu++1y |
| GNU dialect of @option{-std=c++14}. |
| This is the default for C++ code. |
| The name @samp{gnu++1y} is deprecated. |
| |
| @item c++1z |
| The next revision of the ISO C++ standard, tentatively planned for |
| 2017. Support is highly experimental, and will almost certainly |
| change in incompatible ways in future releases. |
| |
| @item gnu++1z |
| GNU dialect of @option{-std=c++1z}. Support is highly experimental, |
| and will almost certainly change in incompatible ways in future |
| releases. |
| @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}. |
| 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 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 -fpermitted-flt-eval-methods=@var{style} |
| @opindex fpermitted-flt-eval-methods |
| @opindex fpermitted-flt-eval-methods=c11 |
| @opindex fpermitted-flt-eval-methods=ts-18661-3 |
| ISO/IEC TS 18661-3 defines new permissible values for |
| @code{FLT_EVAL_METHOD} that indicate that operations and constants with |
| a semantic type that is an interchange or extended format should be |
| evaluated to the precision and range of that type. These new values are |
| a superset of those permitted under C99/C11, which does not specify the |
| meaning of other positive values of @code{FLT_EVAL_METHOD}. As such, code |
| conforming to C11 may not have been written expecting the possibility of |
| the new values. |
| |
| @option{-fpermitted-flt-eval-methods} specifies whether the compiler |
| should allow only the values of @code{FLT_EVAL_METHOD} specified in C99/C11, |
| or the extended set of values specified in ISO/IEC TS 18661-3. |
| |
| @var{style} is either @code{c11} or @code{ts-18661-3} as appropriate. |
| |
| The default when in a standards compliant mode (@option{-std=c11} or similar) |
| is @option{-fpermitted-flt-eval-methods=c11}. The default when in a GNU |
| dialect (@option{-std=gnu11} or similar) is |
| @option{-fpermitted-flt-eval-methods=ts-18661-3}. |
| |
| @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 -fallow-parameterless-variadic-functions |
| @opindex fallow-parameterless-variadic-functions |
| Accept variadic functions without named parameters. |
| |
| Although it is possible to define such a function, this is not very |
| useful as it is not possible to read the arguments. This is only |
| supported for C as this construct is allowed by C++. |
| |
| @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 which 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 -fgimple |
| @opindex fgimple |
| |
| Enable parsing of function definitions marked with @code{__GIMPLE}. |
| This is an experimental feature that allows unit testing of GIMPLE |
| passes. |
| |
| @item -fhosted |
| @opindex fhosted |
| @cindex hosted environment |
| |
| Assert that compilation targets 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 targets 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 -fopenacc |
| @opindex fopenacc |
| @cindex OpenACC accelerator programming |
| Enable handling of OpenACC directives @code{#pragma acc} in C/C++ and |
| @code{!$acc} in Fortran. When @option{-fopenacc} is specified, the |
| compiler generates accelerated code according to the OpenACC Application |
| Programming Interface v2.0 @w{@uref{http://www.openacc.org/}}. This option |
| implies @option{-pthread}, and thus is only supported on targets that |
| have support for @option{-pthread}. |
| |
| @item -fopenacc-dim=@var{geom} |
| @opindex fopenacc-dim |
| @cindex OpenACC accelerator programming |
| Specify default compute dimensions for parallel offload regions that do |
| not explicitly specify. The @var{geom} value is a triple of |
| ':'-separated sizes, in order 'gang', 'worker' and, 'vector'. A size |
| can be omitted, to use a target-specific default value. |
| |
| @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 v4.5 @w{@uref{http://www.openmp.org/}}. This option |
| implies @option{-pthread}, and thus is only supported on targets that |
| have support for @option{-pthread}. @option{-fopenmp} implies |
| @option{-fopenmp-simd}. |
| |
| @item -fopenmp-simd |
| @opindex fopenmp-simd |
| @cindex OpenMP SIMD |
| @cindex SIMD |
| Enable handling of OpenMP's SIMD directives with @code{#pragma omp} |
| in C/C++ and @code{!$omp} in Fortran. Other OpenMP directives |
| are ignored. |
| |
| @item -fcilkplus |
| @opindex fcilkplus |
| @cindex Enable Cilk Plus |
| Enable the usage of Cilk Plus language extension features for C/C++. |
| When the option @option{-fcilkplus} is specified, enable the usage of |
| the Cilk Plus Language extension features for C/C++. The present |
| implementation follows ABI version 1.2. This is an experimental |
| feature that is only partially complete, and whose interface may |
| change in future versions of GCC as the official specification |
| changes. Currently, all features but @code{_Cilk_for} have been |
| implemented. |
| |
| @item -fgnu-tm |
| @opindex fgnu-tm |
| When the option @option{-fgnu-tm} is specified, the compiler |
| generates code for the Linux variant of Intel's current Transactional |
| Memory ABI specification document (Revision 1.1, May 6 2009). This is |
| an experimental feature whose interface may change in future versions |
| of GCC, as the official specification changes. Please note that not |
| all architectures are supported for this feature. |
| |
| For more information on GCC's support for transactional memory, |
| @xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU |
| Transactional Memory Library}. |
| |
| Note that the transactional memory feature is not supported with |
| non-call exceptions (@option{-fnon-call-exceptions}). |
| |
| @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. |
| |
| Note that this option is off for all targets but x86 |
| targets using ms-abi. |
| |
| @item -fplan9-extensions |
| @opindex 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 that 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 -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. |
| |
| @item -fsso-struct=@var{endianness} |
| @opindex fsso-struct |
| Set the default scalar storage order of structures and unions to the |
| specified endianness. The accepted values are @samp{big-endian}, |
| @samp{little-endian} and @samp{native} for the native endianness of |
| the target (the default). This option is not supported for C++. |
| |
| @strong{Warning:} the @option{-fsso-struct} switch causes GCC to generate |
| code that is not binary compatible with code generated without it if the |
| specified endianness is not the native endianness of the target. |
| @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. 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 @file{firstClass.C} like this: |
| |
| @smallexample |
| g++ -g -fstrict-enums -O -c firstClass.C |
| @end smallexample |
| |
| @noindent |
| In this example, only @option{-fstrict-enums} is an option meant |
| only for C++ programs; you can use the other options with any |
| language supported by GCC@. |
| |
| Some options for compiling C programs, such as @option{-std}, are also |
| relevant for C++ programs. |
| @xref{C Dialect Options,,Options Controlling C Dialect}. |
| |
| 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@. The default is version 0. |
| |
| Version 0 refers to the version conforming most closely to |
| the C++ ABI specification. Therefore, the ABI obtained using version 0 |
| will change in different versions of G++ as ABI bugs are fixed. |
| |
| Version 1 is the version of the C++ ABI that first appeared in G++ 3.2. |
| |
| Version 2 is the version of the C++ ABI that first appeared in G++ |
| 3.4, and was the default through G++ 4.9. |
| |
| Version 3 corrects an error in mangling a constant address as a |
| template argument. |
| |
| Version 4, which first appeared in G++ 4.5, implements a standard |
| mangling for vector types. |
| |
| Version 5, which first appeared in G++ 4.6, 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. |
| |
| Version 6, which first appeared in G++ 4.7, corrects the promotion |
| behavior of C++11 scoped enums and the mangling of template argument |
| packs, const/static_cast, prefix ++ and --, and a class scope function |
| used as a template argument. |
| |
| Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a |
| builtin type and corrects the mangling of lambdas in default argument |
| scope. |
| |
| Version 8, which first appeared in G++ 4.9, corrects the substitution |
| behavior of function types with function-cv-qualifiers. |
| |
| Version 9, which first appeared in G++ 5.2, corrects the alignment of |
| @code{nullptr_t}. |
| |
| Version 10, which first appeared in G++ 6.1, adds mangling of |
| attributes that affect type identity, such as ia32 calling convention |
| attributes (e.g. @samp{stdcall}). |
| |
| Version 11, which first appeared in G++ 7, corrects the mangling of |
| sizeof... expressions and operator names. For multiple entities with |
| the same name within a function, that are declared in different scopes, |
| the mangling now changes starting with the twelfth occurrence. It also |
| implies @option{-fnew-inheriting-ctors}. |
| |
| See also @option{-Wabi}. |
| |
| @item -fabi-compat-version=@var{n} |
| @opindex fabi-compat-version |
| On targets that support strong aliases, G++ |
| works around mangling changes by creating an alias with the correct |
| mangled name when defining a symbol with an incorrect mangled name. |
| This switch specifies which ABI version to use for the alias. |
| |
| With @option{-fabi-version=0} (the default), this defaults to 8 (GCC 5 |
| compatibility). If another ABI version is explicitly selected, this |
| defaults to 0. For compatibility with GCC versions 3.2 through 4.9, |
| use @option{-fabi-compat-version=2}. |
| |
| If this option is not provided but @option{-Wabi=@var{n}} is, that |
| version is used for compatibility aliases. If this option is provided |
| along with @option{-Wabi} (without the version), the version from this |
| option is used for the warning. |
| |
| @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 -faligned-new |
| @opindex faligned-new |
| Enable support for C++17 @code{new} of types that require more |
| alignment than @code{void* ::operator new(std::size_t)} provides. A |
| numeric argument such as @code{-faligned-new=32} can be used to |
| specify how much alignment (in bytes) is provided by that function, |
| but few users will need to override the default of |
| @code{alignof(std::max_align_t)}. |
| |
| @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} only returns @code{0} if it is declared |
| @code{throw()}, in which case the compiler always checks 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 -fconcepts |
| @opindex fconcepts |
| Enable support for the C++ Extensions for Concepts Technical |
| Specification, ISO 19217 (2015), which allows code like |
| |
| @smallexample |
| template <class T> concept bool Addable = requires (T t) @{ t + t; @}; |
| template <Addable T> T add (T a, T b) @{ return a + b; @} |
| @end smallexample |
| |
| @item -fconstexpr-depth=@var{n} |
| @opindex fconstexpr-depth |
| Set the maximum nested evaluation depth for C++11 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 -fconstexpr-loop-limit=@var{n} |
| @opindex fconstexpr-loop-limit |
| Set the maximum number of iterations for a loop in C++14 constexpr functions |
| to @var{n}. A limit is needed to detect infinite loops during |
| constant expression evaluation. The default is 262144 (1<<18). |
| |
| @item -fdeduce-init-list |
| @opindex fdeduce-init-list |
| Enable deduction of a template type parameter as |
| @code{std::initializer_list} from a brace-enclosed initializer list, i.e.@: |
| |
| @smallexample |
| template <class T> auto forward(T t) -> decltype (realfn (t)) |
| @{ |
| return realfn (t); |
| @} |
| |
| void f() |
| @{ |
| forward(@{1,2@}); // call forward<std::initializer_list<int>> |
| @} |
| @end smallexample |
| |
| This deduction was implemented as a possible extension to the |
| originally proposed semantics for the C++11 standard, but was not part |
| of the final standard, so it is disabled by default. This option is |
| deprecated, and may be removed in a future version of G++. |
| |
| @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. |
| However, in ISO C++ a friend function that is not declared |
| in an enclosing scope can only be found using argument dependent |
| lookup. GCC defaults to the standard behavior. |
| |
| 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 |
| that 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. This option also causes G++ |
| to call trivial member functions which otherwise would be expanded inline. |
| |
| In C++17, the compiler is required to omit these temporaries, but this |
| option still affects trivial member functions. |
| |
| @item -fno-enforce-eh-specs |
| @opindex fno-enforce-eh-specs |
| Don't generate code to check for violation of exception specifications |
| at run time. This option violates the C++ standard, but may be useful |
| for reducing code size in production builds, much like defining |
| @code{NDEBUG}. This does not give user code permission to throw |
| exceptions in violation of the exception specifications; the compiler |
| still optimizes based on the specifications, so throwing an |
| unexpected exception results in undefined behavior at run time. |
| |
| @item -fextern-tls-init |
| @itemx -fno-extern-tls-init |
| @opindex fextern-tls-init |
| @opindex fno-extern-tls-init |
| The C++11 and OpenMP standards allow @code{thread_local} and |
| @code{threadprivate} variables to have dynamic (runtime) |
| initialization. To support this, any use of such a variable goes |
| through a wrapper function that performs any necessary initialization. |
| When the use and definition of the variable are in the same |
| translation unit, this overhead can be optimized away, but when the |
| use is in a different translation unit there is significant overhead |
| even if the variable doesn't actually need dynamic initialization. If |
| the programmer can be sure that no use of the variable in a |
| non-defining TU needs to trigger dynamic initialization (either |
| because the variable is statically initialized, or a use of the |
| variable in the defining TU will be executed before any uses in |
| another TU), they can avoid this overhead with the |
| @option{-fno-extern-tls-init} option. |
| |
| On targets that support symbol aliases, the default is |
| @option{-fextern-tls-init}. On targets that do not support symbol |
| aliases, the default is @option{-fno-extern-tls-init}. |
| |
| @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 @code{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++. |
| |
| If neither flag is given, the default is 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. |
| This option is implied by the strict ISO C++ dialects: @option{-ansi}, |
| @option{-std=c++98}, @option{-std=c++11}, etc. |
| |
| @item -fno-implicit-templates |
| @opindex fno-implicit-templates |
| Never emit code for non-inline templates that 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 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 @code{#pragma implementation}. This causes linker |
| errors if these functions are not inlined everywhere they are called. |
| |
| @item -fms-extensions |
| @opindex fms-extensions |
| Disable Wpedantic warnings about constructs used in MFC, such as implicit |
| int and getting a pointer to member function via non-standard syntax. |
| |
| @item -fnew-inheriting-ctors |
| @opindex fnew-inheriting-ctors |
| Enable the P0136 adjustment to the semantics of C++11 constructor |
| inheritance. This is part of C++17 but also considered to be a Defect |
| Report against C++11 and C++14. This flag is enabled by default |
| unless @option{-fabi-version=10} or lower is specified. |
| |
| @item -fnew-ttp-matching |
| @opindex fnew-ttp-matching |
| Enable the P0522 resolution to Core issue 150, template template |
| parameters and default arguments: this allows a template with default |
| template arguments as an argument for a template template parameter |
| with fewer template parameters. This flag is enabled by default for |
| @option{-std=c++1z}. |
| |
| @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 if 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 actually makes 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 results 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} allows 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 normally prints 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 omits any template arguments that match |
| the default template arguments for that template. If either of these |
| behaviors make it harder to understand the error message rather than |
| easier, you can use @option{-fno-pretty-templates} to 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++ run-time type identification features |
| (@code{dynamic_cast} and @code{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 G++ generates it as |
| needed. The @code{dynamic_cast} operator can still be used for casts that |
| do not require run-time type information, i.e.@: casts to @code{void *} or to |
| unambiguous base classes. |
| |
| @item -fsized-deallocation |
| @opindex fsized-deallocation |
| Enable the built-in global declarations |
| @smallexample |
| void operator delete (void *, std::size_t) noexcept; |
| void operator delete[] (void *, std::size_t) noexcept; |
| @end smallexample |
| as introduced in C++14. This is useful for user-defined replacement |
| deallocation functions that, for example, use the size of the object |
| to make deallocation faster. Enabled by default under |
| @option{-std=c++14} and above. The flag @option{-Wsized-deallocation} |
| warns about places that might want to add a definition. |
| |
| @item -fstrict-enums |
| @opindex fstrict-enums |
| Allow the compiler to optimize using the assumption that a value of |
| enumerated type can only be one of the values of the enumeration (as |
| defined in the C++ standard; basically, a value that 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 enumerated type. |
| |
| @item -fstrong-eval-order |
| @opindex fstrong-eval-order |
| Evaluate member access, array subscripting, and shift expressions in |
| left-to-right order, and evaluate assignment in right-to-left order, |
| as adopted for C++17. Enabled by default with @option{-std=c++1z}. |
| @option{-fstrong-eval-order=some} enables just the ordering of member |
| access and shift expressions, and is the default without |
| @option{-std=c++1z}. |
| |
| @item -ftemplate-backtrace-limit=@var{n} |
| @opindex ftemplate-backtrace-limit |
| Set the maximum number of template instantiation notes for a single |
| warning or error to @var{n}. The default value is 10. |
| |
| @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++11). The default value is 900, as the compiler |
| can run out of stack space before hitting 1024 in some situations. |
| |
| @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 only works 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 |
| causes @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 functions or methods where the addresses of the two functions |
| are 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 has 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 that are defined in more than one |
| shared object: those declarations are permitted if they are |
| permitted when this option is not used. |
| @end enumerate |
| |
| In new code it is better to use @option{-fvisibility=hidden} and |
| export those classes that 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 are different, so changing one does 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++ uses weak symbols if they are available. This |
| option exists only for testing, and should not be used by end-users; |
| it results 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 -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)} |
| @opindex Wabi |
| @opindex Wno-abi |
| Warn when G++ it generates code that is probably not compatible with |
| the vendor-neutral C++ ABI@. Since G++ now defaults to updating the |
| ABI with each major release, normally @option{-Wabi} will warn only if |
| there is a check added later in a release series for an ABI issue |
| discovered since the initial release. @option{-Wabi} will warn about |
| more things if an older ABI version is selected (with |
| @option{-fabi-version=@var{n}}). |
| |
| @option{-Wabi} can also be used with an explicit version number to |
| warn about compatibility with a particular @option{-fabi-version} |
| level, e.g. @option{-Wabi=2} to warn about changes relative to |
| @option{-fabi-version=2}. |
| |
| If an explicit version number is provided and |
| @option{-fabi-compat-version} is not specified, the version number |
| from this option is used for compatibility aliases. If no explicit |
| version number is provided with this option, but |
| @option{-fabi-compat-version} is specified, that version number is |
| used for ABI warnings. |
| |
| 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 |
| is 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. |
| |
| Known incompatibilities in @option{-fabi-version=2} (which was the |
| default from GCC 3.4 to 4.9) include: |
| |
| @itemize @bullet |
| |
| @item |
| A template with a non-type template parameter of reference type was |
| mangled incorrectly: |
| @smallexample |
| extern int N; |
| template <int &> struct S @{@}; |
| void n (S<N>) @{2@} |
| @end smallexample |
| |
| This was fixed in @option{-fabi-version=3}. |
| |
| @item |
| SIMD vector types declared using @code{__attribute ((vector_size))} were |
| mangled in a non-standard way that does not allow for overloading of |
| functions taking vectors of different sizes. |
| |
| The mangling was changed in @option{-fabi-version=4}. |
| |
| @item |
| @code{__attribute ((const))} and @code{noreturn} were mangled as type |
| qualifiers, and @code{decltype} of a plain declaration was folded away. |
| |
| These mangling issues were fixed in @option{-fabi-version=5}. |
| |
| @item |
| Scoped enumerators passed as arguments to a variadic function are |
| promoted like unscoped enumerators, causing @code{va_arg} to complain. |
| On most targets this does not actually affect the parameter passing |
| ABI, as there is no way to pass an argument smaller than @code{int}. |
| |
| Also, the ABI changed the mangling of template argument packs, |
| @code{const_cast}, @code{static_cast}, prefix increment/decrement, and |
| a class scope function used as a template argument. |
| |
| These issues were corrected in @option{-fabi-version=6}. |
| |
| @item |
| Lambdas in default argument scope were mangled incorrectly, and the |
| ABI changed the mangling of @code{nullptr_t}. |
| |
| These issues were corrected in @option{-fabi-version=7}. |
| |
| @item |
| When mangling a function type with function-cv-qualifiers, the |
| un-qualified function type was incorrectly treated as a substitution |
| candidate. |
| |
| This was fixed in @option{-fabi-version=8}, the default for GCC 5.1. |
| |
| @item |
| @code{decltype(nullptr)} incorrectly had an alignment of 1, leading to |
| unaligned accesses. Note that this did not affect the ABI of a |
| function with a @code{nullptr_t} parameter, as parameters have a |
| minimum alignment. |
| |
| This was fixed in @option{-fabi-version=9}, the default for GCC 5.2. |
| |
| @item |
| Target-specific attributes that affect the identity of a type, such as |
| ia32 calling conventions on a function type (stdcall, regparm, etc.), |
| did not affect the mangled name, leading to name collisions when |
| function pointers were used as template arguments. |
| |
| This was fixed in @option{-fabi-version=10}, the default for GCC 6.1. |
| |
| @end itemize |
| |
| It also warns about psABI-related changes. The known psABI changes at this |
| point include: |
| |
| @itemize @bullet |
| |
| @item |
| For SysV/x86-64, unions with @code{long double} members are |
| passed in memory as specified in psABI. For example: |
| |
| @smallexample |
| union U @{ |
| long double ld; |
| int i; |
| @}; |
| @end smallexample |
| |
| @noindent |
| @code{union U} is always passed in memory. |
| |
| @end itemize |
| |
| @item -Wabi-tag @r{(C++ and Objective-C++ only)} |
| @opindex Wabi-tag |
| @opindex -Wabi-tag |
| Warn when a type with an ABI tag is used in a context that does not |
| have that ABI tag. See @ref{C++ Attributes} for more information |
| about ABI tags. |
| |
| @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)} |
| @opindex Wctor-dtor-privacy |
| @opindex Wno-ctor-dtor-privacy |
| Warn when a class seems unusable because all the constructors or |
| destructors in that class are private, and it has neither friends nor |
| public static member functions. Also warn if there are no non-private |
| methods, and there's at least one private member function that isn't |
| a constructor or destructor. |
| |
| @item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)} |
| @opindex Wdelete-non-virtual-dtor |
| @opindex Wno-delete-non-virtual-dtor |
| Warn when @code{delete} is used to destroy an instance of a class that |
| has virtual functions and non-virtual destructor. It is unsafe to delete |
| an instance of a derived class through a pointer to a base class if the |
| base class does not have a virtual destructor. This warning is enabled |
| by @option{-Wall}. |
| |
| @item -Wliteral-suffix @r{(C++ and Objective-C++ only)} |
| @opindex Wliteral-suffix |
| @opindex Wno-literal-suffix |
| Warn when a string or character literal is followed by a ud-suffix which does |
| not begin with an underscore. As a conforming extension, GCC treats such |
| suffixes as separate preprocessing tokens in order to maintain backwards |
| compatibility with code that uses formatting macros from @code{<inttypes.h>}. |
| For example: |
| |
| @smallexample |
| #define __STDC_FORMAT_MACROS |
| #include <inttypes.h> |
| #include <stdio.h> |
| |
| int main() @{ |
| int64_t i64 = 123; |
| printf("My int64: %" PRId64"\n", i64); |
| @} |
| @end smallexample |
| |
| In this case, @code{PRId64} is treated as a separate preprocessing token. |
| |
| Additionally, warn when a user-defined literal operator is declared with |
| a literal suffix identifier that doesn't begin with an underscore. Literal |
| suffix identifiers that don't begin with an underscore are reserved for |
| future standardization. |
| |
| This warning is enabled by default. |
| |
| @item -Wlto-type-mismatch |
| @opindex Wlto-type-mismatch |
| @opindex Wno-lto-type-mismatch |
| |
| During the link-time optimization warn about type mismatches in |
| global declarations from different compilation units. |
| Requires @option{-flto} to be enabled. Enabled by default. |
| |
| @item -Wno-narrowing @r{(C++ and Objective-C++ only)} |
| @opindex Wnarrowing |
| @opindex Wno-narrowing |
| For C++11 and later standards, narrowing conversions are diagnosed by default, |
| as required by the standard. A narrowing conversion from a constant produces |
| an error, and a narrowing conversion from a non-constant produces a warning, |
| but @option{-Wno-narrowing} suppresses the diagnostic. |
| Note that this does not affect the meaning of well-formed code; |
| narrowing conversions are still considered ill-formed in SFINAE contexts. |
| |
| With @option{-Wnarrowing} in C++98, warn when a narrowing |
| conversion prohibited by C++11 occurs within |
| @samp{@{ @}}, e.g. |
| |
| @smallexample |
| int i = @{ 2.2 @}; // error: narrowing from double to int |
| @end smallexample |
| |
| This flag is included in @option{-Wall} and @option{-Wc++11-compat}. |
| |
| @item -Wnoexcept @r{(C++ and Objective-C++ only)} |
| @opindex Wnoexcept |
| @opindex Wno-noexcept |
| Warn when a noexcept-expression evaluates to false because of a call |
| to a function that does not have a non-throwing exception |
| specification (i.e. @code{throw()} or @code{noexcept}) but is known by |
| the compiler to never throw an exception. |
| |
| @item -Wnoexcept-type @r{(C++ and Objective-C++ only)} |
| @opindex Wnoexcept-type |
| @opindex Wno-noexcept-type |
| Warn if the C++1z feature making @code{noexcept} part of a function |
| type changes the mangled name of a symbol relative to C++14. Enabled |
| by @option{-Wabi} and @option{-Wc++1z-compat}. |
| |
| @smallexample |
| template <class T> void f(T t) @{ t(); @}; |
| void g() noexcept; |
| void h() @{ f(g); @} // in C++14 calls f<void(*)()>, in C++1z calls f<void(*)()noexcept> |
| @end smallexample |
| |
| |
| @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)} |
| @opindex Wnon-virtual-dtor |
| @opindex Wno-non-virtual-dtor |
| Warn when a class has virtual functions and an accessible non-virtual |
| destructor itself or in an accessible polymorphic base class, in which |
| case it is possible but unsafe to delete an instance of a derived |
| class through a pointer to the class itself or base class. This |
| warning is automatically enabled if @option{-Weffc++} is specified. |
| |
| @item -Wregister @r{(C++ and Objective-C++ only)} |
| @opindex Wregister |
| @opindex Wno-register |
| Warn on uses of the @code{register} storage class specifier, except |
| when it is part of the GNU @ref{Explicit Register Variables} extension. |
| The use of the @code{register} keyword as storage class specifier has |
| been deprecated in C++11 and removed in C++17. |
| Enabled by default with @option{-std=c++1z}. |
| |
| @item -Wreorder @r{(C++ and Objective-C++ only)} |
| @opindex Wreorder |
| @opindex Wno-reorder |
| @cindex reordering, warning |
| @cindex warning for reordering of member initializers |
| Warn when the order of member initializers given in the code does not |
| match the order in which they must be executed. For instance: |
| |
| @smallexample |
| struct A @{ |
| int i; |
| int j; |
| A(): j (0), i (1) @{ @} |
| @}; |
| @end smallexample |
| |
| @noindent |
| The compiler rearranges the member initializers for @code{i} |
| and @code{j} to match the declaration order of the members, emitting |
| a warning to that effect. This warning is enabled by @option{-Wall}. |
| |
| @item -fext-numeric-literals @r{(C++ and Objective-C++ only)} |
| @opindex fext-numeric-literals |
| @opindex fno-ext-numeric-literals |
| Accept imaginary, fixed-point, or machine-defined |
| literal number suffixes as GNU extensions. |
| When this option is turned off these suffixes are treated |
| as C++11 user-defined literal numeric suffixes. |
| This is on by default for all pre-C++11 dialects and all GNU dialects: |
| @option{-std=c++98}, @option{-std=gnu++98}, @option{-std=gnu++11}, |
| @option{-std=gnu++14}. |
| This option is off by default |
| for ISO C++11 onwards (@option{-std=c++11}, ...). |
| @end table |
| |
| The following @option{-W@dots{}} options are not affected by @option{-Wall}. |
| |
| @table @gcctabopt |
| @item -Weffc++ @r{(C++ and Objective-C++ only)} |
| @opindex Weffc++ |
| @opindex Wno-effc++ |
| Warn about violations of the following style guidelines from Scott Meyers' |
| @cite{Effective C++} series of books: |
| |
| @itemize @bullet |
| @item |
| Define a copy constructor and an assignment operator for classes |
| with dynamically-allocated memory. |
| |
| @item |
| Prefer initialization to assignment in constructors. |
| |
| @item |
| Have @code{operator=} return a reference to @code{*this}. |
| |
| @item |
| Don't try to return a reference when you must return an object. |
| |
| @item |
| Distinguish between prefix and postfix forms of increment and |
| decrement operators. |
| |
| @item |
| Never overload @code{&&}, @code{||}, or @code{,}. |
| |
| @end itemize |
| |
| This option also enables @option{-Wnon-virtual-dtor}, which is also |
| one of the effective C++ recommendations. However, the check is |
| extended to warn about the lack of virtual destructor in accessible |
| non-polymorphic bases classes too. |
| |
| When selecting this option, be aware that the standard library |
| headers do not obey all of these guidelines; use @samp{grep -v} |
| to filter out those warnings. |
| |
| @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)} |
| @opindex Wstrict-null-sentinel |
| @opindex Wno-strict-null-sentinel |
| Warn about the use of an uncasted @code{NULL} as sentinel. When |
| compiling only with GCC this is a valid sentinel, as @code{NULL} is defined |
| to @code{__null}. Although it is a null pointer constant rather than a |
| null pointer, it is guaranteed to be of the same size as a pointer. |
| But this use is not portable across different compilers. |
| |
| @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)} |
| @opindex Wno-non-template-friend |
| @opindex Wnon-template-friend |
| Disable warnings when non-template friend functions are declared |
| within a template. In very old versions of GCC that predate implementation |
| of the ISO standard, declarations such as |
| @samp{friend int foo(int)}, where the name of the friend is an unqualified-id, |
| could be interpreted as a particular specialization of a template |
| function; the warning exists to diagnose compatibility problems, |
| and is enabled by default. |
| |
| @item -Wold-style-cast @r{(C++ and Objective-C++ only)} |
| @opindex Wold-style-cast |
| @opindex Wno-old-style-cast |
| Warn if an old-style (C-style) cast to a non-void type is used within |
| a C++ program. The new-style casts (@code{dynamic_cast}, |
| @code{static_cast}, @code{reinterpret_cast}, and @code{const_cast}) are |
| less vulnerable to unintended effects and much easier to search for. |
| |
| @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)} |
| @opindex Woverloaded-virtual |
| @opindex Wno-overloaded-virtual |
| @cindex overloaded virtual function, warning |
| @cindex warning for overloaded virtual function |
| Warn when a function declaration hides virtual functions from a |
| base class. For example, in: |
| |
| @smallexample |
| struct A @{ |
| virtual void f(); |
| @}; |
| |
| struct B: public A @{ |
| void f(int); |
| @}; |
| @end smallexample |
| |
| the @code{A} class version of @code{f} is hidden in @code{B}, and code |
| like: |
| |
| @smallexample |
| B* b; |
| b->f(); |
| @end smallexample |
| |
| @noindent |
| fails to compile. |
| |
| @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)} |
| @opindex Wno-pmf-conversions |
| @opindex Wpmf-conversions |
| Disable the diagnostic for converting a bound pointer to member function |
| to a plain pointer. |
| |
| @item -Wsign-promo @r{(C++ and Objective-C++ only)} |
| @opindex Wsign-promo |
| @opindex Wno-sign-promo |
| Warn when overload resolution chooses a promotion from unsigned or |
| enumerated type to a signed type, over a conversion to an unsigned type of |
| the same size. Previous versions of G++ tried to preserve |
| unsignedness, but the standard mandates the current behavior. |
| |
| @item -Wtemplates @r{(C++ and Objective-C++ only)} |
| @opindex Wtemplates |
| Warn when a primary template declaration is encountered. Some coding |
| rules disallow templates, and this may be used to enforce that rule. |
| The warning is inactive inside a system header file, such as the STL, so |
| one can still use the STL. One may also instantiate or specialize |
| templates. |
| |
| @item -Wmultiple-inheritance @r{(C++ and Objective-C++ only)} |
| @opindex Wmultiple-inheritance |
| Warn when a class is defined with multiple direct base classes. Some |
| coding rules disallow multiple inheritance, and this may be used to |
| enforce that rule. The warning is inactive inside a system header file, |
| such as the STL, so one can still use the STL. One may also define |
| classes that indirectly use multiple inheritance. |
| |
| @item -Wvirtual-inheritance |
| @opindex Wvirtual-inheritance |
| Warn when a class is defined with a virtual direct base class. Some |
| coding rules disallow multiple inheritance, and this may be used to |
| enforce that rule. The warning is inactive inside a system header file, |
| such as the STL, so one can still use the STL. One may also define |
| classes that indirectly use virtual inheritance. |
| |
| @item -Wnamespaces |
| @opindex Wnamespaces |
| Warn when a namespace definition is opened. Some coding rules disallow |
| namespaces, and this may be used to enforce that rule. The warning is |
| inactive inside a system header file, such as the STL, so one can still |
| use the STL. One may also use using directives and qualified names. |
| |
| @item -Wno-terminate @r{(C++ and Objective-C++ only)} |
| @opindex Wterminate |
| @opindex Wno-terminate |
| Disable the warning about a throw-expression that will immediately |
| result in a call to @code{terminate}. |
| @end table |
| |
| @node Objective-C and Objective-C++ Dialect Options |
| @section Options Controlling Objective-C and Objective-C++ Dialects |
| |
| @cindex compiler options, Objective-C and Objective-C++ |
| @cindex Objective-C and Objective-C++ options, command-line |
| @cindex options, Objective-C and Objective-C++ |
| (NOTE: This manual does not describe the Objective-C and Objective-C++ |
| languages themselves. @xref{Standards,,Language Standards |
| Supported by GCC}, for references.) |
| |
| This section describes the command-line options that are only meaningful |
| for Objective-C and Objective-C++ programs. You can also use most of |
| the language-independent GNU compiler options. |
| For example, you might compile a file @file{some_class.m} like this: |
| |
| @smallexample |
| gcc -g -fgnu-runtime -O -c some_class.m |
| @end smallexample |
| |
| @noindent |
| In this example, @option{-fgnu-runtime} is an option meant only for |
| Objective-C and Objective-C++ programs; you can use the other options with |
| any language supported by GCC@. |
| |
| Note that since Objective-C is an extension of the C language, Objective-C |
| compilations may also use options specific to the C front-end (e.g., |
| @option{-Wtraditional}). Similarly, Objective-C++ compilations may use |
| C++-specific options (e.g., @option{-Wabi}). |
| |
| Here is a list of options that are @emph{only} for compiling Objective-C |
| and Objective-C++ programs: |
| |
| @table @gcctabopt |
| @item -fconstant-string-class=@var{class-name} |
| @opindex fconstant-string-class |
| Use @var{class-name} as the name of the class to instantiate for each |
| literal string specified with the syntax @code{@@"@dots{}"}. The default |
| class name is @code{NXConstantString} if the GNU runtime is being used, and |
| @code{NSConstantString} if the NeXT runtime is being used (see below). The |
| @option{-fconstant-cfstrings} option, if also present, overrides the |
| @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals |
| to be laid out as constant CoreFoundation strings. |
| |
| @item -fgnu-runtime |
| @opindex fgnu-runtime |
| Generate object code compatible with the standard GNU Objective-C |
| runtime. This is the default for most types of systems. |
| |
| @item -fnext-runtime |
| @opindex fnext-runtime |
| Generate output compatible with the NeXT runtime. This is the default |
| for NeXT-based systems, including Darwin and Mac OS X@. The macro |
| @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is |
| used. |
| |
| @item -fno-nil-receivers |
| @opindex fno-nil-receivers |
| Assume that all Objective-C message dispatches (@code{[receiver |
| message:arg]}) in this translation unit ensure that the receiver is |
| not @code{nil}. This allows for more efficient entry points in the |
| runtime to be used. This option is only available in conjunction with |
| the NeXT runtime and ABI version 0 or 1. |
| |
| @item -fobjc-abi-version=@var{n} |
| @opindex fobjc-abi-version |
| Use version @var{n} of the Objective-C ABI for the selected runtime. |
| This option is currently supported only for the NeXT runtime. In that |
| case, Version 0 is the traditional (32-bit) ABI without support for |
| properties and other Objective-C 2.0 additions. Version 1 is the |
| traditional (32-bit) ABI with support for properties and other |
| Objective-C 2.0 additions. Version 2 is the modern (64-bit) ABI. If |
| nothing is specified, the default is Version 0 on 32-bit target |
| machines, and Version 2 on 64-bit target machines. |
| |
| @item -fobjc-call-cxx-cdtors |
| @opindex fobjc-call-cxx-cdtors |
| For each Objective-C class, check if any of its instance variables is a |
| C++ object with a non-trivial default constructor. If so, synthesize a |
| special @code{- (id) .cxx_construct} instance method which runs |
| non-trivial default constructors on any such instance variables, in order, |
| and then return @code{self}. Similarly, check if any instance variable |
| is a C++ object with a non-trivial destructor, and if so, synthesize a |
| special @code{- (void) .cxx_destruct} method which runs |
| all such default destructors, in reverse order. |
| |
| The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct} |
| methods thusly generated only operate on instance variables |
| declared in the current Objective-C class, and not those inherited |
| from superclasses. It is the responsibility of the Objective-C |
| runtime to invoke all such methods in an object's inheritance |
| hierarchy. The @code{- (id) .cxx_construct} methods are invoked |
| by the runtime immediately after a new object instance is allocated; |
| the @code{- (void) .cxx_destruct} methods are invoked immediately |
| before the runtime deallocates an object instance. |
| |
| As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has |
| support for invoking the @code{- (id) .cxx_construct} and |
| @code{- (void) .cxx_destruct} methods. |
| |
| @item -fobjc-direct-dispatch |
| @opindex fobjc-direct-dispatch |
| Allow fast jumps to the message dispatcher. On Darwin this is |
| accomplished via the comm page. |
| |
| @item -fobjc-exceptions |
| @opindex fobjc-exceptions |
| Enable syntactic support for structured exception handling in |
| Objective-C, similar to what is offered by C++. This option |
| is required to use the Objective-C keywords @code{@@try}, |
| @code{@@throw}, @code{@@catch}, @code{@@finally} and |
| @code{@@synchronized}. This option is available with both the GNU |
| runtime and the NeXT runtime (but not available in conjunction with |
| the NeXT runtime on Mac OS X 10.2 and earlier). |
| |
| @item -fobjc-gc |
| @opindex fobjc-gc |
| Enable garbage collection (GC) in Objective-C and Objective-C++ |
| programs. This option is only available with the NeXT runtime; the |
| GNU runtime has a different garbage collection implementation that |
| does not require special compiler flags. |
| |
| @item -fobjc-nilcheck |
| @opindex fobjc-nilcheck |
| For the NeXT runtime with version 2 of the ABI, check for a nil |
| receiver in method invocations before doing the actual method call. |
| This is the default and can be disabled using |
| @option{-fno-objc-nilcheck}. Class methods and super calls are never |
| checked for nil in this way no matter what this flag is set to. |
| Currently this flag does nothing when the GNU runtime, or an older |
| version of the NeXT runtime ABI, is used. |
| |
| @item -fobjc-std=objc1 |
| @opindex fobjc-std |
| Conform to the language syntax of Objective-C 1.0, the language |
| recognized by GCC 4.0. This only affects the Objective-C additions to |
| the C/C++ language; it does not affect conformance to C/C++ standards, |
| which is controlled by the separate C/C++ dialect option flags. When |
| this option is used with the Objective-C or Objective-C++ compiler, |
| any Objective-C syntax that is not recognized by GCC 4.0 is rejected. |
| This is useful if you need to make sure that your Objective-C code can |
| be compiled with older versions of GCC@. |
| |
| @item -freplace-objc-classes |
| @opindex freplace-objc-classes |
| Emit a special marker instructing @command{ld(1)} not to statically link in |
| the resulting object file, and allow @command{dyld(1)} to load it in at |
| run time instead. This is used in conjunction with the Fix-and-Continue |
| debugging mode, where the object file in question may be recompiled and |
| dynamically reloaded in the course of program execution, without the need |
| to restart the program itself. Currently, Fix-and-Continue functionality |
| is only available in conjunction with the NeXT runtime on Mac OS X 10.3 |
| and later. |
| |
| @item -fzero-link |
| @opindex fzero-link |
| When compiling for the NeXT runtime, the compiler ordinarily replaces calls |
| to @code{objc_getClass("@dots{}")} (when the name of the class is known at |
| compile time) with static class references that get initialized at load time, |
| which improves run-time performance. Specifying the @option{-fzero-link} flag |
| suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")} |
| to be retained. This is useful in Zero-Link debugging mode, since it allows |
| for individual class implementations to be modified during program execution. |
| The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")} |
| regardless of command-line options. |
| |
| @item -fno-local-ivars |
| @opindex fno-local-ivars |
| @opindex flocal-ivars |
| By default instance variables in Objective-C can be accessed as if |
| they were local variables from within the methods of the class they're |
| declared in. This can lead to shadowing between instance variables |
| and other variables declared either locally inside a class method or |
| globally with the same name. Specifying the @option{-fno-local-ivars} |
| flag disables this behavior thus avoiding variable shadowing issues. |
| |
| @item -fivar-visibility=@r{[}public@r{|}protected@r{|}private@r{|}package@r{]} |
| @opindex fivar-visibility |
| Set the default instance variable visibility to the specified option |
| so that instance variables declared outside the scope of any access |
| modifier directives default to the specified visibility. |
| |
| @item -gen-decls |
| @opindex gen-decls |
| Dump interface declarations for all classes seen in the source file to a |
| file named @file{@var{sourcename}.decl}. |
| |
| @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)} |
| @opindex Wassign-intercept |
| @opindex Wno-assign-intercept |
| Warn whenever an Objective-C assignment is being intercepted by the |
| garbage collector. |
| |
| @item -Wno-protocol @r{(Objective-C and Objective-C++ only)} |
| @opindex Wno-protocol |
| @opindex Wprotocol |
| If a class is declared to implement a protocol, a warning is issued for |
| every method in the protocol that is not implemented by the class. The |
| default behavior is to issue a warning for every method not explicitly |
| implemented in the class, even if a method implementation is inherited |
| from the superclass. If you use the @option{-Wno-protocol} option, then |
| methods inherited from the superclass are considered to be implemented, |
| and no warning is issued for them. |
| |
| @item -Wselector @r{(Objective-C and Objective-C++ only)} |
| @opindex Wselector |
| @opindex Wno-selector |
| Warn if multiple methods of different types for the same selector are |
| found during compilation. The check is performed on the list of methods |
| in the final stage of compilation. Additionally, a check is performed |
| for each selector appearing in a @code{@@selector(@dots{})} |
| expression, and a corresponding method for that selector has been found |
| during compilation. Because these checks scan the method table only at |
| the end of compilation, these warnings are not produced if the final |
| stage of compilation is not reached, for example because an error is |
| found during compilation, or because the @option{-fsyntax-only} option is |
| being used. |
| |
| @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)} |
| @opindex Wstrict-selector-match |
| @opindex Wno-strict-selector-match |
| Warn if multiple methods with differing argument and/or return types are |
| found for a given selector when attempting to send a message using this |
| selector to a receiver of type @code{id} or @code{Class}. When this flag |
| is off (which is the default behavior), the compiler omits such warnings |
| if any differences found are confined to types that share the same size |
| and alignment. |
| |
| @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)} |
| @opindex Wundeclared-selector |
| @opindex Wno-undeclared-selector |
| Warn if a @code{@@selector(@dots{})} expression referring to an |
| undeclared selector is found. A selector is considered undeclared if no |
| method with that name has been declared before the |
| @code{@@selector(@dots{})} expression, either explicitly in an |
| @code{@@interface} or @code{@@protocol} declaration, or implicitly in |
| an @code{@@implementation} section. This option always performs its |
| checks as soon as a @code{@@selector(@dots{})} expression is found, |
| while @option{-Wselector} only performs its checks in the final stage of |
| compilation. This also enforces the coding style convention |
| that methods and selectors must be declared before being used. |
| |
| @item -print-objc-runtime-info |
| @opindex print-objc-runtime-info |
| Generate C header describing the largest structure that is passed by |
| value, if any. |
| |
| @end table |
| |
| @node Diagnostic Message Formatting Options |
| @section Options to Control Diagnostic Messages Formatting |
| @cindex options to control diagnostics formatting |
| @cindex diagnostic messages |
| @cindex message formatting |
| |
| Traditionally, diagnostic messages have been formatted irrespective of |
| the output device's aspect (e.g.@: its width, @dots{}). You can use the |
| options described below |
| to control the formatting algorithm for diagnostic messages, |
| e.g.@: how many characters per line, how often source location |
| information should be reported. Note that some language front ends may not |
| honor these options. |
| |
| @table @gcctabopt |
| @item -fmessage-length=@var{n} |
| @opindex fmessage-length |
| Try to format error messages so that they fit on lines of about |
| @var{n} characters. If @var{n} is zero, then no line-wrapping is |
| done; each error message appears on a single line. This is the |
| default for all front ends. |
| |
| @item -fdiagnostics-show-location=once |
| @opindex fdiagnostics-show-location |
| Only meaningful in line-wrapping mode. Instructs the diagnostic messages |
| reporter to emit source location information @emph{once}; that is, in |
| case the message is too long to fit on a single physical line and has to |
| be wrapped, the source location won't be emitted (as prefix) again, |
| over and over, in subsequent continuation lines. This is the default |
| behavior. |
| |
| @item -fdiagnostics-show-location=every-line |
| Only meaningful in line-wrapping mode. Instructs the diagnostic |
| messages reporter to emit the same source location information (as |
| prefix) for physical lines that result from the process of breaking |
| a message which is too long to fit on a single line. |
| |
| @item -fdiagnostics-color[=@var{WHEN}] |
| @itemx -fno-diagnostics-color |
| @opindex fdiagnostics-color |
| @cindex highlight, color |
| @vindex GCC_COLORS @r{environment variable} |
| Use color in diagnostics. @var{WHEN} is @samp{never}, @samp{always}, |
| or @samp{auto}. The default depends on how the compiler has been configured, |
| it can be any of the above @var{WHEN} options or also @samp{never} |
| if @env{GCC_COLORS} environment variable isn't present in the environment, |
| and @samp{auto} otherwise. |
| @samp{auto} means to use color only when the standard error is a terminal. |
| The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are |
| aliases for @option{-fdiagnostics-color=always} and |
| @option{-fdiagnostics-color=never}, respectively. |
| |
| The colors are defined by the environment variable @env{GCC_COLORS}. |
| Its value is a colon-separated list of capabilities and Select Graphic |
| Rendition (SGR) substrings. SGR commands are interpreted by the |
| terminal or terminal emulator. (See the section in the documentation |
| of your text terminal for permitted values and their meanings as |
| character attributes.) These substring values are integers in decimal |
| representation and can be concatenated with semicolons. |
| Common values to concatenate include |
| @samp{1} for bold, |
| @samp{4} for underline, |
| @samp{5} for blink, |
| @samp{7} for inverse, |
| @samp{39} for default foreground color, |
| @samp{30} to @samp{37} for foreground colors, |
| @samp{90} to @samp{97} for 16-color mode foreground colors, |
| @samp{38;5;0} to @samp{38;5;255} |
| for 88-color and 256-color modes foreground colors, |
| @samp{49} for default background color, |
| @samp{40} to @samp{47} for background colors, |
| @samp{100} to @samp{107} for 16-color mode background colors, |
| and @samp{48;5;0} to @samp{48;5;255} |
| for 88-color and 256-color modes background colors. |
| |
| The default @env{GCC_COLORS} is |
| @smallexample |
| error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\ |
| quote=01:fixit-insert=32:fixit-delete=31:\ |
| diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32 |
| @end smallexample |
| @noindent |
| where @samp{01;31} is bold red, @samp{01;35} is bold magenta, |
| @samp{01;36} is bold cyan, @samp{32} is green, @samp{34} is blue, |
| @samp{01} is bold, and @samp{31} is red. |
| Setting @env{GCC_COLORS} to the empty string disables colors. |
| Supported capabilities are as follows. |
| |
| @table @code |
| @item error= |
| @vindex error GCC_COLORS @r{capability} |
| SGR substring for error: markers. |
| |
| @item warning= |
| @vindex warning GCC_COLORS @r{capability} |
| SGR substring for warning: markers. |
| |
| @item note= |
| @vindex note GCC_COLORS @r{capability} |
| SGR substring for note: markers. |
| |
| @item range1= |
| @vindex range1 GCC_COLORS @r{capability} |
| SGR substring for first additional range. |
| |
| @item range2= |
| @vindex range2 GCC_COLORS @r{capability} |
| SGR substring for second additional range. |
| |
| @item locus= |
| @vindex locus GCC_COLORS @r{capability} |
| SGR substring for location information, @samp{file:line} or |
| @samp{file:line:column} etc. |
| |
| @item quote= |
| @vindex quote GCC_COLORS @r{capability} |
| SGR substring for information printed within quotes. |
| |
| @item fixit-insert= |
| @vindex fixit-insert GCC_COLORS @r{capability} |
| SGR substring for fix-it hints suggesting text to |
| be inserted or replaced. |
| |
| @item fixit-delete= |
| @vindex fixit-delete GCC_COLORS @r{capability} |
| SGR substring for fix-it hints suggesting text to |
| be deleted. |
| |
| @item diff-filename= |
| @vindex diff-filename GCC_COLORS @r{capability} |
| SGR substring for filename headers within generated patches. |
| |
| @item diff-hunk= |
| @vindex diff-hunk GCC_COLORS @r{capability} |
| SGR substring for the starts of hunks within generated patches. |
| |
| @item diff-delete= |
| @vindex diff-delete GCC_COLORS @r{capability} |
| SGR substring for deleted lines within generated patches. |
| |
| @item diff-insert= |
| @vindex diff-insert GCC_COLORS @r{capability} |
| SGR substring for inserted lines within generated patches. |
| @end table |
| |
| @item -fno-diagnostics-show-option |
| @opindex fno-diagnostics-show-option |
| @opindex fdiagnostics-show-option |
| By default, each diagnostic emitted includes text indicating the |
| command-line option that directly controls the diagnostic (if such an |
| option is known to the diagnostic machinery). Specifying the |
| @option{-fno-diagnostics-show-option} flag suppresses that behavior. |
| |
| @item -fno-diagnostics-show-caret |
| @opindex fno-diagnostics-show-caret |
| @opindex fdiagnostics-show-caret |
| By default, each diagnostic emitted includes the original source line |
| and a caret @samp{^} indicating the column. This option suppresses this |
| information. The source line is truncated to @var{n} characters, if |
| the @option{-fmessage-length=n} option is given. When the output is done |
| to the terminal, the width is limited to the width given by the |
| @env{COLUMNS} environment variable or, if not set, to the terminal width. |
| |
| @item -fdiagnostics-parseable-fixits |
| @opindex fdiagnostics-parseable-fixits |
| Emit fix-it hints in a machine-parseable format, suitable for consumption |
| by IDEs. For each fix-it, a line will be printed after the relevant |
| diagnostic, starting with the string ``fix-it:''. For example: |
| |
| @smallexample |
| fix-it:"test.c":@{45:3-45:21@}:"gtk_widget_show_all" |
| @end smallexample |
| |
| The location is expressed as a half-open range, expressed as a count of |
| bytes, starting at byte 1 for the initial column. In the above example, |
| bytes 3 through 20 of line 45 of ``test.c'' are to be replaced with the |
| given string: |
| |
| @smallexample |
| 00000000011111111112222222222 |
| 12345678901234567890123456789 |
| gtk_widget_showall (dlg); |
| ^^^^^^^^^^^^^^^^^^ |
| gtk_widget_show_all |
| @end smallexample |
| |
| The filename and replacement string escape backslash as ``\\", tab as ``\t'', |
| newline as ``\n'', double quotes as ``\"'', non-printable characters as octal |
| (e.g. vertical tab as ``\013''). |
| |
| An empty replacement string indicates that the given range is to be removed. |
| An empty range (e.g. ``45:3-45:3'') indicates that the string is to |
| be inserted at the given position. |
| |
| @item -fdiagnostics-generate-patch |
| @opindex fdiagnostics-generate-patch |
| Print fix-it hints to stderr in unified diff format, after any diagnostics |
| are printed. For example: |
| |
| @smallexample |
| --- test.c |
| +++ test.c |
| @@ -42,5 +42,5 @@ |
| |
| void show_cb(GtkDialog *dlg) |
| @{ |
| - gtk_widget_showall(dlg); |
| + gtk_widget_show_all(dlg); |
| @} |
| |
| @end smallexample |
| |
| The diff may or may not be colorized, following the same rules |
| as for diagnostics (see @option{-fdiagnostics-color}). |
| |
| @item -fno-show-column |
| @opindex fno-show-column |
| Do not print column numbers in diagnostics. This may be necessary if |
| diagnostics are being scanned by a program that does not understand the |
| column numbers, such as @command{dejagnu}. |
| |
| @end table |
| |
| @node Warning Options |
| @section Options to Request or Suppress Warnings |
| @cindex options to control warnings |
| @cindex warning messages |
| @cindex messages, warning |
| @cindex suppressing warnings |
| |
| Warnings are diagnostic messages that report constructions that |
| are not inherently erroneous but that are risky or suggest there |
| may have been an error. |
| |
| The following language-independent options do not enable specific |
| warnings but control the kinds of diagnostics produced by GCC@. |
| |
| @table @gcctabopt |
| @cindex syntax checking |
| @item -fsyntax-only |
| @opindex fsyntax-only |
| Check the code for syntax errors, but don't do anything beyond that. |
| |
| @item -fmax-errors=@var{n} |
| @opindex fmax-errors |
| Limits the maximum number of error messages to @var{n}, at which point |
| GCC bails out rather than attempting to continue processing the source |
| code. If @var{n} is 0 (the default), there is no limit on the number |
| of error messages produced. If @option{-Wfatal-errors} is also |
| specified, then @option{-Wfatal-errors} takes precedence over this |
| option. |
| |
| @item -w |
| @opindex w |
| Inhibit all warning messages. |
| |
| @item -Werror |
| @opindex Werror |
| @opindex Wno-error |
| Make all warnings into errors. |
| |
| @item -Werror= |
| @opindex Werror= |
| @opindex Wno-error= |
| Make the specified warning into an error. The specifier for a warning |
| is appended; for example @option{-Werror=switch} turns the warnings |
| controlled by @option{-Wswitch} into errors. This switch takes a |
| negative form, to be used to negate @option{-Werror} for specific |
| warnings; for example @option{-Wno-error=switch} makes |
| @option{-Wswitch} warnings not be errors, even when @option{-Werror} |
| is in effect. |
| |
| The warning message for each controllable warning includes the |
| option that controls the warning. That option can then be used with |
| @option{-Werror=} and @option{-Wno-error=} as described above. |
| (Printing of the option in the warning message can be disabled using the |
| @option{-fno-diagnostics-show-option} flag.) |
| |
| Note that specifying @option{-Werror=}@var{foo} automatically implies |
| @option{-W}@var{foo}. However, @option{-Wno-error=}@var{foo} does not |
| imply anything. |
| |
| @item -Wfatal-errors |
| @opindex Wfatal-errors |
| @opindex Wno-fatal-errors |
| This option causes the compiler to abort compilation on the first error |
| occurred rather than trying to keep going and printing further error |
| messages. |
| |
| @end table |
| |
| You can request many specific warnings with options beginning with |
| @samp{-W}, for example @option{-Wimplicit} to request warnings on |
| implicit declarations. Each of these specific warning options also |
| has a negative form beginning @samp{-Wno-} to turn off warnings; for |
| example, @option{-Wno-implicit}. This manual lists only one of the |
| two forms, whichever is not the default. For further |
| language-specific options also refer to @ref{C++ Dialect Options} and |
| @ref{Objective-C and Objective-C++ Dialect Options}. |
| |
| Some options, such as @option{-Wall} and @option{-Wextra}, turn on other |
| options, such as @option{-Wunused}, which may turn on further options, |
| such as @option{-Wunused-value}. The combined effect of positive and |
| negative forms is that more specific options have priority over less |
| specific ones, independently of their position in the command-line. For |
| options of the same specificity, the last one takes effect. Options |
| enabled or disabled via pragmas (@pxref{Diagnostic Pragmas}) take effect |
| as if they appeared at the end of the command-line. |
| |
| When an unrecognized warning option is requested (e.g., |
| @option{-Wunknown-warning}), GCC emits a diagnostic stating |
| that the option is not recognized. However, if the @option{-Wno-} form |
| is used, the behavior is slightly different: no diagnostic is |
| produced for @option{-Wno-unknown-warning} unless other diagnostics |
| are being produced. This allows the use of new @option{-Wno-} options |
| with old compilers, but if something goes wrong, the compiler |
| warns that an unrecognized option is present. |
| |
| @table @gcctabopt |
| @item -Wpedantic |
| @itemx -pedantic |
| @opindex pedantic |
| @opindex Wpedantic |
| Issue all the warnings demanded by strict ISO C and ISO C++; |
| reject all programs that use forbidden extensions, and some other |
| programs that do not follow ISO C and ISO C++. For ISO C, follows the |
| version of the ISO C standard specified by any @option{-std} option used. |
| |
| Valid ISO C and ISO C++ programs should compile properly with or without |
| this option (though a rare few require @option{-ansi} or a |
| @option{-std} option specifying the required version of ISO C)@. However, |
| without this option, certain GNU extensions and traditional C and C++ |
| features are supported as well. With this option, they are rejected. |
| |
| @option{-Wpedantic} does not cause warning messages for use of the |
| alternate keywords whose names begin and end with @samp{__}. Pedantic |
| warnings are also disabled in the expression that follows |
| @code{__extension__}. However, only system header files should use |
| these escape routes; application programs should avoid them. |
| @xref{Alternate Keywords}. |
| |
| Some users try to use @option{-Wpedantic} to check programs for strict ISO |
| C conformance. They soon find that it does not do quite what they want: |
| it finds some non-ISO practices, but not all---only those for which |
| ISO C @emph{requires} a diagnostic, and some others for which |
| diagnostics have been added. |
| |
| A feature to report any failure to conform to ISO C might be useful in |
| some instances, but would require considerable additional work and would |
| be quite different from @option{-Wpedantic}. We don't have plans to |
| support such a feature in the near future. |
| |
| Where the standard specified with @option{-std} represents a GNU |
| extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a |
| corresponding @dfn{base standard}, the version of ISO C on which the GNU |
| extended dialect is based. Warnings from @option{-Wpedantic} are given |
| where they are required by the base standard. (It does not make sense |
| for such warnings to be given only for features not in the specified GNU |
| C dialect, since by definition the GNU dialects of C include all |
| features the compiler supports with the given option, and there would be |
| nothing to warn about.) |
| |
| @item -pedantic-errors |
| @opindex pedantic-errors |
| Give an error whenever the @dfn{base standard} (see @option{-Wpedantic}) |
| requires a diagnostic, in some cases where there is undefined behavior |
| at compile-time and in some other cases that do not prevent compilation |
| of programs that are valid according to the standard. This is not |
| equivalent to @option{-Werror=pedantic}, since there are errors enabled |
| by this option and not enabled by the latter and vice versa. |
| |
| @item -Wall |
| @opindex Wall |
| @opindex Wno-all |
| This enables all the warnings about constructions that some users |
| consider questionable, and that are easy to avoid (or modify to |
| prevent the warning), even in conjunction with macros. This also |
| enables some language-specific warnings described in @ref{C++ Dialect |
| Options} and @ref{Objective-C and Objective-C++ Dialect Options}. |
| |
| @option{-Wall} turns on the following warning flags: |
| |
| @gccoptlist{-Waddress @gol |
| -Warray-bounds=1 @r{(only with} @option{-O2}@r{)} @gol |
| -Wbool-compare @gol |
| -Wbool-operation @gol |
| -Wc++11-compat -Wc++14-compat @gol |
| -Wchar-subscripts @gol |
| -Wcomment @gol |
| -Wduplicate-decl-specifier @r{(C and Objective-C only)} @gol |
| -Wenum-compare @r{(in C/ObjC; this is on by default in C++)} @gol |
| -Wformat @gol |
| -Wint-in-bool-context @gol |
| -Wimplicit @r{(C and Objective-C only)} @gol |
| -Wimplicit-int @r{(C and Objective-C only)} @gol |
| -Wimplicit-function-declaration @r{(C and Objective-C only)} @gol |
| -Winit-self @r{(only for C++)} @gol |
| -Wlogical-not-parentheses @gol |
| -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)} @gol |
| -Wmaybe-uninitialized @gol |
| -Wmemset-elt-size @gol |
| -Wmemset-transposed-args @gol |
| -Wmisleading-indentation @r{(only for C/C++)} @gol |
| -Wmissing-braces @r{(only for C/ObjC)} @gol |
| -Wnarrowing @r{(only for C++)} @gol |
| -Wnonnull @gol |
| -Wnonnull-compare @gol |
| -Wopenmp-simd @gol |
| -Wparentheses @gol |
| -Wpointer-sign @gol |
| -Wreorder @gol |
| -Wreturn-type @gol |
| -Wsequence-point @gol |
| -Wsign-compare @r{(only in C++)} @gol |
| -Wsizeof-pointer-memaccess @gol |
| -Wstrict-aliasing @gol |
| -Wstrict-overflow=1 @gol |
| -Wswitch @gol |
| -Wtautological-compare @gol |
| -Wtrigraphs @gol |
| -Wuninitialized @gol |
| -Wunknown-pragmas @gol |
| -Wunused-function @gol |
| -Wunused-label @gol |
| -Wunused-value @gol |
| -Wunused-variable @gol |
| -Wvolatile-register-var @gol |
| } |
| |
| Note that some warning flags are not implied by @option{-Wall}. Some of |
| them warn about constructions that users generally do not consider |
| questionable, but which occasionally you might wish to check for; |
| others warn about constructions that are necessary or hard to avoid in |
| some cases, and there is no simple way to modify the code to suppress |
| the warning. Some of them are enabled by @option{-Wextra} but many of |
| them must be enabled individually. |
| |
| @item -Wextra |
| @opindex W |
| @opindex Wextra |
| @opindex Wno-extra |
| This enables some extra warning flags that are not enabled by |
| @option{-Wall}. (This option used to be called @option{-W}. The older |
| name is still supported, but the newer name is more descriptive.) |
| |
| @gccoptlist{-Wclobbered @gol |
| -Wempty-body @gol |
| -Wignored-qualifiers @gol |
| -Wimplicit-fallthrough=3 @gol |
| -Wmissing-field-initializers @gol |
| -Wmissing-parameter-type @r{(C only)} @gol |
| -Wold-style-declaration @r{(C only)} @gol |
| -Woverride-init @gol |
| -Wsign-compare @r{(C only)} @gol |
| -Wtype-limits @gol |
| -Wuninitialized @gol |
| -Wshift-negative-value @r{(in C++03 and in C99 and newer)} @gol |
| -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol |
| -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol |
| } |
| |
| The option @option{-Wextra} also prints warning messages for the |
| following cases: |
| |
| @itemize @bullet |
| |
| @item |
| A pointer is compared against integer zero with @code{<}, @code{<=}, |
| @code{>}, or @code{>=}. |
| |
| @item |
| (C++ only) An enumerator and a non-enumerator both appear in a |
| conditional expression. |
| |
| @item |
| (C++ only) Ambiguous virtual bases. |
| |
| @item |
| (C++ only) Subscripting an array that has been declared @code{register}. |
| |
| @item |
| (C++ only) Taking the address of a variable that has been declared |
| @code{register}. |
| |
| @item |
| (C++ only) A base class is not initialized in the copy constructor |
| of a derived class. |
| |
| @end itemize |
| |
| @item -Wchar-subscripts |
| @opindex Wchar-subscripts |
| @opindex Wno-char-subscripts |
| Warn if an array subscript has type @code{char}. This is a common cause |
| of error, as programmers often forget that this type is signed on some |
| machines. |
| This warning is enabled by @option{-Wall}. |
| |
| @item -Wchkp |
| @opindex Wchkp |
| Warn about an invalid memory access that is found by Pointer Bounds Checker |
| (@option{-fcheck-pointer-bounds}). |
| |
| @item -Wno-coverage-mismatch |
| @opindex Wno-coverage-mismatch |
| Warn if feedback profiles do not match when using the |
| @option{-fprofile-use} option. |
| If a source file is changed between compiling with @option{-fprofile-gen} and |
| with @option{-fprofile-use}, the files with the profile feedback can fail |
| to match the source file and GCC cannot use the profile feedback |
| information. By default, this warning is enabled and is treated as an |
| error. @option{-Wno-coverage-mismatch} can be used to disable the |
| warning or @option{-Wno-error=coverage-mismatch} can be used to |
| disable the error. Disabling the error for this warning can result in |
| poorly optimized code and is useful only in the |
| case of very minor changes such as bug fixes to an existing code-base. |
| Completely disabling the warning is not recommended. |
| |
| @item -Wno-cpp |
| @r{(C, Objective-C, C++, Objective-C++ and Fortran only)} |
| |
| Suppress warning messages emitted by @code{#warning} directives. |
| |
| @item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)} |
| @opindex Wdouble-promotion |
| @opindex Wno-double-promotion |
| Give a warning when a value of type @code{float} is implicitly |
| promoted to @code{double}. CPUs with a 32-bit ``single-precision'' |
| floating-point unit implement @code{float} in hardware, but emulate |
| @code{double} in software. On such a machine, doing computations |
| using @code{double} values is much more expensive because of the |
| overhead required for software emulation. |
| |
| It is easy to accidentally do computations with @code{double} because |
| floating-point literals are implicitly of type @code{double}. For |
| example, in: |
| @smallexample |
| @group |
| float area(float radius) |
| @{ |
| return 3.14159 * radius * radius; |
| @} |
| @end group |
| @end smallexample |
| the compiler performs the entire computation with @code{double} |
| because the floating-point literal is a @code{double}. |
| |
| @item -Wduplicate-decl-specifier @r{(C and Objective-C only)} |
| @opindex Wduplicate-decl-specifier |
| @opindex Wno-duplicate-decl-specifier |
| Warn if a declaration has duplicate @code{const}, @code{volatile}, |
| @code{restrict} or @code{_Atomic} specifier. This warning is enabled by |
| @option{-Wall}. |
| |
| @item -Wformat |
| @itemx -Wformat=@var{n} |
| @opindex Wformat |
| @opindex Wno-format |
| @opindex ffreestanding |
| @opindex fno-builtin |
| @opindex Wformat= |
| Check calls to @code{printf} and @code{scanf}, etc., to make sure that |
| the arguments supplied have types appropriate to the format string |
| specified, and that the conversions specified in the format string make |
| sense. This includes standard functions, and others specified by format |
| attributes (@pxref{Function Attributes}), in the @code{printf}, |
| @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension, |
| not in the C standard) families (or other target-specific families). |
| Which functions are checked without format attributes having been |
| specified depends on the standard version selected, and such checks of |
| functions without the attribute specified are disabled by |
| @option{-ffreestanding} or @option{-fno-builtin}. |
| |
| The formats are checked against the format features supported by GNU |
| libc version 2.2. These include all ISO C90 and C99 features, as well |
| as features from the Single Unix Specification and some BSD and GNU |
| extensions. Other library implementations may not support all these |
| features; GCC does not support warning about features that go beyond a |
| particular library's limitations. However, if @option{-Wpedantic} is used |
| with @option{-Wformat}, warnings are given about format features not |
| in the selected standard version (but not for @code{strfmon} formats, |
| since those are not in any version of the C standard). @xref{C Dialect |
| Options,,Options Controlling C Dialect}. |
| |
| @table @gcctabopt |
| @item -Wformat=1 |
| @itemx -Wformat |
| @opindex Wformat |
| @opindex Wformat=1 |
| Option @option{-Wformat} is equivalent to @option{-Wformat=1}, and |
| @option{-Wno-format} is equivalent to @option{-Wformat=0}. Since |
| @option{-Wformat} also checks for null format arguments for several |
| functions, @option{-Wformat} also implies @option{-Wnonnull}. Some |
| aspects of this level of format checking can be disabled by the |
| options: @option{-Wno-format-contains-nul}, |
| @option{-Wno-format-extra-args}, and @option{-Wno-format-zero-length}. |
| @option{-Wformat} is enabled by @option{-Wall}. |
| |
| @item -Wno-format-contains-nul |
| @opindex Wno-format-contains-nul |
| @opindex Wformat-contains-nul |
| If @option{-Wformat} is specified, do not warn about format strings that |
| contain NUL bytes. |
| |
| @item -Wno-format-extra-args |
| @opindex Wno-format-extra-args |
| @opindex Wformat-extra-args |
| If @option{-Wformat} is specified, do not warn about excess arguments to a |
| @code{printf} or @code{scanf} format function. The C standard specifies |
| that such arguments are ignored. |
| |
| Where the unused arguments lie between used arguments that are |
| specified with @samp{$} operand number specifications, normally |
| warnings are still given, since the implementation could not know what |
| type to pass to @code{va_arg} to skip the unused arguments. However, |
| in the case of @code{scanf} formats, this option suppresses the |
| warning if the unused arguments are all pointers, since the Single |
| Unix Specification says that such unused arguments are allowed. |
| |
| @item -Wformat-overflow |
| @itemx -Wformat-overflow=@var{level} |
| @opindex Wformat-overflow |
| @opindex Wno-format-overflow |
| Warn about calls to formatted input/output functions such as @code{sprintf} |
| and @code{vsprintf} that might overflow the destination buffer. When the |
| exact number of bytes written by a format directive cannot be determined |
| at compile-time it is estimated based on heuristics that depend on the |
| @var{level} argument and on optimization. While enabling optimization |
| will in most cases improve the accuracy of the warning, it may also |
| result in false positives. |
| |
| @table @gcctabopt |
| @item -Wformat-overflow |
| @item -Wformat-overflow=1 |
| @opindex Wformat-overflow |
| @opindex Wno-format-overflow |
| Level @var{1} of @option{-Wformat-overflow} enabled by @option{-Wformat} |
| employs a conservative approach that warns only about calls that most |
| likely overflow the buffer. At this level, numeric arguments to format |
| directives with unknown values are assumed to have the value of one, and |
| strings of unknown length to be empty. Numeric arguments that are known |
| to be bounded to a subrange of their type, or string arguments whose output |
| is bounded either by their directive's precision or by a finite set of |
| string literals, are assumed to take on the value within the range that |
| results in the most bytes on output. For example, the call to @code{sprintf} |
| below is diagnosed because even with both @var{a} and @var{b} equal to zero, |
| the terminating NUL character (@code{'\0'}) appended by the function |
| to the destination buffer will be written past its end. Increasing |
| the size of the buffer by a single byte is sufficient to avoid the |
| warning, though it may not be sufficient to avoid the overflow. |
| |
| @smallexample |
| void f (int a, int b) |
| @{ |
| char buf [12]; |
| sprintf (buf, "a = %i, b = %i\n", a, b); |
| @} |
| @end smallexample |
| |
| @item -Wformat-overflow=2 |
| Level @var{2} warns also about calls that might overflow the destination |
| buffer given an argument of sufficient length or magnitude. At level |
| @var{2}, unknown numeric arguments are assumed to have the minimum |
| representable value for signed types with a precision greater than 1, and |
| the maximum representable value otherwise. Unknown string arguments whose |
| length cannot be assumed to be bounded either by the directive's precision, |
| or by a finite set of string literals they may evaluate to, or the character |
| array they may point to, are assumed to be 1 character long. |
| |
| At level @var{2}, the call in the example above is again diagnosed, but |
| this time because with @var{a} equal to a 32-bit @code{INT_MIN} the first |
| @code{%i} directive will write some of its digits beyond the end of |
| the destination buffer. To make the call safe regardless of the values |
| of the two variables, the size of the destination buffer must be increased |
| to at least 34 bytes. GCC includes the minimum size of the buffer in |
| an informational note following the warning. |
| |
| An alternative to increasing the size of the destination buffer is to |
| constrain the range of formatted values. The maximum length of string |
| arguments can be bounded by specifying the precision in the format |
| directive. When numeric arguments of format directives can be assumed |
| to be bounded by less than the precision of their type, choosing |
| an appropriate length modifier to the format specifier will reduce |
| the required buffer size. For example, if @var{a} and @var{b} in the |
| example above can be assumed to be within the precision of |
| the @code{short int} type then using either the @code{%hi} format |
| directive or casting the argument to @code{short} reduces the maximum |
| required size of the buffer to 24 bytes. |
| |
| @smallexample |
| void f (int a, int b) |
| @{ |
| char buf [23]; |
| sprintf (buf, "a = %hi, b = %i\n", a, (short)b); |
| @} |
| @end smallexample |
| @end table |
| |
| @item -Wno-format-zero-length |
| @opindex Wno-format-zero-length |
| @opindex Wformat-zero-length |
| If @option{-Wformat} is specified, do not warn about zero-length formats. |
| The C standard specifies that zero-length formats are allowed. |
| |
| |
| @item -Wformat=2 |
| @opindex Wformat=2 |
| Enable @option{-Wformat} plus additional format checks. Currently |
| equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security |
| -Wformat-y2k}. |
| |
| @item -Wformat-nonliteral |
| @opindex Wformat-nonliteral |
| @opindex Wno-format-nonliteral |
| If @option{-Wformat} is specified, also warn if the format string is not a |
| string literal and so cannot be checked, unless the format function |
| takes its format arguments as a @code{va_list}. |
| |
| @item -Wformat-security |
| @opindex Wformat-security |
| @opindex Wno-format-security |
| If @option{-Wformat} is specified, also warn about uses of format |
| functions that represent possible security problems. At present, this |
| warns about calls to @code{printf} and @code{scanf} functions where the |
| format string is not a string literal and there are no format arguments, |
| as in @code{printf (foo);}. This may be a security hole if the format |
| string came from untrusted input and contains @samp{%n}. (This is |
| currently a subset of what @option{-Wformat-nonliteral} warns about, but |
| in future warnings may be added to @option{-Wformat-security} that are not |
| included in @option{-Wformat-nonliteral}.) |
| |
| @item -Wformat-signedness |
| @opindex Wformat-signedness |
| @opindex Wno-format-signedness |
| If @option{-Wformat} is specified, also warn if the format string |
| requires an unsigned argument and the argument is signed and vice versa. |
| |
| @item -Wformat-truncation |
| @itemx -Wformat-truncation=@var{level} |
| @opindex Wformat-truncation |
| @opindex Wno-format-truncation |
| Warn about calls to formatted input/output functions such as @code{snprintf} |
| and @code{vsnprintf} that might result in output truncation. When the exact |
| number of bytes written by a format directive cannot be determined at |
| compile-time it is estimated based on heuristics that depend on |
| the @var{level} argument and on optimization. While enabling optimization |
| will in most cases improve the accuracy of the warning, it may also result |
| in false positives. Except as noted otherwise, the option uses the same |
| logic @option{-Wformat-overflow}. |
| |
| @table @gcctabopt |
| @item -Wformat-truncation |
| @item -Wformat-truncation=1 |
| @opindex Wformat-truncation |
| @opindex Wno-format-overflow |
| Level @var{1} of @option{-Wformat-truncation} enabled by @option{-Wformat} |
| employs a conservative approach that warns only about calls to bounded |
| functions whose return value is unused and that will most likely result |
| in output truncation. |
| |
| @item -Wformat-truncation=2 |
| Level @var{2} warns also about calls to bounded functions whose return |
| value is used and that might result in truncation given an argument of |
| sufficient length or magnitude. |
| @end table |
| |
| @item -Wformat-y2k |
| @opindex Wformat-y2k |
| @opindex Wno-format-y2k |
| If @option{-Wformat} is specified, also warn about @code{strftime} |
| formats that may yield only a two-digit year. |
| @end table |
| |
| @item -Wnonnull |
| @opindex Wnonnull |
| @opindex Wno-nonnull |
| Warn about passing a null pointer for arguments marked as |
| requiring a non-null value by the @code{nonnull} function attribute. |
| |
| @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}. It |
| can be disabled with the @option{-Wno-nonnull} option. |
| |
| @item -Wnonnull-compare |
| @opindex Wnonnull-compare |
| @opindex Wno-nonnull-compare |
| Warn when comparing an argument marked with the @code{nonnull} |
| function attribute against null inside the function. |
| |
| @option{-Wnonnull-compare} is included in @option{-Wall}. It |
| can be disabled with the @option{-Wno-nonnull-compare} option. |
| |
| @item -Wnull-dereference |
| @opindex Wnull-dereference |
| @opindex Wno-null-dereference |
| Warn if the compiler detects paths that trigger erroneous or |
| undefined behavior due to dereferencing a null pointer. This option |
| is only active when @option{-fdelete-null-pointer-checks} is active, |
| which is enabled by optimizations in most targets. The precision of |
| the warnings depends on the optimization options used. |
| |
| @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)} |
| @opindex Winit-self |
| @opindex Wno-init-self |
| Warn about uninitialized variables that are initialized with themselves. |
| Note this option can only be used with the @option{-Wuninitialized} option. |
| |
| For example, GCC warns about @code{i} being uninitialized in the |
| following snippet only when @option{-Winit-self} has been specified: |
| @smallexample |
| @group |
| int f() |
| @{ |
| int i = i; |
| return i; |
| @} |
|