On 6/25/22 00:26, Jason Merrill via Gcc-patches wrote:
This seems like a good warning to have in -Wall, as requested. But as pointed out in PR20423, some users want a warning only when a derived function doesn't override any base function. So let's put that lesser version in -Wall (and -Woverloaded-virtual=1) while leaving the semantics for the existing option the same.
This now causes
$ cat test.cc struct S1 {}; struct S2: S1 { virtual ~S2(); }; struct S3 { virtual ~S3(); }; struct S4: S2, S3 { virtual ~S4(); };
$ g++ -Woverloaded-virtual -fsyntax-only test.cc test.cc:3:21: warning: ‘virtual S3::~S3()’ was hidden [-Woverloaded-virtual=] 3 | struct S3 { virtual ~S3(); }; | ^ test.cc:4:29: note: by ‘virtual S4::~S4()’ 4 | struct S4: S2, S3 { virtual ~S4(); }; | ^ test.cc:3:21: warning: ‘virtual S3::~S3()’ was hidden [-Woverloaded-virtual=] 3 | struct S3 { virtual ~S3(); }; | ^ test.cc:4:29: note: by ‘virtual S4::~S4()’ 4 | struct S4: S2, S3 { virtual ~S4(); }; | ^ test.cc:3:21: warning: ‘virtual S3::~S3()’ was hidden [-Woverloaded-virtual=] 3 | struct S3 { virtual ~S3(); }; | ^ test.cc:4:29: note: by ‘virtual S4::~S4()’ 4 | struct S4: S2, S3 { virtual ~S4(); }; | ^