Embedded: support existentials with inherited conformances

That means: derived classes where the base conforms to a protocol
This commit is contained in:
Erik Eckstein
2024-10-04 20:55:23 +02:00
parent 54e7cdda25
commit a3e6e86383
7 changed files with 116 additions and 4 deletions

View File

@@ -541,6 +541,9 @@ SILModule::lookUpFunctionInWitnessTable(ProtocolConformanceRef C,
linker.processConformance(C);
}
ProtocolConformance *conf = C.getConcrete();
if (auto *inheritedC = dyn_cast<InheritedProtocolConformance>(conf))
conf = inheritedC->getInheritedConformance();
if (!isa<SpecializedProtocolConformance>(conf) || !lookupInSpecializedWitnessTable) {
conf = conf->getRootConformance();
}