File tree Expand file tree Collapse file tree 2 files changed +18
-1
lines changed Expand file tree Collapse file tree 2 files changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -3944,8 +3944,20 @@ generateForEachStmtConstraints(
3944
3944
forEachStmtInfo.makeIteratorVar = PB;
3945
3945
3946
3946
// Type of sequence expression has to conform to Sequence protocol.
3947
+ //
3948
+ // Note that the following emulates having `$generator` separately
3949
+ // type-checked by introducing a `TVO_PrefersSubtypeBinding` type
3950
+ // variable that would make sure that result of `.makeIterator` would
3951
+ // get ranked standalone.
3947
3952
{
3948
- cs.addConstraint (ConstraintKind::ConformsTo, cs.getType (sequenceExpr),
3953
+ auto *externalIteratorType = cs.createTypeVariable (
3954
+ cs.getConstraintLocator (sequenceExpr), TVO_PrefersSubtypeBinding);
3955
+
3956
+ cs.addConstraint (ConstraintKind::Equal, externalIteratorType,
3957
+ cs.getType (sequenceExpr),
3958
+ externalIteratorType->getImpl ().getLocator ());
3959
+
3960
+ cs.addConstraint (ConstraintKind::ConformsTo, externalIteratorType,
3949
3961
sequenceProto->getDeclaredInterfaceType (),
3950
3962
contextualLocator);
3951
3963
Original file line number Diff line number Diff line change @@ -245,3 +245,8 @@ func testForEachWhereWithClosure(_ x: [Int]) {
245
245
for i in x where x. contains ( where: { $0. byteSwapped == i } ) { }
246
246
}
247
247
248
+ // https://github.com/apple/swift/issues/59522 - use of `prefix` with generic base causes ambiguity in for-in statement
249
+ func test_no_ambiguity_with_prefix_iterator< C: Collection > ( c: C ) {
250
+ for _ in c. prefix ( 1 ) { // Ok
251
+ }
252
+ }
You can’t perform that action at this time.
0 commit comments