https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80311

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-04-23
     Ever confirmed|0                           |1

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #0)
> struct X {
>   int i = 0;
>   int f() { return i; }
> };
> 
> int main() {
>   X x;
>   using fp = int (*)();
>   auto f = (fp)(&X::f);
>   return f();
> }
> 
> This bogus attempt to use
> https://gcc.gnu.org/onlinedocs/gcc/Bound-member-functions.html fails,
> because there is no 'this' pointer provided for the call to the bound
> function.

I should have been clearer about how it "fails".

It compiles (and gives a warning about use of the extension unless you silence
it with -Wno-pmf-conversions) but then segfaults at runtime.

> G++ should notice this and give a diagnostic, even with -Wno-pmf-conversions.

The bug is that we shouldn't accept invalid uses of the extension. Valid uses
of the extension should give warnings that can be controlled by
-Wno-pmf-conversions as happens today, but invalid uses should be an error
(maybe controllable by -fpermissive) not produce code that is guaranteed to
segfault.

Reply via email to