[SILGen] Fix leak in thunk for async throwing swift conformance to ObjC requirement with optional completion. #70729
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix a leak when emitting the native to foreign thunk for an async function which fulfills an Objective-C protocol requirement which can be fulfilled with either a value or an error via a nullable completion.
Previously, the SIL in question used to look like this:
which leaks
%value
on the codepath throughignore
.Note that
%value
is consumed by theenum
instruction, but%completion
is invoked with%guaranteed_some_value
, a guaranteed value. So there is no need to consume %value ininvoke
.Here,
%value
itself is borrowed and forwarded into an enum instruction whose result is passed to%completion
:Because an argument scope was already being created and a cleanup was already being pushed for
%value
, nothing more is required to fix the issue than to reorder the enum and the borrow.rdar://119732084