rjmccall added a comment.

In D83997#2169745 <https://reviews.llvm.org/D83997#2169745>, @ahatanak wrote:

> The use case for this is a macro in which the call to 
> `__builtin_os_log_format` that writes to the buffer and the call that uses 
> the buffer appear in two different statements. For example:
>
>   __builtin_os_log_format(buf, "%@", getObj());
>   ...
>   use_buffer(buf);
>
> The object returned by the call to `getObj` has to be kept alive until 
> `use_buffer` is called, but currently it gets destructed at the end of the 
> full expression. I think an alternate solution would be to provide users a 
> means to tell ARC optimizer not to move the release call for a local variable 
> past any calls, i.e., something that is stricter than 
> `NS_VALID_UNTIL_END_OF_SCOPE`, but that places more burden on the users.
>
> In the `os_log` macro, the result of the call to `__builtin_os_log_format` is 
> passed directly to the call that uses the buffer, so it doesn't require any 
> lifetime extension as you pointed out.

So are there actually any uses that take advantage of these semantics?  Because 
as I understand it, this builtin exists entirely to support the `os_log` macro. 
 If that macro doesn't need the extension semantics, let's just not do them.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83997/new/

https://reviews.llvm.org/D83997

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to