+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
+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
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)
+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>
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 ();
old = OVL_CHAIN (old);
check_template_shadow (decl);
- bool visible_injection = false;
if (DECL_DECLARES_FUNCTION_P (decl))
{
/* 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;
}
}
}
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))
@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
@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
@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
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
+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
+++ /dev/null
-// { 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 }
+++ /dev/null
-// { 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 ^;
-}