<div dir="ltr">It's more or less meant to be implemented by passing extra arguments, which changes how the function is called. This is also meant to work across TUs. e.g. in<div><br></div><div>// foo.h</div><div>int doIt(void *const p __attribute__((carry_size(0))));</div><div><br></div><div>// foo.c</div><div>int doIt(void *const p __attribute__((carry_size(0)))) { return __builtin_object_size(p, 0); }</div><div><br></div><div>// main.c</div><div>#include "foo.h"</div><div>int main() {</div><div>  char c[10];</div><div>  return doIt(c);</div><div>}</div><div><br></div><div>Also, the common case for how this is foreseen to be used is "call function A with the object size if __builtin_object_size succeeds, and function B if __builtin_object_size fails," so being able to overload on the attribute may be mildly convenient. :)</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 14, 2015 at 11:19 AM, PaX Team <span dir="ltr"><<a href="mailto:pageexec@gmail.com" target="_blank">pageexec@gmail.com</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"><span>On 14 Sep 2015 at 10:54, George Burgess IV via cfe-dev wrote:<br>
<br>
> Hello friends,<br>
><br>
> I plan to add a function parameter attribute called carry_size (name<br>
> suggestions welcome). The goal of this attribute is to help Clang/LLVM<br>
> answer `__builtin_object_size(Ptr, Type)` calls when the object pointed to<br>
> by Ptr isn't visible in the caller of __builtin_object_size.<br>
><br>
> An example of its use:<br>
> #define CS(N) __attribute__((carry_size(N)))<br>
> void __attribute__((noinline)) Func(void *const p CS(0)) {<br>
>   printf("%d\n", __builtin_object_size(p, 0));<br>
> }<br>
<br>
</span>i must be missing something here but why do you need a manually applied<br>
attr at all when the compiler can just figure it out itself whenever it<br>
sees a call to __builtin_object_size?<br>
<br>
</blockquote></div><br></div></div>