Commit 1dc5fc4b by Jason Merrill

update

From-SVN: r22398
parent b91d2c10
...@@ -102,13 +102,14 @@ in the following sections. ...@@ -102,13 +102,14 @@ in the following sections.
@item C++ Language Options @item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}. @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@smallexample @smallexample
-fall-virtual -fdollars-in-identifiers -felide-constructors -fno-access-control -fcheck-new -fconserve-space -fdollars-in-identifiers
-fenum-int-equiv -fexternal-templates -ffor-scope -fno-elide-constructors -fexternal-templates -ffor-scope
-fno-for-scope -fhandle-signatures -fhonor-std -fmemoize-lookups -fno-for-scope -fno-gnu-keywords -fguiding-decls -fhandle-signatures
-fname-mangling-version-@var{n} -fno-default-inline -fhonor-std -fhuge-objects -fno-implicit-templates -finit-priority
-fno-gnu-keywords -fnonnull-objects -fguiding-decls -fno-implement-inlines -fname-mangling-version-@var{n} -fno-default-inline
-foperator-names -fno-optional-diags -fstrict-prototype -fthis-is-variable -foperator-names -fno-optional-diags -frepo -fstrict-prototype
-ftemplate-depth-@var{n} -nostdinc++ -traditional +e@var{n} -fsquangle -ftemplate-depth-@var{n} -fthis-is-variable -fvtable-thunks
-nostdinc++
@end smallexample @end smallexample
@item Warning Options @item Warning Options
...@@ -127,7 +128,7 @@ in the following sections. ...@@ -127,7 +128,7 @@ in the following sections.
-Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual -Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual
-Wparentheses -Wpointer-arith -Wredundant-decls -Wreorder -Wparentheses -Wpointer-arith -Wredundant-decls -Wreorder
-Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes -Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes
-Wswitch -Wsynth -Wtemplate-debugging -Wtraditional -Wswitch -Wsynth -Wtraditional
-Wtrigraphs -Wundef -Wuninitialized -Wunused -Wwrite-strings -Wtrigraphs -Wundef -Wuninitialized -Wunused -Wwrite-strings
-Wunknown-pragmas -Wunknown-pragmas
@end smallexample @end smallexample
...@@ -404,7 +405,7 @@ in the following sections. ...@@ -404,7 +405,7 @@ in the following sections.
-fpcc-struct-return -fpic -fPIC -fpcc-struct-return -fpic -fPIC
-freg-struct-return -fshared-data -fshort-enums -freg-struct-return -fshared-data -fshort-enums
-fshort-double -fvolatile -fvolatile-global -fshort-double -fvolatile -fvolatile-global
-fverbose-asm -fpack-struct -fstack-check +e0 +e1 -fverbose-asm -fpack-struct -fstack-check
-fargument-alias -fargument-noalias -fargument-alias -fargument-noalias
-fargument-noalias-global -fargument-noalias-global
@end smallexample @end smallexample
...@@ -764,12 +765,6 @@ literal characters @samp{x} and @samp{a} respectively. Without ...@@ -764,12 +765,6 @@ literal characters @samp{x} and @samp{a} respectively. Without
@w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal @w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
representation of a character, and @samp{\a} produces a bell. representation of a character, and @samp{\a} produces a bell.
@item
In C++ programs, assignment to @code{this} is permitted with
@samp{-traditional}. (The option @samp{-fthis-is-variable} also has
this effect.)
@end itemize
You may wish to use @samp{-fno-builtin} as well as @samp{-traditional} You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
if your program uses names that are normally GNU C builtin functions for if your program uses names that are normally GNU C builtin functions for
other purposes of its own. other purposes of its own.
...@@ -908,11 +903,11 @@ regardless of what language your program is in. For example, you ...@@ -908,11 +903,11 @@ regardless of what language your program is in. For example, you
might compile a file @code{firstClass.C} like this: might compile a file @code{firstClass.C} like this:
@example @example
g++ -g -felide-constructors -O -c firstClass.C g++ -g -frepo -O -c firstClass.C
@end example @end example
@noindent @noindent
In this example, only @samp{-felide-constructors} is an option meant In this example, only @samp{-frepo} is an option meant
only for C++ programs; you can use the other options with any only for C++ programs; you can use the other options with any
language supported by GNU CC. language supported by GNU CC.
...@@ -923,24 +918,17 @@ Here is a list of options that are @emph{only} for compiling C++ programs: ...@@ -923,24 +918,17 @@ Here is a list of options that are @emph{only} for compiling C++ programs:
Turn off all access checking. This switch is mainly useful for working Turn off all access checking. This switch is mainly useful for working
around bugs in the access control code. around bugs in the access control code.
@item -fall-virtual
Treat all possible member functions as virtual, implicitly.
All member functions (except for constructor functions and @code{new} or
@code{delete} member operators) are treated as virtual functions of the
class where they appear.
This does not mean that all calls to these member functions will be made
through the internal table of virtual functions. Under some
circumstances, the compiler can determine that a call to a given virtual
function can be made directly; in these cases the calls are direct in
any case.
@item -fcheck-new @item -fcheck-new
Check that the pointer returned by @code{operator new} is non-null Check that the pointer returned by @code{operator new} is non-null
before attempting to modify the storage allocated. The current Working before attempting to modify the storage allocated. The current Working
Paper requires that @code{operator new} never return a null pointer, so Paper requires that @code{operator new} never return a null pointer, so
this check is normally unnecessary. this check is normally unnecessary.
An alternative to using this option is to specify that your
@code{operator new} does not throw any exceptions; if you declare it
@samp{throw()}, g++ will check the return value. See also @samp{new
(nothrow)}.
@item -fconserve-space @item -fconserve-space
Put uninitialized or runtime-initialized global variables into the Put uninitialized or runtime-initialized global variables into the
common segment, as C does. This saves space in the executable at the common segment, as C does. This saves space in the executable at the
...@@ -949,6 +937,9 @@ flag and your program mysteriously crashes after @code{main()} has ...@@ -949,6 +937,9 @@ flag and your program mysteriously crashes after @code{main()} has
completed, you may have an object that is being destroyed twice because completed, you may have an object that is being destroyed twice because
two definitions were merged. two definitions were merged.
This option is no longer useful on most targets, now that support has
been added for putting variables into BSS without making them common.
@item -fdollars-in-identifiers @item -fdollars-in-identifiers
Accept @samp{$} in identifiers. You can also explicitly prohibit use of Accept @samp{$} in identifiers. You can also explicitly prohibit use of
@samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows @samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows
...@@ -956,10 +947,11 @@ Accept @samp{$} in identifiers. You can also explicitly prohibit use of ...@@ -956,10 +947,11 @@ Accept @samp{$} in identifiers. You can also explicitly prohibit use of
Traditional C allowed the character @samp{$} to form part of Traditional C allowed the character @samp{$} to form part of
identifiers. However, ANSI C and C++ forbid @samp{$} in identifiers. identifiers. However, ANSI C and C++ forbid @samp{$} in identifiers.
@item -fenum-int-equiv @item -fno-elide-constructors
Anachronistically permit implicit conversion of @code{int} to The C++ standard allows an implementation to omit creating a temporary
enumeration types. Current C++ allows conversion of @code{enum} to which is only used to initialize another object of the same type.
@code{int}, but not the other way around. Specifying this option disables that optimization, and forces g++ to
call the copy constructor in all cases.
@item -fexternal-templates @item -fexternal-templates
Cause template instantiations to obey @samp{#pragma interface} and Cause template instantiations to obey @samp{#pragma interface} and
...@@ -1008,12 +1000,9 @@ be instantiated. This behavior reflects the C++ language prior to ...@@ -1008,12 +1000,9 @@ be instantiated. This behavior reflects the C++ language prior to
September 1996, when guiding declarations were removed. September 1996, when guiding declarations were removed.
This option implies @samp{-fname-mangling-version-0}, and will not work This option implies @samp{-fname-mangling-version-0}, and will not work
with other name mangling versions. with other name mangling versions. Like all options that change the
ABI, all C++ code, @emph{including libgcc.a} must be built with the same
@item -fno-implicit-templates setting of this option.
Never emit code for templates which are instantiated implicitly (i.e. by
use); only emit code for explicit instantiations. @xref{Template
Instantiation}, for more information.
@item -fhandle-signatures @item -fhandle-signatures
Recognize the @code{signature} and @code{sigof} keywords for specifying Recognize the @code{signature} and @code{sigof} keywords for specifying
...@@ -1031,12 +1020,18 @@ by default, ignore @code{namespace-declarations}, ...@@ -1031,12 +1020,18 @@ by default, ignore @code{namespace-declarations},
@item -fhuge-objects @item -fhuge-objects
Support virtual function calls for objects that exceed the size Support virtual function calls for objects that exceed the size
representable by a @samp{short int}. Users should not use this flag by representable by a @samp{short int}. Users should not use this flag by
default; if you need to use it, the compiler will tell you so. If you default; if you need to use it, the compiler will tell you so.
compile any of your code with this flag, you must compile @emph{all} of
your code with this flag (including the C++ library, if you use it).
This flag is not useful when compiling with -fvtable-thunks. This flag is not useful when compiling with -fvtable-thunks.
Like all options that change the ABI, all C++ code, @emph{including
libgcc} must be built with the same setting of this option.
@item -fno-implicit-templates
Never emit code for templates which are instantiated implicitly (i.e. by
use); only emit code for explicit instantiations. @xref{Template
Instantiation}, for more information.
@item -finit-priority @item -finit-priority
Support @samp{__attribute__ ((init_priority (n)))} for controlling the Support @samp{__attribute__ ((init_priority (n)))} for controlling the
order of initialization of file-scope objects. On ELF targets, this order of initialization of file-scope objects. On ELF targets, this
...@@ -1047,58 +1042,6 @@ To save space, do not emit out-of-line copies of inline functions ...@@ -1047,58 +1042,6 @@ To save space, do not emit out-of-line copies of inline functions
controlled by @samp{#pragma implementation}. This will cause linker controlled by @samp{#pragma implementation}. This will cause linker
errors if these functions are not inlined everywhere they are called. errors if these functions are not inlined everywhere they are called.
@item -fmemoize-lookups
@itemx -fsave-memoized
Use heuristics to compile faster. These heuristics are not enabled by
default, since they are only effective for certain input files. Other
input files compile more slowly.
The first time the compiler must build a call to a member function (or
reference to a data member), it must (1) determine whether the class
implements member functions of that name; (2) resolve which member
function to call (which involves figuring out what sorts of type
conversions need to be made); and (3) check the visibility of the member
function to the caller. All of this adds up to slower compilation.
Normally, the second time a call is made to that member function (or
reference to that data member), it must go through the same lengthy
process again. This means that code like this:
@smallexample
cout << "This " << p << " has " << n << " legs.\n";
@end smallexample
@noindent
makes six passes through all three steps. By using a software cache, a
``hit'' significantly reduces this cost. Unfortunately, using the cache
introduces another layer of mechanisms which must be implemented, and so
incurs its own overhead. @samp{-fmemoize-lookups} enables the software
cache.
Because access privileges (visibility) to members and member functions
may differ from one function context to the next, G++ may need to flush
the cache. With the @samp{-fmemoize-lookups} flag, the cache is flushed
after every function that is compiled. The @samp{-fsave-memoized} flag
enables the same software cache, but when the compiler determines that
the context of the last function compiled would yield the same access
privileges of the next function to compile, it preserves the cache.
This is most helpful when defining many member functions for the same
class: with the exception of member functions which are friends of other
classes, each member function has exactly the same access privileges as
every other, and the cache need not be flushed.
The code that implements these flags has rotted; you should probably
avoid using them.
@item -fstrict-prototype
Within an @samp{extern "C"} linkage specification, treat a function
declaration with no arguments, such as @samp{int foo ();}, as declaring
the function to take no arguments. Normally, such a declaration means
that the function @code{foo} can take any combination of arguments, as
in C. @samp{-pedantic} implies @samp{-fstrict-prototype} unless
overridden with @samp{-fno-strict-prototype}.
This flag no longer affects declarations with C++ linkage.
@item -fname-mangling-version-@var{n} @item -fname-mangling-version-@var{n}
Control the way in which names are mangled. Version 0 is compatible Control the way in which names are mangled. Version 0 is compatible
with versions of g++ before 2.8. Version 1 is the default. Version 1 with versions of g++ before 2.8. Version 1 is the default. Version 1
...@@ -1110,15 +1053,6 @@ given this declaration: ...@@ -1110,15 +1053,6 @@ given this declaration:
template <class T, class U> void foo(T t); template <class T, class U> void foo(T t);
@end example @end example
@item -fno-nonnull-objects
Don't assume that a reference is initialized to refer to a valid object.
Although the current C++ Working Paper prohibits null references, some
old code may rely on them, and you can use @samp{-fno-nonnull-objects}
to turn on checking.
At the moment, the compiler only does this checking for conversions to
virtual base classes.
@item -foperator-names @item -foperator-names
Recognize the operator name keywords @code{and}, @code{bitand}, Recognize the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
...@@ -1135,6 +1069,19 @@ Enable automatic template instantiation. This option also implies ...@@ -1135,6 +1069,19 @@ Enable automatic template instantiation. This option also implies
@samp{-fno-implicit-templates}. @xref{Template Instantiation}, for more @samp{-fno-implicit-templates}. @xref{Template Instantiation}, for more
information. information.
@item -fstrict-prototype
Within an @samp{extern "C"} linkage specification, treat a function
declaration with no arguments, such as @samp{int foo ();}, as declaring
the function to take no arguments. Normally, such a declaration means
that the function @code{foo} can take any combination of arguments, as
in C. @samp{-pedantic} implies @samp{-fstrict-prototype} unless
overridden with @samp{-fno-strict-prototype}.
Specifying this option will also suppress implicit declarations of
functions.
This flag no longer affects declarations with C++ linkage.
@item -fsquangle @item -fsquangle
@itemx -fno-squangle @itemx -fno-squangle
@samp{-fsquangle} will enable a compressed form of name mangling for @samp{-fsquangle} will enable a compressed form of name mangling for
...@@ -1144,6 +1091,15 @@ short ID codes. This option also requires any C++ libraries being used to ...@@ -1144,6 +1091,15 @@ short ID codes. This option also requires any C++ libraries being used to
be compiled with this option as well. The compiler has this disabled (the be compiled with this option as well. The compiler has this disabled (the
equivalent of @samp{-fno-squangle}) by default. equivalent of @samp{-fno-squangle}) by default.
Like all options that change the ABI, all C++ code, @emph{including
libgcc.a} must be built with the same setting of this option.
@item -ftemplate-depth-@var{n}
Set the maximum instantiation depth for template classes to @var{n}.
A limit on the template instantiation depth is needed to detect
endless recursions during template class instantiation. ANSI/ISO C++
conforming programs must not rely on a maximum depth greater than 17.
@item -fthis-is-variable @item -fthis-is-variable
Permit assignment to @code{this}. The incorporation of user-defined Permit assignment to @code{this}. The incorporation of user-defined
free store management into C++ has made assignment to @samp{this} an free store management into C++ has made assignment to @samp{this} an
...@@ -1161,26 +1117,13 @@ offsets for adjusting the @samp{this} pointer at the call site. Newer ...@@ -1161,26 +1117,13 @@ offsets for adjusting the @samp{this} pointer at the call site. Newer
implementations store a single pointer to a @samp{thunk} function which implementations store a single pointer to a @samp{thunk} function which
does any necessary adjustment and then calls the target function. does any necessary adjustment and then calls the target function.
This option also enables a heuristic for controlling emission of Like all options that change the ABI, all C++ code, @emph{including
vtables; if a class has any non-inline virtual functions, the vtable libgcc.a} must be built with the same setting of this option.
will be emitted in the translation unit containing the first one of
those.
@item -ftemplate-depth-@var{n}
Set the maximum instantiation depth for template classes to @var{n}.
A limit on the template instantiation depth is needed to detect
endless recursions during template class instantiation. ANSI/ISO C++
conforming programs must not rely on a maximum depth greater than 17.
@item -nostdinc++ @item -nostdinc++
Do not search for header files in the standard directories specific to Do not search for header files in the standard directories specific to
C++, but do still search the other standard directories. (This option C++, but do still search the other standard directories. (This option
is used when building the C++ library.) is used when building the C++ library.)
@item -traditional
For C++ programs (in addition to the effects that apply to both C and
C++), this has the same effect as @samp{-fthis-is-variable}.
@xref{C Dialect Options,, Options Controlling C Dialect}.
@end table @end table
In addition, these optimization, warning, and code generation options In addition, these optimization, warning, and code generation options
...@@ -1189,23 +1132,19 @@ have meanings only for C++ programs: ...@@ -1189,23 +1132,19 @@ have meanings only for C++ programs:
@table @code @table @code
@item -fno-default-inline @item -fno-default-inline
Do not assume @samp{inline} for functions defined inside a class scope. Do not assume @samp{inline} for functions defined inside a class scope.
@xref{Optimize Options,,Options That Control Optimization}. @xref{Optimize Options,,Options That Control Optimization}. Note that these
functions will have linkage like inline functions; they just won't be
inlined by default.
@item -Wno-non-template-friend @item -Wno-non-template-friend
@xref{Warning Options,,Options to Request or Suppress Warnings}. @xref{Warning Options,,Options to Request or Suppress Warnings}.
@item -Wold-style-cast @item -Wold-style-cast
@itemx -Woverloaded-virtual @itemx -Woverloaded-virtual
@itemx -Wtemplate-debugging
Warnings that apply only to C++ programs. @xref{Warning Warnings that apply only to C++ programs. @xref{Warning
Options,,Options to Request or Suppress Warnings}. Options,,Options to Request or Suppress Warnings}.
@item -Weffc++ @item -Weffc++
Warn about violation of some style rules from Effective C++ by Scott Myers. Warn about violation of some style rules from Effective C++ by Scott Myers.
@item +e@var{n}
Control how virtual function definitions are used, in a fashion
compatible with @code{cfront} 1.x. @xref{Code Gen Options,,Options for
Code Generation Conventions}.
@end table @end table
@node Warning Options @node Warning Options
...@@ -5986,24 +5925,6 @@ significant data size overhead, though it does not affect execution. ...@@ -5986,24 +5925,6 @@ significant data size overhead, though it does not affect execution.
This option is on by default for languages that support exception This option is on by default for languages that support exception
handling (such as C++), and off for those that don't (such as C). handling (such as C++), and off for those that don't (such as C).
@item +e0
@itemx +e1
Control whether virtual function definitions in classes are used to
generate code, or only to define interfaces for their callers. (C++
only).
These options are provided for compatibility with @code{cfront} 1.x
usage; the recommended alternative GNU C++ usage is in flux. @xref{C++
Interface,,Declarations and Definitions in One Header}.
With @samp{+e0}, virtual function definitions in classes are declared
@code{extern}; the declaration is used only as an interface
specification, not to generate code for the virtual functions (in this
compilation).
With @samp{+e1}, G++ actually generates the code implementing virtual
functions defined in the code, and makes them publicly visible.
@cindex aliasing of parameters @cindex aliasing of parameters
@cindex parameters, aliased @cindex parameters, aliased
@item -fargument-alias @item -fargument-alias
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment