https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93728
Bug ID: 93728 Summary: First half of warning message suppressed because code pointed to is in system header Product: gcc Version: 9.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: loximann at gmail dot com Target Milestone: --- Created attachment 47833 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47833&action=edit Minimal reproducible example -Woverloaded-virtual shows only the second half of a warning, making it confusing, when several circumstances happen: - A class with two virtual methods with the same name and different signature exists in a system header. - Another class inheriting from the previous class does not override any methods. - Another class inheriting from the previous class overrides only one method. The output is this: $ make g++ -isystem include -Woverloaded-virtual Woverloaded-virtual.cpp -c Woverloaded-virtual.cpp:8:9: warning: by ‘virtual void Bar::f(int)’ [-Woverloaded-virtual] 8 | void f(int) final {}; | ^ Including the header as a regular header shows also the first half. sergio@bnct1:~/src/playground/Woverloaded-virtual$ make g++ -Iinclude -Woverloaded-virtual Woverloaded-virtual.cpp -c In file included from Woverloaded-virtual.cpp:1: include/Woverloaded-virtual.h:4:16: warning: ‘virtual void Foo::f(int, int)’ was hidden [-Woverloaded-virtual] 4 | virtual void f(int, int){}; | ^ Woverloaded-virtual.cpp:8:9: warning: by ‘virtual void Bar::f(int)’ [-Woverloaded-virtual] 8 | void f(int) final {}; | ^ Minimal reproducible example also available here: https://gitlab.com/loximann/woverloaded-virtual