; Options for the C, ObjC, C++ and ObjC++ front ends.
; Copyright (C) 2003, 2004, 2005, 2006 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, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.

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

-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

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

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

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

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

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


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 mainline
; This is superseded in mainline by Wconversion
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 mainline

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 -Wdiscard-qual 4086969
Wdiscard-qual
C ObjC Var(warn_discard_qual) Init(1)
Warn about discarded qualifiers
; APPLE LOCAL end -Wdiscard-qual 4086969

Wdiv-by-zero
C ObjC 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

; APPLE LOCAL begin mainline
Wempty-body
C ObjC C++ ObjC++ Var(warn_empty_body) Init(-1) Warning
Warn about an empty body in an if or else statement
; APPLE LOCAL end mainline

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

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

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

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

; APPLE LOCAL begin radar 5376125
Wdirect-ivar-access
ObjC ObjC++ Var(warn_direct_ivar_access)
Warn about direct access to gc-enabled ivars
; APPLE LOCAL end radar 5376125

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

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

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

Woverlength-strings
C ObjC C++ ObjC++ Var(warn_overlength_strings) Init(-1)
Warn if a string is longer than the maximum portable length specified by the standard

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

Woverride-init
C ObjC Var(warn_override_init) Init(-1)
Warn about overriding initializers without side effects

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

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

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

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

; APPLE LOCAL begin radar 5172645
Wproperty-assign-default
ObjC ObjC++ Var(warn_property_assign_default) Init(1)
Warn if no attribute specified on property of pointer to object type (defaulted to assign)
; APPLE LOCAL end radar 5172645

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++ Var(warn_return_type)
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

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

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++ Var(warn_write_strings)
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)
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++
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 ObjC C++ ObjC++
Used for c or c++ optimization

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

fastf
C ObjC
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 ARM structor thunks
; Nonzero if we prefer to clone con/de/structors.  Alternative is to
; gen multiple tiny thunk-esque things that call/jump to a unified
; con/de/structor.  This is a classic size/speed tradeoff.
fclone-structors
C++ ObjC++ Var(flag_clone_structors)
Factor out certain duplicate code in constructors and destructors
; APPLE LOCAL end ARM structor thunks

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

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>

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

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

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

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

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

flabels-ok
C++ ObjC++

; APPLE LOCAL begin 5612787 mainline sse4
flax-vector-conversions
C ObjC C++ ObjC++
Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types.
; APPLE LOCAL end 5612787 mainline sse4

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 objc2
; 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) Init(-1)
Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed
; APPLE LOCAL end objc2

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

; 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

; 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

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

; 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

fopenmp
C ObjC C++ ObjC++ Var(flag_openmp)
Enable OpenMP

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

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

fuse-cxa-get-exception-ptr
C++ ObjC++
Use __cxa_get_exception_ptr in exception handling

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

; APPLE LOCAL begin mainline 2007-06-28 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 mainline 2007-06-28 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>

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

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-fortran
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 radar 5082000
print-objc-ivar-layout
ObjC ObjC++
Generate GC ivar layout information
; APPLE LOCAL end radar 5082000

print-pch-checksum
C ObjC C++ ObjC++
Print a checksum of the executable for PCH validity checking, and stop

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.
