[C++ Patch] Kill -ffriend-injection
authorNathan Sidwell <nathan@acm.org>
Thu, 3 May 2018 19:26:38 +0000 (19:26 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 3 May 2018 19:26:38 +0000 (19:26 +0000)
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

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/name-lookup.c
gcc/doc/extend.texi
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.jason/scoping15.C [deleted file]
gcc/testsuite/g++.old-deja/g++.mike/net43.C [deleted file]

index 549556a95d5ae4dd94f402aac1fae9c973c910c1..df60e1faeae93d54461693081364bb79b3dd23ce 100644 (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
index a6ae85f24cdf49001b4c999f202382f35f959889..56391e512a5fe00da9291c2d40acf3de1887f8dd 100644 (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
index a4c8c8ffcb37e2bc5d96a90c1c746976cb7d10c8..5013501b2323dd42a6aaf56b7e4f80b490532803 100644 (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)
index fadcea80a94f865dc03a565b1098de71fc1fcd9e..25cb43a1a7731d6383a73698c5f6ca281ba0bb78 100644 (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>
 
index 6f2fe01d83d34b465f5401a435646eea59c4e04f..5e671814d8a2a290d2ab45cdc39ac3ef9f2f69c7 100644 (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 ();
 
index 08cabd68a848d8af65e52bb4190829ffa50e9753..9710addcf69ac6c4a11df573580ddad05d1fae74 100644 (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))
index f751b082b0e0c90a3097b486d93d4c9f896d88c6..253aea18b030d9afc35ebd88536e4c3fd53957f4 100644 (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
index b3d23aa2e9a1985393d126194e1688e053a68929..3de372f28b8b5513bafe336e4ab41a61a3020f89 100644 (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
index 0166e6e10dd072c96b2e19e271cca0363f1d9df1..3ea876067e955c386282e107012c87c9a11e8c79 100644 (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
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C
deleted file mode 100644 (file)
index c677b0d..0000000
+++ /dev/null
@@ -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 }
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net43.C b/gcc/testsuite/g++.old-deja/g++.mike/net43.C
deleted file mode 100644 (file)
index de266de..0000000
+++ /dev/null
@@ -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 ^;
-}