[5.3] MandatoryInlining: fix a memory lifetime bug related to partial_apply with in_guaranteed parameters. #32381
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.
This is a cherry-pick of #32317.
Explanation: When creating a closure context, all captured arguments are taken "owned". We failed to copy arguments which are address-only ("indirect arguments"). An assert build of the compiler asserts with a memory lifetime failure. But a non-assert build can show different symptoms. In the reported bug the compiler just hangs. It could also be that a non-assert compiler produces a miscompile.
Scope: It affects closures which capture non-trivial arguments by address (indirect arguments). It's not a new bug and I'm surprised that we didn't see this earlier.
Risk: Low. The logic to fix the problem was just taken from direct arguments.
Testing: Added a validation test
Reviewed by: @gottesmm
Resolves: rdar://problem/64035105