Skip to content

Commit 5386a2e

Browse files
authored
Merge pull request swiftlang#19882 from gottesmm/pr-9a52d46ccfa1562f1c019de0f51d163ec450d25a
2 parents 55fef0f + c9b695d commit 5386a2e

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

lib/SILGen/SILGenPattern.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,25 +1447,24 @@ emitTupleDispatch(ArrayRef<RowToSpecialize> rows, ConsumableManagedValue src,
14471447
return emitTupleObjectDispatch(rows, src, handleCase, outerFailure);
14481448
}
14491449

1450-
auto sourceType = cast<TupleType>(firstPat->getType()->getCanonicalType());
1451-
1450+
// At this point we know that we must have an address only type, since we
1451+
// would have loaded it earlier.
14521452
SILValue v = src.getFinalManagedValue().forward(SGF);
1453+
assert(v->getType().isAddressOnly(SGF.getModule()) &&
1454+
"Loadable values were handled earlier");
1455+
14531456
SmallVector<ConsumableManagedValue, 4> destructured;
14541457

14551458
// Break down the values.
14561459
auto tupleSILTy = v->getType();
1457-
for (unsigned i = 0, e = sourceType->getNumElements(); i < e; ++i) {
1460+
for (unsigned i : range(tupleSILTy.castTo<TupleType>()->getNumElements())) {
14581461
SILType fieldTy = tupleSILTy.getTupleElementType(i);
14591462
auto &fieldTL = SGF.getTypeLowering(fieldTy);
14601463

1461-
SILValue member;
1462-
if (tupleSILTy.isAddress()) {
1463-
member = SGF.B.createTupleElementAddr(loc, v, i, fieldTy);
1464-
if (!fieldTL.isAddressOnly())
1465-
member =
1466-
fieldTL.emitLoad(SGF.B, loc, member, LoadOwnershipQualifier::Take);
1467-
} else {
1468-
member = SGF.B.createTupleExtract(loc, v, i, fieldTy);
1464+
SILValue member = SGF.B.createTupleElementAddr(loc, v, i, fieldTy);
1465+
if (!fieldTL.isAddressOnly()) {
1466+
member =
1467+
fieldTL.emitLoad(SGF.B, loc, member, LoadOwnershipQualifier::Take);
14691468
}
14701469
auto memberCMV = getManagedSubobject(SGF, member, fieldTL,
14711470
src.getFinalConsumption());

0 commit comments

Comments
 (0)