Skip to content

Commit 48f8367

Browse files
committed
Walk into pack expansions in this verifier.
Fixes rdar://107664237
1 parent 6cfc9c2 commit 48f8367

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

lib/SIL/IR/TypeLowering.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2750,6 +2750,7 @@ bool TypeConverter::visitAggregateLeaves(
27502750
auto isAggregate = [](CanType ty) {
27512751
return isa<SILPackType>(ty) ||
27522752
isa<TupleType>(ty) ||
2753+
isa<PackExpansionType>(ty) ||
27532754
ty.getEnumOrBoundGenericEnum() ||
27542755
ty.getStructOrBoundGenericStruct();
27552756
};
@@ -2781,6 +2782,10 @@ bool TypeConverter::visitAggregateLeaves(
27812782
tupleIndex);
27822783
++tupleIndex;
27832784
});
2785+
} else if (auto expansion = dyn_cast<PackExpansionType>(ty)) {
2786+
insertIntoWorklist(expansion.getPatternType(),
2787+
origTy.getPackExpansionPatternType(),
2788+
field, index);
27842789
} else if (auto *decl = ty.getStructOrBoundGenericStruct()) {
27852790
for (auto *structField : decl->getStoredProperties()) {
27862791
auto subMap = ty->getContextSubstitutionMap(&M, decl);

test/SILGen/variadic-generic-tuples.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,3 +331,6 @@ func testFancyTuple_concrete() {
331331
func testFancyTuple_pack<each T>(values: repeat each T) {
332332
FancyTuple<Int, String, repeat each T, Bool>(x: (1, "hi", repeat each values, false)).makeTuple()
333333
}
334+
335+
// rdar://107664237
336+
func f<each T>() -> (repeat Array<each T>) {}

0 commit comments

Comments
 (0)