; Options for the C, ObjC, C++ and ObjC++ front ends.
; Copyright (C) 2003-2022 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++,Wall,1,0)
; in common.opt

Warray-compare
C ObjC C++ ObjC++ Var(warn_array_compare) Warning LangEnabledBy(C ObjC C++ ObjC++, Wall)
Warn about comparisons between two operands of array type.

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.

Wbidi-chars
C ObjC C++ ObjC++ Warning Alias(Wbidi-chars=,any,none)
;

Wbidi-chars=
C ObjC C++ ObjC++ RejectNegative Joined Warning CPP(cpp_warn_bidirectional) CppReason(CPP_W_BIDIRECTIONAL) Var(warn_bidirectional) Init(bidirectional_unpaired) Enum(cpp_bidirectional_level) EnumSet
-Wbidi-chars=[none|unpaired|any|ucn] Warn about UTF-8 bidirectional control characters.

; Required for these enum values.
SourceInclude
cpplib.h

Enum
Name(cpp_bidirectional_level) Type(int) UnknownError(argument %qs to %<-Wbidi-chars%> not recognized)

EnumValue
Enum(cpp_bidirectional_level) String(none) Value(bidirectional_none) Set(1)

EnumValue
Enum(cpp_bidirectional_level) String(unpaired) Value(bidirectional_unpaired) Set(1)

EnumValue
Enum(cpp_bidirectional_level) String(any) Value(bidirectional_any) Set(1)

EnumValue
Enum(cpp_bidirectional_level) String(ucn) Value(bidirectional_ucn) Set(2)

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.

Wc++11-extensions
C++ ObjC++ Var(warn_cxx11_extensions) Warning Init(1)
Warn about C++11 constructs in code compiled with an older standard.

Wc++14-extensions
C++ ObjC++ Var(warn_cxx14_extensions) Warning Init(1)
Warn about C++14 constructs in code compiled with an older standard.

Wc++17-extensions
C++ ObjC++ Var(warn_cxx17_extensions) Warning Init(1)
Warn about C++17 constructs in code compiled with an older standard.

Wc++20-extensions
C++ ObjC++ Var(warn_cxx20_extensions) Warning Init(1)
Warn about C++20 constructs in code compiled with an older standard.

Wc++23-extensions
C++ ObjC++ Var(warn_cxx23_extensions) Warning Init(1)
Warn about C++23 constructs in code compiled with an older standard.

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.

Wdangling-pointer
C ObjC C++ LTO ObjC++ Alias(Wdangling-pointer=, 2, 0) Warning
Warn for uses of pointers to auto variables whose lifetime has ended.

Wdangling-pointer=
C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_dangling_pointer) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 2, 0) IntegerRange(0, 2)
Warn for uses of pointers to auto variables whose lifetime has ended.

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) Warning
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.

Winfinite-recursion
C ObjC C++ LTO ObjC++ Var(warn_infinite_recursion) Warning LangEnabledBy(C ObjC C++ LTO ObjC++, Wall)
Warn for infinitely recursive calls.

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.

Winterference-size
C++ ObjC++ Var(warn_interference_size) Warning Init(1)
Warn about nonsensical values of --param destructive-interference-size or
constructive-interference-size.

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 corresponding
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.

Wmissing-requires
C++ ObjC++ Var(warn_missing_requires) Init(1) Warning
Warn about likely missing requires keyword.

Wmissing-template-keyword
C++ ObjC++ Var(warn_missing_template_keyword) Init(1) Warning
Warn when the template keyword is missing after a member access token in a dependent member access expression if that member is a template.

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.

Wopenacc-parallelism
C C++ Var(warn_openacc_parallelism) Warning
Warn about potentially suboptimal choices related to OpenACC parallelism.

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.

; Defining this option here in addition to common.opt is necessary
; in order for the default -Wall setting of -Wuse-after-free=2 to take
; effect.

Wuse-after-free=
LangEnabledBy(C ObjC C++ LTO ObjC++, Wall,2,0)
; in common.opt

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-fp-except
C++ ObjC++ Var(flag_constexpr_fp_except) Init(0)
Allow IEC559 floating point exceptions in constant expressions.

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

ffold-simple-inlines
C++ ObjC++ Optimization Var(flag_fold_simple_inlines)
Fold calls to simple inline functions.

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)})

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-constexpr
C++ ObjC++ Var(flag_implicit_constexpr)
Make inline functions constexpr by default.

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) Warning
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.

flang-info-module-cmi
C++ Var(note_module_cmi_yes)
Note Compiled Module Interface pathnames.

flang-info-module-cmi=
C++ Joined RejectNegative MissingArgError(missing module name)
Note Compiled Module Interface pathname of a specific module or header-unit.

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.

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.
