mirror of git://gcc.gnu.org/git/gcc.git
[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
|
|
@ -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>
|
2018-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR target/85530
|
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>
|
2018-05-01 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
PR c/84258
|
PR c/84258
|
||||||
|
|
|
||||||
|
|
@ -1494,8 +1494,7 @@ C++ ObjC++ Var(flag_new_inheriting_ctors) Init(1)
|
||||||
Implement C++17 inheriting constructor semantics.
|
Implement C++17 inheriting constructor semantics.
|
||||||
|
|
||||||
ffriend-injection
|
ffriend-injection
|
||||||
C++ ObjC++ Var(flag_friend_injection)
|
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
|
||||||
Inject friend functions into enclosing namespace.
|
|
||||||
|
|
||||||
fkeep-inline-dllexport
|
fkeep-inline-dllexport
|
||||||
C C++ ObjC ObjC++ Var(flag_keep_inline_dllexport) Init(1) Report Condition(TARGET_DLLIMPORT_DECL_ATTRIBUTES)
|
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>
|
2018-05-02 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
Jason Merrill <jason@redhat.com>
|
Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4175,9 +4175,6 @@ cxx_init_decl_processing (void)
|
||||||
if (!flag_new_for_scope)
|
if (!flag_new_for_scope)
|
||||||
warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
|
warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
|
||||||
"%<-fno-for-scope%> is deprecated");
|
"%<-fno-for-scope%> is deprecated");
|
||||||
if (flag_friend_injection)
|
|
||||||
warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
|
|
||||||
"%<-ffriend-injection%> is deprecated");
|
|
||||||
|
|
||||||
c_common_nodes_and_builtins ();
|
c_common_nodes_and_builtins ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3055,7 +3055,6 @@ do_pushdecl (tree decl, bool is_friend)
|
||||||
old = OVL_CHAIN (old);
|
old = OVL_CHAIN (old);
|
||||||
|
|
||||||
check_template_shadow (decl);
|
check_template_shadow (decl);
|
||||||
bool visible_injection = false;
|
|
||||||
|
|
||||||
if (DECL_DECLARES_FUNCTION_P (decl))
|
if (DECL_DECLARES_FUNCTION_P (decl))
|
||||||
{
|
{
|
||||||
|
|
@ -3073,11 +3072,8 @@ do_pushdecl (tree decl, bool is_friend)
|
||||||
/* Don't attempt to push it. */
|
/* Don't attempt to push it. */
|
||||||
return error_mark_node;
|
return error_mark_node;
|
||||||
}
|
}
|
||||||
if (!flag_friend_injection)
|
/* Hide it from ordinary lookup. */
|
||||||
/* Hide it from ordinary lookup. */
|
DECL_ANTICIPATED (decl) = DECL_HIDDEN_FRIEND_P (decl) = true;
|
||||||
DECL_ANTICIPATED (decl) = DECL_HIDDEN_FRIEND_P (decl) = true;
|
|
||||||
else
|
|
||||||
visible_injection = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3129,9 +3125,6 @@ do_pushdecl (tree decl, bool is_friend)
|
||||||
}
|
}
|
||||||
else if (VAR_P (decl))
|
else if (VAR_P (decl))
|
||||||
maybe_register_incomplete_var (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)
|
if ((VAR_P (decl) || TREE_CODE (decl) == FUNCTION_DECL)
|
||||||
&& DECL_EXTERN_C_P (decl))
|
&& DECL_EXTERN_C_P (decl))
|
||||||
|
|
|
||||||
|
|
@ -23846,8 +23846,7 @@ that are now deprecated or have been removed:
|
||||||
@table @code
|
@table @code
|
||||||
|
|
||||||
@item -fno-for-scope
|
@item -fno-for-scope
|
||||||
@itemx -ffriend-injection
|
This option provides compatibility with pre-standard C++.
|
||||||
These two options provide compatibility with pre-standard C++.
|
|
||||||
@xref{Backwards Compatibility}.
|
@xref{Backwards Compatibility}.
|
||||||
|
|
||||||
@end table
|
@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
|
@option{-fpermissive} option to enable it. The behavior will be
|
||||||
removed.
|
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
|
@item Implicit C language
|
||||||
Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
|
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
|
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
|
@gccoptlist{-fabi-version=@var{n} -fno-access-control @gol
|
||||||
-faligned-new=@var{n} -fargs-in-order=@var{n} -fcheck-new @gol
|
-faligned-new=@var{n} -fargs-in-order=@var{n} -fcheck-new @gol
|
||||||
-fconstexpr-depth=@var{n} -fconstexpr-loop-limit=@var{n} @gol
|
-fconstexpr-depth=@var{n} -fconstexpr-loop-limit=@var{n} @gol
|
||||||
-ffriend-injection @gol
|
|
||||||
-fno-elide-constructors @gol
|
-fno-elide-constructors @gol
|
||||||
-fno-enforce-eh-specs @gol
|
-fno-enforce-eh-specs @gol
|
||||||
-ffor-scope -fno-for-scope -fno-gnu-keywords @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
|
of the final standard, so it is disabled by default. This option is
|
||||||
deprecated, and may be removed in a future version of G++.
|
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
|
@item -fno-elide-constructors
|
||||||
@opindex fno-elide-constructors
|
@opindex fno-elide-constructors
|
||||||
The C++ standard allows an implementation to omit creating a temporary
|
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>
|
2018-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR target/85530
|
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…
Reference in New Issue