<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Apr 6, 2016 at 5:48 AM, Nat! via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">In Builtins.def I see quite a few functions, which seem to "just" duplicate what is supposed to be in a header anyway.<br>
<br>
An example is "NSLogv":<br>
<br>
```<br>
// void NSLogv(NSString *fmt, va_list args)<br>
LIBBUILTIN(NSLogv, "vGa", "fP:0:", "Foundation/NSObjCRuntime.h", OBJC_LANG)<br>
```<br>
<br>
and it's declared in Foundation/NSObjCRuntime as<br>
<br>
```<br>
FOUNDATION_EXPORT void NSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);<br>
```<br>
<br>
Just the same. I don't get the benefit by this duplication.</blockquote><div><br></div><div>This allows us to diagnose and recover from a missing inclusion of the relevant header:</div><div><br></div><div><div><stdin>:1:32: warning: implicitly declaring library function 'NSLogv' with type 'void (id, struct __va_list_tag *)' [-Wimplicit-function-declaration]</div><div>void f(__builtin_va_list va) { NSLogv(@"foo %d", va); }</div><div>                               ^</div><div><stdin>:1:32: note: include the header <Foundation/NSObjCRuntime.h> or explicitly provide a declaration for 'NSLogv'</div></div><div><br></div></div></div></div>