[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:
parent
503ac4e037
commit
6c072e217f
11 changed files with 27 additions and 71 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }
|
|
@ -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 ^;
|
||||
}
|
Loading…
Add table
Reference in a new issue