[4.1][CSSolver] Prioritize bindings with fewer default types #14538
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: With all else equal prioritize bindings with fewer defaultable types,
which always gets us closer to solution since defaultable bindings
mostly come from the collections and could be checked at the end.
This also makes sure that solver not as aggresive at assigning bindings
to trailing closures and allows solver to consider types which come
from inside the closure.
• Scope of Issue: Affects logic related to picking bindings for type variables in constraint solver.
• Origination: Caused by the performance work related to attempting literal bindings earlier than before which fixes performances related to multiple chained literal array declarations.
• Risk: Low risk; Fixes a bug in constraint solver.
• Reviewed By: @rudkx
• Testing: Compiler regression tests
• Radar / SR: rdar://problem/37290898
Resolves: rdar://problem/37290898
(cherry picked from commit aff4974)