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