; Options for the C, ObjC, C++ and ObjC++ front ends.
; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
; 2011 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)

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

-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
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
-F <dir>	Add <dir> to the end of the main framework include path

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

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 MAKE-quoted target

MT
C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs)
-MT <target>	Add an unquoted target

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>

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

Wpsabi
C ObjC C++ ObjC++ LTO Var(warn_psabi) Init(1) Undocumented

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

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

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

Wbuiltin-macro-redefined
C ObjC C++ ObjC++ Warning
Warn when a built-in preprocessor macro is undefined or redefined

Wc++-compat
C ObjC Var(warn_cxx_compat) Warning
Warn about C constructs that are not in the common subset of C and C++

Wc++0x-compat
C++ ObjC++ Var(warn_cxx0x_compat) Warning
Deprecated in favor of -Wc++11-compat

Wc++11-compat
C++ ObjC++ Warning Alias(Wc++0x-compat)
Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011

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

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

Wclobbered
C ObjC C++ ObjC++ Var(warn_clobbered) Init(-1) Warning
Warn about variables that might be changed by \"longjmp\" or \"vfork\"

Wcomment
C ObjC C++ ObjC++ Warning
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

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

Wself-assign-non-pod
C++ ObjC++ Var(warn_self_assign_non_pod) Init(0) Warning
Warn when a variable of a non-POD type is assigned to itself

Wreal-conversion
C ObjC C++ ObjC++ Var(warn_real_conversion) Init(-1) Warning
Warn for implicit type conversions from real to integral values

Wsign-conversion
C ObjC C++ ObjC++ Var(warn_sign_conversion) Init(-1)
Warn for implicit type conversions between signed and unsigned integers

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

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

Wdeprecated
C C++ ObjC ObjC++ Var(warn_deprecated) Init(1) Warning
Warn if a deprecated compiler feature, class, method, or field is used

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

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) Init(-1) Warning
Warn about an empty body in an if or else statement

Wendif-labels
C ObjC C++ ObjC++ Warning
Warn about stray tokens after #elif and #endif

Wenum-compare
C ObjC C++ ObjC++ Var(warn_enum_compare) Init(-1) Warning
Warn about comparison of different 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

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
Warn about printf/scanf/strftime/strfmon format string anomalies

Wformat-extra-args
C ObjC C++ ObjC++ Var(warn_format_extra_args) Warning
Warn if passing too many arguments to a function for its format string

Wformat-nonliteral
C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning
Warn about format strings that are not literals

Wformat-contains-nul
C ObjC C++ ObjC++ Var(warn_format_contains_nul) Warning
Warn about format strings that contain NUL bytes

Wformat-security
C ObjC C++ ObjC++ Var(warn_format_security) Warning
Warn about possible security problems with format functions

Wformat-y2k
C ObjC C++ ObjC++ Var(warn_format_y2k) Warning
Warn about strftime formats yielding 2-digit years

Wformat-zero-length
C ObjC Var(warn_format_zero_length) Warning
Warn about zero-length formats

Wformat=
C ObjC C++ ObjC++ Joined Warning

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

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

Wimplicit
C ObjC Var(warn_implicit) Init(-1) Warning
Warn about implicit declarations

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

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

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

Wimport
C ObjC C++ ObjC++ Undocumented Ignore

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++ Warning
Warn about PCH files that are found but not used

Wjump-misses-init
C ObjC Var(warn_jump_misses_init) Init(-1) Warning
Warn when a jump misses a variable initialization

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

Wlong-long
C ObjC C++ ObjC++ Var(warn_long_long) Init(-1) Warning
Do not warn about using \"long long\" when -pedantic

Wmain
C ObjC C++ ObjC++ Var(warn_main) Init(-1) Warning
Warn about suspicious declarations of \"main\"

Wmissing-braces
C ObjC C++ ObjC++ Var(warn_missing_braces) Warning
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) Init(-1) Warning
Warn about missing fields in struct initializers

Wmissing-format-attribute
C ObjC C++ ObjC++ Var(warn_missing_format_attribute) Warning
Warn about functions which might be candidates for format attributes

Wmissing-include-dirs
C ObjC C++ ObjC++ Warning
Warn about user-specified include directories that do not exist

Wmissing-parameter-type
C ObjC Var(warn_missing_parameter_type) Init(-1) Warning
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

Wmultichar
C ObjC C++ ObjC++ Warning
Warn about use of multi-character character constants

Wnarrowing
C ObjC C++ ObjC++ Warning Var(warn_narrowing) Init(1)
-Wno-narrowing	  In C++0x mode, ignore ill-formed narrowing conversions within { }

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

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

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

Wnonnull
C C++ ObjC Var(warn_nonnull) Warning
Warn about NULL being passed to argument slots marked as requiring non-NULL

Wnormalized=
C ObjC C++ ObjC++ Joined Warning
-Wnormalized=<id|nfc|nfkc>	Warn about non-normalised Unicode strings

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) Init(-1) Warning
Warn for obsolescent usage in a declaration

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

Woverlength-strings
C ObjC C++ ObjC++ Var(warn_overlength_strings) Init(-1) Warning
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) Init(-1) Warning
Warn about overriding initializers without 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
Warn about possibly missing parentheses

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
Warn about function pointer arithmetic

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

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

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

Wreorder
C++ ObjC++ Var(warn_reorder) Warning
Warn when the compiler reorders code

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

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
Warn about possible violations of sequence point rules

Wsign-compare
C ObjC C++ ObjC++ Var(warn_sign_compare) Init(-1) Warning
Warn about signed-unsigned comparisons

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

Wtraditional
C ObjC Var(warn_traditional) 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++ Warning
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++ Warning
Warn if an undefined macro is used in an #if directive

Wunknown-pragmas
C ObjC C++ ObjC++ Warning
Warn about unrecognized pragmas

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

Wunused-macros
C ObjC C++ ObjC++ 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

Wvariadic-macros
C ObjC C++ ObjC++ Warning
Do not warn about using variadic macros when -pedantic

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

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

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.

Wpointer-sign
C ObjC Var(warn_pointer_sign) Init(-1) Warning
Warn when a pointer differs in signedness in an assignment

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?

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

fall-virtual
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

falt-external-templates
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
No longer supported

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

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

fbuiltin-
C ObjC C++ ObjC++ Joined

fcheck-new
C++ ObjC++ Var(flag_check_new)
Check the return value of new

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

fconserve-space
C++ ObjC++ Var(flag_conserve_space)
Reduce the size of object files

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

fdeduce-init-list
C++ ObjC++ Var(flag_deduce_init_list) Init(1)
-fno-deduce-init-list	disable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list

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

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

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

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

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

fenum-int-equiv
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

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


fexternal-templates
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

ffor-scope
C++ ObjC++ Var(flag_new_for_scope) Init(1)
Scope of for-init-statement variables is local to the loop

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++
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++ Ignore Warn(switch %qs is no longer supported)

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

fhonor-std
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

fhosted
C ObjC
Assume normal C execution environment

fhuge-objects
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
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

ffriend-injection
C++ ObjC++ Var(flag_friend_injection)
Inject friend functions into enclosing namespace

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

flabels-ok
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

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.

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

fname-mangling-version-
C++ ObjC++ Joined Ignore Warn(switch %qs is no longer supported)

fnew-abi
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

fnext-runtime
ObjC ObjC++
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

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

fnonnull-objects
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

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++ Joined Report 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++ 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

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

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++
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

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

freplace-objc-classes
ObjC ObjC++ 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++
Enable automatic template instantiation

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

fshort-double
C ObjC C++ ObjC++ Optimization Var(flag_short_double)
Use the same size for double as for float

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

fshort-wchar
C ObjC C++ ObjC++ 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

fsquangle
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)

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++ Ignore Warn(switch %qs is no longer supported)

ftabstop=
C ObjC C++ ObjC++ Joined RejectNegative UInteger
-ftabstop=<number>	Distance between tab stops for column reporting

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++ Ignore Warn(switch %qs is no longer supported)

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 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++ Ignore Warn(switch %qs is no longer supported)
No longer supported

fvtable-thunks
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
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++ Ignore Warn(switch %qs is no longer supported)
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++ Var(flag_gen_declaration)
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

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++
; Documented in common.opt

pedantic-errors
C ObjC C++ ObjC++
; 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 (experimental and incomplete support)

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

std=c1x
C ObjC
Conform to the ISO 201X 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 (experimental and incomplete support)

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

std=gnu1x
C ObjC
Conform to the ISO 201X 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

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.
