[5.5-05142021][ConstraintSystem] Detect passing sync closure to async argument early #37480
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.
Cherry-pick of (main) #37430, (5.5) #37479
This helps in situations where there are multiple overloads which
differ only in async effect of their parameters. Passing sync argument
to a sync parameter is always preferred and when detected early
allows solver to avoid some of the duplicate work re-solving for
the rest of the path e.g.
In this case since closure is synchronous first overload of
test
is always preferred (when it's a match) and solver can skip re-checking
body of the closure and
op
call when it encountersasync
version.Scope: Passing a sync closure to a call that has two overloads that differ only in
async
for one or more arguments.Main Branch PR: [ConstraintSystem] Detect passing sync closure to async argument early #37430
Resolves: rdar://77942193
Risk: Low
Reviewed By: @hborla
Testing: Regression tests added to the suite