6.0: [SILCombine] Handle indirect error in apply(convert_function). #73424
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.
Explanation: Fix a compiler crash caused by misoptimizing certain applies.
Typed throws involves returning errors indirectly on throwing paths. There is a simplification performed by SILCombine for
apply
s whose operand is aconvert_function
. Among other things, it createsunchecked_addr_cast
s of the indirect results and parameters. It does this by iterating over all the operands of theapply
. In the case of a function with an@indirect_error
result, that result appears in the operand list. This simplification was not accounting for it, however. So both incorrect casts and an invalidapply
were created.Here, this is fixed by iterating over the indirect error as well.
Scope: Affects code using typed throws such as via stdlib calls.
Issue:rdar://127468646
Original PR: #73408
Risk: Low. Adds handling for indirect errors in a instruction simplification that already handles other indirect returns.
Testing: Added regression test.
Reviewer: Andrew Trick ( @atrick )