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