[5.7][ConstraintSystem] Use witnesses for makeIterator
and next
refs in for-in
context
#61109
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 #61091
Fixes behavior change introduced in 5.7 which goes against the original design of
for-in
loopswhere
makeIterator()
andnext()
calls that form a loop statement should use witness ofSequence#makeIterator
andIteratorProtocol#next
requirements instead of relying on overloadresolution.
For example:
makeIterator
declared in theArray
extension is not a witness toSequence#makeIterator
and shouldn't be used because that would change runtime behavior.
Scope:
makeIterator
andnext
calls injected by the compiler infor-in
context.Main Branch PR: [ConstraintSystem] Use witnesses for
makeIterator
andnext
refs infor-in
context #61091Resolves: Sequence/Iterator conformance broken in 5.7 #60514, [Regression] Ambiguous makeIterator() in 5.7 #60958
Risk: Low
Reviewed By: @hborla
Testing: Added a regression test-case to the suite.