GCC allows redefinition of an "extern inline" function in GNU89 mode, accepting the following code: extern inline int f(int a) { return a; } int f(int b) { return b; } which Clang rejects with $ clang -std=gnu89 foo.c foo.c:3:5: error: redefinition of 'f' int f(int b) { return b; } ^ foo.c:1:19: note: previous definition is here extern inline int f(int a) { return a; } ^ 2 diagnostics generated. We previously decided that we would not implement this feature (see bug #4719), but apparently this extension is used by Wine: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2009-October/006766.html We should reconsider.
*** Bug 5431 has been marked as a duplicate of this bug. ***
gcc 4.1.2 also uses this extension.
I just checked the fix in now.