aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2019-09-28 11:46:33 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2019-09-28 11:46:33 +0000
commit7cf66a2dbe8017f59d2b28e8db3de8067efcc43e (patch)
treedb6e3f81bed0116523ac7648fb672b27ded21bd9 /gcc
parent028c9b3be468a5dbd27e3190b14d60b04ea02ff4 (diff)
downloadgcc-7cf66a2dbe8017f59d2b28e8db3de8067efcc43e.zip
gcc-7cf66a2dbe8017f59d2b28e8db3de8067efcc43e.tar.gz
gcc-7cf66a2dbe8017f59d2b28e8db3de8067efcc43e.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/class.c10
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/warn/Woverloaded-2.C9
-rw-r--r--gcc/testsuite/g++.dg/warn/Woverloaded-2.h6
-rw-r--r--gcc/testsuite/g++.dg/warn/pr61945.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/warn6.C6
-rw-r--r--gcc/testsuite/g++.old-deja/g++.warn/virt1.C2
8 files changed, 37 insertions, 10 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 895ebd9..c30d704 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2019-09-28 Marek Polacek <polacek@redhat.com>
+ 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 59a3d1a..3838f76 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 617fc99..104a83b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,12 @@
2019-09-28 Marek Polacek <polacek@redhat.com>
+ 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 0000000..84d65de
--- /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 0000000..b9e15b0
--- /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 5584d84..3d40581 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 <typename>
- 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 9c694d6..26759cf 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 4550dd5..c68de8a 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
};