This is from a draft of C11, 6.2.2:
4 For an identifier declared with the storage-class specifier extern in a scope in which a prior declaration of that identifier is visible,31) if the prior declaration specifies internal or external linkage, the linkage of the identifier at the later declaration is the same as the linkage specified at the prior declaration. If no prior declaration is visible, or if the prior declaration specifies no linkage, then the identifier has external linkage.
5 If the declaration of an identifier for a function has no storage-class specifier, its linkage is determined exactly as if it were declared with the storage-class specifier extern. If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external.
The 6.2.2.4 sounds like it's exactly for this situation (together with 6.2.2.5 if there is no extern in front of the second declaration/the definition).
I ran into this in a real program/library (Lua 5.1 again, as my unsigned warning was) and none of MSVC, Clang and GCC emit such warnings. MSVC is whatever with its compliance, but the latter two are strict C compilers.
Pelles C also does the right thing right now with it, except for the warning.
Due to these 4 facts above I really think you should take a second look at entire 6.2.2 (.4 especially) to make sure it's right. If after that you think so I'm not going to argue it.