The following example
extern void foo (void); /* declaration */
inline void foo (void) /* definition */
does not create a foo linkage in the output file, whereas if the declaration follows the definition it does. Interestingly, if a declaration appears both before and after the function then no symbol is emitted either.
I'm not completely sure but I think this is a bug. Even though the C99 spec shows an example with the declaration following the definition (6.7.4 note 7) I can't see that it is useful to restrict it to such an eventuality.. considering the (I guess, usual) case where the function prototype is in a system header file, the function appears in a C module and it is desired to inline it there and yet provide external linkage it becomes difficult to do so if you must place the external declaration (the prototype) before the definition.