; Options for the C, ObjC, C++ and ObjC++ front ends.
; Copyright (C) 2003, 2004, 2005 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 2, 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 COPYING.  If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.


; This file is processed by the script opts.sh.  It is a database of
; command line options, with each record separated by a blank line,
; and each field appearing on its own line.  The first field is the
; command-line switch with the leading "-" removed.  All options
; beginning with "f" or "W" are implicitly assumed to take a "no-"
; form; this form should not be listed.  If you do not want this
; negative form and you want it to be automatically rejected, add
; RejectNegative to the second field.

; The second field is a space-separated list of which parts of the
; compiler recognize the switch, as declared by "Language" entries.
; If the switch takes an argument, then you should also specify
; "Joined" and/or "Separate" to indicate where the argument can
; appear.  If a Joined argument can legitimately be omitted, specify
; "JoinedOrMissing" instead of "Joined".  If the argument to a switch
; is a non-negative integer, you can specify "UInteger" and the switch
; decoder will convert the argument for you, or complain to the user
; if the argument is invalid.  "Var(name,set)" creates an integer
; variable "name".  The variable is declared and initialized to value
; given by "Init(value)" (or zero if this property is not defined).
; When the option is passed to compiler, this variable is set to "set"
; if value passed through the flag is nonzero, !"set" if value is zero,
; or to value if "set" is omitted.  If "VarExists"  is specified, the
; declaration for the variable is not created.  If "Report" is specified,
; the flag is output with -fverbose-asm.

; The third field is the help text to output with --help.  This is
; automatically line-wrapped on output.  Normally the switch is output
; automatically, with the help text on the right hand side of the
; output.  However, if the help text contains a tab character, the
; text to the left of the tab is output instead of the switch, and the
; text to its right forms the help.  This is useful for elaborating on
; what type of argument a switch takes, for example.  If the second
; field contains "Undocumented" then nothing is output with --help.
; Only do this with good reason like the switch being internal between
; the driver and the front end - it is not an excuse to leave a switch
; undocumented.

; Comments can appear on their own line anwhere in the file, preceded
; by a semicolon.  Whitespace is permitted before the semicolon.

; For each switch XXX below, an enumeration constant is created by the
; script opts.sh spelt OPT_XXX, but with all non-alphanumeric
; characters replaced with an underscore.

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

Language
C

Language
ObjC

Language
C++

Language
ObjC++

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

A
C ObjC C++ ObjC++ Joined Separate
-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
-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

F
C ObjC C++ ObjC++ Joined Separate
-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
-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++ Separate
Generate make dependencies and compile

MF
C ObjC C++ ObjC++ Joined Separate
-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++ Separate
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
-MQ <target>	Add a MAKE-quoted target

MT
C ObjC C++ ObjC++ Joined Separate
-MT <target>	Add an unquoted target

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

U
C ObjC C++ ObjC++ Joined Separate
-U<macro>	Undefine <macro>

; APPLE LOCAL begin -Wno-#warnings
W#warnings
C ObjC C++ ObjC++
Enable #warning
; APPLE LOCAL end -Wno-#warnings

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

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

; APPLE LOCAL begin mainline
Wassign-intercept
ObjC ObjC++ Var(warn_assign_intercept)
Warn whenever an ObjC assignment is being intercepted by the garbage collector
; APPLE LOCAL end mainline

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

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

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

Wcomment
C ObjC C++ ObjC++
Warn about possibly nested block comments, and C++ comments spanning more than one physical line

Wcomments
C ObjC C++ ObjC++
Synonym for -Wcomment

Wconversion
C ObjC C++ ObjC++ Var(warn_conversion)
Warn about possibly confusing type conversions

; APPLE LOCAL begin 64bit shorten warning 3865314
Wshorten-64-to-32
C ObjC C++ ObjC++ Var(warn_shorten_64_to_32)
Warn if a value is implicitly converted from a 64 bit type to a 32 bit type
; APPLE LOCAL end 64bit shorten warning 3865314

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

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

Wdeprecated
C++ ObjC++ Var(warn_deprecated) Init(1)
Warn about deprecated compiler features

; APPLE LOCAL begin 4086969
Wdiscard-qual
C ObjC Var(warn_discard_qual) Init(1)
Warn about discarded qualifiers
; APPLE LOCAL end 4086969

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

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

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

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

Werror-implicit-function-declaration
C ObjC RejectNegative
Make implicit function declarations an error

; APPLE LOCAL begin -Wextra-tokens
Wextra-tokens
C ObjC C++ ObjC++
Warn about extra tokens at the end of prepreprocessor directives
; APPLE LOCAL end -Wextra-tokens

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

Wformat
C ObjC C++ ObjC++
Warn about printf/scanf/strftime/strfmon format string anomalies

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

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

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

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

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

Wformat=
C ObjC C++ ObjC++ Joined

; APPLE LOCAL begin -Wfour-char-constants
Wfour-char-constants
C ObjC C++ ObjC++
Warn about multicharacter constants containing exactly four characters
; APPLE LOCAL end -Wfour-char-constants

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

Wimplicit
C ObjC C++ ObjC++

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

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

Wimport
C ObjC C++ ObjC++
Deprecated.  This switch has no effect.

;APPLE LOCAL begin mainline 2883585 2005-04-20
Wint-to-pointer-cast
C ObjC Var(warn_int_to_pointer_cast) Init(1)
Warn when there is a cast to a pointer from an integer of a different size
;APPLE LOCAL end mainline 2883585 2005-04-20
Winvalid-offsetof
C++ ObjC++ Var(warn_invalid_offsetof) Init(1)
Warn about invalid uses of the \"offsetof\" macro

Winvalid-pch
C ObjC C++ ObjC++
Warn about PCH files that are found but not used

; APPLE LOCAL begin -Wlong-double
Wlong-double
C ObjC C++ ObjC++
Warn about \"long double\"
; APPLE LOCAL end -Wlong-double

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

Wmain
C ObjC
Warn about suspicious declarations of \"main\"

Wmissing-braces
C ObjC C++ ObjC++ Var(warn_missing_braces)
Warn about possibly missing braces around initializers

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

Wmissing-field-initializers
C ObjC C++ ObjC++ Var(warn_missing_field_initializers) Init(-1)
Warn about missing fields in struct initializers

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

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

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

; APPLE LOCAL begin -Wmost
Wmost
C ObjC C++ ObjC++ 
Like -Wall but without -Wparentheses
; APPLE LOCAL end -Wmost

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

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

; APPLE LOCAL begin -Wnewline-eof
Wnewline-eof
C ObjC C++ ObjC++
Warn about files missing a newline at the end of the file
; APPLE LOCAL end -Wnewline-eof

; APPLE LOCAL begin non lvalue assign
Wnon-lvalue-assign
C ObjC C++ ObjC++ Var(warn_non_lvalue_assign) Init(1)
Warn about assignment to casts and conditional expressions of lvalues
; APPLE LOCAL end non lvalue assign

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

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

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

; APPLE LOCAL begin mainline UCNs 2005-04-17 3892809
Wnormalized=
C ObjC C++ ObjC++ Joined
-Wnormalized=<id|nfc|nfkc>	Warn about non-normalised Unicode strings
; APPLE LOCAL end mainline UCNs 2005-04-17 3892809

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

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

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

Wparentheses
C ObjC C++ ObjC++ Var(warn_parentheses)
Warn about possibly missing parentheses

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

Wpointer-arith
C ObjC C++ ObjC++ Var(warn_pointer_arith)
Warn about function pointer arithmetic

;APPLE LOCAL begin mainline 2883585 2005-04-20
Wpointer-to-int-cast
C ObjC Var(warn_pointer_to_int_cast) Init(1)
Warn when a pointer is cast to an integer of a different size
;APPLE LOCAL end mainline 2883585 2005-04-20
Wprotocol
ObjC ObjC++ Var(warn_protocol) Init(1)
Warn if inherited methods are unimplemented

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

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

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

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

Wsequence-point
C ObjC C++ ObjC++ Var(warn_sequence_point)
Warn about possible violations of sequence point rules

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

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

Wstrict-null-sentinel
C++ ObjC++
Warn about uncasted NULL used as sentinel

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

; APPLE LOCAL begin mainline
Wstrict-selector-match
ObjC ObjC++ Var(warn_strict_selector_match)
Warn if type signatures of candidate methods do not match exactly
; APPLE LOCAL end mainline

Wsynth
C++ ObjC++ Var(warn_synth)
Warn when synthesis behavior differs from Cfront

Wsystem-headers
C ObjC C++ ObjC++
Do not suppress warnings from system headers

Wtraditional
C ObjC Var(warn_traditional)
Warn about features not present in traditional C

Wtrigraphs
C ObjC C++ ObjC++
Warn if trigraphs are encountered that might affect the meaning of the program

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

Wundef
C ObjC C++ ObjC++
Warn if an undefined macro is used in an #if directive

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

Wunused-macros
C ObjC C++ ObjC++
Warn about macros defined in the main file that are not used

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

Wwrite-strings
C ObjC C++ ObjC++
Give strings the type \"array of char\"

Wpointer-sign
C ObjC Var(warn_pointer_sign) Init(1)
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++).

; APPLE LOCAL begin fat builds
arch
C ObjC C++ ObjC++ Separate
The architecture to build for.
; APPLE LOCAL end fat builds

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

faccess-control
C++ ObjC++
Enforce class member access control semantics

fall-virtual
C++ ObjC++

falt-external-templates
C++ ObjC++
Change when template instances are emitted

; APPLE LOCAL begin Altivec 3837840
faltivec
C ObjC C++ ObjC++ Var(flag_faltivec)
Enable Altivec
; APPLE LOCAL end Altivec 3837840

fasm
C ObjC C++ ObjC++
Recognize the \"asm\" keyword

; APPLE LOCAL begin CW asm blocks
fasm-blocks
C ObjC C++ ObjC++
Handle CW-style assembly blocks

fms-asms
C ObjC C++ ObjC++ Var(flag_ms_asms)
When handling assembly blocks, use MW-style assembly blocks
; APPLE LOCAL end CW asm blocks

; APPLE LOCAL begin -fast or -fastf or -fastcp
fast
C C++
Used for c or c++ optimization

fastcp
C++
Used when C++ specific optimization is needed

fastf
C
Used when c is generated from NAG fortran
; APPLE LOCAL end -fast or -fastf or -fastcp

fbuiltin
C ObjC C++ ObjC++
Recognize built-in functions

fbuiltin-
C ObjC C++ ObjC++ Joined

fcheck-new
C++ ObjC++
Check the return value of new

; APPLE LOCAL begin structor decloning
fclone-structors
C++ ObjC++
Factor out certain duplicate code in constructors and destructors
; APPLE LOCAL end structor decloning

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

fconserve-space
C++ ObjC++
Reduce the size of object files

fconst-strings
C++ ObjC++
Make string literals \"const char[]\" not \"char[]\"

fconstant-string-class=
ObjC ObjC++ Joined
-fconst-string-class=<name>	Use class <name> for constant strings

fdefault-inline
C++ ObjC++
Inline member functions by default

; APPLE LOCAL begin disable_typechecking_for_spec_flag
fdisable-typechecking-for-spec
C C++
Make crossfile type mismatches warnings not errors (for SPEC)
; APPLE LOCAL end disable_typechecking_for_spec_flag

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

felide-constructors
C++ ObjC++

fenforce-eh-specs
C++ ObjC++
Generate code to check exception specifications

fenum-int-equiv
C++ ObjC++

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

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


fexternal-templates
C++ ObjC++

ffixed-form
C ObjC

ffixed-line-length-
C ObjC Joined

ffor-scope
C++ ObjC++
Scope of for-init-statement variables is local to the loop

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

fgnu-keywords
C++ ObjC++
Recognize GNU-defined keywords

fgnu-runtime
ObjC ObjC++
Generate code for GNU runtime environment

fguiding-decls
C++ ObjC++

fhandle-exceptions
C++ ObjC++

fhonor-std
C++ ObjC++

fhosted
C ObjC
Assume normal C execution environment

fhuge-objects
C++ ObjC++
Enable support for huge objects

fimplement-inlines
C++ ObjC++
Export functions even if they can be inlined

fimplicit-inline-templates
C++ ObjC++
Emit implicit instantiations of inline templates

fimplicit-templates
C++ ObjC++
Emit implicit instantiations of templates

flabels-ok
C++ ObjC++

fms-extensions
C ObjC C++ ObjC++
Don't warn about uses of Microsoft extensions

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

fnew-abi
C++ ObjC++

; APPLE LOCAL begin nested functions 4258406 4357979
fnested-functions
C ObjC Var(flag_nested_functions)
Allow nested functions.
; APPLE LOCAL end nested functions 4258406 4357979

fnext-runtime
ObjC ObjC++
Generate code for NeXT (Apple Mac OS X) runtime environment

fnil-receivers
ObjC ObjC++
Assume that receivers of Objective-C messages may be nil

; APPLE LOCAL begin non lvalue assign
fnon-lvalue-assign
C ObjC C++ ObjC++ Var(flag_non_lvalue_assign) Init(1)
Allow assignment to casts and conditional expressions of lvalues
; APPLE LOCAL end non lvalue assign

fnonansi-builtins
C++ ObjC++

fnonnull-objects
C++ ObjC++

; APPLE LOCAL begin radar 4705250
fobjc-atdefs
ObjC ObjC++ Var(flag_objc_atdefs) Init(-1)
Allow use of @defs
; APPLE LOCAL end radar 4705250

; APPLE LOCAL begin mainline
fobjc-call-cxx-cdtors
ObjC++ Var(flag_objc_call_cxx_cdtors) Init(-1)
Generate special ObjC methods to initialize/destroy non-POD C++ ivars, if needed
; APPLE LOCAL end mainline

; APPLE LOCAL begin mainline
; APPLE LOCAL begin radar 4590221
fobjc-direct-dispatch
ObjC ObjC++ Var(flag_objc_direct_dispatch) Init(-1)
Allow fast jumps (via comm page) to the message dispatcher
; APPLE LOCAL end radar 4590221
; APPLE LOCAL end mainline

fobjc-exceptions
ObjC ObjC++
Enable Objective-C exception and synchronization syntax

; APPLE LOCAL begin radar 2848255
fobjc-zerocost-exceptions
ObjC ObjC++ Var(flag_objc_zerocost_exceptions) Init(0)
Enable Objective-C zero-cost exception
; APPLE LOCAL end radar 2848255

; APPLE LOCAL begin objc new property - not for  merge to the FSF
fobjc-new-property
C C++ ObjC ObjC++ Var(flag_objc_new_property) Init(1)
Enable Objective-C new property syntax and semantics
; APPLE LOCAL end objc new property - not for  merge to the FSF

; APPLE LOCAL begin radar 4810609
fobjc-gc-only
ObjC ObjC++ Var(flag_objc_gc_only)  Init(0)
Program only supprts (GC) in ObjC/ObjC++ programs
; APPLE LOCAL end radar 4810609

; APPLE LOCAL begin mainline
fobjc-gc
ObjC ObjC++ Var(flag_objc_gc)
Enable garbage collection (GC) in ObjC/ObjC++ programs
; APPLE LOCAL end mainline

fobjc-sjlj-exceptions
ObjC ObjC++
Enable Objective-C setjmp exception handling runtime

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

foptional-diags
C++ ObjC++
Enable optional diagnostics

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

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

freplace-objc-classes
ObjC ObjC++
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++
Generate run time type descriptor information

; APPLE LOCAL begin ss2
fsave-repository=
C ObjC C++ ObjC++ Joined Separate
; APPLE LOCAL end ss2

fshort-double
C ObjC C++ ObjC++
Use the same size for double as for float

fshort-enums
C ObjC C++ ObjC++
Use the narrowest integer type possible for enumeration types

fshort-wchar
C ObjC C++ ObjC++
Force the underlying type for \"wchar_t\" to be \"unsigned short\"

fshow-column
C ObjC C++ ObjC++

fsigned-bitfields
C ObjC C++ ObjC++
When \"signed\" or \"unsigned\" is not given make the bitfield signed

fsigned-char
C ObjC C++ ObjC++
Make \"char\" signed by default

fsquangle
C++ ObjC++

fstats
C++ ObjC++
Display statistics accumulated during compilation

fstrict-prototype
C++ ObjC++

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

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

fthis-is-variable
C++ ObjC++

fthreadsafe-statics
C++ ObjC++
-fno-threadsafe-statics	Do not generate thread-safe code for initializing local statics.

funsigned-bitfields
C ObjC C++ ObjC++
When \"signed\" or \"unsigned\" is not given make the bitfield unsigned

funsigned-char
C ObjC C++ ObjC++
Make \"char\" unsigned by default

fuse-cxa-atexit
C++ ObjC++
Use __cxa_atexit to register destructors

; APPLE LOCAL begin mainline 2006-02-24 4086777
fuse-cxa-get-exception-ptr
C++ ObjC++
Use __cxa_get_exception_ptr in exception handling

; APPLE LOCAL end mainline 2006-02-24 4086777
fvisibility-inlines-hidden
C++ ObjC++
Marks all inlined methods as having hidden visibility

; APPLE LOCAL begin ms tinfo compat 4230099
fvisibility-ms-compat
C++ ObjC++ Var(flag_visibility_ms_compat)
Changes visibility to match Microsoft Visual Studio by default
; APPLE LOCAL end ms tinfo compat 4230099

fvtable-gc
C++ ObjC++
Discard unused virtual functions

fvtable-thunks
C++ ObjC++
Implement vtables using thunks

fweak
C++ ObjC++
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++
Generate a #line directive pointing at the current working directory

fxref
C++ ObjC++
Emit cross referencing information

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

gen-decls
ObjC ObjC++
Dump declarations to a .decl file

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

imacros
C ObjC C++ ObjC++ Joined Separate
-imacros <file>	Accept definition of macros in <file>

include
C ObjC C++ ObjC++ Joined Separate
-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
-isysroot <dir>	Set <dir> to be the system root directory

isystem
C ObjC C++ ObjC++ Joined Separate
-isystem <dir>	Add <dir> to the start of the system include path

iquote
C ObjC C++ ObjC++ Joined Separate
-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

lang-objc
C ObjC C++ ObjC++ Undocumented

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

; APPLE LOCAL begin mainline 4.1 2005-06-17 3988498
print-pch-checksum
C ObjC C++ ObjC++
Print a checksum of the executable for PCH validity checking, and stop.

; APPLE LOCAL end mainline 4.1 2005-06-17 3988498
remap
C ObjC C++ ObjC++
Remap file names when including files

std=c++98
C++ ObjC++
Conform to the ISO 1998 C++ standard

std=c89
C ObjC
Conform to the ISO 1990 C standard

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

std=c9x
C ObjC
Deprecated in favor of -std=c99

std=gnu++98
C++ ObjC++
Conform to the ISO 1998 C++ standard with GNU extensions

std=gnu89
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
Deprecated in favor of -std=gnu99

std=iso9899:1990
C ObjC
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
Conform to the ISO 1999 C standard

std=iso9899:199x
C ObjC
Deprecated in favor of -std=iso9899:1999

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

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

undef
C ObjC C++ ObjC++
Do not predefine system-specific and GCC-specific macros

v
C ObjC C++ ObjC++
Enable verbose output

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

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