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
```

Reply via email to