diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 040a84d0216..862b7370b7e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-06-28 Jason Merrill + + PR c++/86342 - -Wdeprecated-copy and system headers. + * decl2.c (cp_warn_deprecated_use): Don't warn about declarations + in system headers. + 2018-06-27 David Malcolm PR c++/86329 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; +}