This patch fixes a naked inform call, resulting in bogus note in the
following testcase, if not compiled with -Wsystem-headers.

Bootstrap/regtest running on x86_64-linux, ok for trunk?

2019-06-14  Marek Polacek  <pola...@redhat.com>

        PR c++/90884 - stray note with -Wctor-dtor-privacy.
        * class.c (maybe_warn_about_overly_private_class): Guard the call to
        inform.

        * g++.dg/warn/ctor-dtor-privacy-4.C: New.
        * g++.dg/warn/ctor-dtor-privacy-4.h: New.

diff --git gcc/cp/class.c gcc/cp/class.c
index 4fdb0f328cc..de37e43d04c 100644
--- gcc/cp/class.c
+++ gcc/cp/class.c
@@ -2150,10 +2150,10 @@ maybe_warn_about_overly_private_class (tree t)
 
       if (!nonprivate_ctor)
        {
-         warning (OPT_Wctor_dtor_privacy,
-                  "%q#T only defines private constructors and has no friends",
-                  t);
-         if (copy_or_move)
+         bool w = warning (OPT_Wctor_dtor_privacy,
+                           "%q#T only defines private constructors and has "
+                           "no friends", t);
+         if (w && copy_or_move)
            inform (DECL_SOURCE_LOCATION (copy_or_move),
                    "%q#D is public, but requires an existing %q#T object",
                    copy_or_move, t);
diff --git gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.C 
gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.C
new file mode 100644
index 00000000000..fcad34e000c
--- /dev/null
+++ gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.C
@@ -0,0 +1,5 @@
+// PR c++/90884
+// { dg-options "-Wctor-dtor-privacy" }
+// { dg-prune-output "In file included from" }
+
+#include "ctor-dtor-privacy-4.h"  // { dg-bogus "is public" }
diff --git gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.h 
gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.h
new file mode 100644
index 00000000000..d67fd26943e
--- /dev/null
+++ gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.h
@@ -0,0 +1,7 @@
+#pragma GCC system_header
+
+namespace std {
+struct __nonesuch {
+  __nonesuch(__nonesuch const &);
+};
+} // namespace std

Reply via email to