; Options for the language- and target-independent parts of the compiler.

; Copyright (C) 2003-2017 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

; See the GCC internals manual (options.texi) for a description of this file's format.

; Please try to keep this file in ASCII collating order.

Variable
int target_flags

Variable
int optimize

Variable
int optimize_size

Variable
int optimize_debug

; Not used directly to control optimizations, only to save -Ofast
; setting for "optimize" attributes.
Variable
int optimize_fast

; True if this is the lto front end.  This is used to disable gimple
; generation and lowering passes that are normally run on the output
; of a front end.  These passes must be bypassed for lto since they
; have already been done before the gimple was written.
Variable
bool in_lto_p = false

; This variable is set to non-0 only by LTO front-end.  1 indicates that
; the output produced will be used for incrmeental linking (thus weak symbols
; can still be bound).
Variable
int flag_incremental_link = 0

; 0 means straightforward implementation of complex divide acceptable.
; 1 means wide ranges of inputs must work for complex divide.
; 2 means C99-like requirements for complex multiply and divide.
Variable
int flag_complex_method = 1

; Language specific warning pass for unused results.
Variable
bool flag_warn_unused_result = false

Variable
int *param_values

; Nonzero if we should write GIMPLE bytecode for link-time optimization.
Variable
int flag_generate_lto

; Nonzero if we should write GIMPLE bytecode for offload compilation.
Variable
int flag_generate_offload = 0

; True to warn about any objects definitions whose size is larger
; than N bytes.  Also want about function definitions whose returned
; values are larger than N bytes, where N is 'larger_than_size'.
Variable
bool warn_larger_than

Variable
HOST_WIDE_INT larger_than_size

; True to warn about any function whose frame size is larger
; than N bytes.
Variable
bool warn_frame_larger_than

Variable
HOST_WIDE_INT frame_larger_than_size

; Nonzero means we should be saving declaration info into a .X file.
Variable
int flag_gen_aux_info = 0

; Nonzero if we are compiling code for a shared library, zero for
; executable.
Variable
int flag_shlib

; These two are really VEC(char_p,heap) *.

Variable
void *flag_instrument_functions_exclude_functions

Variable
void *flag_instrument_functions_exclude_files

; Generic structs (e.g. templates not explicitly specialized)
; may not have a compilation unit associated with them, and so
; may need to be treated differently from ordinary structs.
;
; Structs only handled by reference (indirectly), will also usually
; not need as much debugging information.

Variable
enum debug_struct_file debug_struct_ordinary[DINFO_USAGE_NUM_ENUMS] = { DINFO_STRUCT_FILE_ANY, DINFO_STRUCT_FILE_ANY, DINFO_STRUCT_FILE_ANY }

Variable
enum debug_struct_file debug_struct_generic[DINFO_USAGE_NUM_ENUMS] = { DINFO_STRUCT_FILE_ANY, DINFO_STRUCT_FILE_ANY, DINFO_STRUCT_FILE_ANY }

; True if we should exit after parsing options.
Variable
bool exit_after_options

; Type(s) of debugging information we are producing (if any).  See
; flag-types.h for the definitions of the different possible types of
; debugging information.
Variable
enum debug_info_type write_symbols = NO_DEBUG

; Level of debugging information we are producing.  See flag-types.h
; for the definitions of the different possible levels.
Variable
enum debug_info_levels debug_info_level = DINFO_LEVEL_NONE

; Nonzero means use GNU-only extensions in the generated symbolic
; debugging information.  Currently, this only has an effect when
; write_symbols is set to DBX_DEBUG, XCOFF_DEBUG, or DWARF_DEBUG.
Variable
bool use_gnu_debug_info_extensions

; Original value of maximum field alignment in bytes, specified via
; -fpack-struct=<value>.
Variable
unsigned int initial_max_fld_align = TARGET_DEFAULT_PACK_STRUCT

; Type of stack check.
Variable
enum stack_check_type flag_stack_check = NO_STACK_CHECK

; True if stack usage information needs to be computed.
Variable
bool flag_stack_usage_info = false

; -dA causes debug commentary information to be produced in
; the generated assembly code (to make it more readable).  This option
; is generally only of use to those who actually need to read the
; generated assembly code (perhaps while debugging the compiler itself).
; Currently, this switch is only used by dwarf2out.c; however, it is intended
; to be a catchall for printing debug information in the assembler file.
Variable
int flag_debug_asm

; How many NOP insns to place at each function entry by default
Variable
HOST_WIDE_INT function_entry_patch_area_size

; And how far the real asm entry point is into this area
Variable
HOST_WIDE_INT function_entry_patch_area_start

; Balance between GNAT encodings and standard DWARF to emit.
Variable
enum dwarf_gnat_encodings gnat_encodings = DWARF_GNAT_ENCODINGS_DEFAULT

; -dP causes the rtl to be emitted as a comment in assembly.
Variable
int flag_dump_rtl_in_asm

; Whether -da was passed (used only in handle_common_deferred_options).
Variable
bool flag_dump_all_passed

; Other flags saying which kinds of debugging dump have been requested.

Variable
int rtl_dump_and_exit

Variable
int flag_print_asm_name

; Name of top-level original source file (what was input to cpp).
; This comes from the #-command at the beginning of the actual input.
; If there isn't any there, then this is the cc1 input file name.
Variable
const char *main_input_filename

; Pointer to base name in main_input_filename, with directories and a
; single final extension removed, and the length of this base
; name.

Variable
const char *main_input_basename

Variable
int main_input_baselength

; Which options have been printed by --help.
Variable
char *help_printed

; Which enums have been printed by --help.  0 = not printed, no
; relevant options seen, 1 = relevant option seen, not yet printed, 2
; = printed.
Variable
char *help_enum_printed

; The number of columns for --help output.
Variable
unsigned int help_columns

; Whether this options structure has been through finish_options
Variable
bool flag_opts_finished

; What the sanitizer should instrument
Variable
unsigned int flag_sanitize

; What sanitizers should recover from errors
Variable
unsigned int flag_sanitize_recover = (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT | SANITIZE_KERNEL_ADDRESS) & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)

; What the coverage sanitizers should instrument
Variable
unsigned int flag_sanitize_coverage

; Flag whether a prefix has been added to dump_base_name
Variable
bool dump_base_name_prefixed = false

; Flag whether HSA generation has been explicitely disabled
Variable
bool flag_disable_hsa = false

###
Driver

-assemble
Driver Alias(S)

-compile
Driver Alias(c)

-coverage
Driver Alias(coverage)

-debug
Common Alias(g)

-dump
Common Separate Alias(d)

-dump=
Common Joined Alias(d)

-dumpbase
Common Separate Alias(dumpbase)

-dumpdir
Common Separate Alias(dumpdir)

-entry
Driver Separate Alias(e)

-entry=
Driver Joined Alias(e)

-extra-warnings
Common Warning Alias(Wextra)

-for-assembler
Driver Separate Alias(Xassembler)

-for-assembler=
Driver JoinedOrMissing Alias(Xassembler)

-for-linker
Driver Separate Alias(Xlinker)

-for-linker=
Driver JoinedOrMissing Alias(Xlinker)

-force-link
Driver Separate Alias(u)

-force-link=
Driver Joined Alias(u)

-help
Common Driver Var(help_flag)
Display this information.

-help=
Common Driver Report Joined
--help=<class>	Display descriptions of a specific class of options.  <class> is one or more of optimizers, target, warnings, undocumented, params.

-language
Driver Separate Alias(x)

-language=
Driver Joined Alias(x)

-library-directory
Driver Separate Alias(L)

-library-directory=
Driver Joined Alias(L)

-no-canonical-prefixes
Driver Alias(no-canonical-prefixes)

-no-standard-libraries
Driver Alias(nostdlib)

-no-sysroot-suffix
Driver Var(no_sysroot_suffix)

-no-warnings
Common Alias(w)

-optimize
Common Alias(O)

-output
Common Driver Separate Alias(o) MissingArgError(missing filename after %qs)

-output=
Common Driver Joined Alias(o) MissingArgError(missing filename after %qs)

-pass-exit-codes
Driver Alias(pass-exit-codes)

-pedantic
Common Alias(Wpedantic)

-pedantic-errors
Common Alias(pedantic-errors)

-pie
Driver Alias(pie)

-static-pie
Driver Alias(static-pie)

-pipe
Driver Alias(pipe)

-prefix
Driver Separate Alias(B)

-prefix=
Driver JoinedOrMissing Alias(B)

-preprocess
Driver Alias(E)

-print-file-name
Driver Separate Alias(print-file-name=)

-print-file-name=
Driver JoinedOrMissing Alias(print-file-name=)

-print-libgcc-file-name
Driver Alias(print-libgcc-file-name)

-print-multi-directory
Driver Alias(print-multi-directory)

-print-multi-lib
Driver Alias(print-multi-lib)

-print-multi-os-directory
Driver Alias(print-multi-os-directory)

-print-multiarch
Driver Alias(print-multiarch)

-print-prog-name
Driver Separate Alias(print-prog-name=)

-print-prog-name=
Driver JoinedOrMissing Alias(print-prog-name=)

-print-search-dirs
Driver Alias(print-search-dirs)

-print-sysroot
Driver Alias(print-sysroot)

-print-sysroot-headers-suffix
Driver Alias(print-sysroot-headers-suffix)

-profile
Common Alias(p)

-save-temps
Driver Alias(save-temps)

-shared
Driver Alias(shared)

-specs
Driver Separate Alias(specs=)

-specs=
Driver Joined Alias(specs=)

-static
Driver Alias(static)

-symbolic
Driver Alias(symbolic)

-target-help
Common Driver
Alias for --help=target.

-time
Driver Alias(time)

-verbose
Driver Alias(v)

;; The driver used to convert options such as --help into forms such
;; as -fhelp; the following four entries are for compatibility with
;; any direct uses of those (undocumented) -f forms
fhelp
Common Driver Alias(-help)

fhelp=
Common Driver Joined Alias(-help=)

ftarget-help
Common Driver Alias(-target-help)

fversion
Common Driver Alias(-version)

-param
Common Separate
--param <param>=<value>	Set parameter <param> to value.  See below for a complete list of parameters.

-param=
Common Joined Alias(-param)

-sysroot
Driver Separate Alias(-sysroot=)

-sysroot=
Driver JoinedOrMissing

-version
Common Driver

B
Driver Joined Separate

E
Driver

L
Driver Joined Separate

N
Driver

O
Common JoinedOrMissing Optimization
-O<number>	Set optimization level to <number>.

Os
Common Optimization
Optimize for space rather than speed.

Ofast
Common Optimization
Optimize for speed disregarding exact standards compliance.

Og
Common Optimization
Optimize for debugging experience rather than speed or size.

Q
Driver

Qn
Driver Negative(Qy)

Qy
Driver Negative(Qn)

R
Driver Joined Separate

S
Driver

T
Driver Joined Separate

Tbss
Driver Separate

Tbss=
Driver Joined

Tdata
Driver Separate

Tdata=
Driver Joined

Ttext
Driver Separate

Ttext=
Driver Joined

W
Common RejectNegative Warning Alias(Wextra)
This switch is deprecated; use -Wextra instead.

Wa,
Driver JoinedOrMissing RejectNegative

Wl,
Driver JoinedOrMissing RejectNegative

Wp,
Driver JoinedOrMissing RejectNegative

Waggregate-return
Common Var(warn_aggregate_return) Warning
Warn about returning structures, unions or arrays.

Waggressive-loop-optimizations
Common Var(warn_aggressive_loop_optimizations) Init(1) Warning
Warn if a loop with constant number of iterations triggers undefined behavior.

Warray-bounds
Common Var(warn_array_bounds) Warning
Warn if an array is accessed out of bounds.

Warray-bounds=
Common Joined RejectNegative UInteger Var(warn_array_bounds) Warning IntegerRange(0, 2)
Warn if an array is accessed out of bounds.

Wattributes
Common Var(warn_attributes) Init(1) Warning
Warn about inappropriate attribute usage.

Wattribute-alias
Common Var(warn_attributes) Init(1) Warning
Warn about type safety and similar errors in attribute alias and related.

Wcast-align
Common Var(warn_cast_align) Warning
Warn about pointer casts which increase alignment.

Wcast-align=strict
Common Var(warn_cast_align,2) Warning
Warn about pointer casts which increase alignment.

Wcpp
Common Var(warn_cpp) Init(1) Warning
Warn when a #warning directive is encountered.

Wdeprecated-declarations
Common Var(warn_deprecated_decl) Init(1) Warning
Warn about uses of __attribute__((deprecated)) declarations.

Wdisabled-optimization
Common Var(warn_disabled_optimization) Warning
Warn when an optimization pass is disabled.

Werror
Common Var(warnings_are_errors)
Treat all warnings as errors.

Werror=
Common Joined
Treat specified warning as error.

Wextra
Common Var(extra_warnings) Warning
Print extra (possibly unwanted) warnings.

Wfatal-errors
Common Var(flag_fatal_errors)
Exit on the first error occurred.

Wframe-larger-than=
Common RejectNegative Joined UInteger Warning
-Wframe-larger-than=<number>	Warn if a function's stack frame requires more than <number> bytes.

Wfree-nonheap-object
Common Var(warn_free_nonheap_object) Init(1) Warning
Warn when attempting to free a non-heap object.

Whsa
Common Var(warn_hsa) Init(1) Warning
Warn when a function cannot be expanded to HSAIL.

Wimplicit-fallthrough
Common Alias(Wimplicit-fallthrough=,3,0) Warning

Wimplicit-fallthrough=
Common Var(warn_implicit_fallthrough) RejectNegative Joined UInteger Warning IntegerRange(0, 5)
Warn when a switch case falls through.

Winline
Common Var(warn_inline) Warning
Warn when an inlined function cannot be inlined.

Winvalid-memory-model
Common Var(warn_invalid_memory_model) Init(1) Warning
Warn when an atomic memory model parameter is known to be outside the valid range.

Wlarger-than-
Common RejectNegative Joined Warning Undocumented Alias(Wlarger-than=)

Wlarger-than=
Common RejectNegative Joined UInteger Warning
-Wlarger-than=<number>	Warn if an object is larger than <number> bytes.

Wnonnull-compare
Var(warn_nonnull_compare) Warning
Warn if comparing pointer parameter with nonnull attribute with NULL.

Wnull-dereference
Common Var(warn_null_dereference) Warning
Warn if dereferencing a NULL pointer may lead to erroneous or undefined behavior.

Wunsafe-loop-optimizations
Common Var(warn_unsafe_loop_optimizations) Warning
Warn if the loop cannot be optimized due to nontrivial assumptions.

Wmissing-noreturn
Common Warning Alias(Wsuggest-attribute=noreturn)

Wodr
Common Var(warn_odr_violations) Init(1) Warning
Warn about some C++ One Definition Rule violations during link time optimization.

Woverflow
Common Var(warn_overflow) Init(1) Warning
Warn about overflow in arithmetic expressions.

Wlto-type-mismatch
Common Var(warn_lto_type_mismatch) Init(1) Warning
During link time optimization warn about mismatched types of global declarations.

Wpacked
Common Var(warn_packed) Warning
Warn when the packed attribute has no effect on struct layout.

Wpadded
Common Var(warn_padded) Warning
Warn when padding is required to align structure members.

Wpedantic
Common Var(pedantic) Init(0) Warning
Issue warnings needed for strict compliance to the standard.

Wreturn-local-addr
Common Var(warn_return_local_addr) Init(1) Warning
Warn about returning a pointer/reference to a local or temporary variable.

Wshadow
Common Var(warn_shadow) Warning
Warn when one variable shadows another.  Same as -Wshadow=global.

Wshadow=global
Common Warning Alias(Wshadow)
Warn when one variable shadows another (globally).

Wshadow=local
Common Var(warn_shadow_local) Warning EnabledBy(Wshadow)
Warn when one local variable shadows another local variable or parameter.

Wshadow-local
Common Warning Undocumented Alias(Wshadow=local)

Wshadow=compatible-local
Common Var(warn_shadow_compatible_local) Warning EnabledBy(Wshadow=local)
Warn when one local variable shadows another local variable or parameter of compatible type.

Wshadow-compatible-local
Common Warning Undocumented Alias(Wshadow=compatible-local)

Wstack-protector
Common Var(warn_stack_protect) Warning
Warn when not issuing stack smashing protection for some reason.

Wstack-usage=
Common Joined RejectNegative UInteger Var(warn_stack_usage) Warning
-Wstack-usage=<number>	Warn if stack usage might be larger than specified amount.

Wstrict-aliasing
Common Warning
Warn about code which might break strict aliasing rules.

Wstrict-aliasing=
Common Joined RejectNegative UInteger Var(warn_strict_aliasing) Warning
Warn about code which might break strict aliasing rules.

Wstrict-overflow
Common Warning
Warn about optimizations that assume that signed overflow is undefined.

Wstrict-overflow=
Common Joined RejectNegative UInteger Var(warn_strict_overflow) Warning
Warn about optimizations that assume that signed overflow is undefined.

Wsuggest-attribute=cold
Common Var(warn_suggest_attribute_cold) Warning
Warn about functions which might be candidates for __attribute__((cold)).

Wsuggest-attribute=const
Common Var(warn_suggest_attribute_const) Warning
Warn about functions which might be candidates for __attribute__((const)).

Wsuggest-attribute=pure
Common Var(warn_suggest_attribute_pure) Warning
Warn about functions which might be candidates for __attribute__((pure)).

Wsuggest-attribute=noreturn
Common Var(warn_suggest_attribute_noreturn) Warning
Warn about functions which might be candidates for __attribute__((noreturn)).

Wsuggest-attribute=malloc
Common Var(warn_suggest_attribute_malloc) Warning
Warn about functions which might be candidates for __attribute__((malloc)).

Wsuggest-final-types
Common Var(warn_suggest_final_types) Warning
Warn about C++ polymorphic types where adding final keyword would improve code quality.

Wsuggest-final-methods
Common Var(warn_suggest_final_methods) Warning
Warn about C++ virtual methods where adding final keyword would improve code quality.

Wswitch-unreachable
Common Var(warn_switch_unreachable) Warning Init(1)
Warn about statements between switch's controlling expression and the first
case.

Wsystem-headers
Common Var(warn_system_headers) Warning
Do not suppress warnings from system headers.

Wtrampolines
Common Var(warn_trampolines) Warning
Warn whenever a trampoline is generated.

Wtype-limits
Common Var(warn_type_limits) Warning EnabledBy(Wextra)
Warn if a comparison is always true or always false due to the limited range of the data type.

Wuninitialized
Common Var(warn_uninitialized) Warning EnabledBy(Wextra)
Warn about uninitialized automatic variables.

Wmaybe-uninitialized
Common Var(warn_maybe_uninitialized) Warning EnabledBy(Wuninitialized)
Warn about maybe uninitialized automatic variables.

Wunreachable-code
Common Ignore Warning
Does nothing. Preserved for backward compatibility.

Wunused
Common Var(warn_unused) Init(0) Warning
Enable all -Wunused- warnings.

Wunused-but-set-parameter
Common Var(warn_unused_but_set_parameter) Warning EnabledBy(Wunused && Wextra)
Warn when a function parameter is only set, otherwise unused.

Wunused-but-set-variable
Common Var(warn_unused_but_set_variable) Warning EnabledBy(Wunused)
Warn when a variable is only set, otherwise unused.

Wunused-function
Common Var(warn_unused_function) Warning EnabledBy(Wunused)
Warn when a function is unused.

Wunused-label
Common Var(warn_unused_label) Warning EnabledBy(Wunused)
Warn when a label is unused.

Wunused-parameter
Common Var(warn_unused_parameter) Warning EnabledBy(Wunused && Wextra)
Warn when a function parameter is unused.

Wunused-value
Common Var(warn_unused_value) Warning EnabledBy(Wunused)
Warn when an expression value is unused.

Wunused-variable
Common Var(warn_unused_variable) Warning EnabledBy(Wunused)
Warn when a variable is unused.

Wcoverage-mismatch
Common Var(warn_coverage_mismatch) Init(1) Warning
Warn in case profiles in -fprofile-use do not match.

Wvector-operation-performance
Common Var(warn_vector_operation_performance) Warning
Warn when a vector operation is compiled outside the SIMD.

Xassembler
Driver Separate

Xlinker
Driver Separate

Xpreprocessor
Driver Separate

Z
Driver

aux-info
Common Separate Var(aux_info_file_name)
-aux-info <file>	Emit declaration information into <file>.

aux-info=
Common Joined Alias(aux-info)

auxbase
Common Separate RejectDriver Var(aux_base_name)

auxbase-strip
Common Separate RejectDriver

coverage
Driver

c
Driver

d
Common Joined
-d<letters>	Enable dumps from specific passes of the compiler.

dumpbase
Common Separate Var(dump_base_name)
-dumpbase <file>	Set the file basename to be used for dumps.

dumpdir
Common Separate Var(dump_dir_name)
-dumpdir <dir>	Set the directory name to be used for dumps.

dumpmachine
Driver

dumpspecs
Driver

dumpversion
Driver

dumpfullversion
Driver

e
Driver Joined Separate

; This option has historically been passed down to the linker by an
; accident of a %{e*} spec, so ensure it continues to be passed down
; as a single option.  The supported option for this purpose is
; -rdynamic.  See PR 47390.
export-dynamic
Driver Undocumented

; The version of the C++ ABI in use.  The following values are allowed:
;
; 0: The version of the ABI believed most conformant with the C++ ABI
;    specification.  This ABI may change as bugs are discovered and fixed.
;    Therefore, 0 will not necessarily indicate the same ABI in different
;    versions of G++.
;
; 1: The version of the ABI first used in G++ 3.2.  No longer selectable.
;
; 2: The version of the ABI first used in G++ 3.4, and the default
;    until GCC 4.9.
;
; 3: The version of the ABI that fixes the missing underscore
;    in template non-type arguments of pointer type.
;
; 4: The version of the ABI that introduces unambiguous mangling of
;    vector types.  First selectable in G++ 4.5.
;
; 5: The version of the ABI that ignores attribute const/noreturn
;    in function pointer mangling, and corrects mangling of decltype and
;    function parameters used in other parameters and the return type.
;    First selectable in G++ 4.6.
;
; 6: The version of the ABI that doesn't promote scoped enums to int and
;    changes the mangling of template argument packs, const/static_cast,
;    prefix ++ and --, and a class scope function used as a template
;    argument.
;    First selectable in G++ 4.7.
;
; 7: The version of the ABI that treats nullptr_t as a builtin type and
;    corrects the mangling of lambdas in default argument scope.
;    First selectable in G++ 4.8.
;
; 8: The version of the ABI that corrects the substitution behavior of
;    function types with function-cv-qualifiers.
;    First selectable in G++ 4.9 and default in G++ 5.
;
; 9: The version of the ABI that corrects the alignment of nullptr_t.
;    First selectable and default in G++ 5.2.
;
; 10: The version of the ABI that mangles attributes that affect type
;     identity, such as ia32 calling convention attributes (stdcall, etc.)
;     Default in G++ 6 (set in c_common_post_options).
;
; 11: The version of the ABI that corrects mangling of sizeof... expressions
;     and introduces new inheriting constructor handling.
;     Default in G++ 7.
;
; 12: Corrects the calling convention for classes with only deleted copy/move
;     constructors and changes passing/returning of empty records.
;     Default in G++ 8.
;
; Additional positive integers will be assigned as new versions of
; the ABI become the default version of the ABI.
fabi-version=
Common Joined RejectNegative UInteger Var(flag_abi_version) Init(0)
The version of the C++ ABI in use.

faggressive-loop-optimizations
Common Report Var(flag_aggressive_loop_optimizations) Optimization Init(1)
Aggressively optimize loops using language constraints.

falign-functions
Common Report Var(align_functions,0) Optimization UInteger
Align the start of functions.

falign-functions=
Common RejectNegative Joined UInteger Var(align_functions)

flimit-function-alignment
Common Report Var(flag_limit_function_alignment) Optimization Init(0)

falign-jumps
Common Report Var(align_jumps,0) Optimization UInteger
Align labels which are only reached by jumping.

falign-jumps=
Common RejectNegative Joined UInteger Var(align_jumps)

falign-labels
Common Report Var(align_labels,0) Optimization UInteger
Align all labels.

falign-labels=
Common RejectNegative Joined UInteger Var(align_labels)

falign-loops
Common Report Var(align_loops,0) Optimization UInteger
Align the start of loops.

falign-loops=
Common RejectNegative Joined UInteger Var(align_loops)

fargument-alias
Common Ignore
Does nothing. Preserved for backward compatibility.

fargument-noalias
Common Ignore
Does nothing. Preserved for backward compatibility.

fargument-noalias-global
Common Ignore
Does nothing. Preserved for backward compatibility.

fargument-noalias-anything
Common Ignore
Does nothing. Preserved for backward compatibility.

fsanitize=
Common Driver Report Joined
Select what to sanitize.

fsanitize-coverage=
Common Report Joined
Select what to coverage sanitize.

fasan-shadow-offset=
Common Joined RejectNegative Var(common_deferred_options) Defer
-fasan-shadow-offset=<number>	Use custom shadow memory offset.

fsanitize-sections=
Common Joined RejectNegative Var(common_deferred_options) Defer
-fsanitize-sections=<sec1,sec2,...>	Sanitize global variables
in user-defined sections.

fsanitize-recover=
Common Report Joined
After diagnosing undefined behavior attempt to continue execution.

fsanitize-recover
Common Report
This switch is deprecated; use -fsanitize-recover= instead.

fsanitize-address-use-after-scope
Common Driver Report Var(flag_sanitize_address_use_after_scope) Init(0)

fsanitize-undefined-trap-on-error
Common Driver Report Var(flag_sanitize_undefined_trap_on_error) Init(0)
Use trap instead of a library function for undefined behavior sanitization.

fasynchronous-unwind-tables
Common Report Var(flag_asynchronous_unwind_tables) Optimization
Generate unwind tables that are exact at each instruction boundary.

fauto-inc-dec
Common Report Var(flag_auto_inc_dec) Init(1) Optimization
Generate auto-inc/dec instructions.

fauto-profile
Common Report Var(flag_auto_profile)
Use sample profile information for call graph node weights. The default
profile file is fbdata.afdo in 'pwd'.

fauto-profile=
Common Joined RejectNegative Var(auto_profile_file)
Use sample profile information for call graph node weights. The profile
file is specified in the argument.

; -fcheck-bounds causes gcc to generate array bounds checks.
; For C, C++ and ObjC: defaults off.
; For Java: defaults to on.
; For Fortran: defaults to off.
fbounds-check
Common Report Var(flag_bounds_check)
Generate code to check bounds before indexing arrays.

fbranch-count-reg
Common Report Var(flag_branch_on_count_reg) Optimization
Replace add, compare, branch with branch on count register.

fbranch-probabilities
Common Report Var(flag_branch_probabilities) Optimization
Use profiling information for branch probabilities.

fbranch-target-load-optimize
Common Report Var(flag_branch_target_load_optimize) Optimization
Perform branch target load optimization before prologue / epilogue threading.

fbranch-target-load-optimize2
Common Report Var(flag_branch_target_load_optimize2) Optimization
Perform branch target load optimization after prologue / epilogue threading.

fbtr-bb-exclusive
Common Report Var(flag_btr_bb_exclusive) Optimization
Restrict target load migration not to re-use registers in any basic block.

fcall-saved-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fcall-saved-<register>	Mark <register> as being preserved across functions.

fcall-used-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fcall-used-<register>	Mark <register> as being corrupted by function calls.

; Nonzero for -fcaller-saves: allocate values in regs that need to
; be saved across function calls, if that produces overall better code.
; Optional now, so people can test it.
fcaller-saves
Common Report Var(flag_caller_saves) Optimization
Save registers around function calls.

fcheck-data-deps
Common Report Var(flag_check_data_deps)
This switch is deprecated; do not use.

fcheck-new
Common Var(flag_check_new)
Check the return value of new in C++.

fchecking
Common Var(flag_checking) Init(CHECKING_P ? ENABLE_EXTRA_CHECKING ? 2 : 1 : 0)
Perform internal consistency checkings.

fchecking=
Common Joined RejectNegative UInteger Var(flag_checking)
Perform internal consistency checkings.

fcode-hoisting
Common Report Var(flag_code_hoisting) Optimization
Enable code hoisting.

fcombine-stack-adjustments
Common Report Var(flag_combine_stack_adjustments) Optimization
Looks for opportunities to reduce stack adjustments and stack references.

fcommon
Common Report Var(flag_no_common,0)
Do not put uninitialized globals in the common section.

fcompare-debug
Driver
; Converted by the driver to -fcompare-debug= options.

fcompare-debug=
Common Driver JoinedOrMissing RejectNegative Var(flag_compare_debug_opt)
-fcompare-debug[=<opts>]	Compile with and without e.g. -gtoggle, and compare the final-insns dump.

fcompare-debug-second
Common Driver RejectNegative Var(flag_compare_debug)
Run only the second compilation of -fcompare-debug.

fcompare-elim
Common Report Var(flag_compare_elim_after_reload) Optimization
Perform comparison elimination after register allocation has finished.

fconserve-stack
Common Var(flag_conserve_stack) Optimization
Do not perform optimizations increasing noticeably stack usage.

fcprop-registers
Common Report Var(flag_cprop_registers) Optimization
Perform a register copy-propagation optimization pass.

fcrossjumping
Common Report Var(flag_crossjumping) Optimization
Perform cross-jumping optimization.

fcse-follow-jumps
Common Report Var(flag_cse_follow_jumps) Optimization
When running CSE, follow jumps to their targets.

fcse-skip-blocks
Common Ignore
Does nothing.  Preserved for backward compatibility.

fcx-limited-range
Common Report Var(flag_cx_limited_range) Optimization SetByCombined
Omit range reduction step when performing complex division.

fcx-fortran-rules
Common Report Var(flag_cx_fortran_rules) Optimization
Complex multiplication and division follow Fortran rules.

fdata-sections
Common Report Var(flag_data_sections)
Place data items into their own section.

fdbg-cnt-list
Common Report Var(common_deferred_options) Defer
List all available debugging counters with their limits and counts.

fdbg-cnt=
Common RejectNegative Joined Var(common_deferred_options) Defer
-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...]	Set the debug counter limit.

fdebug-prefix-map=
Common Joined RejectNegative Var(common_deferred_options) Defer
Map one directory name to another in debug information.

fdebug-types-section
Common Report Var(flag_debug_types_section) Init(0)
Output .debug_types section when using DWARF v4 debuginfo.

; Nonzero for -fdefer-pop: don't pop args after each function call
; instead save them up to pop many calls' args with one insns.
fdefer-pop
Common Report Var(flag_defer_pop) Optimization
Defer popping functions args from stack until later.

fdelayed-branch
Common Report Var(flag_delayed_branch) Optimization
Attempt to fill delay slots of branch instructions.

fdelete-dead-exceptions
Common Report Var(flag_delete_dead_exceptions) Init(0) Optimization
Delete dead instructions that may throw exceptions.

fdelete-null-pointer-checks
Common Report Var(flag_delete_null_pointer_checks) Init(-1) Optimization
Delete useless null pointer checks.

fdevirtualize-at-ltrans
Common Report Var(flag_ltrans_devirtualize)
Stream extra data to support more aggressive devirtualization in LTO local transformation mode.

fdevirtualize-speculatively
Common Report Var(flag_devirtualize_speculatively) Optimization
Perform speculative devirtualization.

fdevirtualize
Common Report Var(flag_devirtualize) Optimization
Try to convert virtual calls to direct ones.

fdiagnostics-show-location=
Common Joined RejectNegative Enum(diagnostic_prefixing_rule)
-fdiagnostics-show-location=[once|every-line]	How often to emit source location at the beginning of line-wrapped diagnostics.

; Required for these enum values.
SourceInclude
pretty-print.h

Enum
Name(diagnostic_prefixing_rule) Type(int)

EnumValue
Enum(diagnostic_prefixing_rule) String(once) Value(DIAGNOSTICS_SHOW_PREFIX_ONCE)

EnumValue
Enum(diagnostic_prefixing_rule) String(every-line) Value(DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE)

fdiagnostics-show-caret
Common Var(flag_diagnostics_show_caret) Init(1)
Show the source line with a caret indicating the column.

fdiagnostics-color
Common Alias(fdiagnostics-color=,always,never)
;

fdiagnostics-color=
Driver Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_NO)
-fdiagnostics-color=[never|always|auto]	Colorize diagnostics.

; Required for these enum values.
SourceInclude
diagnostic-color.h

Enum
Name(diagnostic_color_rule) Type(int)

EnumValue
Enum(diagnostic_color_rule) String(never) Value(DIAGNOSTICS_COLOR_NO)

EnumValue
Enum(diagnostic_color_rule) String(always) Value(DIAGNOSTICS_COLOR_YES)

EnumValue
Enum(diagnostic_color_rule) String(auto) Value(DIAGNOSTICS_COLOR_AUTO)

fdiagnostics-parseable-fixits
Common Var(flag_diagnostics_parseable_fixits)
Print fix-it hints in machine-readable form.

fdiagnostics-generate-patch
Common Var(flag_diagnostics_generate_patch)
Print fix-it hints to stderr in unified diff format.

fdiagnostics-show-option
Common Var(flag_diagnostics_show_option) Init(1)
Amend appropriate diagnostic messages with the command line option that controls them.

fdisable-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fdisable-[tree|rtl|ipa]-<pass>=range1+range2 disables an optimization pass.

fenable-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fenable-[tree|rtl|ipa]-<pass>=range1+range2 enables an optimization pass.

fdump-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fdump-<type>	Dump various compiler internals to a file.

fdump-final-insns
Driver RejectNegative

fdump-final-insns=
Common RejectNegative Joined Var(flag_dump_final_insns)
-fdump-final-insns=filename	Dump to filename the insns at the end of translation.

fdump-go-spec=
Common RejectNegative Joined Var(flag_dump_go_spec)
-fdump-go-spec=filename	Write all declarations to file as Go code.

fdump-noaddr
Common Report Var(flag_dump_noaddr)
Suppress output of addresses in debugging dumps.

freport-bug
Common Driver Var(flag_report_bug)
Collect and dump debug information into temporary file if ICE in C/C++
compiler occurred.

fdump-internal-locations
Common Var(flag_dump_locations) Init(0)
Dump detailed information on GCC's internal representation of source code locations.

fdump-passes
Common Var(flag_dump_passes) Init(0)
Dump optimization passes.

fdump-unnumbered
Common Report Var(flag_dump_unnumbered)
Suppress output of instruction numbers, line number notes and addresses in debugging dumps.

fdump-unnumbered-links
Common Report Var(flag_dump_unnumbered_links)
Suppress output of previous and next insn numbers in debugging dumps.

fdwarf2-cfi-asm
Common Report Var(flag_dwarf2_cfi_asm) Init(HAVE_GAS_CFI_DIRECTIVE)
Enable CFI tables via GAS assembler directives.

fearly-inlining
Common Report Var(flag_early_inlining) Init(1) Optimization
Perform early inlining.

feliminate-dwarf2-dups
Common Ignore
Does nothing.  Preserved for backward compatibility.

fipa-sra
Common Report Var(flag_ipa_sra) Init(0) Optimization
Perform interprocedural reduction of aggregates.

feliminate-unused-debug-symbols
Common Report Var(flag_debug_only_used_symbols)
Perform unused symbol elimination in debug info.

feliminate-unused-debug-types
Common Report Var(flag_eliminate_unused_debug_types) Init(1)
Perform unused type elimination in debug info.

femit-class-debug-always
Common Report Var(flag_emit_class_debug_always) Init(0)
Do not suppress C++ class debug information.

fexceptions
Common Report Var(flag_exceptions) Optimization
Enable exception handling.

fexpensive-optimizations
Common Report Var(flag_expensive_optimizations) Optimization
Perform a number of minor, expensive optimizations.

fexcess-precision=
Common Joined RejectNegative Enum(excess_precision) Var(flag_excess_precision_cmdline) Init(EXCESS_PRECISION_DEFAULT) SetByCombined
-fexcess-precision=[fast|standard]	Specify handling of excess floating-point precision.

Enum
Name(excess_precision) Type(enum excess_precision) UnknownError(unknown excess precision style %qs)

EnumValue
Enum(excess_precision) String(fast) Value(EXCESS_PRECISION_FAST)

EnumValue
Enum(excess_precision) String(standard) Value(EXCESS_PRECISION_STANDARD)

; Whether we permit the extended set of values for FLT_EVAL_METHOD
; introduced in ISO/IEC TS 18661-3, or limit ourselves to those in C99/C11.
fpermitted-flt-eval-methods=
Common Joined RejectNegative Enum(permitted_flt_eval_methods) Var(flag_permitted_flt_eval_methods) Init(PERMITTED_FLT_EVAL_METHODS_DEFAULT)
-fpermitted-flt-eval-methods=[c11|ts-18661]	Specify which values of FLT_EVAL_METHOD are permitted.

Enum
Name(permitted_flt_eval_methods) Type(enum permitted_flt_eval_methods) UnknownError(unknown specification for the set of FLT_EVAL_METHOD values to permit %qs)

EnumValue
Enum(permitted_flt_eval_methods) String(c11) Value(PERMITTED_FLT_EVAL_METHODS_C11)

EnumValue
Enum(permitted_flt_eval_methods) String(ts-18661-3) Value(PERMITTED_FLT_EVAL_METHODS_TS_18661)

ffast-math
Common Optimization

ffat-lto-objects
Common Var(flag_fat_lto_objects)
Output lto objects containing both the intermediate language and binary output.

ffinite-math-only
Common Report Var(flag_finite_math_only) Optimization SetByCombined
Assume no NaNs or infinities are generated.

ffixed-
Common Joined RejectNegative Var(common_deferred_options) Defer
-ffixed-<register>	Mark <register> as being unavailable to the compiler.

ffloat-store
Common Report Var(flag_float_store) Optimization
Don't allocate floats and doubles in extended-precision registers.

fforce-addr
Common Ignore
Does nothing.  Preserved for backward compatibility.

fforward-propagate
Common Report Var(flag_forward_propagate) Optimization
Perform a forward propagation pass on RTL.

ffp-contract=
Common Joined RejectNegative Enum(fp_contract_mode) Var(flag_fp_contract_mode) Init(FP_CONTRACT_FAST) Optimization
-ffp-contract=[off|on|fast]	Perform floating-point expression contraction.

Enum
Name(fp_contract_mode) Type(enum fp_contract_mode) UnknownError(unknown floating point contraction style %qs)

EnumValue
Enum(fp_contract_mode) String(off) Value(FP_CONTRACT_OFF)

; Not implemented, fall back to conservative FP_CONTRACT_OFF.
EnumValue
Enum(fp_contract_mode) String(on) Value(FP_CONTRACT_OFF)

EnumValue
Enum(fp_contract_mode) String(fast) Value(FP_CONTRACT_FAST)

ffp-int-builtin-inexact
Common Report Var(flag_fp_int_builtin_inexact) Init(1) Optimization
Allow built-in functions ceil, floor, round, trunc to raise \"inexact\" exceptions.

; Nonzero means don't put addresses of constant functions in registers.
; Used for compiling the Unix kernel, where strange substitutions are
; done on the assembly output.
ffunction-cse
Common Report Var(flag_no_function_cse,0) Optimization
Allow function addresses to be held in registers.

ffunction-sections
Common Report Var(flag_function_sections)
Place each function into its own section.

fgcse
Common Report Var(flag_gcse) Optimization
Perform global common subexpression elimination.

fgcse-lm
Common Report Var(flag_gcse_lm) Init(1) Optimization
Perform enhanced load motion during global common subexpression elimination.

fgcse-sm
Common Report Var(flag_gcse_sm) Init(0) Optimization
Perform store motion after global common subexpression elimination.

fgcse-las
Common Report Var(flag_gcse_las) Init(0) Optimization
Perform redundant load after store elimination in global common subexpression
elimination.

fgcse-after-reload
Common Report Var(flag_gcse_after_reload) Optimization
Perform global common subexpression elimination after register allocation has
finished.

Enum
Name(dwarf_gnat_encodings) Type(int)

EnumValue
Enum(dwarf_gnat_encodings) String(all) Value(DWARF_GNAT_ENCODINGS_ALL)

EnumValue
Enum(dwarf_gnat_encodings) String(gdb) Value(DWARF_GNAT_ENCODINGS_GDB)

EnumValue
Enum(dwarf_gnat_encodings) String(minimal) Value(DWARF_GNAT_ENCODINGS_MINIMAL)

fgnat-encodings=
Common Enum(dwarf_gnat_encodings) Joined RejectNegative Report Undocumented Var(gnat_encodings)
-fgnat-encodings=[all|gdb|minimal]	Select the balance between GNAT encodings and standard DWARF emitted in the debug information

; This option is not documented yet as its semantics will change.
fgraphite
Common Report Var(flag_graphite) Optimization
Enable in and out of Graphite representation.

fgraphite-identity
Common Report Var(flag_graphite_identity) Optimization
Enable Graphite Identity transformation.

fhoist-adjacent-loads
Common Report Var(flag_hoist_adjacent_loads) Optimization
Enable hoisting adjacent loads to encourage generating conditional move
instructions.

fkeep-gc-roots-live
Common Undocumented Report Var(flag_keep_gc_roots_live) Optimization
; Always keep a pointer to a live memory block

floop-parallelize-all
Common Report Var(flag_loop_parallelize_all) Optimization
Mark all loops as parallel.

floop-strip-mine
Common Alias(floop-nest-optimize)
Enable loop nest transforms.  Same as -floop-nest-optimize.

floop-interchange
Common Report Var(flag_loop_interchange) Optimization
Enable loop interchange on trees.

floop-block
Common Alias(floop-nest-optimize)
Enable loop nest transforms.  Same as -floop-nest-optimize.

floop-unroll-and-jam
Common Alias(floop-nest-optimize)
Enable loop nest transforms.  Same as -floop-nest-optimize.

fgnu-tm
Common Report Var(flag_tm)
Enable support for GNU transactional memory.

fgnu-unique
Common Report Var(flag_gnu_unique) Init(1)
Use STB_GNU_UNIQUE if supported by the assembler.

floop-flatten
Common Ignore
Does nothing. Preserved for backward compatibility.

floop-nest-optimize
Common Report Var(flag_loop_nest_optimize) Optimization
Enable the loop nest optimizer.

fstrict-volatile-bitfields
Common Report Var(flag_strict_volatile_bitfields) Init(-1) Optimization
Force bitfield accesses to match their type width.

fstore-merging
Common Report Var(flag_store_merging) Optimization
Merge adjacent stores.

fguess-branch-probability
Common Report Var(flag_guess_branch_prob) Optimization
Enable guessing of branch probabilities.

; Nonzero means ignore `#ident' directives.  0 means handle them.
; Generate position-independent code for executables if possible
; On SVR4 targets, it also controls whether or not to emit a
; string identifying the compiler.
fident
Common Report Var(flag_no_ident,0)
Process #ident directives.

fif-conversion
Common Report Var(flag_if_conversion) Optimization
Perform conversion of conditional jumps to branchless equivalents.

fif-conversion2
Common Report Var(flag_if_conversion2) Optimization
Perform conversion of conditional jumps to conditional execution.

fstack-reuse=
Common Joined RejectNegative Enum(stack_reuse_level) Var(flag_stack_reuse) Init(SR_ALL) Optimization
-fstack-reuse=[all|named_vars|none]	Set stack reuse level for local variables.

Enum
Name(stack_reuse_level) Type(enum stack_reuse_level) UnknownError(unknown Stack Reuse Level %qs)

EnumValue
Enum(stack_reuse_level) String(all) Value(SR_ALL)

EnumValue
Enum(stack_reuse_level) String(named_vars) Value(SR_NAMED_VARS)

EnumValue
Enum(stack_reuse_level) String(none) Value(SR_NONE)

ftree-loop-if-convert
Common Report Var(flag_tree_loop_if_convert) Init(-1) Optimization
Convert conditional jumps in innermost loops to branchless equivalents.

ftree-loop-if-convert-stores
Common Ignore
Does nothing. Preserved for backward compatibility.

; -finhibit-size-directive inhibits output of .size for ELF.
; This is used only for compiling crtstuff.c,
; and it may be extended to other effects
; needed for crtstuff.c on other systems.
finhibit-size-directive
Common Report Var(flag_inhibit_size_directive)
Do not generate .size directives.

findirect-inlining
Common Report Var(flag_indirect_inlining) Optimization
Perform indirect inlining.

; General flag to enable inlining.  Specifying -fno-inline will disable
; all inlining apart from always-inline functions.
finline
Common Report Var(flag_no_inline,0) Init(0) Optimization
Enable inlining of function declared \"inline\", disabling disables all inlining.

finline-small-functions
Common Report Var(flag_inline_small_functions) Optimization
Integrate functions into their callers when code size is known not to grow.

finline-functions
Common Report Var(flag_inline_functions) Optimization
Integrate functions not declared \"inline\" into their callers when profitable.

finline-functions-called-once
Common Report Var(flag_inline_functions_called_once) Optimization
Integrate functions only required by their single caller.

finline-limit-
Common RejectNegative Joined Alias(finline-limit=)

finline-limit=
Common RejectNegative Joined UInteger
-finline-limit=<number>	Limit the size of inlined functions to <number>.

finline-atomics
Common Report Var(flag_inline_atomics) Init(1) Optimization
Inline __atomic operations when a lock free instruction sequence is available.

fcf-protection
Common RejectNegative Alias(fcf-protection=,full)

fcf-protection=
Common Report Joined RejectNegative Enum(cf_protection_level) Var(flag_cf_protection) Init(CF_NONE)
-fcf-protection=[full|branch|return|none]	Instrument functions with checks to verify jump/call/return control-flow transfer
instructions have valid targets.

Enum
Name(cf_protection_level) Type(enum cf_protection_level) UnknownError(unknown Cotrol-Flow Protection Level %qs)

EnumValue
Enum(cf_protection_level) String(full) Value(CF_FULL)

EnumValue
Enum(cf_protection_level) String(branch) Value(CF_BRANCH)

EnumValue
Enum(cf_protection_level) String(return) Value(CF_RETURN)

EnumValue
Enum(cf_protection_level) String(none) Value(CF_NONE)

finstrument-functions
Common Report Var(flag_instrument_function_entry_exit)
Instrument function entry and exit with profiling calls.

finstrument-functions-exclude-function-list=
Common RejectNegative Joined
-finstrument-functions-exclude-function-list=name,...  Do not instrument listed functions.

finstrument-functions-exclude-file-list=
Common RejectNegative Joined
-finstrument-functions-exclude-file-list=filename,...  Do not instrument functions listed in files.

fipa-cp
Common Report Var(flag_ipa_cp) Optimization
Perform interprocedural constant propagation.

fipa-cp-clone
Common Report Var(flag_ipa_cp_clone) Optimization
Perform cloning to make Interprocedural constant propagation stronger.

fipa-cp-alignment
Common Ignore
Does nothing.  Preserved for backward compatibility.

fipa-bit-cp
Common Report Var(flag_ipa_bit_cp) Optimization
Perform interprocedural bitwise constant propagation.

fipa-profile
Common Report Var(flag_ipa_profile) Init(0) Optimization
Perform interprocedural profile propagation.

fipa-pta
Common Report Var(flag_ipa_pta) Init(0) Optimization
Perform interprocedural points-to analysis.

fipa-pure-const
Common Report Var(flag_ipa_pure_const) Init(0) Optimization
Discover pure and const functions.

fipa-icf
Common Report Var(flag_ipa_icf) Optimization
Perform Identical Code Folding for functions and read-only variables.

fipa-icf-functions
Common Report Var(flag_ipa_icf_functions) Optimization
Perform Identical Code Folding for functions.

fipa-icf-variables
Common Report Var(flag_ipa_icf_variables) Optimization
Perform Identical Code Folding for variables.

fipa-reference
Common Report Var(flag_ipa_reference) Init(0) Optimization
Discover readonly and non addressable static variables.

fipa-matrix-reorg
Common Ignore
Does nothing. Preserved for backward compatibility.

fipa-struct-reorg
Common Ignore
Does nothing. Preserved for backward compatibility.

fipa-vrp
Common Report Var(flag_ipa_vrp) Optimization
Perform IPA Value Range Propagation.

fira-algorithm=
Common Joined RejectNegative Enum(ira_algorithm) Var(flag_ira_algorithm) Init(IRA_ALGORITHM_CB) Optimization
-fira-algorithm=[CB|priority]	Set the used IRA algorithm.

Enum
Name(ira_algorithm) Type(enum ira_algorithm) UnknownError(unknown IRA algorithm %qs)

EnumValue
Enum(ira_algorithm) String(CB) Value(IRA_ALGORITHM_CB)

EnumValue
Enum(ira_algorithm) String(priority) Value(IRA_ALGORITHM_PRIORITY)

fira-region=
Common Joined RejectNegative Enum(ira_region) Var(flag_ira_region) Init(IRA_REGION_AUTODETECT) Optimization
-fira-region=[one|all|mixed]	Set regions for IRA.

Enum
Name(ira_region) Type(enum ira_region) UnknownError(unknown IRA region %qs)

EnumValue
Enum(ira_region) String(one) Value(IRA_REGION_ONE)

EnumValue
Enum(ira_region) String(all) Value(IRA_REGION_ALL)

EnumValue
Enum(ira_region) String(mixed) Value(IRA_REGION_MIXED)

fira-hoist-pressure
Common Report Var(flag_ira_hoist_pressure) Init(1) Optimization
Use IRA based register pressure calculation
in RTL hoist optimizations.

fira-loop-pressure
Common Report Var(flag_ira_loop_pressure) Optimization
Use IRA based register pressure calculation
in RTL loop optimizations.

fira-share-save-slots
Common Report Var(flag_ira_share_save_slots) Init(1) Optimization
Share slots for saving different hard registers.

fira-share-spill-slots
Common Report Var(flag_ira_share_spill_slots) Init(1) Optimization
Share stack slots for spilled pseudo-registers.

fira-verbose=
Common RejectNegative Joined UInteger Var(flag_ira_verbose) Init(5)
-fira-verbose=<number>	Control IRA's level of diagnostic messages.

fivopts
Common Report Var(flag_ivopts) Init(1) Optimization
Optimize induction variables on trees.

fjump-tables
Common Var(flag_jump_tables) Init(1) Optimization
Use jump tables for sufficiently large switch statements.

fkeep-inline-functions
Common Report Var(flag_keep_inline_functions)
Generate code for functions even if they are fully inlined.

fkeep-static-functions
Common Report Var(flag_keep_static_functions)
Generate code for static functions even if they are never called.

fkeep-static-consts
Common Report Var(flag_keep_static_consts) Init(1)
Emit static const variables even if they are not used.

fleading-underscore
Common Report Var(flag_leading_underscore) Init(-1)
Give external symbols a leading underscore.

floop-optimize
Common Ignore
Does nothing.  Preserved for backward compatibility.

flra-remat
Common Report Var(flag_lra_remat) Optimization
Do CFG-sensitive rematerialization in LRA.

flto
Common
Enable link-time optimization.

flto=
Common RejectNegative Joined Var(flag_lto)
Link-time optimization with number of parallel jobs or jobserver.

Enum
Name(lto_partition_model) Type(enum lto_partition_model) UnknownError(unknown LTO partitioning model %qs)

EnumValue
Enum(lto_partition_model) String(none) Value(LTO_PARTITION_NONE)

EnumValue
Enum(lto_partition_model) String(one) Value(LTO_PARTITION_ONE)

EnumValue
Enum(lto_partition_model) String(balanced) Value(LTO_PARTITION_BALANCED)

EnumValue
Enum(lto_partition_model) String(1to1) Value(LTO_PARTITION_1TO1)

EnumValue
Enum(lto_partition_model) String(max) Value(LTO_PARTITION_MAX)

flto-partition=
Common Joined RejectNegative Enum(lto_partition_model) Var(flag_lto_partition) Init(LTO_PARTITION_BALANCED)
Specify the algorithm to partition symbols and vars at linktime.

; The initial value of -1 comes from Z_DEFAULT_COMPRESSION in zlib.h.
flto-compression-level=
Common Joined RejectNegative UInteger Var(flag_lto_compression_level) Init(-1) IntegerRange(0, 9)
-flto-compression-level=<number>	Use zlib compression level <number> for IL.

flto-odr-type-merging
Common Report Var(flag_lto_odr_type_mering) Init(1)
Merge C++ types using One Definition Rule.

flto-report
Common Report Var(flag_lto_report) Init(0)
Report various link-time optimization statistics.

flto-report-wpa
Common Report Var(flag_lto_report_wpa) Init(0)
Report various link-time optimization statistics for WPA only.

fmath-errno
Common Report Var(flag_errno_math) Init(1) Optimization SetByCombined
Set errno after built-in math functions.

fmax-errors=
Common Joined RejectNegative UInteger Var(flag_max_errors)
-fmax-errors=<number>	Maximum number of errors to report.

fmem-report
Common Report Var(mem_report)
Report on permanent memory allocation.

fmem-report-wpa
Common Report Var(mem_report_wpa)
Report on permanent memory allocation in WPA only.

; This will attempt to merge constant section constants, if 1 only
; string constants and constants from constant pool, if 2 also constant
; variables.
fmerge-all-constants
Common Report Var(flag_merge_constants,2) Init(1)
Attempt to merge identical constants and constant variables.

fmerge-constants
Common Report Var(flag_merge_constants,1)
Attempt to merge identical constants across compilation units.

fmerge-debug-strings
Common Report Var(flag_merge_debug_strings) Init(1)
Attempt to merge identical debug strings across compilation units.

fmessage-length=
Common RejectNegative Joined UInteger
-fmessage-length=<number>	Limit diagnostics to <number> characters per line.  0 suppresses line-wrapping.

fmodulo-sched
Common Report Var(flag_modulo_sched) Optimization
Perform SMS based modulo scheduling before the first scheduling pass.

fmodulo-sched-allow-regmoves
Common Report Var(flag_modulo_sched_allow_regmoves) Optimization
Perform SMS based modulo scheduling with register moves allowed.

fmove-loop-invariants
Common Report Var(flag_move_loop_invariants) Optimization
Move loop invariant computations out of loops.

fdce
Common Var(flag_dce) Init(1) Optimization
Use the RTL dead code elimination pass.

fdse
Common Var(flag_dse) Init(1) Optimization
Use the RTL dead store elimination pass.

freschedule-modulo-scheduled-loops
Common Report Var(flag_resched_modulo_sched) Optimization
Enable/Disable the traditional scheduling in loops that already passed modulo scheduling.

fnon-call-exceptions
Common Report Var(flag_non_call_exceptions) Optimization
Support synchronous non-call exceptions.

foffload=
Common Driver Joined MissingArgError(options or targets missing after %qs)
-foffload=<targets>=<options>  Specify offloading targets and options for them.

foffload-abi=
Common Joined RejectNegative Enum(offload_abi) Var(flag_offload_abi) Init(OFFLOAD_ABI_UNSET)
-foffload-abi=[lp64|ilp32]     Set the ABI to use in an offload compiler.

Enum
Name(offload_abi) Type(enum offload_abi) UnknownError(unknown offload ABI %qs)

EnumValue
Enum(offload_abi) String(ilp32) Value(OFFLOAD_ABI_ILP32)

EnumValue
Enum(offload_abi) String(lp64) Value(OFFLOAD_ABI_LP64)

fomit-frame-pointer
Common Report Var(flag_omit_frame_pointer) Optimization
When possible do not generate stack frames.

fopt-info
Common Report Var(flag_opt_info) Optimization
Enable all optimization info dumps on stderr.

fopt-info-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fopt-info[-<type>=filename]	Dump compiler optimization details.

foptimize-register-move
Common Ignore
Does nothing. Preserved for backward compatibility.

foptimize-sibling-calls
Common Report Var(flag_optimize_sibling_calls) Optimization
Optimize sibling and tail recursive calls.

fpartial-inlining
Common Report Var(flag_partial_inlining) Optimization
Perform partial inlining.

fpre-ipa-mem-report
Common Report Var(pre_ipa_mem_report)
Report on memory allocation before interprocedural optimization.

fpost-ipa-mem-report
Common Report Var(post_ipa_mem_report)
Report on memory allocation before interprocedural optimization.

fpack-struct
Common Report Var(flag_pack_struct) Optimization
Pack structure members together without holes.

fpack-struct=
Common RejectNegative Joined UInteger Optimization
-fpack-struct=<number>	Set initial maximum structure member alignment.

fpcc-struct-return
Common Report Var(flag_pcc_struct_return,1) Init(DEFAULT_PCC_STRUCT_RETURN)
Return small aggregates in memory, not registers.

fpeel-loops
Common Report Var(flag_peel_loops) Optimization
Perform loop peeling.

fpeephole
Common Report Var(flag_no_peephole,0) Optimization
Enable machine specific peephole optimizations.

fpeephole2
Common Report Var(flag_peephole2) Optimization
Enable an RTL peephole pass before sched2.

fPIC
Common Report Var(flag_pic,2) Negative(fPIE) Init(-1)
Generate position-independent code if possible (large mode).

fPIE
Common Report Var(flag_pie,2) Negative(fpic) Init(-1)
Generate position-independent code for executables if possible (large mode).

fpic
Common Report Var(flag_pic,1) Negative(fpie) Init(-1)
Generate position-independent code if possible (small mode).

fpie
Common Report Var(flag_pie,1) Negative(fPIC) Init(-1)
Generate position-independent code for executables if possible (small mode).

fplt
Common Report Var(flag_plt) Init(1) Optimization
Use PLT for PIC calls (-fno-plt: load the address from GOT at call site).

fplugin=
Common Joined RejectNegative Var(common_deferred_options) Defer
Specify a plugin to load.

fplugin-arg-
Common Joined RejectNegative Var(common_deferred_options) Defer
-fplugin-arg-<name>-<key>[=<value>]	Specify argument <key>=<value> for plugin <name>.

fpredictive-commoning
Common Report Var(flag_predictive_commoning) Optimization
Run predictive commoning optimization.

fprefetch-loop-arrays
Common Report Var(flag_prefetch_loop_arrays) Init(-1) Optimization
Generate prefetch instructions, if available, for arrays in loops.

fprofile
Common Report Var(profile_flag)
Enable basic program profiling code.

fprofile-abs-path
Common Report Var(profile_abs_path_flag)
Generate absolute source path names for gcov.

fprofile-arcs
Common Report Var(profile_arc_flag)
Insert arc-based program profiling code.

fprofile-dir=
Common Joined RejectNegative Var(profile_data_prefix)
Set the top-level directory for storing the profile data.
The default is 'pwd'.

fprofile-correction
Common Report Var(flag_profile_correction)
Enable correction of flow inconsistent profile data input.

fprofile-update=
Common Joined RejectNegative Enum(profile_update) Var(flag_profile_update) Init(PROFILE_UPDATE_SINGLE)
-fprofile-update=[single|atomic|prefer-atomic]	Set the profile update method.

Enum
Name(profile_update) Type(enum profile_update) UnknownError(unknown profile update method %qs)

EnumValue
Enum(profile_update) String(single) Value(PROFILE_UPDATE_SINGLE)

EnumValue
Enum(profile_update) String(atomic) Value(PROFILE_UPDATE_ATOMIC)

EnumValue
Enum(profile_update) String(prefer-atomic) Value(PROFILE_UPDATE_PREFER_ATOMIC)

fprofile-generate
Common
Enable common options for generating profile info for profile feedback directed optimizations.

fprofile-generate=
Common Joined RejectNegative
Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir=.

fprofile-use
Common Var(flag_profile_use)
Enable common options for performing profile feedback directed optimizations.

fprofile-use=
Common Joined RejectNegative
Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir=.

fprofile-values
Common Report Var(flag_profile_values)
Insert code to profile values of expressions.

fprofile-report
Common Report Var(profile_report)
Report on consistency of profile.

fprofile-reorder-functions
Common Report Var(flag_profile_reorder_functions)
Enable function reordering that improves code placement.

fpatchable-function-entry=
Common Joined Optimization
Insert NOP instructions at each function entry.

frandom-seed
Common Var(common_deferred_options) Defer

frandom-seed=
Common Joined RejectNegative Var(common_deferred_options) Defer
-frandom-seed=<string>	Make compile reproducible using <string>.

; This switch causes the command line that was used to create an
; object file to be recorded into the object file.  The exact format
; of this recording is target and binary file format dependent.
; It is related to the -fverbose-asm switch, but that switch only
; records information in the assembler output file as comments, so
; they never reach the object file.
frecord-gcc-switches
Common Report Var(flag_record_gcc_switches)
Record gcc command line switches in the object file.

freg-struct-return
Common Report Var(flag_pcc_struct_return,0) Optimization
Return small aggregates in registers.

fregmove
Common Ignore
Does nothing. Preserved for backward compatibility.

flifetime-dse
Common Report Var(flag_lifetime_dse,2) Init(2) Optimization
Tell DSE that the storage for a C++ object is dead when the constructor
starts and when the destructor finishes.

flifetime-dse=
Common Joined RejectNegative UInteger Var(flag_lifetime_dse) Optimization IntegerRange(0, 2)

flive-range-shrinkage
Common Report Var(flag_live_range_shrinkage) Init(0) Optimization
Relief of register pressure through live range shrinkage.

frename-registers
Common Report Var(flag_rename_registers) Init(2) Optimization
Perform a register renaming optimization pass.

fschedule-fusion
Common Report Var(flag_schedule_fusion) Init(2) Optimization
Perform a target dependent instruction fusion optimization pass.

freorder-blocks
Common Report Var(flag_reorder_blocks) Optimization
Reorder basic blocks to improve code placement.

freorder-blocks-algorithm=
Common Joined RejectNegative Enum(reorder_blocks_algorithm) Var(flag_reorder_blocks_algorithm) Init(REORDER_BLOCKS_ALGORITHM_SIMPLE) Optimization
-freorder-blocks-algorithm=[simple|stc]	Set the used basic block reordering algorithm.

Enum
Name(reorder_blocks_algorithm) Type(enum reorder_blocks_algorithm) UnknownError(unknown basic block reordering algorithm %qs)

EnumValue
Enum(reorder_blocks_algorithm) String(simple) Value(REORDER_BLOCKS_ALGORITHM_SIMPLE)

EnumValue
Enum(reorder_blocks_algorithm) String(stc) Value(REORDER_BLOCKS_ALGORITHM_STC)

freorder-blocks-and-partition
Common Report Var(flag_reorder_blocks_and_partition) Optimization
Reorder basic blocks and partition into hot and cold sections.

freorder-functions
Common Report Var(flag_reorder_functions) Optimization
Reorder functions to improve code placement.

frerun-cse-after-loop
Common Report Var(flag_rerun_cse_after_loop) Optimization
Add a common subexpression elimination pass after loop optimizations.

frerun-loop-opt
Common Ignore
Does nothing.  Preserved for backward compatibility.

frounding-math
Common Report Var(flag_rounding_math) Optimization SetByCombined
Disable optimizations that assume default FP rounding behavior.

fsched-interblock
Common Report Var(flag_schedule_interblock) Init(1) Optimization
Enable scheduling across basic blocks.

fsched-pressure
Common Report Var(flag_sched_pressure) Init(0) Optimization
Enable register pressure sensitive insn scheduling.

fsched-spec
Common Report Var(flag_schedule_speculative) Init(1) Optimization
Allow speculative motion of non-loads.

fsched-spec-load
Common Report Var(flag_schedule_speculative_load) Optimization
Allow speculative motion of some loads.

fsched-spec-load-dangerous
Common Report Var(flag_schedule_speculative_load_dangerous) Optimization
Allow speculative motion of more loads.

fsched-verbose=
Common RejectNegative Joined UInteger Var(sched_verbose_param) Init(1)
-fsched-verbose=<number>	Set the verbosity level of the scheduler.

fsched2-use-superblocks
Common Report Var(flag_sched2_use_superblocks) Optimization
If scheduling post reload, do superblock scheduling.

fsched2-use-traces
Common Ignore
Does nothing.  Preserved for backward compatibility.

fschedule-insns
Common Report Var(flag_schedule_insns) Optimization
Reschedule instructions before register allocation.

fschedule-insns2
Common Report Var(flag_schedule_insns_after_reload) Optimization
Reschedule instructions after register allocation.

; This flag should be on when a target implements non-trivial
; scheduling hooks, maybe saving some information for its own sake.
; On IA64, for example, this is used for correct bundling.
fselective-scheduling
Common Report Var(flag_selective_scheduling) Optimization
Schedule instructions using selective scheduling algorithm.

fselective-scheduling2
Common Report Var(flag_selective_scheduling2) Optimization
Run selective scheduling after reload.

fself-test=
Common Undocumented Joined Var(flag_self_test)
Run self-tests, using the given path to locate test files.

fsel-sched-pipelining
Common Report Var(flag_sel_sched_pipelining) Init(0) Optimization
Perform software pipelining of inner loops during selective scheduling.

fsel-sched-pipelining-outer-loops
Common Report Var(flag_sel_sched_pipelining_outer_loops) Init(0) Optimization
Perform software pipelining of outer loops during selective scheduling.

fsel-sched-reschedule-pipelined
Common Report Var(flag_sel_sched_reschedule_pipelined) Init(0) Optimization
Reschedule pipelined regions without pipelining.

fsemantic-interposition
Common Report Var(flag_semantic_interposition) Init(1)
Allow interposing function (or variables) by ones with different semantics (or initializer) respectively by dynamic linker.

; sched_stalled_insns means that insns can be moved prematurely from the queue
; of stalled insns into the ready list.
fsched-stalled-insns
Common Report Var(flag_sched_stalled_insns) Optimization UInteger
Allow premature scheduling of queued insns.

fsched-stalled-insns=
Common RejectNegative Joined UInteger Optimization
-fsched-stalled-insns=<number>	Set number of queued insns that can be prematurely scheduled.

; sched_stalled_insns_dep controls how many recently scheduled cycles will
; be examined for a dependency on a stalled insn that is candidate for
; premature removal from the queue of stalled insns into the ready list (has
; an effect only if the flag 'sched_stalled_insns' is set).
fsched-stalled-insns-dep
Common Report Var(flag_sched_stalled_insns_dep,1) Init(1) Optimization UInteger
Set dependence distance checking in premature scheduling of queued insns.

fsched-stalled-insns-dep=
Common RejectNegative Joined UInteger Optimization
-fsched-stalled-insns-dep=<number>	Set dependence distance checking in premature scheduling of queued insns.

fsched-group-heuristic
Common Report Var(flag_sched_group_heuristic) Init(1) Optimization
Enable the group heuristic in the scheduler.

fsched-critical-path-heuristic
Common Report Var(flag_sched_critical_path_heuristic) Init(1) Optimization
Enable the critical path heuristic in the scheduler.

fsched-spec-insn-heuristic
Common Report Var(flag_sched_spec_insn_heuristic) Init(1) Optimization
Enable the speculative instruction heuristic in the scheduler.

fsched-rank-heuristic
Common Report Var(flag_sched_rank_heuristic) Init(1) Optimization
Enable the rank heuristic in the scheduler.

fsched-last-insn-heuristic
Common Report Var(flag_sched_last_insn_heuristic) Init(1) Optimization
Enable the last instruction heuristic in the scheduler.

fsched-dep-count-heuristic
Common Report Var(flag_sched_dep_count_heuristic) Init(1) Optimization
Enable the dependent count heuristic in the scheduler.

fsection-anchors
Common Report Var(flag_section_anchors) Optimization
Access data in the same section from shared anchor points.

fsee
Common Ignore
Does nothing.  Preserved for backward compatibility.

fzee
Common Ignore
Does nothing.  Preserved for backward compatibility.

free
Common Report Var(flag_ree) Init(0)
Turn on Redundant Extensions Elimination pass.

fshow-column
Common Report Var(flag_show_column) Init(1)
Show column numbers in diagnostics, when available.  Default on.

fshrink-wrap
Common Report Var(flag_shrink_wrap) Optimization
Emit function prologues only before parts of the function that need it,
rather than at the top of the function.

fshrink-wrap-separate
Common Report Var(flag_shrink_wrap_separate) Init(1) Optimization
Shrink-wrap parts of the prologue and epilogue separately.

fsignaling-nans
Common Report Var(flag_signaling_nans) Optimization SetByCombined
Disable optimizations observable by IEEE signaling NaNs.

fsigned-zeros
Common Report Var(flag_signed_zeros) Init(1) Optimization SetByCombined
Disable floating point optimizations that ignore the IEEE signedness of zero.

fsingle-precision-constant
Common Report Var(flag_single_precision_constant) Optimization
Convert floating point constants to single precision constants.

fsplit-ivs-in-unroller
Common Report Var(flag_split_ivs_in_unroller) Init(1) Optimization
Split lifetimes of induction variables when loops are unrolled.

fsplit-stack
Common Report Var(flag_split_stack) Init(-1)
Generate discontiguous stack frames.

fsplit-wide-types
Common Report Var(flag_split_wide_types) Optimization
Split wide types into independent registers.

fssa-backprop
Common Report Var(flag_ssa_backprop) Init(1) Optimization
Enable backward propagation of use properties at the SSA level.

fssa-phiopt
Common Report Var(flag_ssa_phiopt) Optimization
Optimize conditional patterns using SSA PHI nodes.

fstdarg-opt
Common Report Var(flag_stdarg_opt) Init(1) Optimization
Optimize amount of stdarg registers saved to stack at start of function.

fvariable-expansion-in-unroller
Common Report Var(flag_variable_expansion_in_unroller) Optimization
Apply variable expansion when loops are unrolled.

fstack-check=
Common Report RejectNegative Joined Optimization
-fstack-check=[no|generic|specific]	Insert stack checking code into the program.

fstack-check
Common Alias(fstack-check=, specific, no)
Insert stack checking code into the program.  Same as -fstack-check=specific.

fstack-clash-protection
Common Report Var(flag_stack_clash_protection) Optimization
Insert code to probe each page of stack space as it is allocated to protect
from stack-clash style attacks.

fstack-limit
Common Var(common_deferred_options) Defer

fstack-limit-register=
Common RejectNegative Joined Var(common_deferred_options) Defer
-fstack-limit-register=<register>	Trap if the stack goes past <register>.

fstack-limit-symbol=
Common RejectNegative Joined Var(common_deferred_options) Defer
-fstack-limit-symbol=<name>	Trap if the stack goes past symbol <name>.

fstack-protector
Common Report Var(flag_stack_protect, 1) Init(-1) Optimization
Use propolice as a stack protection method.

fstack-protector-all
Common Report RejectNegative Var(flag_stack_protect, 2) Init(-1) Optimization
Use a stack protection method for every function.

fstack-protector-strong
Common Report RejectNegative Var(flag_stack_protect, 3) Init(-1) Optimization
Use a smart stack protection method for certain functions.

fstack-protector-explicit
Common Report RejectNegative Var(flag_stack_protect, 4) Optimization
Use stack protection method only for functions with the stack_protect attribute.

fstack-usage
Common RejectNegative Var(flag_stack_usage)
Output stack usage information on a per-function basis.

fstrength-reduce
Common Ignore
Does nothing.  Preserved for backward compatibility.

; Nonzero if we should do (language-dependent) alias analysis.
; Typically, this analysis will assume that expressions of certain
; types do not alias expressions of certain other types.  Only used
; if alias analysis (in general) is enabled.
fstrict-aliasing
Common Report Var(flag_strict_aliasing) Optimization
Assume strict aliasing rules apply.

fstrict-overflow
Common NegativeAlias Alias(fwrapv)
Treat signed overflow as undefined.  Negated as -fwrapv.

fsync-libcalls
Common Report Var(flag_sync_libcalls) Init(1)
Implement __atomic operations via libcalls to legacy __sync functions.

fsyntax-only
Common Report Var(flag_syntax_only)
Check for syntax errors, then stop.

ftest-coverage
Common Report Var(flag_test_coverage)
Create data files needed by \"gcov\".

fthread-jumps
Common Report Var(flag_thread_jumps) Optimization
Perform jump threading optimizations.

ftime-report
Common Report Var(time_report)
Report the time taken by each compiler pass.

ftime-report-details
Common Report Var(time_report_details)
Record times taken by sub-phases separately.

ftls-model=
Common Joined RejectNegative Enum(tls_model) Var(flag_tls_default) Init(TLS_MODEL_GLOBAL_DYNAMIC)
-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]	Set the default thread-local storage code generation model.

Enum
Name(tls_model) Type(enum tls_model) UnknownError(unknown TLS model %qs)

EnumValue
Enum(tls_model) String(global-dynamic) Value(TLS_MODEL_GLOBAL_DYNAMIC)

EnumValue
Enum(tls_model) String(local-dynamic) Value(TLS_MODEL_LOCAL_DYNAMIC)

EnumValue
Enum(tls_model) String(initial-exec) Value(TLS_MODEL_INITIAL_EXEC)

EnumValue
Enum(tls_model) String(local-exec) Value(TLS_MODEL_LOCAL_EXEC)

ftoplevel-reorder
Common Report Var(flag_toplevel_reorder) Init(2)
Reorder top level functions, variables, and asms.

ftracer
Common Report Var(flag_tracer) Optimization
Perform superblock formation via tail duplication.

ftrampolines
Common Report Var(flag_trampolines) Init(0)
For targets that normally need trampolines for nested functions, always
generate them instead of using descriptors.

; Zero means that floating-point math operations cannot generate a
; (user-visible) trap.  This is the case, for example, in nonstop
; IEEE 754 arithmetic.
ftrapping-math
Common Report Var(flag_trapping_math) Init(1) Optimization SetByCombined
Assume floating-point operations can trap.

ftrapv
Common Report Var(flag_trapv) Optimization
Trap for signed overflow in addition, subtraction and multiplication.

ftree-ccp
Common Report Var(flag_tree_ccp) Optimization
Enable SSA-CCP optimization on trees.

ftree-bit-ccp
Common Report Var(flag_tree_bit_ccp) Optimization
Enable SSA-BIT-CCP optimization on trees.

ftree-store-ccp
Common Ignore
Does nothing.  Preserved for backward compatibility.

ftree-ch
Common Report Var(flag_tree_ch) Optimization
Enable loop header copying on trees.

ftree-coalesce-inlined-vars
Common Ignore RejectNegative
Does nothing.  Preserved for backward compatibility.

ftree-coalesce-vars
Common Report Var(flag_tree_coalesce_vars) Optimization
Enable SSA coalescing of user variables.

ftree-copyrename
Common Ignore
Does nothing.  Preserved for backward compatibility.

ftree-copy-prop
Common Report Var(flag_tree_copy_prop) Optimization
Enable copy propagation on trees.

ftree-store-copy-prop
Common Ignore
Does nothing.  Preserved for backward compatibility.

ftree-cselim
Common Report Var(flag_tree_cselim) Init(2) Optimization
Transform condition stores into unconditional ones.

ftree-switch-conversion
Common Report Var(flag_tree_switch_conversion) Optimization
Perform conversions of switch initializations.

ftree-dce
Common Report Var(flag_tree_dce) Optimization
Enable SSA dead code elimination optimization on trees.

ftree-dominator-opts
Common Report Var(flag_tree_dom) Optimization
Enable dominator optimizations.

ftree-tail-merge
Common Report Var(flag_tree_tail_merge) Optimization
Enable tail merging on trees.

ftree-dse
Common Report Var(flag_tree_dse) Optimization
Enable dead store elimination.

ftree-forwprop
Common Report Var(flag_tree_forwprop) Init(1) Optimization
Enable forward propagation on trees.

ftree-fre
Common Report Var(flag_tree_fre) Optimization
Enable Full Redundancy Elimination (FRE) on trees.

foptimize-strlen
Common Report Var(flag_optimize_strlen) Optimization
Enable string length optimizations on trees.

fisolate-erroneous-paths-dereference
Common Report Var(flag_isolate_erroneous_paths_dereference) Optimization
Detect paths that trigger erroneous or undefined behavior due to
dereferencing a null pointer.  Isolate those paths from the main control
flow and turn the statement with erroneous or undefined behavior into a trap.

fisolate-erroneous-paths-attribute
Common Report Var(flag_isolate_erroneous_paths_attribute) Optimization
Detect paths that trigger erroneous or undefined behavior due to a null value
being used in a way forbidden by a returns_nonnull or nonnull
attribute.  Isolate those paths from the main control flow and turn the
statement with erroneous or undefined behavior into a trap.

ftree-loop-distribution
Common Report Var(flag_tree_loop_distribution) Optimization
Enable loop distribution on trees.

ftree-loop-distribute-patterns
Common Report Var(flag_tree_loop_distribute_patterns) Optimization
Enable loop distribution for patterns transformed into a library call.

ftree-loop-im
Common Report Var(flag_tree_loop_im) Init(1) Optimization
Enable loop invariant motion on trees.

ftree-loop-linear
Common Alias(floop-nest-optimize)
Enable loop nest transforms.  Same as -floop-nest-optimize.

ftree-loop-ivcanon
Common Report Var(flag_tree_loop_ivcanon) Init(1) Optimization
Create canonical induction variables in loops.

ftree-loop-optimize
Common Report Var(flag_tree_loop_optimize) Init(1) Optimization
Enable loop optimizations on tree level.

ftree-parallelize-loops=
Common Report Joined RejectNegative UInteger Var(flag_tree_parallelize_loops) Init(1) Optimization
-ftree-parallelize-loops=<number>	Enable automatic parallelization of loops.

ftree-phiprop
Common Report Var(flag_tree_phiprop) Init(1) Optimization
Enable hoisting loads from conditional pointers.

ftree-pre
Common Report Var(flag_tree_pre) Optimization
Enable SSA-PRE optimization on trees.

ftree-partial-pre
Common Report Var(flag_tree_partial_pre) Optimization
In SSA-PRE optimization on trees, enable partial-partial redundancy elimination.

ftree-pta
Common Report Var(flag_tree_pta) Optimization
Perform function-local points-to analysis on trees.

ftree-reassoc
Common Report Var(flag_tree_reassoc) Init(1) Optimization
Enable reassociation on tree level.

ftree-salias
Common Ignore
Does nothing.  Preserved for backward compatibility.

ftree-sink
Common Report Var(flag_tree_sink) Optimization
Enable SSA code sinking on trees.

ftree-slsr
Common Report Var(flag_tree_slsr) Optimization
Perform straight-line strength reduction.

ftree-sra
Common Report Var(flag_tree_sra) Optimization
Perform scalar replacement of aggregates.

ftree-ter
Common Report Var(flag_tree_ter) Optimization
Replace temporary expressions in the SSA->normal pass.

ftree-lrs
Common Report Var(flag_tree_live_range_split) Optimization
Perform live range splitting during the SSA->normal pass.

ftree-vrp
Common Report Var(flag_tree_vrp) Init(0) Optimization
Perform Value Range Propagation on trees.

fsplit-paths
Common Report Var(flag_split_paths) Init(0) Optimization
Split paths leading to loop backedges.

funconstrained-commons
Common Var(flag_unconstrained_commons) Optimization
Assume common declarations may be overridden with ones with a larger
trailing array.

funit-at-a-time
Common Report Var(flag_unit_at_a_time) Init(1)
Compile whole compilation unit at a time.

funroll-loops
Common Report Var(flag_unroll_loops) Optimization
Perform loop unrolling when iteration count is known.

funroll-all-loops
Common Report Var(flag_unroll_all_loops) Optimization
Perform loop unrolling for all loops.

; Nonzero means that loop optimizer may assume that the induction variables
; that control loops do not overflow and that the loops with nontrivial
; exit condition are not infinite
funsafe-loop-optimizations
Common Ignore
Does nothing.  Preserved for backward compatibility.

fassociative-math
Common Report Var(flag_associative_math) SetByCombined Optimization
Allow optimization for floating-point arithmetic which may change the
result of the operation due to rounding.

freciprocal-math
Common Report Var(flag_reciprocal_math) SetByCombined Optimization
Same as -fassociative-math for expressions which include division.

; Nonzero means that unsafe floating-point math optimizations are allowed
; for the sake of speed.  IEEE compliance is not guaranteed, and operations
; are allowed to assume that their arguments and results are "normal"
; (e.g., nonnegative for SQRT).
funsafe-math-optimizations
Common Report Var(flag_unsafe_math_optimizations) Optimization SetByCombined
Allow math optimizations that may violate IEEE or ISO standards.

funswitch-loops
Common Report Var(flag_unswitch_loops) Optimization
Perform loop unswitching.

fsplit-loops
Common Report Var(flag_split_loops) Optimization
Perform loop splitting.

funwind-tables
Common Report Var(flag_unwind_tables) Optimization
Just generate unwind tables for exception handling.

fuse-ld=bfd
Common Driver Negative(fuse-ld=gold)
Use the bfd linker instead of the default linker.

fuse-ld=gold
Common Driver Negative(fuse-ld=bfd)
Use the gold linker instead of the default linker.

fuse-linker-plugin
Common Undocumented Var(flag_use_linker_plugin)

; Positive if we should track variables, negative if we should run
; the var-tracking pass only to discard debug annotations, zero if
; we're not to run it.  When flag_var_tracking == 2 (AUTODETECT_VALUE) it
; will be set according to optimize, debug_info_level and debug_hooks
; in process_options ().
fvar-tracking
Common Report Var(flag_var_tracking) Init(2) PerFunction
Perform variable tracking.

; Positive if we should track variables at assignments, negative if
; we should run the var-tracking pass only to discard debug
; annotations.  When flag_var_tracking_assignments ==
; AUTODETECT_VALUE it will be set according to flag_var_tracking.
fvar-tracking-assignments
Common Report Var(flag_var_tracking_assignments) Init(2) PerFunction
Perform variable tracking by annotating assignments.

; Nonzero if we should toggle flag_var_tracking_assignments after
; processing options and computing its default.  */
fvar-tracking-assignments-toggle
Common Report Var(flag_var_tracking_assignments_toggle) PerFunction
Toggle -fvar-tracking-assignments.

; Positive if we should track uninitialized variables, negative if
; we should run the var-tracking pass only to discard debug
; annotations.  When flag_var_tracking_uninit == AUTODETECT_VALUE it
; will be set according to flag_var_tracking.
fvar-tracking-uninit
Common Report Var(flag_var_tracking_uninit) PerFunction
Perform variable tracking and also tag variables that are uninitialized.

; Alias to enable both -ftree-loop-vectorize and -ftree-slp-vectorize.
ftree-vectorize
Common Report Optimization
Enable vectorization on trees.

ftree-vectorizer-verbose=
Common Joined RejectNegative Ignore
Does nothing.  Preserved for backward compatibility.

ftree-loop-vectorize
Common Report Var(flag_tree_loop_vectorize) Optimization EnabledBy(ftree-vectorize)
Enable loop vectorization on trees.

ftree-slp-vectorize
Common Report Var(flag_tree_slp_vectorize) Optimization EnabledBy(ftree-vectorize)
Enable basic block vectorization (SLP) on trees.

fvect-cost-model=
Common Joined RejectNegative Enum(vect_cost_model) Var(flag_vect_cost_model) Init(VECT_COST_MODEL_DEFAULT) Optimization
Specifies the cost model for vectorization.
-fvect-cost-model=[unlimited|dynamic|cheap]	Specifies the cost model for vectorization.

fsimd-cost-model=
Common Joined RejectNegative Enum(vect_cost_model) Var(flag_simd_cost_model) Init(VECT_COST_MODEL_UNLIMITED) Optimization
-fsimd-cost-model=[unlimited|dynamic|cheap]	Specifies the vectorization cost model for code marked with a simd directive.

Enum
Name(vect_cost_model) Type(enum vect_cost_model) UnknownError(unknown vectorizer cost model %qs)

EnumValue
Enum(vect_cost_model) String(unlimited) Value(VECT_COST_MODEL_UNLIMITED)

EnumValue
Enum(vect_cost_model) String(dynamic) Value(VECT_COST_MODEL_DYNAMIC)

EnumValue
Enum(vect_cost_model) String(cheap) Value(VECT_COST_MODEL_CHEAP)

fvect-cost-model
Common Alias(fvect-cost-model=,dynamic,unlimited)
Enables the dynamic vectorizer cost model.  Preserved for backward compatibility.

ftree-vect-loop-version
Common Ignore
Does nothing. Preserved for backward compatibility.

ftree-scev-cprop
Common Report Var(flag_tree_scev_cprop) Init(1) Optimization
Enable copy propagation of scalar-evolution information.

; -fverbose-asm causes extra commentary information to be produced in
; the generated assembly code (to make it more readable).  This option
; is generally only of use to those who actually need to read the
; generated assembly code (perhaps while debugging the compiler itself).
; -fno-verbose-asm, the default, causes the extra information
; to not be added and is useful when comparing two assembler files.
fverbose-asm
Common Report Var(flag_verbose_asm)
Add extra commentary to assembler output.

fvisibility=
Common Joined RejectNegative Enum(symbol_visibility) Var(default_visibility) Init(VISIBILITY_DEFAULT)
-fvisibility=[default|internal|hidden|protected]	Set the default symbol visibility.

Enum
Name(symbol_visibility) Type(enum symbol_visibility) UnknownError(unrecognized visibility value %qs)

EnumValue
Enum(symbol_visibility) String(default) Value(VISIBILITY_DEFAULT)

EnumValue
Enum(symbol_visibility) String(internal) Value(VISIBILITY_INTERNAL)

EnumValue
Enum(symbol_visibility) String(hidden) Value(VISIBILITY_HIDDEN)

EnumValue
Enum(symbol_visibility) String(protected) Value(VISIBILITY_PROTECTED)

fvtable-verify=
Common Joined RejectNegative Enum(vtv_priority) Var(flag_vtable_verify) Init(VTV_NO_PRIORITY)
Validate vtable pointers before using them.

Enum
Name(vtv_priority) Type(enum vtv_priority) UnknownError(unknown vtable verify initialization priority %qs)

EnumValue
Enum(vtv_priority) String(none) Value(VTV_NO_PRIORITY)

EnumValue
Enum(vtv_priority) String(std) Value(VTV_STANDARD_PRIORITY)

EnumValue
Enum(vtv_priority) String(preinit) Value(VTV_PREINIT_PRIORITY)

fvtv-counts
Common Var(flag_vtv_counts)
Output vtable verification counters.

fvtv-debug
Common Var(flag_vtv_debug)
Output vtable verification pointer sets information.

fvpt
Common Report Var(flag_value_profile_transformations) Optimization
Use expression value profiles in optimizations.

fweb
Common Report Var(flag_web) Init(2) Optimization
Construct webs and split unrelated uses of single variable.

ftree-builtin-call-dce
Common Report Var(flag_tree_builtin_call_dce) Init(0) Optimization
Enable conditional dead code elimination for builtin calls.

fwhole-program
Common Report Var(flag_whole_program) Init(0)
Perform whole program optimizations.

fwrapv
Common Report Var(flag_wrapv) Optimization
Assume signed arithmetic overflow wraps around.

fzero-initialized-in-bss
Common Report Var(flag_zero_initialized_in_bss) Init(1)
Put zero initialized data in the bss section.

g
Common Driver RejectNegative JoinedOrMissing
Generate debug information in default format.

gcoff
Common Driver Ignore Warn(switch %qs no longer supported)
Does nothing.  Preserved for backward compatibility.

gcoff1
Common Driver Ignore Warn(switch %qs no longer supported)
Does nothing.  Preserved for backward compatibility.

gcoff2
Common Driver Ignore Warn(switch %qs no longer supported)
Does nothing.  Preserved for backward compatibility.

gcoff3
Common Driver Ignore Warn(switch %qs no longer supported)
Does nothing.  Preserved for backward compatibility.

gcolumn-info
Common Driver Var(debug_column_info,1) Init(1)
Record DW_AT_decl_column and DW_AT_call_column in DWARF.

gdwarf
Common Driver JoinedOrMissing Negative(gdwarf-)
Generate debug information in default version of DWARF format.

gdwarf-
Common Driver Joined UInteger Var(dwarf_version) Init(4) Negative(gstabs)
Generate debug information in DWARF v2 (or later) format.

ggdb
Common Driver JoinedOrMissing
Generate debug information in default extended format.

gno-
RejectNegative Joined Undocumented
; Catch the gno- prefix, so it doesn't backtrack to g<level>.

gno-pubnames
Common Driver Negative(gpubnames) Var(debug_generate_pub_sections, 0) Init(-1)
Don't generate DWARF pubnames and pubtypes sections.

gpubnames
Common Driver Negative(ggnu-pubnames) Var(debug_generate_pub_sections, 1)
Generate DWARF pubnames and pubtypes sections.

ggnu-pubnames
Common Driver Negative(gno-pubnames) Var(debug_generate_pub_sections, 2)
Generate DWARF pubnames and pubtypes sections with GNU extensions.

grecord-gcc-switches
Common Driver Var(dwarf_record_gcc_switches) Init(1)
Record gcc command line switches in DWARF DW_AT_producer.

gsplit-dwarf
Common Driver Var(dwarf_split_debug_info) Init(0)
Generate debug information in separate .dwo files.

gstabs
Common Driver JoinedOrMissing Negative(gstabs+)
Generate debug information in STABS format.

gstabs+
Common Driver JoinedOrMissing Negative(gvms)
Generate debug information in extended STABS format.

gstrict-dwarf
Common Driver Report Var(dwarf_strict) Init(0)
Don't emit DWARF additions beyond selected version.

gtoggle
Common Driver Report Var(flag_gtoggle)
Toggle debug information generation.

gvms
Common Driver JoinedOrMissing Negative(gxcoff)
Generate debug information in VMS format.

gxcoff
Common Driver JoinedOrMissing Negative(gxcoff+)
Generate debug information in XCOFF format.

gxcoff+
Common Driver JoinedOrMissing Negative(gdwarf)
Generate debug information in extended XCOFF format.

Enum
Name(compressed_debug_sections) Type(int)

; Since -gz= is completely handled in specs, the values aren't used and we
; assign arbitrary constants.
EnumValue
Enum(compressed_debug_sections) String(none) Value(0)

EnumValue
Enum(compressed_debug_sections) String(zlib) Value(1)

EnumValue
Enum(compressed_debug_sections) String(zlib-gnu) Value(2)

gz
Common Driver
Generate compressed debug sections.

gz=
Common Driver RejectNegative Joined Enum(compressed_debug_sections)
-gz=<format>	Generate compressed debug sections in format <format>.

h
Driver Joined Separate

iplugindir=
Common Joined Var(plugindir_string) Init(0)
-iplugindir=<dir>	Set <dir> to be the default plugin directory.

imultiarch
Common Joined Separate RejectDriver Var(imultiarch) Init(0)
-imultiarch <dir>	Set <dir> to be the multiarch include subdirectory.

l
Driver Joined Separate

n
Driver

no-canonical-prefixes
Driver

nodefaultlibs
Driver

nostartfiles
Driver

nostdlib
Driver

o
Common Driver Joined Separate Var(asm_file_name) MissingArgError(missing filename after %qs)
-o <file>	Place output into <file>.

p
Common Var(profile_flag)
Enable function profiling.

pass-exit-codes
Driver Var(pass_exit_codes)

pedantic
Common Alias(Wpedantic)

pedantic-errors
Common Var(flag_pedantic_errors)
Like -pedantic but issue them as errors.

pg
Driver

pipe
Driver Var(use_pipes)

print-file-name=
Driver JoinedOrMissing Var(print_file_name)

print-libgcc-file-name
Driver

print-multi-directory
Driver Var(print_multi_directory)

print-multi-lib
Driver Var(print_multi_lib)

print-multi-os-directory
Driver Var(print_multi_os_directory)

print-multiarch
Driver Var(print_multiarch)

print-prog-name=
Driver JoinedOrMissing Var(print_prog_name)

print-search-dirs
Driver Var(print_search_dirs)

print-sysroot
Driver Var(print_sysroot)

print-sysroot-headers-suffix
Driver Var(print_sysroot_headers_suffix)

quiet
Common Var(quiet_flag) RejectDriver
Do not display functions compiled or elapsed time.

r
Driver

s
Driver

save-temps
Driver

save-temps=
Driver Joined

t
Driver

time
Driver Var(report_times)

time=
Driver JoinedOrMissing

u
Driver Joined Separate

undef
Driver
; C option, but driver must not handle as "-u ndef".

v
Common Driver Var(verbose_flag)
Enable verbose output.

version
Common Var(version_flag) RejectDriver
Display the compiler's version.

w
Common Var(inhibit_warnings)
Suppress warnings.

wrapper
Driver Separate Var(wrapper_string)

x
Driver Joined Separate

shared
Driver RejectNegative Negative(static-pie)
Create a shared library.

shared-libgcc
Driver

specs
Driver Separate Alias(specs=)

specs=
Driver Joined

static
Driver

static-libgcc
Driver

static-libgfortran
Driver
; Documented for Fortran, but always accepted by driver.

static-libstdc++
Driver

static-libgo
Driver
; Documented for Go, but always accepted by driver.

static-libasan
Driver

static-libtsan
Driver

static-liblsan
Driver

static-libubsan
Driver

symbolic
Driver

no-pie
Driver RejectNegative Negative(shared)
Don't create a dynamically linked position independent executable.

pie
Driver RejectNegative Negative(no-pie)
Create a dynamically linked position independent executable.

static-pie
Driver RejectNegative Negative(pie)
Create a static position independent executable.

z
Driver Joined Separate

fipa-ra
Common Report Var(flag_ipa_ra) Optimization
Use caller save register across calls if possible.

; This comment is to ensure we retain the blank line above.
