http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56724
Bug #: 56724 Summary: sub-optimal location in error Classification: Unclassified Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: tro...@gcc.gnu.org Consider this source: int f (int *); int callf (int, int, int (*)(double *)); int docall(void) { return callf (23, 72, f); } Compiling this, I get: t.c: In function ‘docall’: t.c:8:3: warning: passing argument 3 of ‘callf’ from incompatible pointer type [enabled by default] f); ^ t.c:3:5: note: expected ‘int (*)(double *)’ but argument is of type ‘int (*)(int *)’ int callf (int, int, int (*)(double *)); ^ I think the location "3:5" is not ideal. It would be better, at least IMO, if it pointed to the particular parameter in the declaration. If you have many parameters, it can be hard to find the right one.