Skip to content

Commit 4868880

Browse files
committed
Merge remote-tracking branch 'origin/master' into master-next
2 parents df39aa2 + 4b83b9b commit 4868880

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

lib/Sema/CSRanking.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -758,16 +758,18 @@ Comparison TypeChecker::compareDeclarations(DeclContext *dc,
758758
}
759759

760760
static Type getUnlabeledType(Type type, ASTContext &ctx) {
761-
if (auto *tupleType = dyn_cast<TupleType>(type.getPointer())) {
762-
SmallVector<TupleTypeElt, 8> elts;
763-
for (auto elt : tupleType->getElements()) {
764-
elts.push_back(elt.getWithoutName());
765-
}
761+
return type.transform([&](Type type) -> Type {
762+
if (auto *tupleType = dyn_cast<TupleType>(type.getPointer())) {
763+
SmallVector<TupleTypeElt, 8> elts;
764+
for (auto elt : tupleType->getElements()) {
765+
elts.push_back(elt.getWithoutName());
766+
}
766767

767-
return TupleType::get(elts, ctx);
768-
}
768+
return TupleType::get(elts, ctx);
769+
}
769770

770-
return type;
771+
return type;
772+
});
771773
}
772774

773775
SolutionCompareResult ConstraintSystem::compareSolutions(

test/Constraints/tuple.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,10 @@ func microwave() -> Dinner {
245245
let d: Dinner? = nil
246246
return (n: d) // expected-error{{cannot convert return expression of type '(n: Dinner?)' to return type 'Dinner'}}
247247
}
248+
249+
// Tuple conversion with an optional
250+
func f(b: Bool) -> (a: Int, b: String)? {
251+
let x = 3
252+
let y = ""
253+
return b ? (x, y) : nil
254+
}

0 commit comments

Comments
 (0)