[C++ Patch] Kill -ffriend-injection

https://gcc.gnu.org/ml/gcc-patches/2018-05/msg00175.html

	* doc/extend.texi (Deprecated Features): Remove
	-ffriend-injection.
	(Backwards Compatibility): Likewise.
	* doc/invoke.texi (C++ Language Options): Likewise.
	(C++ Dialect Options): Likewise.

	c-family/
	* c.opt (ffriend-injection): Remove functionality, issue warning.

	cp/
	* decl.c (cxx_init_decl_processing): Remove flag_friend_injection.
	* name-lookup.c (do_pushdecl): Likewise.

	testsuite/
	Remove -ffriend-injection.
	* g++.old-deja/g++.jason/scoping15.C: Delete.
	* g++.old-deja/g++.mike/net43.C: Delete.

From-SVN: r259904
This commit is contained in:
Nathan Sidwell 2018-05-03 19:26:38 +00:00 committed by Nathan Sidwell
parent 503ac4e037
commit 6c072e217f
11 changed files with 27 additions and 71 deletions

View file

@ -1,3 +1,11 @@
2018-05-03 Nathan Sidwell <nathan@acm.org>
* doc/extend.texi (Deprecated Features): Remove
-ffriend-injection.
(Backwards Compatibility): Likewise.
* doc/invoke.texi (C++ Language Options): Likewise.
(C++ Dialect Options): Likewise.
2018-05-03 Jakub Jelinek <jakub@redhat.com>
PR target/85530

View file

@ -1,3 +1,7 @@
2018-05-03 Nathan Sidwell <nathan@acm.org>
* c.opt (ffriend-injection): Remove functionality, issue warning.
2018-05-01 David Malcolm <dmalcolm@redhat.com>
PR c/84258

View file

@ -1494,8 +1494,7 @@ C++ ObjC++ Var(flag_new_inheriting_ctors) Init(1)
Implement C++17 inheriting constructor semantics.
ffriend-injection
C++ ObjC++ Var(flag_friend_injection)
Inject friend functions into enclosing namespace.
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
fkeep-inline-dllexport
C C++ ObjC ObjC++ Var(flag_keep_inline_dllexport) Init(1) Report Condition(TARGET_DLLIMPORT_DECL_ATTRIBUTES)

View file

@ -1,3 +1,8 @@
2018-05-03 Nathan Sidwell <nathan@acm.org>
* decl.c (cxx_init_decl_processing): Remove flag_friend_injection.
* name-lookup.c (do_pushdecl): Likewise.
2018-05-02 Paolo Carlini <paolo.carlini@oracle.com>
Jason Merrill <jason@redhat.com>

View file

@ -4175,9 +4175,6 @@ cxx_init_decl_processing (void)
if (!flag_new_for_scope)
warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
"%<-fno-for-scope%> is deprecated");
if (flag_friend_injection)
warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
"%<-ffriend-injection%> is deprecated");
c_common_nodes_and_builtins ();

View file

@ -3055,7 +3055,6 @@ do_pushdecl (tree decl, bool is_friend)
old = OVL_CHAIN (old);
check_template_shadow (decl);
bool visible_injection = false;
if (DECL_DECLARES_FUNCTION_P (decl))
{
@ -3073,11 +3072,8 @@ do_pushdecl (tree decl, bool is_friend)
/* Don't attempt to push it. */
return error_mark_node;
}
if (!flag_friend_injection)
/* Hide it from ordinary lookup. */
DECL_ANTICIPATED (decl) = DECL_HIDDEN_FRIEND_P (decl) = true;
else
visible_injection = true;
/* Hide it from ordinary lookup. */
DECL_ANTICIPATED (decl) = DECL_HIDDEN_FRIEND_P (decl) = true;
}
}
@ -3129,9 +3125,6 @@ do_pushdecl (tree decl, bool is_friend)
}
else if (VAR_P (decl))
maybe_register_incomplete_var (decl);
else if (visible_injection)
warning (0, "injected friend %qD is visible"
" due to %<-ffriend-injection%>", decl);
if ((VAR_P (decl) || TREE_CODE (decl) == FUNCTION_DECL)
&& DECL_EXTERN_C_P (decl))

View file

@ -23846,8 +23846,7 @@ that are now deprecated or have been removed:
@table @code
@item -fno-for-scope
@itemx -ffriend-injection
These two options provide compatibility with pre-standard C++.
This option provides compatibility with pre-standard C++.
@xref{Backwards Compatibility}.
@end table
@ -23907,11 +23906,6 @@ The behavior is deprecated, only available with @option{-std=c++98}
@option{-fpermissive} option to enable it. The behavior will be
removed.
@item Friend Injection
The @option{-ffriend-injection} option makes injected friends visible
to regular name lookup, unlike standard C++. This option is
deprecated and will be removed.
@item Implicit C language
Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
scope to set the language. On such systems, all header files are

View file

@ -193,7 +193,6 @@ in the following sections.
@gccoptlist{-fabi-version=@var{n} -fno-access-control @gol
-faligned-new=@var{n} -fargs-in-order=@var{n} -fcheck-new @gol
-fconstexpr-depth=@var{n} -fconstexpr-loop-limit=@var{n} @gol
-ffriend-injection @gol
-fno-elide-constructors @gol
-fno-enforce-eh-specs @gol
-ffor-scope -fno-for-scope -fno-gnu-keywords @gol
@ -2448,18 +2447,6 @@ originally proposed semantics for the C++11 standard, but was not part
of the final standard, so it is disabled by default. This option is
deprecated, and may be removed in a future version of G++.
@item -ffriend-injection
@opindex ffriend-injection
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.
However, in ISO C++ a friend function that is not declared
in an enclosing scope can only be found using argument dependent
lookup. GCC defaults to the standard behavior.
This option is deprecated and will be removed.
@item -fno-elide-constructors
@opindex fno-elide-constructors
The C++ standard allows an implementation to omit creating a temporary

View file

@ -1,3 +1,9 @@
2018-05-03 Nathan Sidwell <nathan@acm.org>
Remove -ffriend-injection.
* g++.old-deja/g++.jason/scoping15.C: Delete.
* g++.old-deja/g++.mike/net43.C: Delete.
2018-05-03 Jakub Jelinek <jakub@redhat.com>
PR target/85530

View file

@ -1,25 +0,0 @@
// { dg-do assemble }
// { dg-options "-ffriend-injection" }
// Bug: g++ ignores the :: qualification and dies trying to treat an integer
// variable as a list of functions.
class DComplex;
double imag (const DComplex&);
class DComplex {
public:
friend double imag(const DComplex& a); // Not injected, no warning
};
class FComplex {
public:
friend float imag(const FComplex& a); // { dg-warning "is visible" }
};
void
scnrm2(FComplex cx[])
{
int imag;
::imag( cx[0] );
}
// { dg-warning "ffriend-injection.* is deprecated" "cc1plus:" { target *-*-* } 0 }

View file

@ -1,12 +0,0 @@
// { dg-do assemble }
// { dg-options "-ffriend-injection -Wno-deprecated" }
class foo {
public:
friend int operator ^(const foo&, const foo&); // { dg-message "is visible" }
};
int main ()
{
int (*funptr) (const foo &, const foo &) = operator ^;
}