Message ID | 20190614121033.GF5989@redhat.com |
---|---|
State | New |
Headers | show |
Series | C++ PATCH for c++/90884 - stray note with -Wctor-dtor-privacy | expand |
Ok. On Fri, Jun 14, 2019, 8:10 AM Marek Polacek <polacek@redhat.com> wrote: > 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 <polacek@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 >
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