Skip to content

Commit de94a46

Browse files
committed
SILGen: Handle PackConformance in SILGenModule::useConformance()
1 parent aa8f87a commit de94a46

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

lib/SILGen/SILGenLazyConformance.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212

1313
#include "SILGen.h"
1414
#include "swift/AST/Decl.h"
15+
#include "swift/AST/PackConformance.h"
1516
#include "swift/AST/ProtocolConformance.h"
17+
#include "swift/AST/ProtocolConformanceRef.h"
1618
#include "swift/ClangImporter/ClangModule.h"
1719
#include "swift/SIL/SILInstruction.h"
1820
#include "swift/SIL/SILVisitor.h"
@@ -31,6 +33,16 @@ void SILGenModule::useConformance(ProtocolConformanceRef conformanceRef) {
3133
if (conformanceRef.isAbstract())
3234
return;
3335

36+
// Recursively visit pack conformances.
37+
if (conformanceRef.isPack()) {
38+
auto *packConformance = conformanceRef.getPack();
39+
40+
for (auto patternConformanceRef : packConformance->getPatternConformances())
41+
useConformance(patternConformanceRef);
42+
43+
return;
44+
}
45+
3446
auto conformance = conformanceRef.getConcrete();
3547

3648
// Always look through inherited conformances.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// RUN: %target-swift-emit-silgen %s -enable-experimental-feature VariadicGenerics
2+
3+
// Because of -enable-experimental-feature VariadicGenerics
4+
// REQUIRES: asserts
5+
6+
struct Variadic<T...> where each T: Equatable {}
7+
8+
_ = Variadic<Int, String>()

0 commit comments

Comments
 (0)