https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110022
Bug ID: 110022 Summary: -Wsuggest-override incorrectly warns on missing override Product: gcc Version: 13.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: marcus.leivo at gccbugzilla dot mail.kapsi.fi Target Milestone: --- Consider the following code ( https://godbolt.org/z/YMEvxcc3j ): ``` struct A { void f() const { }; }; struct Base { virtual void (A::*pureVirtual() const)() const = 0; }; struct Derived : Base { void (A::*pureVirtual() const)() const override { return &A::f; } }; int main() { A a; const Base& b = Derived{}; (a.*b.pureVirtual())(); } ``` `Base` declares a pure virtual function `pureVirtual` that return a pointer to a member function in `A`. `Derived` overrides `pureVirtual` and is marked `override` accordingly. However, at least gcc 13.1 and trunk both complain when `-Wsuggest-override` is enabled: ``` <source>:10:15: error: 'virtual void (A::* Derived::pureVirtual() const)() const' can be marked override [-Werror=suggest-override] 10 | void (A::*pureVirtual() const)() const override { return &A::f; } | ^~~~~~~~~~~ cc1plus: all warnings being treated as errors ASM generation compiler returned: 1 <source>:10:15: error: 'virtual void (A::* Derived::pureVirtual() const)() const' can be marked override [-Werror=suggest-override] 10 | void (A::*pureVirtual() const)() const override { return &A::f; } | ^~~~~~~~~~~ cc1plus: all warnings being treated as errors Execution build compiler returned: 1 ``` And here's the output of gcc -v: ``` Using built-in specs. COLLECT_GCC=/opt/compiler-explorer/gcc-13.1.0/bin/g++ Target: x86_64-linux-gnu Configured with: ../gcc-13.1.0/configure --prefix=/opt/compiler-explorer/gcc-build/staging --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --disable-bootstrap --enable-multiarch --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --enable-clocale=gnu --enable-languages=c,c++,fortran,ada,objc,obj-c++,go,d,m2 --enable-ld=yes --enable-gold=yes --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-linker-build-id --enable-lto --enable-plugins --enable-threads=posix --with-pkgversion=Compiler-Explorer-Build-gcc--binutils-2.40 Thread model: posix Supported LTO compression algorithms: zlib gcc version 13.1.0 (Compiler-Explorer-Build-gcc--binutils-2.40) COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-masm=intel' '-S' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/' /opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -iprefix /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/ -D_GNU_SOURCE <source> -quiet -dumpdir /app/ -dumpbase output.cpp -dumpbase-ext .cpp -masm=intel -mtune=generic -march=x86-64 -g -version -fdiagnostics-color=always -o /app/output.s GNU C++17 (Compiler-Explorer-Build-gcc--binutils-2.40) version 13.1.0 (x86_64-linux-gnu) compiled by GNU C version 9.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/include" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/x86_64-linux-gnu" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/backward" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/include" ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed/x86_64-linux-gnu" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed" ignoring nonexistent directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0 /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/x86_64-linux-gnu /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/backward /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/include /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed/x86_64-linux-gnu /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed /usr/local/include /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../include /usr/include/x86_64-linux-gnu /usr/include End of search list. Compiler executable checksum: 80a6ca94eb2dd571c430c563d4a4428e COMPILER_PATH=/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/:/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/:/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/bin/ LIBRARY_PATH=/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../lib64/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/lib/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-masm=intel' '-S' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/output.' ASM generation compiler returned: 0 Using built-in specs. COLLECT_GCC=/opt/compiler-explorer/gcc-13.1.0/bin/g++ COLLECT_LTO_WRAPPER=/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/lto-wrapper Target: x86_64-linux-gnu Configured with: ../gcc-13.1.0/configure --prefix=/opt/compiler-explorer/gcc-build/staging --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --disable-bootstrap --enable-multiarch --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --enable-clocale=gnu --enable-languages=c,c++,fortran,ada,objc,obj-c++,go,d,m2 --enable-ld=yes --enable-gold=yes --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-linker-build-id --enable-lto --enable-plugins --enable-threads=posix --with-pkgversion=Compiler-Explorer-Build-gcc--binutils-2.40 Thread model: posix Supported LTO compression algorithms: zlib gcc version 13.1.0 (Compiler-Explorer-Build-gcc--binutils-2.40) COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-v' '-L.' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/output.s-' /opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -iprefix /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/ -D_GNU_SOURCE <source> -quiet -dumpdir /app/output.s- -dumpbase example.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -g -version -fdiagnostics-color=always -o /tmp/ccBqLvxi.s GNU C++17 (Compiler-Explorer-Build-gcc--binutils-2.40) version 13.1.0 (x86_64-linux-gnu) compiled by GNU C version 9.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/include" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/x86_64-linux-gnu" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/backward" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/include" ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed/x86_64-linux-gnu" ignoring duplicate directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed" ignoring nonexistent directory "/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0 /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/x86_64-linux-gnu /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../include/c++/13.1.0/backward /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/include /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed/x86_64-linux-gnu /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/include-fixed /usr/local/include /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/../../include /usr/include/x86_64-linux-gnu /usr/include End of search list. Compiler executable checksum: 80a6ca94eb2dd571c430c563d4a4428e COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-v' '-L.' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/output.s-' /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/bin/as -v --gdwarf-5 --64 -o /tmp/ccw2CiLf.o /tmp/ccBqLvxi.s GNU assembler version 2.40 (x86_64-linux-gnu) using BFD version (Compiler-Explorer-Build-gcc--binutils-2.40) 2.40 COMPILER_PATH=/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/:/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/:/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/bin/ LIBRARY_PATH=/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../lib64/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/lib/:/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-v' '-L.' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/output.s.' /opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/collect2 -plugin /opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/liblto_plugin.so -plugin-opt=/opt/compiler-explorer/gcc-13.1.0/bin/../libexec/gcc/x86_64-linux-gnu/13.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGTXspj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o /app/output.s /lib/x86_64-linux-gnu/crt1.o /lib/x86_64-linux-gnu/crti.o /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/crtbegin.o -L. -L/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0 -L/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu -L/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc -L/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../../../x86_64-linux-gnu/lib -L/opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/../../.. /tmp/ccw2CiLf.o -rpath . -rpath /opt/compiler-explorer/gcc-13.1.0/lib64 -rpath /opt/compiler-explorer/gcc-13.1.0/lib32 -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /opt/compiler-explorer/gcc-13.1.0/bin/../lib/gcc/x86_64-linux-gnu/13.1.0/crtend.o /lib/x86_64-linux-gnu/crtn.o COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-v' '-L.' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/output.s.' Execution build compiler returned: 0 Program returned: 0 ```