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.