From 7cf66a2dbe8017f59d2b28e8db3de8067efcc43e Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Sat, 28 Sep 2019 11:46:33 +0000 Subject: [PATCH] PR c++/91921 - stray warning with -Woverloaded-virtual. * class.c (warn_hidden): Only emit the second part of -Woverloaded-virtual if the first part was issued. Use inform instead warning_at. * g++.dg/warn/Woverloaded-2.C: New. * g++.dg/warn/Woverloaded-2.h: New. * g++.dg/warn/pr61945.C: Turn dg-warning into dg-message. * g++.old-deja/g++.mike/warn6.C: Likewise. * g++.old-deja/g++.warn/virt1.C: Likewise. From-SVN: r276249 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/class.c | 10 +++++----- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/g++.dg/warn/Woverloaded-2.C | 9 +++++++++ gcc/testsuite/g++.dg/warn/Woverloaded-2.h | 6 ++++++ gcc/testsuite/g++.dg/warn/pr61945.C | 2 +- gcc/testsuite/g++.old-deja/g++.mike/warn6.C | 6 +++--- gcc/testsuite/g++.old-deja/g++.warn/virt1.C | 2 +- 8 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Woverloaded-2.C create mode 100644 gcc/testsuite/g++.dg/warn/Woverloaded-2.h diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 895ebd9e8fb..c30d704aa4f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2019-09-28 Marek Polacek + PR c++/91921 - stray warning with -Woverloaded-virtual. + * class.c (warn_hidden): Only emit the second part of + -Woverloaded-virtual if the first part was issued. Use inform instead + warning_at. + PR c++/91923 - failure-to-SFINAE with class type NTTP in C++17. * pt.c (invalid_nontype_parm_type_p): Only emit errors when tf_error. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 59a3d1a0496..3838f765a1d 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -2914,12 +2914,12 @@ warn_hidden (tree t) FOR_EACH_VEC_ELT (base_fndecls, j, base_fndecl) if (base_fndecl) { + auto_diagnostic_group d; /* Here we know it is a hider, and no overrider exists. */ - warning_at (location_of (base_fndecl), - OPT_Woverloaded_virtual, - "%qD was hidden", base_fndecl); - warning_at (location_of (fns), - OPT_Woverloaded_virtual, " by %qD", fns); + if (warning_at (location_of (base_fndecl), + OPT_Woverloaded_virtual, + "%qD was hidden", base_fndecl)) + inform (location_of (fns), " by %qD", fns); } } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 617fc99715f..104a83be28a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2019-09-28 Marek Polacek + PR c++/91921 - stray warning with -Woverloaded-virtual. + * g++.dg/warn/Woverloaded-2.C: New. + * g++.dg/warn/Woverloaded-2.h: New. + * g++.dg/warn/pr61945.C: Turn dg-warning into dg-message. + * g++.old-deja/g++.mike/warn6.C: Likewise. + * g++.old-deja/g++.warn/virt1.C: Likewise. + PR c++/91923 - failure-to-SFINAE with class type NTTP in C++17. * g++.dg/cpp0x/nontype5.C: New test. diff --git a/gcc/testsuite/g++.dg/warn/Woverloaded-2.C b/gcc/testsuite/g++.dg/warn/Woverloaded-2.C new file mode 100644 index 00000000000..84d65de05ce --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Woverloaded-2.C @@ -0,0 +1,9 @@ +// PR c++/91921 - stray warning with -Woverloaded-virtual. +// { dg-options "-Woverloaded-virtual" } + +#include "Woverloaded-2.h" + +struct B : A +{ + void f(int); +}; diff --git a/gcc/testsuite/g++.dg/warn/Woverloaded-2.h b/gcc/testsuite/g++.dg/warn/Woverloaded-2.h new file mode 100644 index 00000000000..b9e15b0c331 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Woverloaded-2.h @@ -0,0 +1,6 @@ +#pragma GCC system_header + +struct A +{ + virtual void f(); +}; diff --git a/gcc/testsuite/g++.dg/warn/pr61945.C b/gcc/testsuite/g++.dg/warn/pr61945.C index 5584d841692..3d40581e5e3 100644 --- a/gcc/testsuite/g++.dg/warn/pr61945.C +++ b/gcc/testsuite/g++.dg/warn/pr61945.C @@ -7,5 +7,5 @@ class A { }; class B : A { template - void foo (); // { dg-warning "by .B::foo\\(\\)." } + void foo (); // { dg-message "by .B::foo\\(\\)." } }; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn6.C b/gcc/testsuite/g++.old-deja/g++.mike/warn6.C index 9c694d62559..26759cfb527 100644 --- a/gcc/testsuite/g++.old-deja/g++.mike/warn6.C +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn6.C @@ -30,13 +30,13 @@ struct D : public B, public B2, public B3 { virtual void bothsame(int); - virtual void bothdiff(int); // { dg-warning "" } + virtual void bothdiff(int); // { dg-message "" } virtual void both2same(int); virtual void both2same(float); - virtual void both12diff(int); // { dg-warning "" } + virtual void both12diff(int); // { dg-message "" } - virtual void bothfardiff(int); // { dg-warning "" } + virtual void bothfardiff(int); // { dg-message "" } }; diff --git a/gcc/testsuite/g++.old-deja/g++.warn/virt1.C b/gcc/testsuite/g++.old-deja/g++.warn/virt1.C index 4550dd5e054..c68de8a7e7c 100644 --- a/gcc/testsuite/g++.old-deja/g++.warn/virt1.C +++ b/gcc/testsuite/g++.old-deja/g++.warn/virt1.C @@ -6,5 +6,5 @@ struct A { }; struct B: public A { - void f(int); // { dg-warning "" } by this + void f(int); // { dg-message "" } by this }; -- 2.30.2