-Wdeprecated-copy shouldn't warn about classes that the user can't change.

Tested x86_64-pc-linux-gnu, applying to trunk.
commit 8ca5b3176d0a79534b99bf0d53bb0467abb38800
Author: Jason Merrill <ja...@redhat.com>
Date:   Thu Jun 28 15:41:20 2018 -0400

            PR c++/86342 - -Wdeprecated-copy and system headers.
    
            * decl2.c (cp_warn_deprecated_use): Don't warn about declarations
            in system headers.

diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 5fc6369d39d..e06ffa613b7 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -5208,8 +5208,10 @@ cp_warn_deprecated_use (tree decl, tsubst_flags_t complain)
       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
       && copy_fn_p (decl))
     {
-      warned = warning (OPT_Wdeprecated_copy,
-			"implicitly-declared %qD is deprecated", decl);
+      /* Don't warn about system library classes (c++/86342).  */
+      if (!DECL_IN_SYSTEM_HEADER (decl))
+	warned = warning (OPT_Wdeprecated_copy,
+			  "implicitly-declared %qD is deprecated", decl);
       if (warned)
 	{
 	  tree ctx = DECL_CONTEXT (decl);
diff --git a/gcc/testsuite/g++.dg/cpp0x/depr-copy2.C b/gcc/testsuite/g++.dg/cpp0x/depr-copy2.C
new file mode 100644
index 00000000000..cef18b63d4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/depr-copy2.C
@@ -0,0 +1,17 @@
+// PR c++/86342
+// { dg-options -Wdeprecated-copy }
+
+# 1 "deprcopy.cc"
+# 1 "deprcopy.h" 1 3
+
+struct X {
+  X() { }
+  ~X() { }
+};
+# 2 "deprcopy.cc" 2
+
+int main()
+{
+  X x;
+  X y = x;
+}

Reply via email to