| @c Copyright (C) 1988-2021 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-2021 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), dbx(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 @command{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. |
| |
| Some options take one or more arguments typically separated either |
| by a space or by the equals sign (@samp{=}) from the option name. |
| Unless documented otherwise, an argument can be either numeric or |
| a string. Numeric arguments must typically be small unsigned decimal |
| or hexadecimal integers. Hexadecimal arguments must begin with |
| the @samp{0x} prefix. Arguments to options that specify a size |
| threshold of some sort may be arbitrarily large decimal or hexadecimal |
| integers followed by a byte size suffix designating a multiple of bytes |
| such as @code{kB} and @code{KiB} for kilobyte and kibibyte, respectively, |
| @code{MB} and @code{MiB} for megabyte and mebibyte, @code{GB} and |
| @code{GiB} for gigabyte and gigibyte, and so on. Such arguments are |
| designated by @var{byte-size} in the following text. Refer to the NIST, |
| IEC, and other relevant national and international standards for the full |
| listing and explanation of the binary and decimal byte size prefixes. |
| |
| @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? |
| * Static Analyzer Options:: More expensive warnings. |
| * 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. |
| * C++ Modules:: Experimental C++20 module system. |
| @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} @gol |
| -dumpbase @var{dumpbase} -dumpbase-ext @var{auxdropsuf} @gol |
| -dumpdir @var{dumppfx} -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} -ffile-prefix-map=@var{old}=@var{new} @gol |
| -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} -aux-info @var{filename} @gol |
| -fallow-parameterless-variadic-functions -fno-asm @gol |
| -fno-builtin -fno-builtin-@var{function} -fcond-mismatch @gol |
| -ffreestanding -fgimple -fgnu-tm -fgnu89-inline -fhosted @gol |
| -flax-vector-conversions -fms-extensions @gol |
| -foffload=@var{arg} -foffload-options=@var{arg} @gol |
| -fopenacc -fopenacc-dim=@var{geom} @gol |
| -fopenmp -fopenmp-simd @gol |
| -fpermitted-flt-eval-methods=@var{standard} @gol |
| -fplan9-extensions -fsigned-bitfields -funsigned-bitfields @gol |
| -fsigned-char -funsigned-char -fsso-struct=@var{endianness}} |
| |
| @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} -fchar8_t -fcheck-new @gol |
| -fconstexpr-depth=@var{n} -fconstexpr-cache-depth=@var{n} @gol |
| -fconstexpr-loop-limit=@var{n} -fconstexpr-ops-limit=@var{n} @gol |
| -fno-elide-constructors @gol |
| -fno-enforce-eh-specs @gol |
| -fno-gnu-keywords @gol |
| -fno-implicit-templates @gol |
| -fno-implicit-inline-templates @gol |
| -fno-implement-inlines @gol |
| -fmodule-header@r{[}=@var{kind}@r{]} -fmodule-only -fmodules-ts @gol |
| -fmodule-implicit-inline @gol |
| -fno-module-lazy @gol |
| -fmodule-mapper=@var{specification} @gol |
| -fmodule-version-ignore @gol |
| -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 |
| -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 |
| -flang-info-include-translate@r{[}=@var{header}@r{]} @gol |
| -flang-info-include-translate-not @gol |
| -flang-info-module-cmi@r{[}=@var{module}@r{]} @gol |
| -stdlib=@var{libstdc++,libc++} @gol |
| -Wabi-tag -Wcatch-value -Wcatch-value=@var{n} @gol |
| -Wno-class-conversion -Wclass-memaccess @gol |
| -Wcomma-subscript -Wconditionally-supported @gol |
| -Wno-conversion-null -Wctad-maybe-unsupported @gol |
| -Wctor-dtor-privacy -Wno-delete-incomplete @gol |
| -Wdelete-non-virtual-dtor -Wno-deprecated-array-compare @gol |
| -Wdeprecated-copy -Wdeprecated-copy-dtor @gol |
| -Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion @gol |
| -Weffc++ -Wno-exceptions -Wextra-semi -Wno-inaccessible-base @gol |
| -Wno-inherited-variadic-ctor -Wno-init-list-lifetime @gol |
| -Winvalid-imported-macros @gol |
| -Wno-invalid-offsetof -Wno-literal-suffix @gol |
| -Wmismatched-new-delete -Wmismatched-tags @gol |
| -Wmultiple-inheritance -Wnamespaces -Wnarrowing @gol |
| -Wnoexcept -Wnoexcept-type -Wnon-virtual-dtor @gol |
| -Wpessimizing-move -Wno-placement-new -Wplacement-new=@var{n} @gol |
| -Wrange-loop-construct -Wredundant-move -Wredundant-tags @gol |
| -Wreorder -Wregister @gol |
| -Wstrict-null-sentinel -Wno-subobject-linkage -Wtemplates @gol |
| -Wno-non-template-friend -Wold-style-cast @gol |
| -Woverloaded-virtual -Wno-pmf-conversions -Wsign-promo @gol |
| -Wsized-deallocation -Wsuggest-final-methods @gol |
| -Wsuggest-final-types -Wsuggest-override @gol |
| -Wno-terminate -Wuseless-cast -Wno-vexing-parse @gol |
| -Wvirtual-inheritance @gol |
| -Wno-virtual-move-assign -Wvolatile -Wzero-as-null-pointer-constant} |
| |
| @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 -Wno-property-assign-default @gol |
| -Wno-protocol -Wobjc-root-class -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-plain-output @gol |
| -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol |
| -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]} @gol |
| -fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]} @gol |
| -fdiagnostics-format=@r{[}text@r{|}json@r{]} @gol |
| -fno-diagnostics-show-option -fno-diagnostics-show-caret @gol |
| -fno-diagnostics-show-labels -fno-diagnostics-show-line-numbers @gol |
| -fno-diagnostics-show-cwe @gol |
| -fdiagnostics-minimum-margin-width=@var{width} @gol |
| -fdiagnostics-parseable-fixits -fdiagnostics-generate-patch @gol |
| -fdiagnostics-show-template-tree -fno-elide-type @gol |
| -fdiagnostics-path-format=@r{[}none@r{|}separate-events@r{|}inline-events@r{]} @gol |
| -fdiagnostics-show-path-depths @gol |
| -fno-show-column @gol |
| -fdiagnostics-column-unit=@r{[}display@r{|}byte@r{]} @gol |
| -fdiagnostics-column-origin=@var{origin}} |
| |
| @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 -Wabi=@var{n} @gol |
| -Waddress -Wno-address-of-packed-member -Waggregate-return @gol |
| -Walloc-size-larger-than=@var{byte-size} -Walloc-zero @gol |
| -Walloca -Walloca-larger-than=@var{byte-size} @gol |
| -Wno-aggressive-loop-optimizations @gol |
| -Warith-conversion @gol |
| -Warray-bounds -Warray-bounds=@var{n} -Warray-compare @gol |
| -Wno-attributes -Wattribute-alias=@var{n} -Wno-attribute-alias @gol |
| -Wno-attribute-warning -Wbool-compare -Wbool-operation @gol |
| -Wno-builtin-declaration-mismatch @gol |
| -Wno-builtin-macro-redefined -Wc90-c99-compat -Wc99-c11-compat @gol |
| -Wc11-c2x-compat @gol |
| -Wc++-compat -Wc++11-compat -Wc++14-compat -Wc++17-compat @gol |
| -Wc++20-compat @gol |
| -Wno-c++11-extensions -Wno-c++14-extensions -Wno-c++17-extensions @gol |
| -Wno-c++20-extensions -Wno-c++23-extensions @gol |
| -Wcast-align -Wcast-align=strict -Wcast-function-type -Wcast-qual @gol |
| -Wchar-subscripts @gol |
| -Wclobbered -Wcomment @gol |
| -Wconversion -Wno-coverage-mismatch -Wno-cpp @gol |
| -Wdangling-else -Wdate-time @gol |
| -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init @gol |
| -Wdisabled-optimization @gol |
| -Wno-discarded-array-qualifiers -Wno-discarded-qualifiers @gol |
| -Wno-div-by-zero -Wdouble-promotion @gol |
| -Wduplicated-branches -Wduplicated-cond @gol |
| -Wempty-body -Wno-endif-labels -Wenum-compare -Wenum-conversion @gol |
| -Werror -Werror=* -Wexpansion-to-defined -Wfatal-errors @gol |
| -Wfloat-conversion -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{byte-size} -Wno-free-nonheap-object @gol |
| -Wno-if-not-aligned -Wno-ignored-attributes @gol |
| -Wignored-qualifiers -Wno-incompatible-pointer-types @gol |
| -Wimplicit -Wimplicit-fallthrough -Wimplicit-fallthrough=@var{n} @gol |
| -Wno-implicit-function-declaration -Wno-implicit-int @gol |
| -Winit-self -Winline -Wno-int-conversion -Wint-in-bool-context @gol |
| -Wno-int-to-pointer-cast -Wno-invalid-memory-model @gol |
| -Winvalid-pch -Wjump-misses-init -Wlarger-than=@var{byte-size} @gol |
| -Wlogical-not-parentheses -Wlogical-op -Wlong-long @gol |
| -Wno-lto-type-mismatch -Wmain -Wmaybe-uninitialized @gol |
| -Wmemset-elt-size -Wmemset-transposed-args @gol |
| -Wmisleading-indentation -Wmissing-attributes -Wmissing-braces @gol |
| -Wmissing-field-initializers -Wmissing-format-attribute @gol |
| -Wmissing-include-dirs -Wmissing-noreturn -Wno-missing-profile @gol |
| -Wno-multichar -Wmultistatement-macros -Wnonnull -Wnonnull-compare @gol |
| -Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol |
| -Wnull-dereference -Wno-odr @gol |
| -Wopenacc-parallelism @gol |
| -Wopenmp-simd @gol |
| -Wno-overflow -Woverlength-strings -Wno-override-init-side-effects @gol |
| -Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol |
| -Wparentheses -Wno-pedantic-ms-format @gol |
| -Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast @gol |
| -Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls @gol |
| -Wrestrict -Wno-return-local-addr -Wreturn-type @gol |
| -Wno-scalar-storage-order -Wsequence-point @gol |
| -Wshadow -Wshadow=global -Wshadow=local -Wshadow=compatible-local @gol |
| -Wno-shadow-ivar @gol |
| -Wno-shift-count-negative -Wno-shift-count-overflow -Wshift-negative-value @gol |
| -Wno-shift-overflow -Wshift-overflow=@var{n} @gol |
| -Wsign-compare -Wsign-conversion @gol |
| -Wno-sizeof-array-argument @gol |
| -Wsizeof-array-div @gol |
| -Wsizeof-pointer-div -Wsizeof-pointer-memaccess @gol |
| -Wstack-protector -Wstack-usage=@var{byte-size} -Wstrict-aliasing @gol |
| -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=@var{n} @gol |
| -Wstring-compare @gol |
| -Wno-stringop-overflow -Wno-stringop-overread @gol |
| -Wno-stringop-truncation @gol |
| -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}malloc@r{]} @gol |
| -Wswitch -Wno-switch-bool -Wswitch-default -Wswitch-enum @gol |
| -Wno-switch-outside-range -Wno-switch-unreachable -Wsync-nand @gol |
| -Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol |
| -Wtsan -Wtype-limits -Wundef @gol |
| -Wuninitialized -Wunknown-pragmas @gol |
| -Wunsuffixed-float-constants -Wunused @gol |
| -Wunused-but-set-parameter -Wunused-but-set-variable @gol |
| -Wunused-const-variable -Wunused-const-variable=@var{n} @gol |
| -Wunused-function -Wunused-label -Wunused-local-typedefs @gol |
| -Wunused-macros @gol |
| -Wunused-parameter -Wno-unused-result @gol |
| -Wunused-value -Wunused-variable @gol |
| -Wno-varargs -Wvariadic-macros @gol |
| -Wvector-operation-performance @gol |
| -Wvla -Wvla-larger-than=@var{byte-size} -Wno-vla-larger-than @gol |
| -Wvolatile-register-var -Wwrite-strings @gol |
| -Wzero-length-bounds} |
| |
| @item Static Analyzer Options |
| @gccoptlist{ |
| -fanalyzer @gol |
| -fanalyzer-call-summaries @gol |
| -fanalyzer-checker=@var{name} @gol |
| -fno-analyzer-feasibility @gol |
| -fanalyzer-fine-grained @gol |
| -fanalyzer-state-merge @gol |
| -fanalyzer-state-purge @gol |
| -fanalyzer-transitivity @gol |
| -fanalyzer-verbose-edges @gol |
| -fanalyzer-verbose-state-changes @gol |
| -fanalyzer-verbosity=@var{level} @gol |
| -fdump-analyzer @gol |
| -fdump-analyzer-stderr @gol |
| -fdump-analyzer-callgraph @gol |
| -fdump-analyzer-exploded-graph @gol |
| -fdump-analyzer-exploded-nodes @gol |
| -fdump-analyzer-exploded-nodes-2 @gol |
| -fdump-analyzer-exploded-nodes-3 @gol |
| -fdump-analyzer-exploded-paths @gol |
| -fdump-analyzer-feasibility @gol |
| -fdump-analyzer-json @gol |
| -fdump-analyzer-state-purge @gol |
| -fdump-analyzer-supergraph @gol |
| -Wno-analyzer-double-fclose @gol |
| -Wno-analyzer-double-free @gol |
| -Wno-analyzer-exposure-through-output-file @gol |
| -Wno-analyzer-file-leak @gol |
| -Wno-analyzer-free-of-non-heap @gol |
| -Wno-analyzer-malloc-leak @gol |
| -Wno-analyzer-mismatching-deallocation @gol |
| -Wno-analyzer-null-argument @gol |
| -Wno-analyzer-null-dereference @gol |
| -Wno-analyzer-possible-null-argument @gol |
| -Wno-analyzer-possible-null-dereference @gol |
| -Wno-analyzer-shift-count-negative @gol |
| -Wno-analyzer-shift-count-overflow @gol |
| -Wno-analyzer-stale-setjmp-buffer @gol |
| -Wno-analyzer-tainted-array-index @gol |
| -Wanalyzer-too-complex @gol |
| -Wno-analyzer-unsafe-call-within-signal-handler @gol |
| -Wno-analyzer-use-after-free @gol |
| -Wno-analyzer-use-of-pointer-in-stale-stack-frame @gol |
| -Wno-analyzer-use-of-uninitialized-value @gol |
| -Wno-analyzer-write-to-const @gol |
| -Wno-analyzer-write-to-string-literal @gol |
| } |
| |
| @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} -gdwarf -gdwarf-@var{version} @gol |
| -gbtf -gctf -gctf@var{level} @gol |
| -ggdb -grecord-gcc-switches -gno-record-gcc-switches @gol |
| -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf @gol |
| -gas-loc-support -gno-as-loc-support @gol |
| -gas-locview-support -gno-as-locview-support @gol |
| -gcolumn-info -gno-column-info -gdwarf32 -gdwarf64 @gol |
| -gstatement-frontiers -gno-statement-frontiers @gol |
| -gvariable-location-views -gno-variable-location-views @gol |
| -ginternal-reset-location-views -gno-internal-reset-location-views @gol |
| -ginline-points -gno-inline-points @gol |
| -gvms -gxcoff -gxcoff+ -gz@r{[}=@var{type}@r{]} @gol |
| -gsplit-dwarf -gdescribe-dies -gno-describe-dies @gol |
| -fdebug-prefix-map=@var{old}=@var{new} -fdebug-types-section @gol |
| -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 |
| -fno-eliminate-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 @gol |
| -falign-functions[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol |
| -falign-jumps[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol |
| -falign-labels[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol |
| -falign-loops[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol |
| -fno-allocation-dce -fallow-store-data-races @gol |
| -fassociative-math -fauto-profile -fauto-profile[=@var{path}] @gol |
| -fauto-inc-dec -fbranch-probabilities @gol |
| -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 |
| -ffinite-loops @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-modref -fipa-cp -fipa-cp-clone @gol |
| -fipa-bit-cp -fipa-vrp -fipa-pta -fipa-profile -fipa-pure-const @gol |
| -fipa-reference -fipa-reference-addressable @gol |
| -fipa-stack-alignment -fipa-icf -fira-algorithm=@var{algorithm} @gol |
| -flive-patching=@var{level} @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 -fmove-loop-stores -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-partial-training @gol |
| -fprofile-values -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 -fsave-optimization-record @gol |
| -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 -fsplit-wide-types-early -fssa-backprop -fssa-phiopt @gol |
| -fstdarg-opt -fstore-merging -fstrict-aliasing @gol |
| -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-scev-cprop -ftree-sink -ftree-slsr -ftree-sra @gol |
| -ftree-switch-conversion -ftree-tail-merge @gol |
| -ftree-ter -ftree-vectorize -ftree-vrp -ftrivial-auto-var-init @gol |
| -funconstrained-commons -funit-at-a-time -funroll-all-loops @gol |
| -funroll-loops -funsafe-math-optimizations -funswitch-loops @gol |
| -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt @gol |
| -fweb -fwhole-program -fwpa -fuse-linker-plugin -fzero-call-used-regs @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-abs-path @gol |
| -fprofile-dir=@var{path} -fprofile-generate -fprofile-generate=@var{path} @gol |
| -fprofile-info-section -fprofile-info-section=@var{name} @gol |
| -fprofile-note=@var{path} -fprofile-prefix-path=@var{path} @gol |
| -fprofile-update=@var{method} -fprofile-filter-files=@var{regex} @gol |
| -fprofile-exclude-files=@var{regex} @gol |
| -fprofile-reproducible=@r{[}multithreaded@r{|}parallel-runs@r{|}serial@r{]} @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 |
| -fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{|}check@r{]} @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} -flarge-source-files @gol |
| -fmacro-prefix-map=@var{old}=@var{new} -fmax-include-depth=@var{depth} @gol |
| -fno-canonical-system-headers -fpch-deps -fpch-preprocess @gol |
| -fpreprocessed -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 -Mno-modules @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 -nolibc -nostdlib @gol |
| -e @var{entry} --entry=@var{entry} @gol |
| -pie -pthread -r -rdynamic @gol |
| -s -static -static-pie -static-libgcc -static-libstdc++ @gol |
| -static-libasan -static-libtsan -static-liblsan -static-libubsan @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 -fcommon -fno-ident @gol |
| -fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-plt @gol |
| -fno-jump-tables -fno-bit-tests @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 -fcallgraph-info@r{[}=su,da@r{]} |
| -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-debug -fdump-earlydebug @gol |
| -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol |
| -fdump-final-insns@r{[}=@var{file}@r{]} @gol |
| -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol |
| -fdump-lang-all @gol |
| -fdump-lang-@var{switch} @gol |
| -fdump-lang-@var{switch}-@var{options} @gol |
| -fdump-lang-@var{switch}-@var{options}=@var{filename} @gol |
| -fdump-passes @gol |
| -fdump-rtl-@var{pass} -fdump-rtl-@var{pass}=@var{filename} @gol |
| -fdump-statistics @gol |
| -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 -mno-strict-align @gol |
| -momit-leaf-frame-pointer @gol |
| -mtls-dialect=desc -mtls-dialect=traditional @gol |
| -mtls-size=@var{size} @gol |
| -mfix-cortex-a53-835769 -mfix-cortex-a53-843419 @gol |
| -mlow-precision-recip-sqrt -mlow-precision-sqrt -mlow-precision-div @gol |
| -mpc-relative-literal-loads @gol |
| -msign-return-address=@var{scope} @gol |
| -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf} |
| +@var{b-key}]|@var{bti} @gol |
| -mharden-sls=@var{opts} @gol |
| -march=@var{name} -mcpu=@var{name} -mtune=@var{name} @gol |
| -moverride=@var{string} -mverbose-cost-dump @gol |
| -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{sysreg} @gol |
| -mstack-protector-guard-offset=@var{offset} -mtrack-speculation @gol |
| -moutline-atomics } |
| |
| @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{AMD GCN Options} |
| @gccoptlist{-march=@var{gpu} -mtune=@var{gpu} -mstack-size=@var{bytes}} |
| |
| @emph{ARC Options} |
| @gccoptlist{-mbarrel-shifter -mjli-always @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 -mirq-ctrl-saved @gol |
| -mrgf-banked-regs -mlpc-width=@var{width} -G @var{num} @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 -mmillicode @gol |
| -mmixed-code -mq-class -mRcq -mRcw -msize-level=@var{level} @gol |
| -mtune=@var{cpu} -mmultcost=@var{num} -mcode-density-frame @gol |
| -munalign-prob-threshold=@var{probability} -mmpy-option=@var{multo} @gol |
| -mdiv-rem -mcode-density -mll64 -mfpu=@var{fpu} -mrf16 -mbranch-index} |
| |
| @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 |
| -mgeneral-regs-only @gol |
| -msched-prolog -mno-sched-prolog @gol |
| -mlittle-endian -mbig-endian @gol |
| -mbe8 -mbe32 @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 -mflip-thumb @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 |
| -mverbose-cost-dump @gol |
| -mpure-code @gol |
| -mcmse @gol |
| -mfix-cmse-cve-2021-35465 @gol |
| -mfdpic} |
| |
| @emph{AVR Options} |
| @gccoptlist{-mmcu=@var{mcu} -mabsdata -maccumulate-args @gol |
| -mbranch-cost=@var{cost} @gol |
| -mcall-prologues -mgas-isr-prologues -mint8 @gol |
| -mdouble=@var{bits} -mlong-double=@var{bits} @gol |
| -mn_flash=@var{size} -mno-interrupts @gol |
| -mmain-is-OS_task -mrelax -mrmw -mstrict-X -mtiny-stack @gol |
| -mfract-convert-truncate @gol |
| -mshort-calls -nodevicelib -nodevicespecs @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{C-SKY Options} |
| @gccoptlist{-march=@var{arch} -mcpu=@var{cpu} @gol |
| -mbig-endian -EB -mlittle-endian -EL @gol |
| -mhard-float -msoft-float -mfpu=@var{fpu} -mdouble-float -mfdivdu @gol |
| -mfloat-abi=@var{name} @gol |
| -melrw -mistack -mmp -mcp -mcache -msecurity -mtrust @gol |
| -mdsp -medsp -mvdsp @gol |
| -mdiv -msmart -mhigh-registers -manchor @gol |
| -mpushpop -mmultiple-stld -mconstpool -mstack-size -mccrt @gol |
| -mbranch-cost=@var{n} -mcse-cc -msched-prolog -msim} |
| |
| @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{eBPF Options} |
| @gccoptlist{-mbig-endian -mlittle-endian -mkernel=@var{version} |
| -mframe-limit=@var{bytes} -mxbpf -mco-re -mno-co-re |
| -mjmpext -mjmp32 -malu32 -mcpu=@var{version}} |
| |
| @emph{FR30 Options} |
| @gccoptlist{-msmall-model -mno-lsim} |
| |
| @emph{FT32 Options} |
| @gccoptlist{-msim -mlra -mnodiv -mft32b -mcompress -mnopm} |
| |
| @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} @gol |
| -mpic-data-is-text-relative} |
| |
| @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 |
| -mcrc -mno-crc @gol |
| -mginv -mno-ginv @gol |
| -mmicromips -mno-micromips @gol |
| -mmsa -mno-msa @gol |
| -mloongson-mmi -mno-loongson-mmi @gol |
| -mloongson-ext -mno-loongson-ext @gol |
| -mloongson-ext2 -mno-loongson-ext2 @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-r5900 -mno-fix-r5900 @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 -mtiny-printf -mmax-inline-shift=} |
| |
| @emph{NDS32 Options} |
| @gccoptlist{-mbig-endian -mlittle-endian @gol |
| -mreduced-regs -mfull-regs @gol |
| -mcmov -mno-cmov @gol |
| -mext-perf -mno-ext-perf @gol |
| -mext-perf2 -mno-ext-perf2 @gol |
| -mext-string -mno-ext-string @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 |
| -mgprel-sec=@var{regexp} -mr0rel-sec=@var{regexp} @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{-m64 -mmainkernel -moptimize} |
| |
| @emph{OpenRISC Options} |
| @gccoptlist{-mboard=@var{name} -mnewlib -mhard-mul -mhard-div @gol |
| -msoft-mul -msoft-div @gol |
| -msoft-float -mhard-float -mdouble-float -munordered-float @gol |
| -mcmov -mror -mrori -msext -msfimm -mshftimm @gol |
| -mcmodel=@var{code-model}} |
| |
| @emph{PDP-11 Options} |
| @gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol |
| -mint32 -mno-int16 -mint16 -mno-int32 @gol |
| -msplit -munix-asm -mdec-asm -mgnu-asm -mlra} |
| |
| @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{PRU Options} |
| @gccoptlist{-mmcu=@var{mcu} -minrt -mno-relax -mloop @gol |
| -mabi=@var{variant} @gol} |
| |
| @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 |
| -mpreferred-stack-boundary=@var{num} @gol |
| -msmall-data-limit=@var{N-bytes} @gol |
| -msave-restore -mno-save-restore @gol |
| -mshorten-memrefs -mno-shorten-memrefs @gol |
| -mstrict-align -mno-strict-align @gol |
| -mcmodel=medlow -mcmodel=medany @gol |
| -mexplicit-relocs -mno-explicit-relocs @gol |
| -mrelax -mno-relax @gol |
| -mriscv-attribute -mmo-riscv-attribute @gol |
| -malign-data=@var{type} @gol |
| -mbig-endian -mlittle-endian @gol |
| -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} @gol |
| -mstack-protector-guard-offset=@var{offset}} |
| |
| @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 -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 |
| -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 -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-aixdesc -mcall-eabi -mcall-freebsd @gol |
| -mcall-linux -mcall-netbsd -mcall-openbsd @gol |
| -mcall-sysv -mcall-sysv-eabi -mcall-sysv-noeabi @gol |
| -mtraceback=@var{traceback_type} @gol |
| -maix-struct-return -msvr4-struct-return @gol |
| -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol |
| -mlongcall -mno-longcall -mpltseq -mno-pltseq @gol |
| -mblock-move-inline-limit=@var{num} @gol |
| -mblock-compare-inline-limit=@var{num} @gol |
| -mblock-compare-inline-loop-limit=@var{num} @gol |
| -mno-block-ops-unaligned-vsx @gol |
| -mstring-compare-inline-limit=@var{num} @gol |
| -misel -mno-isel @gol |
| -mvrsave -mno-vrsave @gol |
| -mmulhw -mno-mulhw @gol |
| -mdlmzb -mno-dlmzb @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 @gol |
| -mquad-memory -mno-quad-memory @gol |
| -mquad-memory-atomic -mno-quad-memory-atomic @gol |
| -mcompat-align-parm -mno-compat-align-parm @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} -mprefixed -mno-prefixed @gol |
| -mpcrel -mno-pcrel -mmma -mno-mmma -mrop-protect -mno-rop-protect @gol |
| -mprivileged -mno-privileged} |
| |
| @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 -mtpf-trace-skip -mno-tpf-trace-skip @gol |
| -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{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 -mmwait @gol |
| -mrecip -mrecip=@var{opt} @gol |
| -mvzeroupper -mprefer-avx128 -mprefer-vector-width=@var{opt} @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 -mpconfig -mwbnoinvd @gol |
| -mptwrite -mprefetchwt1 -mclflushopt -mclwb -mxsavec -mxsaves @gol |
| -msse4a -m3dnow -m3dnowa -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop @gol |
| -madx -mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mhle -mlwp @gol |
| -mmwaitx -mclzero -mpku -mthreads -mgfni -mvaes -mwaitpkg @gol |
| -mshstk -mmanual-endbr -mforce-indirect-call -mavx512vbmi2 -mavx512bf16 -menqcmd @gol |
| -mvpclmulqdq -mavx512bitalg -mmovdiri -mmovdir64b -mavx512vpopcntdq @gol |
| -mavx5124fmaps -mavx512vnni -mavx5124vnniw -mprfchw -mrdpid @gol |
| -mrdseed -msgx -mavx512vp2intersect -mserialize -mtsxldtrk@gol |
| -mamx-tile -mamx-int8 -mamx-bf16 -muintr -mhreset -mavxvnni@gol |
| -mavx512fp16 @gol |
| -mcldemote -mms-bitfields -mno-align-stringops -minline-all-stringops @gol |
| -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol |
| -mkl -mwidekl @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 |
| -minstrument-return=@var{type} -mfentry-name=@var{name} -mfentry-section=@var{name} @gol |
| -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol |
| -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol |
| -mstack-protector-guard-reg=@var{reg} @gol |
| -mstack-protector-guard-offset=@var{offset} @gol |
| -mstack-protector-guard-symbol=@var{symbol} @gol |
| -mgeneral-regs-only -mcall-ms2sysv-xlogues @gol |
| -mindirect-branch=@var{choice} -mfunction-return=@var{choice} @gol |
| -mindirect-branch-register -mneeded} |
| |
| @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 @gol |
| -mabi=@var{abi-type}} |
| |
| @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}.d |
| D source code. |
| |
| @item @var{file}.di |
| D interface file. |
| |
| @item @var{file}.dd |
| D documentation code (Ddoc). |
| |
| @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 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++-system-header c++-user-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 |
| d |
| f77 f77-cpp-input f95 f95-cpp-input |
| go |
| @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 the primary 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. |
| |
| Though @option{-o} names only the primary output, it also affects the |
| naming of auxiliary and dump outputs. See the examples below. Unless |
| overridden, both auxiliary outputs and dump outputs are placed in the |
| same directory as the primary output. In auxiliary outputs, the suffix |
| of the input file is replaced with that of the auxiliary output file |
| type; in dump outputs, the suffix of the dump file is appended to the |
| input file suffix. In compilation commands, the base name of both |
| auxiliary and dump outputs is that of the primary output; in compile and |
| link commands, the primary output name, minus the executable suffix, is |
| combined with the input file name. If both share the same base name, |
| disregarding the suffix, the result of the combination is that base |
| name, otherwise, they are concatenated, separated by a dash. |
| |
| @smallexample |
| gcc -c foo.c ... |
| @end smallexample |
| |
| will use @file{foo.o} as the primary output, and place aux outputs and |
| dumps next to it, e.g., aux file @file{foo.dwo} for |
| @option{-gsplit-dwarf}, and dump file @file{foo.c.???r.final} for |
| @option{-fdump-rtl-final}. |
| |
| If a non-linker output file is explicitly specified, aux and dump files |
| by default take the same base name: |
| |
| @smallexample |
| gcc -c foo.c -o dir/foobar.o ... |
| @end smallexample |
| |
| will name aux outputs @file{dir/foobar.*} and dump outputs |
| @file{dir/foobar.c.*}. |
| |
| A linker output will instead prefix aux and dump outputs: |
| |
| @smallexample |
| gcc foo.c bar.c -o dir/foobar ... |
| @end smallexample |
| |
| will generally name aux outputs @file{dir/foobar-foo.*} and |
| @file{dir/foobar-bar.*}, and dump outputs @file{dir/foobar-foo.c.*} and |
| @file{dir/foobar-bar.c.*}. |
| |
| The one exception to the above is when the executable shares the base |
| name with the single input: |
| |
| @smallexample |
| gcc foo.c -o dir/foo ... |
| @end smallexample |
| |
| in which case aux outputs are named @file{dir/foo.*} and dump outputs |
| named @file{dir/foo.c.*}. |
| |
| The location and the names of auxiliary and dump outputs can be adjusted |
| by the options @option{-dumpbase}, @option{-dumpbase-ext}, |
| @option{-dumpdir}, @option{-save-temps=cwd}, and |
| @option{-save-temps=obj}. |
| |
| |
| @item -dumpbase @var{dumpbase} |
| @opindex dumpbase |
| This option sets the base name for auxiliary and dump output files. It |
| does not affect the name of the primary output file. Intermediate |
| outputs, when preserved, are not regarded as primary outputs, but as |
| auxiliary outputs: |
| |
| @smallexample |
| gcc -save-temps -S foo.c |
| @end smallexample |
| |
| saves the (no longer) temporary preprocessed file in @file{foo.i}, and |
| then compiles to the (implied) output file @file{foo.s}, whereas: |
| |
| @smallexample |
| gcc -save-temps -dumpbase save-foo -c foo.c |
| @end smallexample |
| |
| preprocesses to in @file{save-foo.i}, compiles to @file{save-foo.s} (now |
| an intermediate, thus auxiliary output), and then assembles to the |
| (implied) output file @file{foo.o}. |
| |
| Absent this option, dump and aux files take their names from the input |
| file, or from the (non-linker) output file, if one is explicitly |
| specified: dump output files (e.g. those requested by @option{-fdump-*} |
| options) with the input name suffix, and aux output files (those |
| requested by other non-dump options, e.g. @code{-save-temps}, |
| @code{-gsplit-dwarf}, @code{-fcallgraph-info}) without it. |
| |
| Similar suffix differentiation of dump and aux outputs can be attained |
| for explicitly-given @option{-dumpbase basename.suf} by also specifying |
| @option{-dumpbase-ext .suf}. |
| |
| If @var{dumpbase} is explicitly specified with any directory component, |
| any @var{dumppfx} specification (e.g. @option{-dumpdir} or |
| @option{-save-temps=*}) is ignored, and instead of appending to it, |
| @var{dumpbase} fully overrides it: |
| |
| @smallexample |
| gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \ |
| -dumpdir pfx- -save-temps=cwd ... |
| @end smallexample |
| |
| creates auxiliary and dump outputs named @file{alt/foo.*}, disregarding |
| @file{dir/} in @option{-o}, the @file{./} prefix implied by |
| @option{-save-temps=cwd}, and @file{pfx-} in @option{-dumpdir}. |
| |
| When @option{-dumpbase} is specified in a command that compiles multiple |
| inputs, or that compiles and then links, it may be combined with |
| @var{dumppfx}, as specified under @option{-dumpdir}. Then, each input |
| file is compiled using the combined @var{dumppfx}, and default values |
| for @var{dumpbase} and @var{auxdropsuf} are computed for each input |
| file: |
| |
| @smallexample |
| gcc foo.c bar.c -c -dumpbase main ... |
| @end smallexample |
| |
| creates @file{foo.o} and @file{bar.o} as primary outputs, and avoids |
| overwriting the auxiliary and dump outputs by using the @var{dumpbase} |
| as a prefix, creating auxiliary and dump outputs named @file{main-foo.*} |
| and @file{main-bar.*}. |
| |
| An empty string specified as @var{dumpbase} avoids the influence of the |
| output basename in the naming of auxiliary and dump outputs during |
| compilation, computing default values : |
| |
| @smallexample |
| gcc -c foo.c -o dir/foobar.o -dumpbase '' ... |
| @end smallexample |
| |
| will name aux outputs @file{dir/foo.*} and dump outputs |
| @file{dir/foo.c.*}. Note how their basenames are taken from the input |
| name, but the directory still defaults to that of the output. |
| |
| The empty-string dumpbase does not prevent the use of the output |
| basename for outputs during linking: |
| |
| @smallexample |
| gcc foo.c bar.c -o dir/foobar -dumpbase '' -flto ... |
| @end smallexample |
| |
| The compilation of the source files will name auxiliary outputs |
| @file{dir/foo.*} and @file{dir/bar.*}, and dump outputs |
| @file{dir/foo.c.*} and @file{dir/bar.c.*}. LTO recompilation during |
| linking will use @file{dir/foobar.} as the prefix for dumps and |
| auxiliary files. |
| |
| |
| @item -dumpbase-ext @var{auxdropsuf} |
| @opindex dumpbase-ext |
| When forming the name of an auxiliary (but not a dump) output file, drop |
| trailing @var{auxdropsuf} from @var{dumpbase} before appending any |
| suffixes. If not specified, this option defaults to the suffix of a |
| default @var{dumpbase}, i.e., the suffix of the input file when |
| @option{-dumpbase} is not present in the command line, or @var{dumpbase} |
| is combined with @var{dumppfx}. |
| |
| @smallexample |
| gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ... |
| @end smallexample |
| |
| creates @file{dir/foo.o} as the main output, and generates auxiliary |
| outputs in @file{dir/x-foo.*}, taking the location of the primary |
| output, and dropping the @file{.c} suffix from the @var{dumpbase}. Dump |
| outputs retain the suffix: @file{dir/x-foo.c.*}. |
| |
| This option is disregarded if it does not match the suffix of a |
| specified @var{dumpbase}, except as an alternative to the executable |
| suffix when appending the linker output base name to @var{dumppfx}, as |
| specified below: |
| |
| @smallexample |
| gcc foo.c bar.c -o main.out -dumpbase-ext .out ... |
| @end smallexample |
| |
| creates @file{main.out} as the primary output, and avoids overwriting |
| the auxiliary and dump outputs by using the executable name minus |
| @var{auxdropsuf} as a prefix, creating auxiliary outputs named |
| @file{main-foo.*} and @file{main-bar.*} and dump outputs named |
| @file{main-foo.c.*} and @file{main-bar.c.*}. |
| |
| |
| @item -dumpdir @var{dumppfx} |
| @opindex dumpdir |
| When forming the name of an auxiliary or dump output file, use |
| @var{dumppfx} as a prefix: |
| |
| @smallexample |
| gcc -dumpdir pfx- -c foo.c ... |
| @end smallexample |
| |
| creates @file{foo.o} as the primary output, and auxiliary outputs named |
| @file{pfx-foo.*}, combining the given @var{dumppfx} with the default |
| @var{dumpbase} derived from the default primary output, derived in turn |
| from the input name. Dump outputs also take the input name suffix: |
| @file{pfx-foo.c.*}. |
| |
| If @var{dumppfx} is to be used as a directory name, it must end with a |
| directory separator: |
| |
| @smallexample |
| gcc -dumpdir dir/ -c foo.c -o obj/bar.o ... |
| @end smallexample |
| |
| creates @file{obj/bar.o} as the primary output, and auxiliary outputs |
| named @file{dir/bar.*}, combining the given @var{dumppfx} with the |
| default @var{dumpbase} derived from the primary output name. Dump |
| outputs also take the input name suffix: @file{dir/bar.c.*}. |
| |
| It defaults to the location of the output file; options |
| @option{-save-temps=cwd} and @option{-save-temps=obj} override this |
| default, just like an explicit @option{-dumpdir} option. In case |
| multiple such options are given, the last one prevails: |
| |
| @smallexample |
| gcc -dumpdir pfx- -c foo.c -save-temps=obj ... |
| @end smallexample |
| |
| outputs @file{foo.o}, with auxiliary outputs named @file{foo.*} because |
| @option{-save-temps=*} overrides the @var{dumppfx} given by the earlier |
| @option{-dumpdir} option. It does not matter that @option{=obj} is the |
| default for @option{-save-temps}, nor that the output directory is |
| implicitly the current directory. Dump outputs are named |
| @file{foo.c.*}. |
| |
| When compiling from multiple input files, if @option{-dumpbase} is |
| specified, @var{dumpbase}, minus a @var{auxdropsuf} suffix, and a dash |
| are appended to (or override, if containing any directory components) an |
| explicit or defaulted @var{dumppfx}, so that each of the multiple |
| compilations gets differently-named aux and dump outputs. |
| |
| @smallexample |
| gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ... |
| @end smallexample |
| |
| outputs auxiliary dumps to @file{dir/pfx-main-foo.*} and |
| @file{dir/pfx-main-bar.*}, appending @var{dumpbase}- to @var{dumppfx}. |
| Dump outputs retain the input file suffix: @file{dir/pfx-main-foo.c.*} |
| and @file{dir/pfx-main-bar.c.*}, respectively. Contrast with the |
| single-input compilation: |
| |
| @smallexample |
| gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ... |
| @end smallexample |
| |
| that, applying @option{-dumpbase} to a single source, does not compute |
| and append a separate @var{dumpbase} per input file. Its auxiliary and |
| dump outputs go in @file{dir/pfx-main.*}. |
| |
| When compiling and then linking from multiple input files, a defaulted |
| or explicitly specified @var{dumppfx} also undergoes the @var{dumpbase}- |
| transformation above (e.g. the compilation of @file{foo.c} and |
| @file{bar.c} above, but without @option{-c}). If neither |
| @option{-dumpdir} nor @option{-dumpbase} are given, the linker output |
| base name, minus @var{auxdropsuf}, if specified, or the executable |
| suffix otherwise, plus a dash is appended to the default @var{dumppfx} |
| instead. Note, however, that unlike earlier cases of linking: |
| |
| @smallexample |
| gcc foo.c bar.c -dumpdir dir/pfx- -o main ... |
| @end smallexample |
| |
| does not append the output name @file{main} to @var{dumppfx}, because |
| @option{-dumpdir} is explicitly specified. The goal is that the |
| explicitly-specified @var{dumppfx} may contain the specified output name |
| as part of the prefix, if desired; only an explicitly-specified |
| @option{-dumpbase} would be combined with it, in order to avoid simply |
| discarding a meaningful option. |
| |
| When compiling and then linking from a single input file, the linker |
| output base name will only be appended to the default @var{dumppfx} as |
| above if it does not share the base name with the single input file |
| name. This has been covered in single-input linking cases above, but |
| not with an explicit @option{-dumpdir} that inhibits the combination, |
| even if overridden by @option{-save-temps=*}: |
| |
| @smallexample |
| gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ... |
| @end smallexample |
| |
| Auxiliary outputs are named @file{foo.*}, and dump outputs |
| @file{foo.c.*}, in the current working directory as ultimately requested |
| by @option{-save-temps=cwd}. |
| |
| Summing it all up for an intuitive though slightly imprecise data flow: |
| the primary output name is broken into a directory part and a basename |
| part; @var{dumppfx} is set to the former, unless overridden by |
| @option{-dumpdir} or @option{-save-temps=*}, and @var{dumpbase} is set |
| to the latter, unless overriden by @option{-dumpbase}. If there are |
| multiple inputs or linking, this @var{dumpbase} may be combined with |
| @var{dumppfx} and taken from each input file. Auxiliary output names |
| for each input are formed by combining @var{dumppfx}, @var{dumpbase} |
| minus suffix, and the auxiliary output suffix; dump output names are |
| only different in that the suffix from @var{dumpbase} is retained. |
| |
| When it comes to auxiliary and dump outputs created during LTO |
| recompilation, a combination of @var{dumppfx} and @var{dumpbase}, as |
| given or as derived from the linker output name but not from inputs, |
| even in cases in which this combination would not otherwise be used as |
| such, is passed down with a trailing period replacing the compiler-added |
| dash, if any, as a @option{-dumpdir} option to @command{lto-wrapper}; |
| being involved in linking, this program does not normally get any |
| @option{-dumpbase} and @option{-dumpbase-ext}, and it ignores them. |
| |
| When running sub-compilers, @command{lto-wrapper} appends LTO stage |
| names to the received @var{dumppfx}, ensures it contains a directory |
| component so that it overrides any @option{-dumpdir}, and passes that as |
| @option{-dumpbase} to sub-compilers. |
| |
| @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@. If an option is supported by all languages, one needs |
| to select @samp{common} class. |
| |
| @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 @option{--help} is also |
| specified anywhere on the command line then this takes precedence |
| over any @option{--help=} option. |
| |
| 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 -ffile-prefix-map=@var{old}=@var{new} |
| @opindex ffile-prefix-map |
| When compiling files residing in directory @file{@var{old}}, record |
| any references to them in the result of the compilation as if the |
| files resided in directory @file{@var{new}} instead. Specifying this |
| option is equivalent to specifying all the individual |
| @option{-f*-prefix-map} options. This can be used to make reproducible |
| builds that are location independent. See also |
| @option{-fmacro-prefix-map} and @option{-fdebug-prefix-map}. |
| |
| @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 c17 |
| @itemx c18 |
| @itemx iso9899:2017 |
| @itemx iso9899:2018 |
| ISO C17, the 2017 revision of the ISO C standard |
| (published in 2018). This standard is |
| same as C11 except for corrections of defects (all of which are also |
| applied with @option{-std=c11}) and a new value of |
| @code{__STDC_VERSION__}, and so is supported to the same extent as C11. |
| |
| @item c2x |
| The next version of the ISO C standard, still under development. The |
| support for this version is experimental and incomplete. |
| |
| @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. |
| The name @samp{gnu1x} is deprecated. |
| |
| @item gnu17 |
| @itemx gnu18 |
| GNU dialect of ISO C17. This is the default for C code. |
| |
| @item gnu2x |
| The next version of the ISO C standard, still under development, plus |
| GNU extensions. The support for this version is experimental and |
| incomplete. |
| |
| @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}. |
| The name @samp{gnu++1y} is deprecated. |
| |
| @item c++17 |
| @itemx c++1z |
| The 2017 ISO C++ standard plus amendments. |
| The name @samp{c++1z} is deprecated. |
| |
| @item gnu++17 |
| @itemx gnu++1z |
| GNU dialect of @option{-std=c++17}. |
| This is the default for C++ code. |
| The name @samp{gnu++1z} is deprecated. |
| |
| @item c++20 |
| @itemx c++2a |
| The 2020 ISO C++ standard plus amendments. |
| Support is experimental, and could change in incompatible ways in |
| future releases. |
| The name @samp{c++2a} is deprecated. |
| |
| @item gnu++20 |
| @itemx gnu++2a |
| GNU dialect of @option{-std=c++20}. |
| Support is experimental, and could change in incompatible ways in |
| future releases. |
| The name @samp{gnu++2a} is deprecated. |
| |
| @item c++2b |
| @itemx c++23 |
| The next revision of the ISO C++ standard, planned for |
| 2023. Support is highly experimental, and will almost certainly |
| change in incompatible ways in future releases. |
| |
| @item gnu++2b |
| @itemx gnu++23 |
| GNU dialect of @option{-std=c++2b}. Support is highly experimental, |
| and will almost certainly change in incompatible ways in future |
| releases. |
| @end table |
| |
| @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 |
| @opindex fasm |
| 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 |
| @opindex fbuiltin |
| @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 -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 -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 -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 -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 -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 -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 -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 -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 except for x86 |
| targets using ms-abi. |
| |
| @item -foffload=disable |
| @itemx -foffload=default |
| @itemx -foffload=@var{target-list} |
| @opindex foffload |
| @cindex Offloading targets |
| @cindex OpenACC offloading targets |
| @cindex OpenMP offloading targets |
| Specify for which OpenMP and OpenACC offload targets code should be generated. |
| The default behavior, equivalent to @option{-foffload=default}, is to generate |
| code for all supported offload targets. The @option{-foffload=disable} form |
| generates code only for the host fallback, while |
| @option{-foffload=@var{target-list}} generates code only for the specified |
| comma-separated list of offload targets. |
| |
| Offload targets are specified in GCC's internal target-triplet format. You can |
| run the compiler with @option{-v} to show the list of configured offload targets |
| under @code{OFFLOAD_TARGET_NAMES}. |
| |
| @item -foffload-options=@var{options} |
| @itemx -foffload-options=@var{target-triplet-list}=@var{options} |
| @opindex foffload-options |
| @cindex Offloading options |
| @cindex OpenACC offloading options |
| @cindex OpenMP offloading options |
| |
| With @option{-foffload-options=@var{options}}, GCC passes the specified |
| @var{options} to the compilers for all enabled offloading targets. You can |
| specify options that apply only to a specific target or targets by using |
| the @option{-foffload-options=@var{target-list}=@var{options}} form. The |
| @var{target-list} is a comma-separated list in the same format as for the |
| @option{-foffload=} option. |
| |
| Typical command lines are |
| |
| @smallexample |
| -foffload-options=-lgfortran -foffload-options=-lm |
| -foffload-options="-lgfortran -lm" -foffload-options=nvptx-none=-latomic |
| -foffload-options=amdgcn-amdhsa=-march=gfx906 -foffload-options=-lm |
| @end smallexample |
| |
| @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.6 @w{@uref{https://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{https://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 -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 -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 -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 -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 -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 -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}. |
| |
| Version 12, which first appeared in G++ 8, corrects the calling |
| conventions for empty classes on the x86_64 target and for classes |
| with only deleted copy/move constructors. It accidentally changes the |
| calling convention for classes with a deleted copy constructor and a |
| trivial move constructor. |
| |
| Version 13, which first appeared in G++ 8.2, fixes the accidental |
| change in version 12. |
| |
| Version 14, which first appeared in G++ 10, corrects the mangling of |
| the nullptr expression. |
| |
| Version 15, which first appeared in G++ 11, changes the mangling of |
| @code{__alignof__} to be distinct from that of @code{alignof}, and |
| dependent operator names. |
| |
| 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 11 (GCC 7 |
| 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 |
| @opindex faccess-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)}. |
| |
| This flag is enabled by default for @option{-std=c++17}. |
| |
| @item -fchar8_t |
| @itemx -fno-char8_t |
| @opindex fchar8_t |
| @opindex fno-char8_t |
| Enable support for @code{char8_t} as adopted for C++20. This includes |
| the addition of a new @code{char8_t} fundamental type, changes to the |
| types of UTF-8 string and character literals, new signatures for |
| user-defined literals, associated standard library updates, and new |
| @code{__cpp_char8_t} and @code{__cpp_lib_char8_t} feature test macros. |
| |
| This option enables functions to be overloaded for ordinary and UTF-8 |
| strings: |
| |
| @smallexample |
| int f(const char *); // #1 |
| int f(const char8_t *); // #2 |
| int v1 = f("text"); // Calls #1 |
| int v2 = f(u8"text"); // Calls #2 |
| @end smallexample |
| |
| @noindent |
| and introduces new signatures for user-defined literals: |
| |
| @smallexample |
| int operator""_udl1(char8_t); |
| int v3 = u8'x'_udl1; |
| int operator""_udl2(const char8_t*, std::size_t); |
| int v4 = u8"text"_udl2; |
| template<typename T, T...> int operator""_udl3(); |
| int v5 = u8"text"_udl3; |
| @end smallexample |
| |
| @noindent |
| The change to the types of UTF-8 string and character literals introduces |
| incompatibilities with ISO C++11 and later standards. For example, the |
| following code is well-formed under ISO C++11, but is ill-formed when |
| @option{-fchar8_t} is specified. |
| |
| @smallexample |
| char ca[] = u8"xx"; // error: char-array initialized from wide |
| // string |
| const char *cp = u8"xx";// error: invalid conversion from |
| // `const char8_t*' to `const char*' |
| int f(const char*); |
| auto v = f(u8"xx"); // error: invalid conversion from |
| // `const char8_t*' to `const char*' |
| std::string s@{u8"xx"@}; // error: no matching function for call to |
| // `std::basic_string<char>::basic_string()' |
| using namespace std::literals; |
| s = u8"xx"s; // error: conversion from |
| // `basic_string<char8_t>' to non-scalar |
| // type `basic_string<char>' requested |
| @end smallexample |
| |
| @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 |
| @itemx -fconcepts-ts |
| @opindex fconcepts |
| @opindex fconcepts-ts |
| Below @option{-std=c++20}, @option{-fconcepts} enables support for the |
| C++ Extensions for Concepts Technical Specification, ISO 19217 (2015). |
| |
| With @option{-std=c++20} and above, Concepts are part of the language |
| standard, so @option{-fconcepts} defaults to on. But the standard |
| specification of Concepts differs significantly from the TS, so some |
| constructs that were allowed in the TS but didn't make it into the |
| standard can still be enabled by @option{-fconcepts-ts}. |
| |
| @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-cache-depth=@var{n} |
| @opindex fconstexpr-cache-depth |
| Set the maximum level of nested evaluation depth for C++11 constexpr |
| functions that will be cached to @var{n}. This is a heuristic that |
| trades off compilation speed (when the cache avoids repeated |
| calculations) against memory consumption (when the cache grows very |
| large from highly recursive evaluations). The default is 8. Very few |
| users are likely to want to adjust it, but if your code does heavy |
| constexpr calculations you might want to experiment to find which |
| value works best for you. |
| |
| @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 -fconstexpr-ops-limit=@var{n} |
| @opindex fconstexpr-ops-limit |
| Set the maximum number of operations during a single constexpr evaluation. |
| Even when number of iterations of a single loop is limited with the above limit, |
| if there are several nested loops and each of them has many iterations but still |
| smaller than the above limit, or if in a body of some loop or even outside |
| of a loop too many expressions need to be evaluated, the resulting constexpr |
| evaluation might take too long. |
| The default is 33554432 (1<<25). |
| |
| @item -fcoroutines |
| @opindex fcoroutines |
| Enable support for the C++ coroutines extension (experimental). |
| |
| @item -fno-elide-constructors |
| @opindex fno-elide-constructors |
| @opindex felide-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 |
| @opindex fenforce-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 -fno-gnu-keywords |
| @opindex fno-gnu-keywords |
| @opindex fgnu-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 |
| @opindex fimplicit-templates |
| Never emit code for non-inline templates that are instantiated |
| implicitly (i.e.@: by use); only emit code for explicit instantiations. |
| If you use this option, you must take care to structure your code to |
| include all the necessary explicit instantiations to avoid getting |
| undefined symbols at link time. |
| @xref{Template Instantiation}, for more information. |
| |
| @item -fno-implicit-inline-templates |
| @opindex fno-implicit-inline-templates |
| @opindex fimplicit-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 |
| @opindex fimplement-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 -fmodules-ts |
| @itemx -fno-modules-ts |
| @opindex fmodules-ts |
| @opindex fno-modules-ts |
| Enable support for C++20 modules (@pxref{C++ Modules}). The |
| @option{-fno-modules-ts} is usually not needed, as that is the |
| default. Even though this is a C++20 feature, it is not currently |
| implicitly enabled by selecting that standard version. |
| |
| @item -fmodule-header |
| @itemx -fmodule-header=user |
| @itemx -fmodule-header=system |
| @opindex fmodule-header |
| Compile a header file to create an importable header unit. |
| |
| @item -fmodule-implicit-inline |
| @opindex fmodule-implicit-inline |
| Member functions defined in their class definitions are not implicitly |
| inline for modular code. This is different to traditional C++ |
| behavior, for good reasons. However, it may result in a difficulty |
| during code porting. This option makes such function definitions |
| implicitly inline. It does however generate an ABI incompatibility, |
| so you must use it everywhere or nowhere. (Such definitions outside |
| of a named module remain implicitly inline, regardless.) |
| |
| @item -fno-module-lazy |
| @opindex fno-module-lazy |
| @opindex fmodule-lazy |
| Disable lazy module importing and module mapper creation. |
| |
| @item -fmodule-mapper=@r{[}@var{hostname}@r{]}:@var{port}@r{[}?@var{ident}@r{]} |
| @itemx -fmodule-mapper=|@var{program}@r{[}?@var{ident}@r{]} @var{args...} |
| @itemx -fmodule-mapper==@var{socket}@r{[}?@var{ident}@r{]} |
| @itemx -fmodule-mapper=<>@r{[}@var{inout}@r{]}@r{[}?@var{ident}@r{]} |
| @itemx -fmodule-mapper=<@var{in}>@var{out}@r{[}?@var{ident}@r{]} |
| @itemx -fmodule-mapper=@var{file}@r{[}?@var{ident}@r{]} |
| @vindex CXX_MODULE_MAPPER @r{environment variable} |
| @opindex fmodule-mapper |
| An oracle to query for module name to filename mappings. If |
| unspecified the @env{CXX_MODULE_MAPPER} environment variable is used, |
| and if that is unset, an in-process default is provided. |
| |
| @item -fmodule-only |
| @opindex fmodule-only |
| Only emit the Compiled Module Interface, inhibiting any object file. |
| |
| @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++17}. |
| |
| @item -fno-nonansi-builtins |
| @opindex fno-nonansi-builtins |
| @opindex fnonansi-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 |
| @opindex foperator-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 |
| @opindex foptional-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 |
| @opindex fpretty-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 -fno-rtti |
| @opindex fno-rtti |
| @opindex frtti |
| 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. |
| |
| Mixing code compiled with @option{-frtti} with that compiled with |
| @option{-fno-rtti} may not work. For example, programs may |
| fail to link if a class compiled with @option{-fno-rtti} is used as a base |
| for a class compiled with @option{-frtti}. |
| |
| @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++17}. |
| @option{-fstrong-eval-order=some} enables just the ordering of member |
| access and shift expressions, and is the default without |
| @option{-std=c++17}. |
| |
| @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 |
| @opindex fthreadsafe-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 |
| @opindex fuse-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 |
| @opindex fweak |
| 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 -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}, ...). |
| |
| @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.) |
| |
| @item -flang-info-include-translate |
| @itemx -flang-info-include-translate-not |
| @itemx -flang-info-include-translate=@var{header} |
| @opindex flang-info-include-translate |
| @opindex flang-info-include-translate-not |
| Inform of include translation events. The first will note accepted |
| include translations, the second will note declined include |
| translations. The @var{header} form will inform of include |
| translations relating to that specific header. If @var{header} is of |
| the form @code{"user"} or @code{<system>} it will be resolved to a |
| specific user or system header using the include path. |
| |
| @item -flang-info-module-cmi |
| @itemx -flang-info-module-cmi=@var{module} |
| @opindex flang-info-module-cmi |
| Inform of Compiled Module Interface pathnames. The first will note |
| all read CMI pathnames. The @var{module} form will not reading a |
| specific module's CMI. @var{module} may be a named module or a |
| header-unit (the latter indicated by either being a pathname containing |
| directory separators or enclosed in @code{<>} or @code{""}). |
| |
| @item -stdlib=@var{libstdc++,libc++} |
| @opindex stdlib |
| When G++ is configured to support this option, it allows specification of |
| alternate C++ runtime libraries. Two options are available: @var{libstdc++} |
| (the default, native C++ runtime for G++) and @var{libc++} which is the |
| C++ runtime installed on some operating systems (e.g. Darwin versions from |
| Darwin11 onwards). The option switches G++ to use the headers from the |
| specified library and to emit @code{-lstdc++} or @code{-lc++} respectively, |
| when a C++ runtime is required for linking. |
| @end table |
| |
| In addition, these warning options have meanings only for C++ programs: |
| |
| @table @gcctabopt |
| @item -Wabi-tag @r{(C++ and Objective-C++ only)} |
| @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 -Wcomma-subscript @r{(C++ and Objective-C++ only)} |
| @opindex Wcomma-subscript |
| @opindex Wno-comma-subscript |
| Warn about uses of a comma expression within a subscripting expression. |
| This usage was deprecated in C++20. However, a comma expression wrapped |
| in @code{( )} is not deprecated. Example: |
| |
| @smallexample |
| @group |
| void f(int *a, int b, int c) @{ |
| a[b,c]; // deprecated |
| a[(b,c)]; // OK |
| @} |
| @end group |
| @end smallexample |
| |
| Enabled by default with @option{-std=c++20}. |
| |
| @item -Wctad-maybe-unsupported @r{(C++ and Objective-C++ only)} |
| @opindex Wctad-maybe-unsupported |
| @opindex Wno-ctad-maybe-unsupported |
| Warn when performing class template argument deduction (CTAD) on a type with |
| no explicitly written deduction guides. This warning will point out cases |
| where CTAD succeeded only because the compiler synthesized the implicit |
| deduction guides, which might not be what the programmer intended. Certain |
| style guides allow CTAD only on types that specifically "opt-in"; i.e., on |
| types that are designed to support CTAD. This warning can be suppressed with |
| the following pattern: |
| |
| @smallexample |
| struct allow_ctad_t; // any name works |
| template <typename T> struct S @{ |
| S(T) @{ @} |
| @}; |
| S(allow_ctad_t) -> S<void>; // guide with incomplete parameter type will never be considered |
| @end smallexample |
| |
| @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 -Wdeprecated-copy @r{(C++ and Objective-C++ only)} |
| @opindex Wdeprecated-copy |
| @opindex Wno-deprecated-copy |
| Warn that the implicit declaration of a copy constructor or copy |
| assignment operator is deprecated if the class has a user-provided |
| copy constructor or copy assignment operator, in C++11 and up. This |
| warning is enabled by @option{-Wextra}. With |
| @option{-Wdeprecated-copy-dtor}, also deprecate if the class has a |
| user-provided destructor. |
| |
| @item -Wno-deprecated-enum-enum-conversion @r{(C++ and Objective-C++ only)} |
| @opindex Wdeprecated-enum-enum-conversion |
| @opindex Wno-deprecated-enum-enum-conversion |
| Disable the warning about the case when the usual arithmetic conversions |
| are applied on operands where one is of enumeration type and the other is |
| of a different enumeration type. This conversion was deprecated in C++20. |
| For example: |
| |
| @smallexample |
| enum E1 @{ e @}; |
| enum E2 @{ f @}; |
| int k = f - e; |
| @end smallexample |
| |
| @option{-Wdeprecated-enum-enum-conversion} is enabled by default with |
| @option{-std=c++20}. In pre-C++20 dialects, this warning can be enabled |
| by @option{-Wenum-conversion}. |
| |
| @item -Wno-deprecated-enum-float-conversion @r{(C++ and Objective-C++ only)} |
| @opindex Wdeprecated-enum-float-conversion |
| @opindex Wno-deprecated-enum-float-conversion |
| Disable the warning about the case when the usual arithmetic conversions |
| are applied on operands where one is of enumeration type and the other is |
| of a floating-point type. This conversion was deprecated in C++20. For |
| example: |
| |
| @smallexample |
| enum E1 @{ e @}; |
| enum E2 @{ f @}; |
| bool b = e <= 3.7; |
| @end smallexample |
| |
| @option{-Wdeprecated-enum-float-conversion} is enabled by default with |
| @option{-std=c++20}. In pre-C++20 dialects, this warning can be enabled |
| by @option{-Wenum-conversion}. |
| |
| @item -Wno-init-list-lifetime @r{(C++ and Objective-C++ only)} |
| @opindex Winit-list-lifetime |
| @opindex Wno-init-list-lifetime |
| Do not warn about uses of @code{std::initializer_list} that are likely |
| to result in dangling pointers. Since the underlying array for an |
| @code{initializer_list} is handled like a normal C++ temporary object, |
| it is easy to inadvertently keep a pointer to the array past the end |
| of the array's lifetime. For example: |
| |
| @itemize @bullet |
| @item |
| If a function returns a temporary @code{initializer_list}, or a local |
| @code{initializer_list} variable, the array's lifetime ends at the end |
| of the return statement, so the value returned has a dangling pointer. |
| |
| @item |
| If a new-expression creates an @code{initializer_list}, the array only |
| lives until the end of the enclosing full-expression, so the |
| @code{initializer_list} in the heap has a dangling pointer. |
| |
| @item |
| When an @code{initializer_list} variable is assigned from a |
| brace-enclosed initializer list, the temporary array created for the |
| right side of the assignment only lives until the end of the |
| full-expression, so at the next statement the @code{initializer_list} |
| variable has a dangling pointer. |
| |
| @smallexample |
| // li's initial underlying array lives as long as li |
| std::initializer_list<int> li = @{ 1,2,3 @}; |
| // assignment changes li to point to a temporary array |
| li = @{ 4, 5 @}; |
| // now the temporary is gone and li has a dangling pointer |
| int i = li.begin()[0] // undefined behavior |
| @end smallexample |
| |
| @item |
| When a list constructor stores the @code{begin} pointer from the |
| @code{initializer_list} argument, this doesn't extend the lifetime of |
| the array, so if a class variable is constructed from a temporary |
| @code{initializer_list}, the pointer is left dangling by the end of |
| the variable declaration statement. |
| |
| @end itemize |
| |
| @item -Winvalid-imported-macros |
| @opindex Winvalid-imported-macros |
| @opindex Wno-invalid-imported-macros |
| Verify all imported macro definitions are valid at the end of |
| compilation. This is not enabled by default, as it requires |
| additional processing to determine. It may be useful when preparing |
| sets of header-units to ensure consistent macros. |
| |
| @item -Wno-literal-suffix @r{(C++ and Objective-C++ only)} |
| @opindex Wliteral-suffix |
| @opindex Wno-literal-suffix |
| Do not 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. |
| |
| This option also controls warnings 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. |
| |
| These warnings are 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++17 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++17-compat}. |
| |
| As an example: |
| |
| @smallexample |
| template <class T> void f(T t) @{ t(); @}; |
| void g() noexcept; |
| void h() @{ f(g); @} |
| @end smallexample |
| |
| @noindent |
| In C++14, @code{f} calls @code{f<void(*)()>}, but in |
| C++17 it calls @code{f<void(*)()noexcept>}. |
| |
| @item -Wclass-memaccess @r{(C++ and Objective-C++ only)} |
| @opindex Wclass-memaccess |
| @opindex Wno-class-memaccess |
| Warn when the destination of a call to a raw memory function such as |
| @code{memset} or @code{memcpy} is an object of class type, and when writing |
| into such an object might bypass the class non-trivial or deleted constructor |
| or copy assignment, violate const-correctness or encapsulation, or corrupt |
| virtual table pointers. Modifying the representation of such objects may |
| violate invariants maintained by member functions of the class. For example, |
| the call to @code{memset} below is undefined because it modifies a non-trivial |
| class object and is, therefore, diagnosed. The safe way to either initialize |
| or clear the storage of objects of such types is by using the appropriate |
| constructor or assignment operator, if one is available. |
| @smallexample |
| std::string str = "abc"; |
| memset (&str, 0, sizeof str); |
| @end smallexample |
| The @option{-Wclass-memaccess} option is enabled by @option{-Wall}. |
| Explicitly casting the pointer to the class object to @code{void *} or |
| to a type that can be safely accessed by the raw memory function suppresses |
| the warning. |
| |
| @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++17}. |
| |
| @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 -Wno-pessimizing-move @r{(C++ and Objective-C++ only)} |
| @opindex Wpessimizing-move |
| @opindex Wno-pessimizing-move |
| This warning warns when a call to @code{std::move} prevents copy |
| elision. A typical scenario when copy elision can occur is when returning in |
| a function with a class return type, when the expression being returned is the |
| name of a non-volatile automatic object, and is not a function parameter, and |
| has the same type as the function return type. |
| |
| @smallexample |
| struct T @{ |
| @dots{} |
| @}; |
| T fn() |
| @{ |
| T t; |
| @dots{} |
| return std::move (t); |
| @} |
| @end smallexample |
| |
| But in this example, the @code{std::move} call prevents copy elision. |
| |
| This warning is enabled by @option{-Wall}. |
| |
| @item -Wno-redundant-move @r{(C++ and Objective-C++ only)} |
| @opindex Wredundant-move |
| @opindex Wno-redundant-move |
| This warning warns about redundant calls to @code{std::move}; that is, when |
| a move operation would have been performed even without the @code{std::move} |
| call. This happens because the compiler is forced to treat the object as if |
| it were an rvalue in certain situations such as returning a local variable, |
| where copy elision isn't applicable. Consider: |
| |
| @smallexample |
| struct T @{ |
| @dots{} |
| @}; |
| T fn(T t) |
| @{ |
| @dots{} |
| return std::move (t); |
| @} |
| @end smallexample |
| |
| Here, the @code{std::move} call is redundant. Because G++ implements Core |
| Issue 1579, another example is: |
| |
| @smallexample |
| struct T @{ // convertible to U |
| @dots{} |
| @}; |
| struct U @{ |
| @dots{} |
| @}; |
| U fn() |
| @{ |
| T t; |
| @dots{} |
| return std::move (t); |
| @} |
| @end smallexample |
| In this example, copy elision isn't applicable because the type of the |
| expression being returned and the function return type differ, yet G++ |
| treats the return value as if it were designated by an rvalue. |
| |
| This warning is enabled by @option{-Wextra}. |
| |
| @item -Wrange-loop-construct @r{(C++ and Objective-C++ only)} |
| @opindex Wrange-loop-construct |
| @opindex Wno-range-loop-construct |
| This warning warns when a C++ range-based for-loop is creating an unnecessary |
| copy. This can happen when the range declaration is not a reference, but |
| probably should be. For example: |
| |
| @smallexample |
| struct S @{ char arr[128]; @}; |
| void fn () @{ |
| S arr[5]; |
| for (const auto x : arr) @{ @dots{} @} |
| @} |
| @end smallexample |
| |
| It does not warn when the type being copied is a trivially-copyable type whose |
| size is less than 64 bytes. |
| |
| This warning also warns when a loop variable in a range-based for-loop is |
| initialized with a value of a different type resulting in a copy. For example: |
| |
| @smallexample |
| void fn() @{ |
| int arr[10]; |
| for (const double &x : arr) @{ @dots{} @} |
| @} |
| @end smallexample |
| |
| In the example above, in every iteration of the loop a temporary value of |
| type @code{double} is created and destroyed, to which the reference |
| @code{const double &} is bound. |
| |
| This warning is enabled by @option{-Wall}. |
| |
| @item -Wredundant-tags @r{(C++ and Objective-C++ only)} |
| @opindex Wredundant-tags |
| @opindex Wno-redundant-tags |
| Warn about redundant class-key and enum-key in references to class types |
| and enumerated types in contexts where the key can be eliminated without |
| causing an ambiguity. For example: |
| |
| @smallexample |
| struct foo; |
| struct foo *p; // warn that keyword struct can be eliminated |
| @end smallexample |
| |
| @noindent |
| On the other hand, in this example there is no warning: |
| |
| @smallexample |
| struct foo; |
| void foo (); // "hides" struct foo |
| void bar (struct foo&); // no warning, keyword struct is necessary |
| @end smallexample |
| |
| @item -Wno-subobject-linkage @r{(C++ and Objective-C++ only)} |
| @opindex Wsubobject-linkage |
| @opindex Wno-subobject-linkage |
| Do not warn |
| if a class type has a base or a field whose type uses the anonymous |
| namespace or depends on a type with no linkage. If a type A depends on |
| a type B with no or internal linkage, defining it in multiple |
| translation units would be an ODR violation because the meaning of B |
| is different in each translation unit. If A only appears in a single |
| translation unit, the best way to silence the warning is to give it |
| internal linkage by putting it in an anonymous namespace as well. The |
| compiler doesn't give this warning for types defined in the main .C |
| file, as those are unlikely to have multiple definitions. |
| @option{-Wsubobject-linkage} is enabled by default. |
| |
| @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 -Wno-exceptions @r{(C++ and Objective-C++ only)} |
| @opindex Wexceptions |
| @opindex Wno-exceptions |
| Disable the warning about the case when an exception handler is shadowed by |
| another handler, which can point out a wrong ordering of exception handlers. |
| |
| @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 |
| @opindex Wno-templates |
| 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 -Wmismatched-new-delete @r{(C++ and Objective-C++ only)} |
| @opindex Wmismatched-new-delete |
| @opindex Wno-mismatched-new-delete |
| Warn for mismatches between calls to @code{operator new} or @code{operator |
| delete} and the corresponding call to the allocation or deallocation function. |
| This includes invocations of C++ @code{operator delete} with pointers |
| returned from either mismatched forms of @code{operator new}, or from other |
| functions that allocate objects for which the @code{operator delete} isn't |
| a suitable deallocator, as well as calls to other deallocation functions |
| with pointers returned from @code{operator new} for which the deallocation |
| function isn't suitable. |
| |
| For example, the @code{delete} expression in the function below is diagnosed |
| because it doesn't match the array form of the @code{new} expression |
| the pointer argument was returned from. Similarly, the call to @code{free} |
| is also diagnosed. |
| |
| @smallexample |
| void f () |
| @{ |
| int *a = new int[n]; |
| delete a; // warning: mismatch in array forms of expressions |
| |
| char *p = new char[n]; |
| free (p); // warning: mismatch between new and free |
| @} |
| @end smallexample |
| |
| The related option @option{-Wmismatched-dealloc} diagnoses mismatches |
| involving allocation and deallocation functions other than @code{operator |
| new} and @code{operator delete}. |
| |
| @option{-Wmismatched-new-delete} is included in @option{-Wall}. |
| |
| @item -Wmismatched-tags @r{(C++ and Objective-C++ only)} |
| @opindex Wmismatched-tags |
| @opindex Wno-mismatched-tags |
| Warn for declarations of structs, classes, and class templates and their |
| specializations with a class-key that does not match either the definition |
| or the first declaration if no definition is provided. |
| |
| For example, the declaration of @code{struct Object} in the argument list |
| of @code{draw} triggers the warning. To avoid it, either remove the redundant |
| class-key @code{struct} or replace it with @code{class} to match its definition. |
| @smallexample |
| class Object @{ |
| public: |
| virtual ~Object () = 0; |
| @}; |
| void draw (struct Object*); |
| @end smallexample |
| |
| It is not wrong to declare a class with the class-key @code{struct} as |
| the example above shows. The @option{-Wmismatched-tags} option is intended |
| to help achieve a consistent style of class declarations. In code that is |
| intended to be portable to Windows-based compilers the warning helps prevent |
| unresolved references due to the difference in the mangling of symbols |
| declared with different class-keys. The option can be used either on its |
| own or in conjunction with @option{-Wredundant-tags}. |
| |
| @item -Wmultiple-inheritance @r{(C++ and Objective-C++ only)} |
| @opindex Wmultiple-inheritance |
| @opindex Wno-multiple-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 |
| @opindex Wno-virtual-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 -Wno-virtual-move-assign |
| @opindex Wvirtual-move-assign |
| @opindex Wno-virtual-move-assign |
| Suppress warnings about inheriting from a virtual base with a |
| non-trivial C++11 move assignment operator. This is dangerous because |
| if the virtual base is reachable along more than one path, it is |
| moved multiple times, which can mean both objects end up in the |
| moved-from state. If the move assignment operator is written to avoid |
| moving from a moved-from object, this warning can be disabled. |
| |
| @item -Wnamespaces |
| @opindex Wnamespaces |
| @opindex Wno-namespaces |
| 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}. |
| |
| @item -Wno-vexing-parse @r{(C++ and Objective-C++ only)} |
| @opindex Wvexing-parse |
| @opindex Wno-vexing-parse |
| Warn about the most vexing parse syntactic ambiguity. This warns about |
| the cases when a declaration looks like a variable definition, but the |
| C++ language requires it to be interpreted as a function declaration. |
| For instance: |
| |
| @smallexample |
| void f(double a) @{ |
| int i(); // extern int i (void); |
| int n(int(a)); // extern int n (int); |
| @} |
| @end smallexample |
| |
| Another example: |
| |
| @smallexample |
| struct S @{ S(int); @}; |
| void f(double a) @{ |
| S x(int(a)); // extern struct S x (int); |
| S y(int()); // extern struct S y (int (*) (void)); |
| S z(); // extern struct S z (void); |
| @} |
| @end smallexample |
| |
| The warning will suggest options how to deal with such an ambiguity; e.g., |
| it can suggest removing the parentheses or using braces instead. |
| |
| This warning is enabled by default. |
| |
| @item -Wno-class-conversion @r{(C++ and Objective-C++ only)} |
| @opindex Wno-class-conversion |
| @opindex Wclass-conversion |
| Do not warn when a conversion function converts an |
| object to the same type, to a base class of that type, or to void; such |
| a conversion function will never be called. |
| |
| @item -Wvolatile @r{(C++ and Objective-C++ only)} |
| @opindex Wvolatile |
| @opindex Wno-volatile |
| Warn about deprecated uses of the @code{volatile} qualifier. This includes |
| postfix and prefix @code{++} and @code{--} expressions of |
| @code{volatile}-qualified types, using simple assignments where the left |
| operand is a @code{volatile}-qualified non-class type for their value, |
| compound assignments where the left operand is a @code{volatile}-qualified |
| non-class type, @code{volatile}-qualified function return type, |
| @code{volatile}-qualified parameter type, and structured bindings of a |
| @code{volatile}-qualified type. This usage was deprecated in C++20. |
| |
| Enabled by default with @option{-std=c++20}. |
| |
| @item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)} |
| @opindex Wzero-as-null-pointer-constant |
| @opindex Wno-zero-as-null-pointer-constant |
| Warn when a literal @samp{0} is used as null pointer constant. This can |
| be useful to facilitate the conversion to @code{nullptr} in C++11. |
| |
| @item -Waligned-new |
| @opindex Waligned-new |
| @opindex Wno-aligned-new |
| Warn about a new-expression of a type that requires greater alignment |
| than the @code{alignof(std::max_align_t)} but uses an allocation |
| function without an explicit alignment parameter. This option is |
| enabled by @option{-Wall}. |
| |
| Normally this only warns about global allocation functions, but |
| @option{-Waligned-new=all} also warns about class member allocation |
| functions. |
|