invoke.texi (-fgnu89-inline): Remove discussion about old GCC versions.

2015-03-11  Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* doc/invoke.texi (-fgnu89-inline): Remove discussion about 
	old GCC versions.
	(-fabi-compat-version): Likewise.
	(-ffriend-injection): Likewise.
	(-Wdeclaration-after-statement): Likewise.
	(-fomit-frame-pointer): Likewise.
	(-ftree-coalesce-inlined-vars): Likewise.
	(-fvisibility=): Likewise.
	* doc/extend.texi (Typeof): Likewise.
	(Zero Length): Likewise.
	(Escaped Newlines): Likewise.
	(Compound Literals): Likewise.
	(Function Attributes): Likewise.
	(Label Attributes): Likewise.
	(Type Attributes): Likewise.
	(Function Names): Likewise.
	(Other Builtins): Likewise.
	(Function Specific Option Pragmas): Likewise.
	(C++ Interface): Likewise.

From-SVN: r221364
This commit is contained in:
Sandra Loosemore 2015-03-11 19:11:19 -04:00 committed by Sandra Loosemore
parent 17abb5ac38
commit 8648c55f3b
3 changed files with 66 additions and 160 deletions

View File

@ -1,3 +1,25 @@
2015-03-11 Sandra Loosemore <sandra@codesourcery.com>
* doc/invoke.texi (-fgnu89-inline): Remove discussion about
old GCC versions.
(-fabi-compat-version): Likewise.
(-ffriend-injection): Likewise.
(-Wdeclaration-after-statement): Likewise.
(-fomit-frame-pointer): Likewise.
(-ftree-coalesce-inlined-vars): Likewise.
(-fvisibility=): Likewise.
* doc/extend.texi (Typeof): Likewise.
(Zero Length): Likewise.
(Escaped Newlines): Likewise.
(Compound Literals): Likewise.
(Function Attributes): Likewise.
(Label Attributes): Likewise.
(Type Attributes): Likewise.
(Function Names): Likewise.
(Other Builtins): Likewise.
(Function Specific Option Pragmas): Likewise.
(C++ Interface): Likewise.
2015-03-11 Thomas Schwinge <thomas@codesourcery.com>
* config/nvptx/nvptx.h (LIBSTDCXX): Define to "gcc".

View File

@ -786,26 +786,6 @@ evaluated only once when using @code{__auto_type}, but twice if
@code{typeof} is used.
@end itemize
@emph{Compatibility Note:} In addition to @code{typeof}, GCC 2 supported
a more limited extension that permitted one to write
@smallexample
typedef @var{T} = @var{expr};
@end smallexample
@noindent
with the effect of declaring @var{T} to have the type of the expression
@var{expr}. This extension does not work with GCC 3 (versions between
3.0 and 3.2 crash; 3.2.1 and later give an error). Code that
relies on it should be rewritten to use @code{typeof}:
@smallexample
typedef typeof(@var{expr}) @var{T};
@end smallexample
@noindent
This works with all versions of GCC@.
@node Conditionals
@section Conditionals with Omitted Operands
@cindex conditional expressions, extensions
@ -1498,16 +1478,13 @@ structure or an element of an array. (However, these uses are
permitted by GCC as extensions.)
@end itemize
GCC versions before 3.0 allowed zero-length arrays to be statically
initialized, as if they were flexible arrays. In addition to those
cases that were useful, it also allowed initializations in situations
that would corrupt later data. Non-empty initialization of zero-length
arrays is now treated like any case where there are more initializer
Non-empty initialization of zero-length
arrays is treated like any case where there are more initializer
elements than the array holds, in that a suitable warning about ``excess
elements in array'' is given, and the excess elements (all of them, in
this case) are ignored.
Instead GCC allows static initialization of flexible array members.
GCC allows static initialization of flexible array members.
This is equivalent to defining a new structure containing the original
structure followed by an array of sufficient size to contain the data.
E.g.@: in the following, @code{f1} is constructed as if it were declared
@ -1729,9 +1706,10 @@ argument, these arguments are not macro expanded.
@cindex escaped newlines
@cindex newlines (escaped)
Recently, the preprocessor has relaxed its treatment of escaped
newlines. Previously, the newline had to immediately follow a
backslash. The current implementation allows whitespace in the form
The preprocessor treatment of escaped newlines is more relaxed
than that specified by the C90 standard, which requires the newline
to immediately follow a backslash.
GCC's implementation allows whitespace in the form
of spaces, horizontal and vertical tabs, and form feeds between the
backslash and the subsequent newline. The preprocessor issues a
warning, but treats it as a valid escaped newline and combines the two
@ -1905,12 +1883,12 @@ In C, a compound literal designates an unnamed object with static or
automatic storage duration. In C++, a compound literal designates a
temporary object, which only lives until the end of its
full-expression. As a result, well-defined C code that takes the
address of a subobject of a compound literal can be undefined in C++.
address of a subobject of a compound literal can be undefined in C++,
so the C++ compiler rejects the conversion of a temporary array to a pointer.
For instance, if the array compound literal example above appeared
inside a function, any subsequent use of @samp{foo} in C++ has
undefined behavior because the lifetime of the array ends after the
declaration of @samp{foo}. As a result, the C++ compiler now rejects
the conversion of a temporary array to a pointer.
declaration of @samp{foo}.
As an optimization, the C++ compiler sometimes gives array compound
literals longer lifetimes: when the array either appears outside a
@ -2447,21 +2425,6 @@ function that calls a non-@code{const} function usually must not be
@code{const}. It does not make sense for a @code{const} function to
return @code{void}.
The attribute @code{const} is not implemented in GCC versions earlier
than 2.5. An alternative way to declare that a function has no side
effects, which works in the current version and in some older versions,
is as follows:
@smallexample
typedef int intfn ();
extern const intfn square;
@end smallexample
@noindent
This approach does not work in GNU C++ from 2.6.0 on, since the language
specifies that the @samp{const} must be attached to the return value.
@item constructor
@itemx destructor
@itemx constructor (@var{priority})
@ -2536,14 +2499,13 @@ On systems that support the @code{visibility} attribute, this
attribute also implies ``default'' visibility. It is an error to
explicitly specify any other visibility.
In previous versions of GCC, the @code{dllexport} attribute was ignored
for inlined functions, unless the @option{-fkeep-inline-functions} flag
had been used. The default behavior now is to emit all dllexported
inline functions; however, this can cause object file-size bloat, in
which case the old behavior can be restored by using
@option{-fno-keep-inline-dllexport}.
GCC's default behavior is to emit all inline functions with the
@code{dllexport} attribute. Since this can cause object file-size bloat,
you can use @option{-fno-keep-inline-dllexport}, which tells GCC to
ignore the attribute for inlined functions unless the
@option{-fkeep-inline-functions} flag is used instead.
The attribute is also ignored for undefined symbols.
The attribute is ignored for undefined symbols.
When applied to C++ classes, the attribute marks defined non-inlined
member functions and static data members as exports. Static consts
@ -2595,8 +2557,7 @@ the current translation unit.
For Microsoft Windows targets the use of the @code{dllimport}
attribute on functions is not necessary, but provides a small
performance benefit by eliminating a thunk in the DLL@. The use of the
@code{dllimport} attribute on imported variables was required on older
versions of the GNU linker, but can now be avoided by passing the
@code{dllimport} attribute on imported variables can be avoided by passing the
@option{--enable-auto-import} switch to the GNU linker. As with
functions, using the attribute for a variable eliminates a thunk in
the DLL@.
@ -2931,8 +2892,8 @@ void *memcpy (void *, const void *, size_t)
__attribute__ ((ifunc ("resolve_memcpy")));
@end smallexample
Indirect functions cannot be weak, and require a recent binutils (at
least version 2.20.1), and GNU C library (at least version 2.11.1).
Indirect functions cannot be weak. Binutils version 2.20.1 or higher
and GNU C Library version 2.11.1 are required to use this feature.
@item interrupt
@cindex interrupt handler functions
@ -3573,28 +3534,13 @@ restored before calling the @code{noreturn} function.
It does not make sense for a @code{noreturn} function to have a return
type other than @code{void}.
The attribute @code{noreturn} is not implemented in GCC versions
earlier than 2.5. An alternative way to declare that a function does
not return, which works in the current version and in some older
versions, is as follows:
@smallexample
typedef void voidfn ();
volatile voidfn fatal;
@end smallexample
@noindent
This approach does not work in GNU C++.
@item nothrow
@cindex @code{nothrow} function attribute
The @code{nothrow} attribute is used to inform the compiler that a
function cannot throw an exception. For example, most functions in
the standard C library can be guaranteed not to throw an exception
with the notable exceptions of @code{qsort} and @code{bsearch} that
take function pointer arguments. The @code{nothrow} attribute is not
implemented in GCC versions earlier than 3.3.
take function pointer arguments.
@item nosave_low_regs
@cindex @code{nosave_low_regs} attribute
@ -3692,9 +3638,6 @@ Interesting non-pure functions are functions with infinite loops or those
depending on volatile memory or other system resource, that may change between
two consecutive calls (such as @code{feof} in a multithreading environment).
The attribute @code{pure} is not implemented in GCC versions earlier
than 2.96.
@item hot
@cindex @code{hot} function attribute
The @code{hot} attribute on a function is used to inform the compiler that
@ -3706,9 +3649,6 @@ improving locality.
When profile feedback is available, via @option{-fprofile-use}, hot functions
are automatically detected and this attribute is ignored.
The @code{hot} attribute on functions is not implemented in GCC versions
earlier than 4.3.
@item cold
@cindex @code{cold} function attribute
The @code{cold} attribute on functions is used to inform the compiler that
@ -3724,9 +3664,6 @@ of hot functions that do call marked functions in rare occasions.
When profile feedback is available, via @option{-fprofile-use}, cold functions
are automatically detected and this attribute is ignored.
The @code{cold} attribute on functions is not implemented in GCC versions
earlier than 4.3.
@item no_sanitize_address
@itemx no_address_safety_analysis
@cindex @code{no_sanitize_address} function attribute
@ -4660,9 +4597,6 @@ the path following the label is more likely than paths that are not so
annotated. This attribute is used in cases where @code{__builtin_expect}
cannot be used, for instance with computed goto or @code{asm goto}.
The @code{hot} attribute on labels is not implemented in GCC versions
earlier than 4.8.
@item cold
@cindex @code{cold} label attribute
The @code{cold} attribute on labels is used to inform the compiler that
@ -4670,9 +4604,6 @@ the path following the label is unlikely to be executed. This attribute
is used in cases where @code{__builtin_expect} cannot be used, for instance
with computed goto or @code{asm goto}.
The @code{cold} attribute on labels is not implemented in GCC versions
earlier than 4.8.
@end table
@node Attribute Syntax
@ -5985,7 +5916,7 @@ main (void)
If you replaced @code{short_a} with @code{short} in the variable
declaration, the above program would abort when compiled with
@option{-fstrict-aliasing}, which is on by default at @option{-O2} or
above in recent GCC versions.
above.
@item visibility
In C++, attribute visibility (@pxref{Function Attributes}) can also be
@ -7845,21 +7776,8 @@ static const char __func__[] = "function-name";
appeared, where function-name is the name of the lexically-enclosing
function. This name is the unadorned name of the function.
@code{__FUNCTION__} is another name for @code{__func__}. Older
versions of GCC recognize only this name. However, it is not
standardized. For maximum portability, we recommend you use
@code{__func__}, but provide a fallback definition with the
preprocessor:
@smallexample
#if __STDC_VERSION__ < 199901L
# if __GNUC__ >= 2
# define __func__ __FUNCTION__
# else
# define __func__ "<unknown>"
# endif
#endif
@end smallexample
@code{__FUNCTION__} is another name for @code{__func__}, provided for
backward compatibility with old versions of GCC.
In C, @code{__PRETTY_FUNCTION__} is yet another name for
@code{__func__}. However, in C++, @code{__PRETTY_FUNCTION__} contains
@ -7897,13 +7815,9 @@ __FUNCTION__ = sub
__PRETTY_FUNCTION__ = void a::sub(int)
@end smallexample
These identifiers are not preprocessor macros. In GCC 3.3 and
earlier, in C only, @code{__FUNCTION__} and @code{__PRETTY_FUNCTION__}
were treated as string literals; they could be used to initialize
@code{char} arrays, and they could be concatenated with other string
literals. GCC 3.4 and later treat them as variables, like
@code{__func__}. In C++, @code{__FUNCTION__} and
@code{__PRETTY_FUNCTION__} have always been variables.
These identifiers are variables, not preprocessor macros, and may not
be used to initialize @code{char} arrays or be concatenated with other string
literals.
@node Return Address
@section Getting the Return or Frame Address of a Function
@ -9718,10 +9632,6 @@ not otherwise permitted in a static initializer (for example,
@code{0 && foo ()}). GCC must be more conservative about evaluating the
built-in in this case, because it has no opportunity to perform
optimization.
Previous versions of GCC did not accept this built-in in data
initializers. The earliest version where it is completely safe is
3.0.1.
@end deftypefn
@deftypefn {Built-in Function} long __builtin_expect (long @var{exp}, long @var{c})
@ -17894,9 +17804,6 @@ if @code{attribute((optimize("STRING")))} was specified for that
function. The parenthesis around the options is optional.
@xref{Function Attributes}, for more information about the
@code{optimize} attribute and the attribute syntax.
The @samp{#pragma GCC optimize} pragma is not implemented in GCC
versions earlier than 4.4.
@end table
@table @code
@ -17910,9 +17817,6 @@ options. It is intended for include files where you temporarily want
to switch to using a different @samp{#pragma GCC target} or
@samp{#pragma GCC optimize} and then to pop back to the previous
options.
The @samp{#pragma GCC push_options} and @samp{#pragma GCC pop_options}
pragmas are not implemented in GCC versions earlier than 4.4.
@end table
@table @code
@ -17922,9 +17826,6 @@ pragmas are not implemented in GCC versions earlier than 4.4.
This pragma clears the current @code{#pragma GCC target} and
@code{#pragma GCC optimize} to use the default switches as specified
on the command line.
The @samp{#pragma GCC reset_options} pragma is not implemented in GCC
versions earlier than 4.4.
@end table
@node Loop-Specific Pragmas
@ -18557,14 +18458,11 @@ user with a way of explicitly directing the compiler to emit entities
with vague linkage (and debugging information) in a particular
translation unit.
@emph{Note:} As of GCC 2.7.2, these @code{#pragma}s are not useful in
most cases, because of COMDAT support and the ``key method'' heuristic
@emph{Note:} These @code{#pragma}s have been superceded as of GCC 2.7.2
by COMDAT support and the ``key method'' heuristic
mentioned in @ref{Vague Linkage}. Using them can actually cause your
program to grow due to unnecessary out-of-line copies of inline
functions. Currently (3.4) the only benefit of these
@code{#pragma}s is reduced duplication of debugging information, and
that should be addressed soon on DWARF 2 targets with the use of
COMDAT groups.
functions.
@table @code
@item #pragma interface
@ -18608,12 +18506,6 @@ file. For example, in @file{allclass.cc}, giving just
@samp{#pragma implementation}
by itself is equivalent to @samp{#pragma implementation "allclass.h"}.
In versions of GNU C++ prior to 2.6.0 @file{allclass.h} was treated as
an implementation file whenever you would include it from
@file{allclass.cc} even if you never specified @samp{#pragma
implementation}. This was deemed to be more trouble than it was worth,
however, and disabled.
Use the string argument if you want a single implementation file to
include code from multiple header files. (You must also use
@samp{#include} to include the header file; @samp{#pragma

View File

@ -1777,17 +1777,15 @@ releases.
@opindex fgnu89-inline
The option @option{-fgnu89-inline} tells GCC to use the traditional
GNU semantics for @code{inline} functions when in C99 mode.
@xref{Inline,,An Inline Function is As Fast As a Macro}. This option
is accepted and ignored by GCC versions 4.1.3 up to but not including
4.3. In GCC versions 4.3 and later it changes the behavior of GCC in
C99 mode. Using this option is roughly equivalent to adding the
@xref{Inline,,An Inline Function is As Fast As a Macro}.
Using this option is roughly equivalent to adding the
@code{gnu_inline} function attribute to all inline functions
(@pxref{Function Attributes}).
The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
specifies the default behavior). This option was first supported in
GCC 4.3. This option is not supported in @option{-std=c90} or
specifies the default behavior).
This option is not supported in @option{-std=c90} or
@option{-std=gnu90} mode.
The preprocessor macros @code{__GNUC_GNU_INLINE__} and
@ -2122,7 +2120,7 @@ See also @option{-Wabi}.
@item -fabi-compat-version=@var{n}
@opindex fabi-compat-version
Starting with GCC 4.5, on targets that support strong aliases, G++
On targets that support strong aliases, G++
works around mangling changes by creating an alias with the correct
mangled name when defining a symbol with an incorrect mangled name.
This switch specifies which ABI version to use for the alias.
@ -2183,11 +2181,10 @@ deprecated, and may be removed in a future version of G++.
Inject friend functions into the enclosing namespace, so that they are
visible outside the scope of the class in which they are declared.
Friend functions were documented to work this way in the old Annotated
C++ Reference Manual, and versions of G++ before 4.1 always worked
that way. However, in ISO C++ a friend function that is not declared
C++ Reference Manual.
However, in ISO C++ a friend function that is not declared
in an enclosing scope can only be found using argument dependent
lookup. This option causes friends to be injected as they were in
earlier releases.
lookup. GCC defaults to the standard behavior.
This option is for compatibility, and may be removed in a future
release of G++.
@ -4546,8 +4543,7 @@ except when the same as the default promotion.
@opindex Wno-declaration-after-statement
Warn when a declaration is found after a statement in a block. This
construct, known from C++, was introduced with ISO C99 and is by default
allowed in GCC@. It is not supported by ISO C90 and was not supported by
GCC versions before GCC 3.0. @xref{Mixed Declarations}.
allowed in GCC@. It is not supported by ISO C90. @xref{Mixed Declarations}.
@item -Wundef
@opindex Wundef
@ -7594,11 +7590,10 @@ machine-description macro @code{FRAME_POINTER_REQUIRED} controls
whether a target machine supports this flag. @xref{Registers,,Register
Usage, gccint, GNU Compiler Collection (GCC) Internals}.
Starting with GCC version 4.6, the default setting (when not optimizing for
size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets has been changed to
@option{-fomit-frame-pointer}. The default can be reverted to
@option{-fno-omit-frame-pointer} by configuring GCC with the
@option{--enable-frame-pointer} configure option.
The default setting (when not optimizing for
size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets is
@option{-fomit-frame-pointer}. You can configure GCC with the
@option{--enable-frame-pointer} configure option to change the default.
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
@ -8820,8 +8815,7 @@ from other functions. It is a more limited form of
@option{-ftree-coalesce-vars}. This may harm debug information of such
inlined variables, but it keeps variables of the inlined-into
function apart from each other, such that they are more likely to
contain the expected values in a debugging session. This was the
default in GCC versions older than 4.7.
contain the expected values in a debugging session.
@item -ftree-coalesce-vars
@opindex ftree-coalesce-vars
@ -23814,9 +23808,7 @@ available to be linked against from outside the shared object.
@samp{protected} and @samp{internal} are pretty useless in real-world
usage so the only other commonly used option is @samp{hidden}.
The default if @option{-fvisibility} isn't specified is
@samp{default}, i.e., make every
symbol public---this causes the same behavior as previous versions of
GCC@.
@samp{default}, i.e., make every symbol public.
A good explanation of the benefits offered by ensuring ELF
symbols have the correct visibility is given by ``How To Write