What is the advantage of declaring a function (again) LIBBUILTIN ?

In Builtins.def I see quite a few functions, which seem to "just" duplicate what is supposed to be in a header anyway.

An example is "NSLogv":

// void NSLogv(NSString *fmt, va_list args)
LIBBUILTIN(NSLogv, "vGa", "fP:0:", "Foundation/NSObjCRuntime.h", OBJC_LANG)

and it's declared in Foundation/NSObjCRuntime as

FOUNDATION_EXPORT void NSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);

Just the same. I don't get the benefit by this duplication.


This allows us to diagnose and recover from a missing inclusion of the
relevant header:

<stdin>:1:32: warning: implicitly declaring library function 'NSLogv' with
type 'void (id, struct __va_list_tag *)' [-Wimplicit-function-declaration]
void f(__builtin_va_list va) { NSLogv(@"foo %d", va); }
<stdin>:1:32: note: include the header <Foundation/NSObjCRuntime.h> or
explicitly provide a declaration for 'NSLogv'