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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fdeclone
C++ ObjC++ Var(flag_declone) Init(1)
Avoid cloning constructors and destructors in absence of virtual inheritance.

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

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

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

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

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

fnew-abi
C++ ObjC++

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

fnonansi-builtins
C++ ObjC++

fnonnull-objects
C++ ObjC++

; 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

; 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

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

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

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

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.
