CastOptimizer: handle isolated conformances

Check the isolation of conformances to avoid wrong folding of dynamic casts
rdar://147417762
This commit is contained in:
Erik Eckstein
2025-04-04 19:21:00 +02:00
parent 8f2c17a149
commit 575388e188
4 changed files with 108 additions and 3 deletions

View File

@@ -115,8 +115,12 @@ classifyDynamicCastToProtocol(SILFunction *function, CanType source, CanType tar
// If checkConformance() returns a valid conformance, then all conditional
// requirements were satisfied.
if (checkConformance(source, TargetProtocol))
if (auto conformance = checkConformance(source, TargetProtocol)) {
if (!matchesActorIsolation(conformance, function))
return DynamicCastFeasibility::MaySucceed;
return DynamicCastFeasibility::WillSucceed;
}
auto *SourceNominalTy = source.getAnyNominal();
if (!SourceNominalTy)