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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2009-06-03 22:19:39         |2021-8-11

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
There are actually two different issues, one dealing with -fpermissive and the
other dealing with function pointers.

Take:
void (*sub) (int * x, void ** y);
void s (int * x, void ** y);
void call (int a, int * b)
{
  s(a, b);
  sub(a, b);
}

We produce:
<source>: In function 'void call(int, int*)':
<source>:5:5: error: invalid conversion from 'int' to 'int*' [-fpermissive]
    5 |   s(a, b);
      |     ^
      |     |
      |     int
<source>:5:8: error: cannot convert 'int*' to 'void**'
    5 |   s(a, b);
      |        ^
      |        |
      |        int*
<source>:2:26: note:   initializing argument 2 of 'void s(int*, void**)'
    2 | void s (int * x, void ** y);
      |                  ~~~~~~~~^
<source>:6:7: error: invalid conversion from 'int' to 'int*' [-fpermissive]
    6 |   sub(a, b);
      |       ^
      |       |
      |       int
<source>:6:10: error: cannot convert 'int*' to 'void**' in argument passing
    6 |   sub(a, b);
      |          ^
      |          |
      |          int*

Notice how only the second argument for s gets the note "initializing argument"
while the first does not.
sub gets neither.

Reply via email to