; Options for the C, ObjC, C++ and ObjC++ front ends.
; Copyright (C) 2003-2021 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 for a description of this file's format.

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

Language
C

Language
ObjC

Language
C++

Language
ObjC++

-all-warnings
C ObjC C++ ObjC++ Warning Alias(Wall)

-ansi
C ObjC C++ ObjC++ Alias(ansi)

-assert
C ObjC C++ ObjC++ Separate Alias(A) MissingArgError(assertion missing after %qs)

-assert=
C ObjC C++ ObjC++ Joined Alias(A) MissingArgError(assertion missing after %qs)

-comments
C ObjC C++ ObjC++ Alias(C)

-comments-in-macros
C ObjC C++ ObjC++ Alias(CC)

-define-macro
C ObjC C++ ObjC++ Separate Alias(D) MissingArgError(macro name missing after %qs)

-define-macro=
C ObjC C++ ObjC++ Joined Alias(D) MissingArgError(macro name missing after %qs)

-dependencies
C ObjC C++ ObjC++ Alias(M)

-dump
C ObjC C++ ObjC++ Separate Alias(d)

-dump=
C ObjC C++ ObjC++ Joined Alias(d)

-imacros
C ObjC C++ ObjC++ Separate Alias(imacros) MissingArgError(missing filename after %qs)

-imacros=
C ObjC C++ ObjC++ Joined Alias(imacros) MissingArgError(missing filename after %qs)

-include
C ObjC C++ ObjC++ Separate Alias(include) MissingArgError(missing filename after %qs)

-include=
C ObjC C++ ObjC++ Joined Alias(include) MissingArgError(missing filename after %qs)

-include-barrier
C ObjC C++ ObjC++ Alias(I, -)

-include-directory
C ObjC C++ ObjC++ Separate Alias(I) MissingArgError(missing path after %qs)

-include-directory=
C ObjC C++ ObjC++ Joined Alias(I) MissingArgError(missing path after %qs)

-include-directory-after
C ObjC C++ ObjC++ Separate Alias(idirafter) MissingArgError(missing path after %qs)

-include-directory-after=
C ObjC C++ ObjC++ Joined Alias(idirafter) MissingArgError(missing path after %qs)

-include-prefix
C ObjC C++ ObjC++ Separate Alias(iprefix)

-include-prefix=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iprefix)

-include-with-prefix
C ObjC C++ ObjC++ Separate Alias(iwithprefix)

-include-with-prefix=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iwithprefix)

-include-with-prefix-after
C ObjC C++ ObjC++ Separate Alias(iwithprefix)

-include-with-prefix-after=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iwithprefix)

-include-with-prefix-before
C ObjC C++ ObjC++ Separate Alias(iwithprefixbefore)

-include-with-prefix-before=
C ObjC C++ ObjC++ JoinedOrMissing Alias(iwithprefixbefore)

-no-integrated-cpp
Driver Alias(no-integrated-cpp)

-no-line-commands
C ObjC C++ ObjC++ Alias(P)

-no-standard-includes
C ObjC C++ ObjC++ Alias(nostdinc)

-no-warnings
C ObjC C++ ObjC++ Alias(w)

-output
C ObjC C++ ObjC++ Separate Alias(o)

-output=
C ObjC C++ ObjC++ Joined Alias(o)

-output-pch=
C ObjC C++ ObjC++ Joined Separate

-pedantic
C ObjC C++ ObjC++ Alias(pedantic)

-preprocess
C ObjC C++ ObjC++ Undocumented Alias(E)

-print-missing-file-dependencies
C ObjC C++ ObjC++ Alias(MG)

-trace-includes
C ObjC C++ ObjC++ Alias(H)

-traditional
Driver Alias(traditional)

-traditional-cpp
C ObjC C++ ObjC++ Alias(traditional-cpp)

-trigraphs
C ObjC C++ ObjC++ Alias(trigraphs)

-undefine-macro
C ObjC C++ ObjC++ Separate Alias(U) MissingArgError(macro name missing after %qs)

-undefine-macro=
C ObjC C++ ObjC++ Joined Alias(U) MissingArgError(macro name missing after %qs)

-user-dependencies
C ObjC C++ ObjC++ Alias(MM)

-verbose
Common C ObjC C++ ObjC++ Alias(v)

-write-dependencies
C ObjC C++ ObjC++ NoDriverArg Separate Alias(MD) MissingArgError(missing filename after %qs)

-write-user-dependencies
C ObjC C++ ObjC++ NoDriverArg Separate Alias(MMD) MissingArgError(missing filename after %qs)

A
C ObjC C++ ObjC++ Joined Separate MissingArgError(assertion missing after %qs)
-A<question>=<answer>	Assert the <answer> to <question>.  Putting '-' before <question> disables the <answer> to <question>.

C
C ObjC C++ ObjC++
Do not discard comments.

CC
C ObjC C++ ObjC++
Do not discard comments in macro expansions.

D
C ObjC C++ ObjC++ Joined Separate MissingArgError(macro name missing after %qs)
-D<macro>[=<val>]	Define a <macro> with <val> as its value.  If just <macro> is given, <val> is taken to be 1.

E
C ObjC C++ ObjC++ Undocumented Var(flag_preprocess_only)

F
Driver C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-F <dir>	Add <dir> to the end of the main framework include path.

fgimple
C Var(flag_gimple) Init(0)
Enable parsing GIMPLE.

H
C ObjC C++ ObjC++
Print the name of header files as they are used.

I
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-I <dir>	Add <dir> to the end of the main include path.

M
C ObjC C++ ObjC++
Generate make dependencies.

MD
C ObjC C++ ObjC++ NoDriverArg Separate MissingArgError(missing filename after %qs)
Generate make dependencies and compile.

MF
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing filename after %qs)
-MF <file>	Write dependency output to the given file.

MG
C ObjC C++ ObjC++
Treat missing header files as generated files.

MM
C ObjC C++ ObjC++
Like -M but ignore system header files.

MMD
C ObjC C++ ObjC++ NoDriverArg Separate MissingArgError(missing filename after %qs)
Like -MD but ignore system header files.

Mmodules
C++
Generate C++ Module dependency information.

Mno-modules
C++
; undocumented

MP
C ObjC C++ ObjC++
Generate phony targets for all headers.

MQ
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs)
-MQ <target>	Add a target that may require quoting.

MT
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs)
-MT <target>	Add a target that does not require quoting.

P
C ObjC C++ ObjC++
Do not generate #line directives.

U
C ObjC C++ ObjC++ Joined Separate MissingArgError(macro name missing after %qs)
-U<macro>	Undefine <macro>.

WNSObject-attribute
C ObjC C++ ObjC++ LTO Var(warn_nsobject_attribute) Warning Init(1)
Warn if the NSObject attribute is applied to a non-typedef.

Wabi
C ObjC C++ ObjC++ LTO Var(warn_abi) Warning
Warn about things that will change when compiling with an ABI-compliant compiler.

Wabi=
C ObjC C++ ObjC++ LTO Joined RejectNegative UInteger Warning
Warn about things that change between the current -fabi-version and the specified version.

Wabi-tag
C++ ObjC++ Var(warn_abi_tag) Warning
Warn if a subobject has an abi_tag attribute that the complete object type does not have.

Wpsabi
C ObjC C++ ObjC++ LTO Var(warn_psabi) Init(1) Warning Undocumented LangEnabledBy(C ObjC C++ ObjC++,Wabi)

Wabsolute-value
C ObjC Var(warn_absolute_value) Warning EnabledBy(Wextra)
Warn on suspicious calls of standard functions computing absolute values.

Waddress
C ObjC C++ ObjC++ Var(warn_address) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about suspicious uses of memory addresses.

Enum
Name(warn_aligned_new_level) Type(int) UnknownError(argument %qs to %<-Waligned-new%> not recognized)

EnumValue
Enum(warn_aligned_new_level) String(none) Value(0)

EnumValue
Enum(warn_aligned_new_level) String(global) Value(1)

EnumValue
Enum(warn_aligned_new_level) String(all) Value(2)

Waligned-new
C++ ObjC++ Alias(Waligned-new=,global,none)
Warn about 'new' of type with extended alignment without -faligned-new.

Waligned-new=
C++ ObjC++ Var(warn_aligned_new) Enum(warn_aligned_new_level) Joined RejectNegative Warning LangEnabledBy(C++ ObjC++,Wall,1,0)
-Waligned-new=[none|global|all]	Warn even if 'new' uses a class member allocation function.

Wall
C ObjC C++ ObjC++ Warning
Enable most warning messages.

Walloca
C ObjC C++ ObjC++ Var(warn_alloca) Warning
Warn on any use of alloca.

Walloc-size-larger-than=
C ObjC C++ LTO ObjC++ Var(warn_alloc_size_limit) Joined Host_Wide_Int ByteSize Warning Init(HOST_WIDE_INT_MAX)
-Walloc-size-larger-than=<bytes>	Warn for calls to allocation functions that
attempt to allocate objects larger than the specified number of bytes.

Wno-alloc-size-larger-than
C ObjC C++ LTO ObjC++ Alias(Walloc-size-larger-than=,18446744073709551615EiB,none) Warning
Disable Walloc-size-larger-than= warning.  Equivalent to Walloc-size-larger-than=<SIZE_MAX> or larger.

Walloc-zero
C ObjC C++ ObjC++ Var(warn_alloc_zero) Warning
Warn for calls to allocation functions that specify zero bytes.

Walloca-larger-than=
C ObjC C++ LTO ObjC++ Var(warn_alloca_limit) Warning Joined Host_Wide_Int ByteSize Init(HOST_WIDE_INT_MAX)
-Walloca-larger-than=<number>	Warn on unbounded uses of
alloca, and on bounded uses of alloca whose bound can be larger than
<number> bytes.

Wno-alloca-larger-than
C ObjC C++ LTO ObjC++ Alias(Walloca-larger-than=,18446744073709551615EiB,none) Warning
Disable Walloca-larger-than= warning.  Equivalent to Walloca-larger-than=<SIZE_MAX> or larger.

Warray-bounds
LangEnabledBy(C ObjC C++ LTO ObjC++)
; in common.opt

Warray-bounds=
LangEnabledBy(C ObjC C++ LTO ObjC++,Wall,1,0)
; in common.opt

Warray-parameter
C ObjC C++ ObjC++ Warning Alias(Warray-parameter=, 2, 0)
Warn about mismatched declarations of array parameters and unsafe accesses to them.

Warray-parameter=
C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_array_parameter) IntegerRange(0, 2) LangEnabledBy(C ObjC C++ ObjC++,Wall, 2, 0) Warning
Warn about mismatched declarations of array parameters and unsafe accesses to them.

Wzero-length-bounds
C ObjC C++ ObjC++ Var(warn_zero_length_bounds) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about accesses to interior zero-length array members.

Wassign-intercept
ObjC ObjC++ Var(warn_assign_intercept) Warning
Warn whenever an Objective-C assignment is being intercepted by the garbage collector.

Wbad-function-cast
C ObjC Var(warn_bad_function_cast) Warning
Warn about casting functions to incompatible types.

Wbool-compare
C ObjC C++ ObjC++ Var(warn_bool_compare) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about boolean expression compared with an integer value different from true/false.

Wbool-operation
C ObjC C++ ObjC++ Var(warn_bool_op) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about certain operations on boolean expressions.

Wframe-address
C ObjC C++ ObjC++ Var(warn_frame_address) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn when __builtin_frame_address or __builtin_return_address is used unsafely.

Wbuiltin-declaration-mismatch
C ObjC C++ ObjC++ Var(warn_builtin_declaration_mismatch) Init(1) Warning
Warn when a built-in function is declared with the wrong signature.

Wbuiltin-macro-redefined
C ObjC C++ ObjC++ CPP(warn_builtin_macro_redefined) CppReason(CPP_W_BUILTIN_MACRO_REDEFINED) Var(cpp_warn_builtin_macro_redefined) Init(1) Warning
Warn when a built-in preprocessor macro is undefined or redefined.

Wc11-c2x-compat
C ObjC CPP(cpp_warn_c11_c2x_compat) CppReason(CPP_W_C11_C2X_COMPAT) Var(warn_c11_c2x_compat) Init(-1) Warning
Warn about features not present in ISO C11, but present in ISO C2X.

Wc90-c99-compat
C ObjC CPP(cpp_warn_c90_c99_compat) CppReason(CPP_W_C90_C99_COMPAT) Var(warn_c90_c99_compat) Init(-1) Warning
Warn about features not present in ISO C90, but present in ISO C99.

Wc99-c11-compat
C ObjC Var(warn_c99_c11_compat) Init(-1) Warning
Warn about features not present in ISO C99, but present in ISO C11.

Wc++-compat
C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) CppReason(CPP_W_CXX_OPERATOR_NAMES) Init(0) Warning
Warn about C constructs that are not in the common subset of C and C++.

Wc++0x-compat
C++ ObjC++ Warning Alias(Wc++11-compat) Undocumented

Wc++11-compat
C++ ObjC++ Var(warn_cxx11_compat) Warning LangEnabledBy(C++ ObjC++,Wall) Init(0) CPP(cpp_warn_cxx11_compat) CppReason(CPP_W_CXX11_COMPAT)
Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011.

Wc++14-compat
C++ ObjC++ Var(warn_cxx14_compat) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO C++ 2014.

Wc++1z-compat
C++ ObjC++ Warning Alias(Wc++17-compat) Undocumented

Wc++17-compat
C++ ObjC++ Var(warn_cxx17_compat) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn about C++ constructs whose meaning differs between ISO C++ 2014 and ISO C++ 2017.

Wc++2a-compat
C++ ObjC++ Warning Alias(Wc++20-compat) Undocumented

Wc++20-compat
C++ ObjC++ Var(warn_cxx20_compat) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn about C++ constructs whose meaning differs between ISO C++ 2017 and ISO C++ 2020.

Wcast-function-type
C ObjC C++ ObjC++ Var(warn_cast_function_type) Warning EnabledBy(Wextra)
Warn about casts between incompatible function types.

Wcast-qual
C ObjC C++ ObjC++ Var(warn_cast_qual) Warning
Warn about casts which discard qualifiers.

Wcatch-value
C++ ObjC++ Warning Alias(Wcatch-value=, 1, 0)
Warn about catch handlers of non-reference type.

Wcatch-value=
C++ ObjC++ Var(warn_catch_value) Warning Joined RejectNegative UInteger LangEnabledBy(C++ ObjC++,Wall, 1, 0) IntegerRange(0, 3)
Warn about catch handlers of non-reference type.

Wchar-subscripts
C ObjC C++ ObjC++ Var(warn_char_subscripts) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about subscripts whose type is \"char\".

Wchkp
C ObjC C++ ObjC++ Warning WarnRemoved
Removed in GCC 9.  This switch has no effect.

Wclobbered
C ObjC C++ ObjC++ Var(warn_clobbered) Warning EnabledBy(Wextra)
Warn about variables that might be changed by \"longjmp\" or \"vfork\".

Wcomma-subscript
C++ ObjC++ Var(warn_comma_subscript) Warning
Warn about uses of a comma operator within a subscripting expression.

Wcomment
C ObjC C++ ObjC++ CPP(warn_comments) CppReason(CPP_W_COMMENTS) Var(cpp_warn_comment) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about possibly nested block comments, and C++ comments spanning more than one physical line.

Wcomments
C ObjC C++ ObjC++ Warning Alias(Wcomment)
Synonym for -Wcomment.

Wconditionally-supported
C++ ObjC++ Var(warn_conditionally_supported) Warning
Warn for conditionally-supported constructs.

Wconversion
C ObjC C++ ObjC++ Var(warn_conversion) Warning
Warn for implicit type conversions that may change a value.

Wconversion-null
C++ ObjC++ Var(warn_conversion_null) Init(1) Warning
Warn for converting NULL from/to a non-pointer type.

Wcpp
C ObjC C++ ObjC++ CppReason(CPP_W_WARNING_DIRECTIVE)
; Documented in common.opt

Wctad-maybe-unsupported
C++ ObjC++ Var(warn_ctad_maybe_unsupported) Warning
Warn when performing class template argument deduction on a type with no
deduction guides.

Wctor-dtor-privacy
C++ ObjC++ Var(warn_ctor_dtor_privacy) Warning
Warn when all constructors and destructors are private.

Wdangling-else
C ObjC C++ ObjC++ Var(warn_dangling_else) Warning LangEnabledBy(C ObjC C++ ObjC++,Wparentheses)
Warn about dangling else.

Wdate-time
C ObjC C++ ObjC++ CPP(warn_date_time) CppReason(CPP_W_DATE_TIME) Var(cpp_warn_date_time) Init(0) Warning
Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage.

Wdeclaration-after-statement
C ObjC Var(warn_declaration_after_statement) Init(-1) Warning
Warn when a declaration is found after a statement.

Wdelete-incomplete
C++ ObjC++ Var(warn_delete_incomplete) Init(1) Warning
Warn when deleting a pointer to incomplete type.

Wdelete-non-virtual-dtor
C++ ObjC++ Var(warn_delnonvdtor) Warning LangEnabledBy(C++ ObjC++,Wall || Weffc++)
Warn about deleting polymorphic objects with non-virtual destructors.

Wdeprecated
C C++ ObjC ObjC++ CPP(cpp_warn_deprecated) CppReason(CPP_W_DEPRECATED)
; Documented in common.opt

Wdeprecated-copy
C++ ObjC++ Var(warn_deprecated_copy) Warning LangEnabledBy(C++ ObjC++, Wextra)
Mark implicitly-declared copy operations as deprecated if the class has a
user-provided copy operation.

Wdeprecated-copy-dtor
C++ ObjC++ Var(warn_deprecated_copy, 2) Warning
Mark implicitly-declared copy operations as deprecated if the class has a
user-provided copy operation or destructor.

Wdeprecated-enum-enum-conversion
C++ ObjC++ Var(warn_deprecated_enum_enum_conv) Warning
Warn about deprecated arithmetic conversions on operands of enumeration types.

Wdeprecated-enum-float-conversion
C++ ObjC++ Var(warn_deprecated_enum_float_conv) Warning
Warn about deprecated arithmetic conversions on operands where one is of enumeration
type and the other is of a floating-point type.

Wdesignated-init
C ObjC Var(warn_designated_init) Init(1) Warning
Warn about positional initialization of structs requiring designated initializers.

Wdiscarded-array-qualifiers
C ObjC Var(warn_discarded_array_qualifiers) Init(1) Warning
Warn if qualifiers on arrays which are pointer targets are discarded.

Wdiscarded-qualifiers
C ObjC Var(warn_discarded_qualifiers) Init(1) Warning
Warn if type qualifiers on pointers are discarded.

Wdiv-by-zero
C ObjC C++ ObjC++ Var(warn_div_by_zero) Init(1) Warning
Warn about compile-time integer division by zero.

Wduplicated-branches
C ObjC C++ ObjC++ Var(warn_duplicated_branches) Init(0) Warning
Warn about duplicated branches in if-else statements.

Wduplicated-cond
C ObjC C++ ObjC++ Var(warn_duplicated_cond) Init(0) Warning
Warn about duplicated conditions in an if-else-if chain.

Weffc++
C++ ObjC++ Var(warn_ecpp) Warning
Warn about violations of Effective C++ style rules.

Wempty-body
C ObjC C++ ObjC++ Var(warn_empty_body) Warning EnabledBy(Wextra)
Warn about an empty body in an if or else statement.

Wendif-labels
C ObjC C++ ObjC++ CPP(warn_endif_labels) CppReason(CPP_W_ENDIF_LABELS) Var(cpp_warn_endif_labels) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic)
Warn about stray tokens after #else and #endif.

Wenum-compare
C ObjC C++ ObjC++ Var(warn_enum_compare) Init(-1) Warning LangEnabledBy(C ObjC,Wall || Wc++-compat)
Warn about comparison of different enum types.

Wenum-conversion
C ObjC C++ ObjC++ Var(warn_enum_conversion) Init(0) Warning LangEnabledBy(C ObjC,Wextra)
Warn about implicit conversion of enum types.

Werror
C ObjC C++ ObjC++
; Documented in common.opt

Werror-implicit-function-declaration
C ObjC RejectNegative Warning Alias(Werror=, implicit-function-declaration)
This switch is deprecated; use -Werror=implicit-function-declaration instead.

Wexceptions
C++ ObjC++ Var(warn_exceptions) Init(1)
Warn when an exception handler is shadowed by another handler.

Wextra
C ObjC C++ ObjC++ Warning
; in common.opt

Wextra-semi
C++ ObjC++ Var(warn_extra_semi) Warning
Warn about semicolon after in-class function definition.

Wfloat-conversion
C ObjC C++ ObjC++ Var(warn_float_conversion) Warning LangEnabledBy(C ObjC C++ ObjC++,Wconversion)
Warn for implicit type conversions that cause loss of floating point precision.

Wfloat-equal
C ObjC C++ ObjC++ Var(warn_float_equal) Warning
Warn if testing floating point numbers for equality.

Wformat
C ObjC C++ ObjC++ Warning Alias(Wformat=, 1, 0)
Warn about printf/scanf/strftime/strfmon format string anomalies.

Wformat-contains-nul
C ObjC C++ ObjC++ Var(warn_format_contains_nul) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 1, 0)
Warn about format strings that contain NUL bytes.

Wformat-diag
C ObjC C++ ObjC++ Var(warn_format_diag) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 1, 0)
Warn about GCC format strings with strings unsuitable for diagnostics.

Wformat-extra-args
C ObjC C++ ObjC++ Var(warn_format_extra_args) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 1, 0)
Warn if passing too many arguments to a function for its format string.

Wformat-nonliteral
C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
Warn about format strings that are not literals.

Wformat-overflow
C ObjC C++ LTO ObjC++ Warning Alias(Wformat-overflow=, 1, 0) IntegerRange(0, 2)
Warn about function calls with format strings that write past the end
of the destination region.  Same as -Wformat-overflow=1.

Wformat-security
C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
Warn about possible security problems with format functions.

Wformat-signedness
C ObjC C++ ObjC++ Var(warn_format_signedness) Warning
Warn about sign differences with format functions.

Wformat-truncation
C ObjC C++ LTO ObjC++ Warning Alias(Wformat-truncation=, 1, 0)
Warn about calls to snprintf and similar functions that truncate output.
Same as -Wformat-truncation=1.

Wformat-y2k
C ObjC C++ ObjC++ Var(warn_format_y2k) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=,warn_format >= 2, 0)
Warn about strftime formats yielding 2-digit years.

Wformat-zero-length
C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=,warn_format >= 1, 0)
Warn about zero-length formats.

Wformat=
C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) IntegerRange(0, 2)
Warn about printf/scanf/strftime/strfmon format string anomalies.

Wformat-overflow=
C ObjC C++ LTO ObjC++ Joined RejectNegative UInteger Var(warn_format_overflow) Warning LangEnabledBy(C ObjC C++ LTO ObjC++,Wformat=, warn_format >= 1, 0) IntegerRange(0, 2)
Warn about function calls with format strings that write past the end
of the destination region.

Wformat-truncation=
C ObjC C++ LTO ObjC++ Joined RejectNegative UInteger Var(warn_format_trunc) Warning LangEnabledBy(C ObjC C++ LTO ObjC++,Wformat=, warn_format >= 1, 0) IntegerRange(0, 2)
Warn about calls to snprintf and similar functions that truncate output.

Wif-not-aligned
C ObjC C++ ObjC++ Var(warn_if_not_aligned) Init(1) Warning
Warn when the field in a struct is not aligned.

Wignored-qualifiers
C C++ Var(warn_ignored_qualifiers) Warning EnabledBy(Wextra)
Warn whenever type qualifiers are ignored.

Wignored-attributes
C C++ Var(warn_ignored_attributes) Init(1) Warning
Warn whenever attributes are ignored.

Winaccessible-base
C++ ObjC++ Var(warn_inaccessible_base) Init(1) Warning
Warn when a base is inaccessible in derived due to ambiguity.

Wincompatible-pointer-types
C ObjC Var(warn_incompatible_pointer_types) Init(1) Warning
Warn when there is a conversion between pointers that have incompatible types.

Waddress-of-packed-member
C ObjC C++ ObjC++ Var(warn_address_of_packed_member) Init(1) Warning
Warn when the address of packed member of struct or union is taken.

Winit-self
C ObjC C++ ObjC++ Var(warn_init_self) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn about variables which are initialized to themselves.

Winit-list-lifetime
C++ ObjC++ Var(warn_init_list) Warning Init(1)
Warn about uses of std::initializer_list that can result in dangling pointers.

Wimplicit
C ObjC Var(warn_implicit) Warning LangEnabledBy(C ObjC,Wall)
Warn about implicit declarations.

Wimplicit-fallthrough=
LangEnabledBy(C ObjC C++ ObjC++,Wextra,3,0)
; in common.opt

Wdouble-promotion
C ObjC C++ ObjC++ Var(warn_double_promotion) Warning
Warn about implicit conversions from \"float\" to \"double\".

Wexpansion-to-defined
C ObjC C++ ObjC++ CPP(warn_expansion_to_defined) CppReason(CPP_W_EXPANSION_TO_DEFINED) Var(cpp_warn_expansion_to_defined) Init(0) Warning EnabledBy(Wextra || Wpedantic)
Warn if \"defined\" is used outside #if.

Wimplicit-function-declaration
C ObjC Var(warn_implicit_function_declaration) Init(-1) Warning LangEnabledBy(C ObjC,Wimplicit)
Warn about implicit function declarations.

Wimplicit-int
C ObjC Var(warn_implicit_int) Init(-1) Warning LangEnabledBy(C ObjC,Wimplicit)
Warn when a declaration does not specify a type.

Wimport
C ObjC C++ ObjC++ Undocumented Ignore

Winherited-variadic-ctor
C++ ObjC++ Var(warn_inh_var_ctor) Init(1) Warning
Warn about C++11 inheriting constructors when the base has a variadic constructor.

Wint-conversion
C ObjC Var(warn_int_conversion) Init(1) Warning
Warn about incompatible integer to pointer and pointer to integer conversions.

Wint-in-bool-context
C ObjC C++ ObjC++ Var(warn_int_in_bool_context) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn for suspicious integer expressions in boolean context.

Wint-to-pointer-cast
C ObjC C++ ObjC++ Var(warn_int_to_pointer_cast) Init(1) Warning
Warn when there is a cast to a pointer from an integer of a different size.

Winvalid-offsetof
C++ ObjC++ Var(warn_invalid_offsetof) Init(1) Warning
Warn about invalid uses of the \"offsetof\" macro.

Winvalid-pch
C ObjC C++ ObjC++ CPP(warn_invalid_pch) CppReason(CPP_W_INVALID_PCH) Var(cpp_warn_invalid_pch) Init(0) Warning
Warn about PCH files that are found but not used.

Wjump-misses-init
C ObjC Var(warn_jump_misses_init) Warning LangEnabledby(C ObjC,Wc++-compat)
Warn when a jump misses a variable initialization.

Wliteral-suffix
C++ ObjC++ CPP(warn_literal_suffix) CppReason(CPP_W_LITERAL_SUFFIX) Var(cpp_warn_literal_suffix) Init(1) Warning
Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore.

Wlogical-op
C ObjC C++ ObjC++ Var(warn_logical_op) Init(0) Warning
Warn when a logical operator is suspiciously always evaluating to true or false.

Wlogical-not-parentheses
C ObjC C++ ObjC++ Var(warn_logical_not_paren) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn when logical not is used on the left hand side operand of a comparison.

Wlong-long
C ObjC C++ ObjC++ CPP(cpp_warn_long_long) CppReason(CPP_W_LONG_LONG) Var(warn_long_long) Init(-1) Warning LangEnabledBy(C ObjC,Wc90-c99-compat)
Do not warn about using \"long long\" when -pedantic.

Wmain
C ObjC C++ ObjC++ Var(warn_main) Init(-1) Warning LangEnabledBy(C ObjC,Wall, 2, 0)
Warn about suspicious declarations of \"main\".

Wmain
LangEnabledBy(C ObjC C++ ObjC++,Wpedantic, 2, 0)
;

Wmemset-transposed-args
C ObjC C++ ObjC++ Var(warn_memset_transposed_args) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about suspicious calls to memset where the third argument is constant literal zero and the second is not.

Wmemset-elt-size
C ObjC C++ ObjC++ Var(warn_memset_elt_size) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about suspicious calls to memset where the third argument contains the number of elements not multiplied by the element size.

Wmisleading-indentation
C C++ Common Var(warn_misleading_indentation) Warning LangEnabledBy(C C++,Wall)
Warn when the indentation of the code does not reflect the block structure.

Wmismatched-dealloc
C ObjC C++ ObjC++ Var(warn_mismatched_alloc) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn for deallocation calls with arguments returned from mismatched allocation
functions.

Wmismatched-new-delete
C++ ObjC++ Var(warn_mismatched_new_delete) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn for mismatches between calls to operator new or delete and the corrsponding
call to the allocation or deallocation function.

Wmismatched-tags
C++ ObjC++ Var(warn_mismatched_tags) Warning
Warn when a class is redeclared or referenced using a mismatched class-key.

Wmissing-braces
C ObjC C++ ObjC++ Var(warn_missing_braces) Warning LangEnabledBy(C ObjC,Wall)
Warn about possibly missing braces around initializers.

Wmissing-declarations
C ObjC C++ ObjC++ Var(warn_missing_declarations) Warning
Warn about global functions without previous declarations.

Wmissing-field-initializers
C ObjC C++ ObjC++ Var(warn_missing_field_initializers) Warning EnabledBy(Wextra)
Warn about missing fields in struct initializers.

Wmultistatement-macros
C ObjC C++ ObjC++ Var(warn_multistatement_macros) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for.

Wmultiple-inheritance
C++ ObjC++ Var(warn_multiple_inheritance) Warning
Warn on direct multiple inheritance.

Wnamespaces
C++ ObjC++ Var(warn_namespaces) Warning
Warn on namespace definition.

Wpacked-not-aligned
C ObjC C++ ObjC++ Var(warn_packed_not_aligned) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn when fields in a struct with the packed attribute are misaligned.

Wrange-loop-construct
C++ ObjC++ Var(warn_range_loop_construct) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn when a range-based for-loop is creating unnecessary copies.

Wredundant-tags
C++ ObjC++ Var(warn_redundant_tags) Warning
Warn when a class or enumerated type is referenced using a redundant class-key.

Wsized-deallocation
C++ ObjC++ Var(warn_sized_deallocation) Warning EnabledBy(Wextra)
Warn about missing sized deallocation functions.

Wsizeof-pointer-div
C ObjC C++ ObjC++ Var(warn_sizeof_pointer_div) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about suspicious divisions of two sizeof expressions that don't work correctly with pointers.

Wsizeof-array-div
C ObjC C++ ObjC++ Var(warn_sizeof_array_div) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about divisions of two sizeof operators when the first one is applied
to an array and the divisor does not equal the size of the array element.

Wsizeof-pointer-memaccess
C ObjC C++ ObjC++ Var(warn_sizeof_pointer_memaccess) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about suspicious length parameters to certain string functions if the argument uses sizeof.

Wsizeof-array-argument
C ObjC C++ ObjC++ Var(warn_sizeof_array_argument) Warning Init(1)
Warn when sizeof is applied on a parameter declared as an array.

Wstring-compare
C ObjC C++ LTO ObjC++ Warning Var(warn_string_compare) Warning LangEnabledBy(C ObjC C++ ObjC++, Wextra)
Warn about calls to strcmp and strncmp used in equality expressions that
are necessarily true or false due to the length of one and size of the other
argument.

Wstringop-overflow
C ObjC C++ LTO ObjC++ Warning Alias(Wstringop-overflow=, 2, 0)
Warn about buffer overflow in string manipulation functions like memcpy
and strcpy.

Wstringop-overflow=
C ObjC C++ LTO ObjC++ Joined RejectNegative UInteger Var(warn_stringop_overflow) Init(2) Warning LangEnabledBy(C ObjC C++ LTO ObjC++, Wall, 2, 0) IntegerRange(0, 4)
Under the control of Object Size type, warn about buffer overflow in string
manipulation functions like memcpy and strcpy.

Wstringop-overread
C ObjC C++ LTO ObjC++ Var(warn_stringop_overread) Init(1) Warning LangEnabledBy(C ObjC C++ LTO ObjC++, Wall)
Warn about reading past the end of a source array in string manipulation functions like memchr and memcpy.

Wstringop-truncation
C ObjC C++ LTO ObjC++ Var(warn_stringop_truncation) Warning Init (1) LangEnabledBy(C ObjC C++ LTO ObjC++, Wall)
Warn about truncation in string manipulation functions like strncat and strncpy.

Wsuggest-attribute=format
C ObjC C++ ObjC++ Var(warn_suggest_attribute_format) Warning
Warn about functions which might be candidates for format attributes.

Wsuggest-override
C++ ObjC++ Var(warn_override) Warning
Suggest that the override keyword be used when the declaration of a virtual
function overrides another.

Wswitch
C ObjC C++ ObjC++ Var(warn_switch) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about enumerated switches, with no default, missing a case.

Wswitch-default
C ObjC C++ ObjC++ Var(warn_switch_default) Warning
Warn about enumerated switches missing a \"default:\" statement.

Wswitch-enum
C ObjC C++ ObjC++ Var(warn_switch_enum) Warning
Warn about all enumerated switches missing a specific case.

Wswitch-bool
C ObjC C++ ObjC++ Var(warn_switch_bool) Warning Init(1)
Warn about switches with boolean controlling expression.

Wswitch-outside-range
C ObjC C++ ObjC++ Var(warn_switch_outside_range) Warning Init(1)
Warn about switch values that are outside of the switch's type range.

Wtemplates
C++ ObjC++ Var(warn_templates) Warning
Warn on primary template declaration.

Wmissing-attributes
C ObjC C++ ObjC++ Var(warn_missing_attributes) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about declarations of entities that may be missing attributes
that related entities have been declared with.

Wmissing-format-attribute
C ObjC C++ ObjC++ Warning Alias(Wsuggest-attribute=format)
;

Wmissing-include-dirs
C ObjC C++ ObjC++ CPP(warn_missing_include_dirs) CppReason(CPP_W_MISSING_INCLUDE_DIRS) Var(cpp_warn_missing_include_dirs) Init(0) Warning
Warn about user-specified include directories that do not exist.

Wmissing-parameter-type
C ObjC Var(warn_missing_parameter_type) Warning EnabledBy(Wextra)
Warn about function parameters declared without a type specifier in K&R-style functions.

Wmissing-prototypes
C ObjC Var(warn_missing_prototypes) Warning
Warn about global functions without prototypes.

Wmudflap
C ObjC C++ ObjC++ WarnRemoved

Wmultichar
C ObjC C++ ObjC++ CPP(warn_multichar) CppReason(CPP_W_MULTICHAR) Var(cpp_warn_multichar) Init(0) Warning
Warn about use of multi-character character constants.

Wnarrowing
C ObjC C++ ObjC++ Warning Var(warn_narrowing) Init(-1) LangEnabledBy(C++ ObjC++,Wall || Wc++11-compat)
Warn about narrowing conversions within { } that are ill-formed in C++11.

Wnested-externs
C ObjC Var(warn_nested_externs) Warning
Warn about \"extern\" declarations not at file scope.

Wnoexcept
C++ ObjC++ Var(warn_noexcept) Warning
Warn when a noexcept expression evaluates to false even though the expression can't actually throw.

Wnoexcept-type
C++ ObjC++ Warning Var(warn_noexcept_type) LangEnabledBy(C++ ObjC++,Wabi || Wc++17-compat)
Warn if C++17 noexcept function type will change the mangled name of a symbol.

Wnon-template-friend
C++ ObjC++ Var(warn_nontemplate_friend) Init(1) Warning
Warn when non-templatized friend functions are declared within a template.

Wclass-conversion
C++ ObjC++ Var(warn_class_conversion) Init(1) Warning
Warn when a conversion function will never be called due to the type it converts to.

Wclass-memaccess
C++ ObjC++ Var(warn_class_memaccess) Warning LangEnabledBy(C++ ObjC++, Wall)
Warn for unsafe raw memory writes to objects of class types.

Wnon-virtual-dtor
C++ ObjC++ Var(warn_nonvdtor) Warning LangEnabledBy(C++ ObjC++,Weffc++)
Warn about non-virtual destructors.

Wnonnull
C ObjC C++ LTO ObjC++ Var(warn_nonnull) Warning LangEnabledBy(C ObjC C++ LTO ObjC++,Wformat=,warn_format >= 1,0)
Warn about NULL being passed to argument slots marked as requiring non-NULL.

Wnonnull
C ObjC C++ LTO ObjC++ LangEnabledBy(C ObjC C++ LTO ObjC++,Wall)
;

Wnonnull-compare
C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wall)
;

Wnormalized
C ObjC C++ ObjC++ Warning Alias(Wnormalized=,nfc,none)
;

Wnormalized=
C ObjC C++ ObjC++ RejectNegative Joined Warning CPP(warn_normalize) CppReason(CPP_W_NORMALIZE) Init(normalized_C) Var(cpp_warn_normalize) Enum(cpp_normalize_level)
-Wnormalized=[none|id|nfc|nfkc]	Warn about non-normalized Unicode strings.

; Required for these enum values.
SourceInclude
cpplib.h

Enum
Name(cpp_normalize_level) Type(int) UnknownError(argument %qs to %<-Wnormalized%> not recognized)

EnumValue
Enum(cpp_normalize_level) String(none) Value(normalized_none)

EnumValue
Enum(cpp_normalize_level) String(nfkc) Value(normalized_KC)

EnumValue
Enum(cpp_normalize_level) String(id) Value(normalized_identifier_C)

EnumValue
Enum(cpp_normalize_level) String(nfc) Value(normalized_C)

Wobjc-root-class
ObjC ObjC++ Var(warn_objc_root_class) Warning Init(1)
Warn if a class interface has no superclass.  Root classes may use an attribute
to suppress this warning.

Wold-style-cast
C++ ObjC++ Var(warn_old_style_cast) Warning
Warn if a C-style cast is used in a program.

Wold-style-declaration
C ObjC Var(warn_old_style_declaration) Warning EnabledBy(Wextra)
Warn for obsolescent usage in a declaration.

Wold-style-definition
C ObjC Var(warn_old_style_definition) Init(-1) Warning
Warn if an old-style parameter definition is used.

Wopenmp-simd
C C++ Var(warn_openmp_simd) Warning LangEnabledBy(C C++,Wall)
Warn if a simd directive is overridden by the vectorizer cost model.

Woverlength-strings
C ObjC C++ ObjC++ Var(warn_overlength_strings) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic)
Warn if a string is longer than the maximum portable length specified by the standard.

Woverloaded-virtual
C++ ObjC++ Var(warn_overloaded_virtual) Warning
Warn about overloaded virtual function names.

Woverride-init
C ObjC Var(warn_override_init) Warning EnabledBy(Wextra)
Warn about overriding initializers without side effects.

Woverride-init-side-effects
C ObjC Var(warn_override_init_side_effects) Init(1) Warning
Warn about overriding initializers with side effects.

Wpacked-bitfield-compat
C ObjC C++ ObjC++ Var(warn_packed_bitfield_compat) Init(-1) Warning
Warn about packed bit-fields whose offset changed in GCC 4.4.

Wparentheses
C ObjC C++ ObjC++ Var(warn_parentheses) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about possibly missing parentheses.

Wpedantic
C ObjC C++ ObjC++ CPP(cpp_pedantic) CppReason(CPP_W_PEDANTIC) Warning
; Documented in common.opt

Wpessimizing-move
C++ ObjC++ Var(warn_pessimizing_move) Warning LangEnabledBy(C++ ObjC++, Wall)
Warn about calling std::move on a local object in a return statement preventing copy elision.

Wpmf-conversions
C++ ObjC++ Var(warn_pmf2ptr) Init(1) Warning
Warn when converting the type of pointers to member functions.

Wpointer-arith
C ObjC C++ ObjC++ Var(warn_pointer_arith) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic)
Warn about function pointer arithmetic.

Wpointer-sign
C ObjC Var(warn_pointer_sign) Warning LangEnabledBy(C ObjC,Wall || Wpedantic)
Warn when a pointer differs in signedness in an assignment.

Wpointer-compare
C ObjC C++ ObjC++ Var(warn_pointer_compare) Init(1) Warning
Warn when a pointer is compared with a zero character constant.

Wpointer-to-int-cast
C ObjC Var(warn_pointer_to_int_cast) Init(1) Warning
Warn when a pointer is cast to an integer of a different size.

Wpragmas
C ObjC C++ ObjC++ Var(warn_pragmas) Init(1) Warning
Warn about misuses of pragmas.

Wprio-ctor-dtor
C ObjC C++ ObjC++ Var(warn_prio_ctor_dtor) Init(1) Warning
Warn if constructor or destructors with priorities from 0 to 100 are used.

Wproperty-assign-default
ObjC ObjC++ Var(warn_property_assign_default) Init(1) Warning
Warn if a property for an Objective-C object has no assign semantics specified.

Wprotocol
ObjC ObjC++ Var(warn_protocol) Init(1) Warning
Warn if inherited methods are unimplemented.

Wplacement-new
C++ Warning Alias(Wplacement-new=, 1, 0)
Warn for placement new expressions with undefined behavior.

Wplacement-new=
C++ Joined RejectNegative UInteger Var(warn_placement_new) Init(-1) Warning IntegerRange(0, 2)
Warn for placement new expressions with undefined behavior.

Wredundant-decls
C ObjC C++ ObjC++ Var(warn_redundant_decls) Warning
Warn about multiple declarations of the same object.

Wredundant-move
C++ ObjC++ Var(warn_redundant_move) Warning LangEnabledBy(C++ ObjC++,Wextra)
Warn about redundant calls to std::move.

Wregister
C++ ObjC++ Var(warn_register) Warning
Warn about uses of register storage specifier.

Wreorder
C++ ObjC++ Var(warn_reorder) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn when the compiler reorders code.

Wreturn-type
C ObjC C++ ObjC++ Var(warn_return_type) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) Init(-1)
Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++).

Wscalar-storage-order
C ObjC C++ ObjC++ Var(warn_scalar_storage_order) Init(1) Warning
Warn on suspicious constructs involving reverse scalar storage order.

Wselector
ObjC ObjC++ Var(warn_selector) Warning
Warn if a selector has multiple methods.

Wsequence-point
C ObjC C++ ObjC++ Var(warn_sequence_point) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about possible violations of sequence point rules.

Wshadow-ivar
ObjC ObjC++ Var(warn_shadow_ivar) EnabledBy(Wshadow) Init(1) Warning
Warn if a local declaration hides an instance variable.

Wshift-overflow
C ObjC C++ ObjC++ Warning Alias(Wshift-overflow=, 1, 0)
Warn if left shift of a signed value overflows.

Wshift-overflow=
C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_shift_overflow) Init(-1) Warning IntegerRange(0, 2)
Warn if left shift of a signed value overflows.

Wshift-count-negative
C ObjC C++ ObjC++ Var(warn_shift_count_negative) Init(1) Warning
Warn if shift count is negative.

Wshift-count-overflow
C ObjC C++ ObjC++ Var(warn_shift_count_overflow) Init(1) Warning
Warn if shift count >= width of type.

Wshift-negative-value
C ObjC C++ ObjC++ Var(warn_shift_negative_value) Init(-1) Warning
Warn if left shifting a negative value.

Warith-conversion
C ObjC C++ ObjC++ Var(warn_arith_conv) Warning
Warn if conversion of the result of arithmetic might change the value even though converting the operands cannot.

Wsign-compare
C ObjC C++ ObjC++ Var(warn_sign_compare) Warning LangEnabledBy(C++ ObjC++,Wall)
Warn about signed-unsigned comparisons.

Wsign-compare
C ObjC C++ ObjC++ EnabledBy(Wextra)
;

Wsign-conversion
C ObjC C++ ObjC++ Var(warn_sign_conversion) Warning LangEnabledBy(C ObjC,Wconversion)
Warn for implicit type conversions between signed and unsigned integers.

Wsign-promo
C++ ObjC++ Var(warn_sign_promo) Warning
Warn when overload promotes from unsigned to signed.

Wstrict-null-sentinel
C++ ObjC++ Warning Var(warn_strict_null_sentinel)
Warn about uncasted NULL used as sentinel.

Wstrict-prototypes
C ObjC Var(warn_strict_prototypes) Warning
Warn about unprototyped function declarations.

Wstrict-aliasing=
C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wall, 3, 0) IntegerRange(0, 3)
;

Wstrict-overflow=
C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) IntegerRange(0, 5)
;

Wstrict-selector-match
ObjC ObjC++ Var(warn_strict_selector_match) Warning
Warn if type signatures of candidate methods do not match exactly.

Wsync-nand
C C++ Var(warn_sync_nand) Init(1) Warning
Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions are used.

Wsynth
C++ ObjC++ Var(warn_synth) Warning
Deprecated.  This switch has no effect.

Wsystem-headers
C ObjC C++ ObjC++ Warning
; Documented in common.opt

Wtautological-compare
C ObjC C++ ObjC++ Var(warn_tautological_compare) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn if a comparison always evaluates to true or false.

Wterminate
C++ ObjC++ Warning Var(warn_terminate) Init(1)
Warn if a throw expression will always result in a call to terminate().

Wtraditional
C ObjC CPP(cpp_warn_traditional) CppReason(CPP_W_TRADITIONAL) Var(warn_traditional) Init(0) Warning
Warn about features not present in traditional C.

Wtraditional-conversion
C ObjC Var(warn_traditional_conversion) Warning
Warn of prototypes causing type conversions different from what would happen in the absence of prototype.

Wtrigraphs
C ObjC C++ ObjC++ CPP(warn_trigraphs) CppReason(CPP_W_TRIGRAPHS) Var(cpp_warn_trigraphs) Init(2) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn if trigraphs are encountered that might affect the meaning of the program.

Wundeclared-selector
ObjC ObjC++ Var(warn_undeclared_selector) Warning
Warn about @selector()s without previously declared methods.

Wundef
C ObjC C++ ObjC++ CPP(warn_undef) CppReason(CPP_W_UNDEF) Var(cpp_warn_undef) Init(0) Warning
Warn if an undefined macro is used in an #if directive.

Wuninitialized
C ObjC C++ ObjC++ LTO LangEnabledBy(C ObjC C++ ObjC++ LTO,Wall)
;

Wmaybe-uninitialized
C ObjC C++ ObjC++ LTO LangEnabledBy(C ObjC C++ ObjC++ LTO,Wall)
;

Wunknown-pragmas
C ObjC C++ ObjC++ Warning Var(warn_unknown_pragmas) LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0)
Warn about unrecognized pragmas.

Wunsuffixed-float-constants
C ObjC Var(warn_unsuffixed_float_constants) Warning
Warn about unsuffixed float constants.

Wunused
C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wall)
; documented in common.opt

Wunused-local-typedefs
C ObjC C++ ObjC++ Var(warn_unused_local_typedefs) Warning EnabledBy(Wunused)
Warn when typedefs locally defined in a function are not used.

Wunused-macros
C ObjC C++ ObjC++ CppReason(CPP_W_UNUSED_MACROS) Var(cpp_warn_unused_macros) Warning
Warn about macros defined in the main file that are not used.

Wunused-result
C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning
Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value.

Wunused-variable
C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wunused)
; documented in common.opt

Wunused-const-variable
C ObjC C++ ObjC++ Warning Alias(Wunused-const-variable=, 2, 0)
Warn when a const variable is unused.

Wunused-const-variable=
C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_unused_const_variable) Warning LangEnabledBy(C ObjC,Wunused-variable, 1, 0) IntegerRange(0, 2)
Warn when a const variable is unused.

Wvariadic-macros
C ObjC C++ ObjC++ CPP(warn_variadic_macros) CppReason(CPP_W_VARIADIC_MACROS) Var(cpp_warn_variadic_macros) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic || Wtraditional)
Warn about using variadic macros.

Wvarargs
C ObjC C++ ObjC++ Warning Var(warn_varargs) Init(1)
Warn about questionable usage of the macros used to retrieve variable arguments.

Wvexing-parse
C++ ObjC++ Warning Var(warn_vexing_parse) Init(1)
Warn about the most vexing parse syntactic ambiguity.

Wvla
C ObjC C++ ObjC++ Var(warn_vla) Init(-1) Warning
Warn if a variable length array is used.

Wvla-larger-than=
C ObjC C++ LTO ObjC++ Var(warn_vla_limit) Warning Joined Host_Wide_Int ByteSize Init(HOST_WIDE_INT_MAX)
-Wvla-larger-than=<number>	Warn on unbounded uses of variable-length
arrays, and on bounded uses of variable-length arrays whose bound can be
larger than <number> bytes.

Wno-vla-larger-than
C ObjC C++ LTO ObjC++ Alias(Wvla-larger-than=,18446744073709551615EiB,none) Warning
Disable Wvla-larger-than= warning.  Equivalent to Wvla-larger-than=<SIZE_MAX> or larger.

Wvla-parameter
C ObjC C++ ObjC++ Var(warn_vla_parameter) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about mismatched declarations of VLA parameters.

Wvolatile
C++ ObjC++ Var(warn_volatile) Warning
Warn about deprecated uses of volatile qualifier.

Wvolatile-register-var
C ObjC C++ ObjC++ Var(warn_volatile_register_var) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn when a register variable is declared volatile.

Wvirtual-inheritance
C++ ObjC++ Var(warn_virtual_inheritance) Warning
Warn on direct virtual inheritance.

Wvirtual-move-assign
C++ ObjC++ Var(warn_virtual_move_assign) Warning Init(1)
Warn if a virtual base has a non-trivial move assignment operator.

Wwrite-strings
C ObjC C++ ObjC++ Var(warn_write_strings) Warning
In C++, nonzero means warn about deprecated conversion from string literals to 'char *'.  In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard.

Wzero-as-null-pointer-constant
C++ ObjC++ Var(warn_zero_as_null_pointer_constant) Warning
Warn when a literal '0' is used as null pointer.

Wuseless-cast
C++ ObjC++ Var(warn_useless_cast) Warning
Warn about useless casts.

Wsubobject-linkage
C++ ObjC++ Var(warn_subobject_linkage) Warning Init(1)
Warn if a class type has a base or a field whose type uses the anonymous namespace or depends on a type with no linkage.

Wduplicate-decl-specifier
C ObjC Var(warn_duplicate_decl_specifier) Warning LangEnabledBy(C ObjC,Wall)
Warn when a declaration has duplicate const, volatile, restrict or _Atomic specifier.

Wrestrict
C ObjC C++ ObjC++ Var(warn_restrict) Warning LangEnabledBy(C ObjC C++ ObjC++, Wall)
Warn when an argument passed to a restrict-qualified parameter aliases with
another argument.

ansi
C ObjC C++ ObjC++
A synonym for -std=c89 (for C) or -std=c++98 (for C++).

d
C ObjC C++ ObjC++ Joined
; Documented in common.opt.  FIXME - what about -dI, -dD, -dN and -dD?

fabi-compat-version=
C++ ObjC++ Joined RejectNegative UInteger Var(flag_abi_compat_version) Init(-1)
The version of the C++ ABI used for -Wabi warnings and link compatibility aliases.

faccess-control
C++ ObjC++ Var(flag_access_control) Init(1)
Enforce class member access control semantics.

fada-spec-parent=
C ObjC C++ ObjC++ RejectNegative Joined Var(ada_specs_parent)
-fada-spec-parent=unit	Dump Ada specs as child units of given parent.

faligned-new
C++ ObjC++ Alias(faligned-new=,1,0)
Support C++17 allocation of over-aligned types.

faligned-new=
C++ ObjC++ Joined RejectNegative Var(aligned_new_threshold) UInteger Init(-1)
-faligned-new=<N>	Use C++17 over-aligned type allocation for alignments greater than N.

fall-virtual
C++ ObjC++ WarnRemoved

fallow-parameterless-variadic-functions
C ObjC Var(flag_allow_parameterless_variadic_functions)
Allow variadic functions without named parameter.

falt-external-templates
C++ ObjC++ WarnRemoved
No longer supported.

fasm
C ObjC C++ ObjC++ Var(flag_no_asm, 0)
Recognize the \"asm\" keyword.

; Define extra predefined macros for use in libgcc.
fbuilding-libgcc
C ObjC C++ ObjC++ Undocumented Var(flag_building_libgcc)

fbuiltin
C ObjC C++ ObjC++ Var(flag_no_builtin, 0)
Recognize built-in functions.

fbuiltin-
C ObjC C++ ObjC++ Joined

fcanonical-system-headers
C ObjC C++ ObjC++
Where shorter, use canonicalized paths to systems headers.

fchar8_t
C++ ObjC++ Var(flag_char8_t) Init(-1)
Enable the char8_t fundamental type and use it as the type for UTF-8 string
and character literals.

fcheck-pointer-bounds
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-check-incomplete-type
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-zero-input-bounds-for-main
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-first-field-has-own-bounds
C ObjC C++ ObjC++ LTO WarnRemoved RejectNegative
Removed in GCC 9.  This switch has no effect.

fchkp-narrow-bounds
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-narrow-to-innermost-array
C ObjC C++ ObjC++ LTO WarnRemoved RejectNegative
Removed in GCC 9.  This switch has no effect.

fchkp-flexible-struct-trailing-arrays
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-optimize
C ObjC C++ ObjC++ LTO WarnRemoved

fchkp-use-fast-string-functions
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-use-nochk-string-functions
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-use-static-bounds
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-use-static-const-bounds
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-treat-zero-dynamic-size-as-infinite
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-check-read
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-check-write
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-store-bounds
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-instrument-calls
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-instrument-marked-only
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

fchkp-use-wrappers
C ObjC C++ ObjC++ LTO WarnRemoved
Removed in GCC 9.  This switch has no effect.

static-libmpx
Driver WarnRemoved
Removed in GCC 9.  This switch has no effect.

static-libmpxwrappers
Driver WarnRemoved
Removed in GCC 9.  This switch has no effect.

fcilkplus
C ObjC C++ ObjC++ LTO Undocumented Ignore
Removed in GCC 8.  This switch has no effect.

fconcepts
C++ ObjC++ Var(flag_concepts)
Enable support for C++ concepts.

fconcepts-ts
C++ ObjC++ Var(flag_concepts_ts) Init(0)
Enable certain features present in the Concepts TS.

fconcepts-diagnostics-depth=
C++ ObjC++ Joined RejectNegative UInteger Var(concepts_diagnostics_max_depth) Init(1)
Specify maximum error replay depth during recursive diagnosis of a constraint satisfaction failure.

fcond-mismatch
C ObjC C++ ObjC++
Allow the arguments of the '?' operator to have different types.

fconserve-space
C++ ObjC++ Ignore
Does nothing.  Preserved for backward compatibility.

fconstant-string-class=
ObjC ObjC++ Joined MissingArgError(no class name specified with %qs)
-fconst-string-class=<name>	Use class <name> for constant strings.

fconstexpr-depth=
C++ ObjC++ Joined RejectNegative UInteger Var(max_constexpr_depth) Init(512)
-fconstexpr-depth=<number>	Specify maximum constexpr recursion depth.

fconstexpr-cache-depth=
C++ ObjC++ Joined RejectNegative UInteger Var(constexpr_cache_depth) Init(8)
-fconstexpr-cache-depth=<number>	Specify maximum constexpr recursion cache depth.

fconstexpr-loop-limit=
C++ ObjC++ Joined RejectNegative UInteger Var(constexpr_loop_limit) Init(262144)
-fconstexpr-loop-limit=<number>	Specify maximum constexpr loop iteration count.

fconstexpr-ops-limit=
C++ ObjC++ Joined RejectNegative Host_Wide_Int Var(constexpr_ops_limit) Init(33554432)
-fconstexpr-ops-limit=<number>	Specify maximum number of constexpr operations during a single constexpr evaluation.

fcoroutines
C++ LTO Var(flag_coroutines)
Enable C++ coroutines (experimental).

fdebug-cpp
C ObjC C++ ObjC++
Emit debug annotations during preprocessing.

fdeduce-init-list
C++ ObjC++ Ignore
Does nothing.  Preserved for backward compatibility.

fdeclone-ctor-dtor
C++ ObjC++ Var(flag_declone_ctor_dtor) Init(-1)
Factor complex constructors and destructors to favor space over speed.

fdefault-inline
C++ ObjC++ Ignore
Does nothing.  Preserved for backward compatibility.

fdiagnostics-show-template-tree
C++ ObjC++ Var(flag_diagnostics_show_template_tree) Init(0)
Print hierarchical comparisons when template types are mismatched.

fdirectives-only
C ObjC C++ ObjC++
Preprocess directives only.

fdollars-in-identifiers
C ObjC C++ ObjC++
Permit '$' as an identifier character.

fmacro-prefix-map=
C ObjC C++ ObjC++ Joined RejectNegative
-fmacro-prefix-map=<old>=<new>	Map one directory name to another in __FILE__, __BASE_FILE__, and __builtin_FILE().

fdump-ada-spec
C ObjC C++ ObjC++ RejectNegative Var(flag_dump_ada_spec)
Write all declarations as Ada code transitively.

fdump-ada-spec-slim
C ObjC C++ ObjC++ RejectNegative Var(flag_dump_ada_spec_slim)
Write all declarations as Ada code for the given file only.

felide-constructors
C++ ObjC++ Var(flag_elide_constructors) Init(1)

felide-type
C++ ObjC++ Var(flag_elide_type) Init(1)
Do not elide common elements in template comparisons.

fenforce-eh-specs
C++ ObjC++ Var(flag_enforce_eh_specs) Init(1)
Generate code to check exception specifications.

fenum-int-equiv
C++ ObjC++ WarnRemoved

fexec-charset=
C ObjC C++ ObjC++ Joined RejectNegative
-fexec-charset=<cset>	Convert all strings and character constants to character set <cset>.

fextended-identifiers
C ObjC C++ ObjC++
Permit universal character names (\\u and \\U) in identifiers.

finput-charset=
C ObjC C++ ObjC++ Joined RejectNegative
-finput-charset=<cset>	Specify the default character set for source files.

fextern-tls-init
C++ ObjC++ Var(flag_extern_tls_init) Init(-1)
Support dynamic initialization of thread-local variables in a different translation unit.

fexternal-templates
C++ ObjC++ WarnRemoved

ffor-scope
C++ ObjC++ WarnRemoved

ffreestanding
C ObjC C++ ObjC++
Do not assume that standard C libraries and \"main\" exist.

fgnu-keywords
C++ ObjC++ Var(flag_no_gnu_keywords, 0)
Recognize GNU-defined keywords.

fgnu-runtime
ObjC ObjC++ LTO RejectNegative Var(flag_next_runtime,0) Init(NEXT_OBJC_RUNTIME)
Generate code for GNU runtime environment.

fgnu89-inline
C ObjC Var(flag_gnu89_inline) Init(-1)
Use traditional GNU semantics for inline functions.

fguiding-decls
C++ ObjC++ WarnRemoved

fhandle-exceptions
C++ ObjC++ Optimization Alias(fexceptions) Warn({%<-fhandle-exceptions%> has been renamed %<-fexceptions%> (and is now on by default)})

fheader-guard-opt
C ObjC C++ ObjC++
Enable header file include guard optimization.

fhonor-std
C++ ObjC++ WarnRemoved

fhosted
C ObjC
Assume normal C execution environment.

fhuge-objects
C++ ObjC++ WarnRemoved
No longer supported.

fimplement-inlines
C++ ObjC++ Var(flag_implement_inlines) Init(1)
Export functions even if they can be inlined.

fimplicit-inline-templates
C++ ObjC++ Var(flag_implicit_inline_templates) Init(1)
Emit implicit instantiations of inline templates.

fimplicit-templates
C++ ObjC++ Var(flag_implicit_templates) Init(1)
Emit implicit instantiations of templates.

fnew-inheriting-ctors
C++ ObjC++ Var(flag_new_inheriting_ctors) Init(1)
Implement C++17 inheriting constructor semantics.

ffriend-injection
C++ ObjC++ WarnRemoved

fkeep-inline-dllexport
C C++ ObjC ObjC++ Var(flag_keep_inline_dllexport) Init(1) Condition(TARGET_DLLIMPORT_DECL_ATTRIBUTES)
Don't emit dllexported inline functions unless needed.

flabels-ok
C++ ObjC++ WarnRemoved

flax-vector-conversions
C ObjC C++ ObjC++ Var(flag_lax_vector_conversions)
Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types.

fmodules-ts
C++ ObjC++ Var(flag_modules) Integer Init(0)
Enable C++ modules-ts (experimental).

fno-modules
C++ ObjC++ Undocumented RejectNegative Var(flag_modules,0) Integer
;; undocumented

fmodule-header
C++ ObjC RejectNegative Var(flag_header_unit,0) Integer
Enable C++ header module (experimental).

fmodule-header=
C++ ObjC++ Joined RejectNegative Undocumented

fmodule-implicit-inline
C++ ObjC++ Var(flag_module_implicit_inline,0) Integer
Member functions defined within their class are inline in module purview.

fmodule-only
C++ ObjC RejectNegative Var(flag_module_only) Integer
Only emit Compiled Module Interface.

fmodule-mapper=
C++ ObjC++ Joined RejectNegative MissingArgError(missing mapper)
Mapper for module to CMI files.

fmodule-lazy
C++ ObjC++ Var(flag_module_lazy) Init(1)
Enable lazy module importing.

fmodule-version-ignore
C++ ObjC Var(flag_module_version_ignore) Integer
; undocumented, Very dangerous, but occasionally useful

Winvalid-imported-macros
C++ ObjC++ Var(warn_imported_macros)
Warn about macros that have conflicting header units definitions.

flang-info-include-translate
C++ Var(note_include_translate_yes)
Note #include directives translated to import declarations.

flang-info-include-translate-not
C++ Var(note_include_translate_no)
Note #include directives not translated to import declarations, and not known to be textual.

flang-info-include-translate=
C++ Joined RejectNegative MissingArgError(missing header name)
Note a #include translation of a specific header.

fmax-include-depth=
C ObjC C++ ObjC++ Joined RejectNegative UInteger
fmax-include-depth=<number> Set the maximum depth of the nested #include.

fms-extensions
C ObjC C++ ObjC++ Var(flag_ms_extensions)
Don't warn about uses of Microsoft extensions.

fmudflap
C ObjC C++ ObjC++ WarnRemoved

fmudflapth
C ObjC C++ ObjC++ WarnRemoved

fmudflapir
C ObjC C++ ObjC++ WarnRemoved

fname-mangling-version-
C++ ObjC++ Joined WarnRemoved

fnew-abi
C++ ObjC++ WarnRemoved

fnew-ttp-matching
C++ ObjC++ Var(flag_new_ttp)
Implement resolution of DR 150 for matching of template template arguments.

fnext-runtime
ObjC ObjC++ LTO RejectNegative Var(flag_next_runtime)
Generate code for NeXT (Apple Mac OS X) runtime environment.

fnil-receivers
ObjC ObjC++ Var(flag_nil_receivers) Init(1)
Assume that receivers of Objective-C messages may be nil.

flocal-ivars
ObjC ObjC++ Var(flag_local_ivars) Init(1)
Allow access to instance variables as if they were local declarations within instance method implementations.

fivar-visibility=
ObjC ObjC++ Joined RejectNegative Enum(ivar_visibility) Var(default_ivar_visibility) Init(IVAR_VISIBILITY_PROTECTED)
-fvisibility=[private|protected|public|package]	Set the default symbol visibility.

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

EnumValue
Enum(ivar_visibility) String(private) Value(IVAR_VISIBILITY_PRIVATE)

EnumValue
Enum(ivar_visibility) String(protected) Value(IVAR_VISIBILITY_PROTECTED)

EnumValue
Enum(ivar_visibility) String(public) Value(IVAR_VISIBILITY_PUBLIC)

EnumValue
Enum(ivar_visibility) String(package) Value(IVAR_VISIBILITY_PACKAGE)

fnonansi-builtins
C++ ObjC++ Var(flag_no_nonansi_builtin, 0)

fnonnull-objects
C++ ObjC++ WarnRemoved

fnothrow-opt
C++ ObjC++ Optimization Var(flag_nothrow_opt)
Treat a throw() exception specification as noexcept to improve code size.

fobjc-abi-version=
ObjC ObjC++ LTO Joined RejectNegative UInteger Var(flag_objc_abi)
Specify which ABI to use for Objective-C family code and meta-data generation.

; Generate special '- .cxx_construct' and '- .cxx_destruct' methods
; to initialize any non-POD ivars in Objective-C++ classes.
fobjc-call-cxx-cdtors
ObjC++ Var(flag_objc_call_cxx_cdtors)
Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed.

fobjc-direct-dispatch
ObjC ObjC++ Var(flag_objc_direct_dispatch)
Allow fast jumps to the message dispatcher.

; Nonzero means that we will allow new ObjC exception syntax (@throw,
; @try, etc.) in source code.
fobjc-exceptions
ObjC ObjC++ Var(flag_objc_exceptions)
Enable Objective-C exception and synchronization syntax.

fobjc-gc
ObjC ObjC++ LTO Var(flag_objc_gc)
Enable garbage collection (GC) in Objective-C/Objective-C++ programs.

fobjc-nilcheck
ObjC ObjC++ Var(flag_objc_nilcheck,1)
Enable inline checks for nil receivers with the NeXT runtime and ABI version 2.

; Nonzero means that we generate NeXT setjmp based exceptions.
fobjc-sjlj-exceptions
ObjC ObjC++ Var(flag_objc_sjlj_exceptions) Init(-1)
Enable Objective-C setjmp exception handling runtime.

fobjc-std=objc1
ObjC ObjC++ Var(flag_objc1_only)
Conform to the Objective-C 1.0 language as implemented in GCC 4.0.

fopenacc
C ObjC C++ ObjC++ LTO Var(flag_openacc)
Enable OpenACC.

fopenacc-dim=
C ObjC C++ ObjC++ LTO Joined Var(flag_openacc_dims)
Specify default OpenACC compute dimensions.

fopenacc-kernels=
C ObjC C++ ObjC++ RejectNegative Joined Enum(openacc_kernels) Var(flag_openacc_kernels) Init(OPENACC_KERNELS_PARLOOPS)
-fopenacc-kernels=[decompose|parloops]	Specify mode of OpenACC 'kernels' constructs handling.

Enum
Name(openacc_kernels) Type(enum openacc_kernels)

EnumValue
Enum(openacc_kernels) String(decompose) Value(OPENACC_KERNELS_DECOMPOSE)

EnumValue
Enum(openacc_kernels) String(parloops) Value(OPENACC_KERNELS_PARLOOPS)

fopenmp
C ObjC C++ ObjC++ LTO Var(flag_openmp)
Enable OpenMP (implies -frecursive in Fortran).

fopenmp-simd
C ObjC C++ ObjC++ Var(flag_openmp_simd)
Enable OpenMP's SIMD directives.

foperator-names
C++ ObjC++
Recognize C++ keywords like \"compl\" and \"xor\".

foptional-diags
C++ ObjC++ Ignore
Does nothing.  Preserved for backward compatibility.

fpch-deps
C ObjC C++ ObjC++

fpch-preprocess
C ObjC C++ ObjC++
Look for and use PCH files even when preprocessing.

fpermissive
C++ ObjC++ Var(flag_permissive)
Downgrade conformance errors to warnings.

fplan9-extensions
C ObjC Var(flag_plan9_extensions)
Enable Plan 9 language extensions.

fpreprocessed
C ObjC C++ ObjC++
Treat the input file as already preprocessed.

ftrack-macro-expansion
C ObjC C++ ObjC++ JoinedOrMissing RejectNegative UInteger
; converted into ftrack-macro-expansion=

ftrack-macro-expansion=
C ObjC C++ ObjC++ JoinedOrMissing RejectNegative UInteger
-ftrack-macro-expansion=<0|1|2>	Track locations of tokens coming from macro expansion and display them in error messages.

fpretty-templates
C++ ObjC++ Var(flag_pretty_templates) Init(1)
Do not pretty-print template specializations as the template signature followed by the arguments.

fprintf-return-value
C ObjC C++ ObjC++ LTO Optimization Var(flag_printf_return_value) Init(1)
Treat known sprintf return values as constants.

freplace-objc-classes
ObjC ObjC++ LTO Var(flag_replace_objc_classes)
Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime.

frepo
C++ ObjC++ WarnRemoved
Removed in GCC 10.  This switch has no effect.

frtti
C++ ObjC++ Optimization Var(flag_rtti) Init(1)
Generate run time type descriptor information.

fshort-enums
C ObjC C++ ObjC++ LTO Optimization Var(flag_short_enums)
Use the narrowest integer type possible for enumeration types.

fshort-wchar
C ObjC C++ ObjC++ LTO Optimization Var(flag_short_wchar)
Force the underlying type for \"wchar_t\" to be \"unsigned short\".

fsigned-bitfields
C ObjC C++ ObjC++ Var(flag_signed_bitfields) Init(1)
When \"signed\" or \"unsigned\" is not given make the bitfield signed.

fsigned-char
C ObjC C++ ObjC++ LTO Var(flag_signed_char)
Make \"char\" signed by default.

fsized-deallocation
C++ ObjC++ Var(flag_sized_deallocation) Init(-1)
Enable C++14 sized deallocation support.

fsquangle
C++ ObjC++ WarnRemoved

fsso-struct=
C ObjC Joined RejectNegative Enum(sso_struct) Var(default_sso) Init(SSO_NATIVE)
-fsso-struct=[big-endian|little-endian|native]	Set the default scalar storage order.

Enum
Name(sso_struct) Type(enum scalar_storage_order_kind) UnknownError(unrecognized scalar storage order value %qs)

EnumValue
Enum(sso_struct) String(big-endian) Value(SSO_BIG_ENDIAN)

EnumValue
Enum(sso_struct) String(little-endian) Value(SSO_LITTLE_ENDIAN)

EnumValue
Enum(sso_struct) String(native) Value(SSO_NATIVE)

fstats
C++ ObjC++ Var(flag_detailed_statistics)
Display statistics accumulated during compilation.

fstrict-enums
C++ ObjC++ Optimization Var(flag_strict_enums)
Assume that values of enumeration type are always within the minimum range of that type.

fstrict-prototype
C++ ObjC++ WarnRemoved

fstrong-eval-order
C++ ObjC++ Common Alias(fstrong-eval-order=, all, none)
Follow the C++17 evaluation order requirements for assignment expressions,
shift, member function calls, etc.

fstrong-eval-order=
C++ ObjC++ Common Var(flag_strong_eval_order) Joined Enum(strong_eval_order) RejectNegative Init(-1)
Follow the C++17 evaluation order requirements for assignment expressions,
shift, member function calls, etc.

Enum
Name(strong_eval_order) Type(int)

EnumValue
Enum(strong_eval_order) String(none) Value(0)

EnumValue
Enum(strong_eval_order) String(some) Value(1)

EnumValue
Enum(strong_eval_order) String(all) Value(2)

ftemplate-backtrace-limit=
C++ ObjC++ Joined RejectNegative UInteger Var(template_backtrace_limit) Init(10)
Set the maximum number of template instantiation notes for a single warning or error.

ftemplate-depth-
C++ ObjC++ Joined RejectNegative Undocumented Alias(ftemplate-depth=)

ftemplate-depth=
C++ ObjC++ Joined RejectNegative UInteger
-ftemplate-depth=<number>	Specify maximum template instantiation depth.

fthis-is-variable
C++ ObjC++ WarnRemoved

fthreadsafe-statics
C++ ObjC++ Optimization Var(flag_threadsafe_statics) Init(1)
-fno-threadsafe-statics	Do not generate thread-safe code for initializing local statics.

funsigned-bitfields
C ObjC C++ ObjC++ Var(flag_signed_bitfields, 0)
When \"signed\" or \"unsigned\" is not given make the bitfield unsigned.

funsigned-char
C ObjC C++ ObjC++ LTO Var(flag_signed_char, 0)
Make \"char\" unsigned by default.

fuse-cxa-atexit
C++ ObjC++ Var(flag_use_cxa_atexit) Init(DEFAULT_USE_CXA_ATEXIT)
Use __cxa_atexit to register destructors.

fuse-cxa-get-exception-ptr
C++ ObjC++ Var(flag_use_cxa_get_exception_ptr) Init(2)
Use __cxa_get_exception_ptr in exception handling.

fvisibility-inlines-hidden
C++ ObjC++
Marks all inlined functions and methods as having hidden visibility.

fvisibility-ms-compat
C++ ObjC++ Var(flag_visibility_ms_compat)
Changes visibility to match Microsoft Visual Studio by default.

fvtable-gc
C++ ObjC++ WarnRemoved
No longer supported.

fvtable-thunks
C++ ObjC++ WarnRemoved 
No longer supported.

fweak
C++ ObjC++ Var(flag_weak) Init(1)
Emit common-like symbols as weak symbols.

fwide-exec-charset=
C ObjC C++ ObjC++ Joined RejectNegative
-fwide-exec-charset=<cset>	Convert all wide strings and character constants to character set <cset>.

fworking-directory
C ObjC C++ ObjC++ Var(flag_working_directory) Init(-1)
Generate a #line directive pointing at the current working directory.

fxref
C++ ObjC++ WarnRemoved
No longer supported.

fzero-link
ObjC ObjC++ Var(flag_zero_link)
Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode.

gen-decls
ObjC ObjC++ Driver Var(flag_gen_declaration) RejectNegative
Dump declarations to a .decl file.

femit-struct-debug-baseonly
C ObjC C++ ObjC++
-femit-struct-debug-baseonly	Aggressive reduced debug info for structs.

femit-struct-debug-reduced
C ObjC C++ ObjC++
-femit-struct-debug-reduced	Conservative reduced debug info for structs.

femit-struct-debug-detailed=
C ObjC C++ ObjC++ Joined
-femit-struct-debug-detailed=<spec-list>	Detailed reduced debug info for structs.

fext-numeric-literals
C++ ObjC++ Var(flag_ext_numeric_literals) Init(1)
Interpret imaginary, fixed-point, or other gnu number suffix as the corresponding
number literal rather than a user-defined number literal.

idirafter
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-idirafter <dir>	Add <dir> to the end of the system include path.

imacros
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing filename after %qs)
-imacros <file>	Accept definition of macros in <file>.

imultilib
C ObjC C++ ObjC++ Joined Separate
-imultilib <dir>	Set <dir> to be the multilib include subdirectory.

include
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing filename after %qs)
-include <file>	Include the contents of <file> before other files.

iprefix
C ObjC C++ ObjC++ Joined Separate
-iprefix <path>	Specify <path> as a prefix for next two options.

isysroot
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-isysroot <dir>	Set <dir> to be the system root directory.

isystem
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-isystem <dir>	Add <dir> to the start of the system include path.

iquote
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-iquote <dir>	Add <dir> to the end of the quote include path.

iwithprefix
C ObjC C++ ObjC++ Joined Separate
-iwithprefix <dir>	Add <dir> to the end of the system include path.

iwithprefixbefore
C ObjC C++ ObjC++ Joined Separate
-iwithprefixbefore <dir>	Add <dir> to the end of the main include path.

lang-asm
C Undocumented RejectDriver

no-integrated-cpp
Driver

nostdinc
C ObjC C++ ObjC++
Do not search standard system include directories (those specified with -isystem will still be used).

nostdinc++
C++ ObjC++
Do not search standard system include directories for C++.

o
C ObjC C++ ObjC++ Joined Separate
; Documented in common.opt

pedantic
C ObjC C++ ObjC++ Alias(Wpedantic)
; Documented in common.opt

print-objc-runtime-info
ObjC ObjC++
Generate C header of platform-specific features.

remap
C ObjC C++ ObjC++
Remap file names when including files.

std=c++98
C++ ObjC++
Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum.

std=c++03
C++ ObjC++ Alias(std=c++98)
Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum.

std=c++11
C++ ObjC++
Conform to the ISO 2011 C++ standard.

std=c++0x
C++ ObjC++ Alias(std=c++11) Undocumented
Deprecated in favor of -std=c++11.

std=c++1y
C++ ObjC++ Alias(std=c++14) Undocumented
Deprecated in favor of -std=c++14.

std=c++14
C++ ObjC++
Conform to the ISO 2014 C++ standard.

std=c++1z
C++ ObjC++ Alias(std=c++17) Undocumented
Deprecated in favor of -std=c++17.

std=c++17
C++ ObjC++
Conform to the ISO 2017 C++ standard.

std=c++2a
C++ ObjC++ Alias(std=c++20) Undocumented
Conform to the ISO 2020 C++ standard (experimental and incomplete support).

std=c++20
C++ ObjC++
Conform to the ISO 2020 C++ standard (experimental and incomplete support).

std=c++2b
C++ ObjC++ Alias(std=c++23)
Conform to the ISO 2023 C++ draft standard (experimental and incomplete support).

std=c++23
C++ ObjC++ Undocumented
Conform to the ISO 2023 C++ draft standard (experimental and incomplete support).

std=c11
C ObjC
Conform to the ISO 2011 C standard.

std=c1x
C ObjC Alias(std=c11)
Deprecated in favor of -std=c11.

std=c17
C ObjC
Conform to the ISO 2017 C standard (published in 2018).

std=c18
C ObjC Alias(std=c17)
Conform to the ISO 2017 C standard (published in 2018).

std=c2x
C ObjC
Conform to the ISO 202X C standard draft (experimental and incomplete support).

std=c89
C ObjC Alias(std=c90)
Conform to the ISO 1990 C standard.

std=c90
C ObjC
Conform to the ISO 1990 C standard.

std=c99
C ObjC
Conform to the ISO 1999 C standard.

std=c9x
C ObjC Alias(std=c99)
Deprecated in favor of -std=c99.

std=gnu++98
C++ ObjC++
Conform to the ISO 1998 C++ standard revised by the 2003 technical
corrigendum with GNU extensions.

std=gnu++03
C++ ObjC++ Alias(std=gnu++98)
Conform to the ISO 1998 C++ standard revised by the 2003 technical
corrigendum with GNU extensions.

std=gnu++11
C++ ObjC++
Conform to the ISO 2011 C++ standard with GNU extensions.

std=gnu++0x
C++ ObjC++ Alias(std=gnu++11) Undocumented
Deprecated in favor of -std=gnu++11.

std=gnu++1y
C++ ObjC++ Alias(std=gnu++14) Undocumented
Deprecated in favor of -std=gnu++14.

std=gnu++14
C++ ObjC++
Conform to the ISO 2014 C++ standard with GNU extensions.

std=gnu++1z
C++ ObjC++ Alias(std=gnu++17) Undocumented
Deprecated in favor of -std=gnu++17.

std=gnu++17
C++ ObjC++
Conform to the ISO 2017 C++ standard with GNU extensions.

std=gnu++2a
C++ ObjC++ Alias(std=gnu++20) Undocumented
Conform to the ISO 2020 C++ standard with GNU extensions (experimental and incomplete support).

std=gnu++20
C++ ObjC++
Conform to the ISO 2020 C++ standard with GNU extensions (experimental and incomplete support).

std=gnu++2b
C++ ObjC++ Alias(std=gnu++23)
Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental and incomplete support).

std=gnu++23
C++ ObjC++ Undocumented
Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental and incomplete support).

std=gnu11
C ObjC
Conform to the ISO 2011 C standard with GNU extensions.

std=gnu1x
C ObjC Alias(std=gnu11)
Deprecated in favor of -std=gnu11.

std=gnu17
C ObjC
Conform to the ISO 2017 C standard (published in 2018) with GNU extensions.

std=gnu18
C ObjC Alias(std=gnu17)
Conform to the ISO 2017 C standard (published in 2018) with GNU extensions.

std=gnu2x
C ObjC
Conform to the ISO 202X C standard draft with GNU extensions (experimental and incomplete support).

std=gnu89
C ObjC Alias(std=gnu90)
Conform to the ISO 1990 C standard with GNU extensions.

std=gnu90
C ObjC
Conform to the ISO 1990 C standard with GNU extensions.

std=gnu99
C ObjC
Conform to the ISO 1999 C standard with GNU extensions.

std=gnu9x
C ObjC Alias(std=gnu99)
Deprecated in favor of -std=gnu99.

std=iso9899:1990
C ObjC Alias(std=c90)
Conform to the ISO 1990 C standard.

std=iso9899:199409
C ObjC
Conform to the ISO 1990 C standard as amended in 1994.

std=iso9899:1999
C ObjC Alias(std=c99)
Conform to the ISO 1999 C standard.

std=iso9899:199x
C ObjC Alias(std=c99)
Deprecated in favor of -std=iso9899:1999.

std=iso9899:2011
C ObjC Alias(std=c11)
Conform to the ISO 2011 C standard.

std=iso9899:2017
C ObjC Alias(std=c17)
Conform to the ISO 2017 C standard (published in 2018).

std=iso9899:2018
C ObjC Alias(std=c17)
Conform to the ISO 2017 C standard (published in 2018).

stdlib=
Driver C++ ObjC++ Common Condition(ENABLE_STDLIB_OPTION) Var(flag_stdlib_kind) Joined Enum(stdlib_kind) RejectNegative Init(1)
-stdlib=[libstdc++|libc++]	The standard library to be used for C++ headers
and runtime.

Enum
Name(stdlib_kind) Type(int)

EnumValue
Enum(stdlib_kind) String(libstdc++) Value(1)

EnumValue
Enum(stdlib_kind) String(libc++) Value(2)

traditional
Driver

traditional-cpp
C ObjC C++ ObjC++
Enable traditional preprocessing.

trigraphs
C ObjC C++ ObjC++
-trigraphs	Support ISO C trigraphs.

undef
C ObjC C++ ObjC++ Var(flag_undef)
Do not predefine system-specific and GCC-specific macros.

v
C ObjC C++ ObjC++
; Documented in common.opt

w
C ObjC C++ ObjC++
; Documented in common.opt

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