This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
C++ PATCH for c++/86342, -Wdeprecated-copy and system headers
- From: Jason Merrill <jason at redhat dot com>
- To: gcc-patches List <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 28 Jun 2018 16:21:39 -0400
- Subject: C++ PATCH for c++/86342, -Wdeprecated-copy and system headers
-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 <jason@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;
+}