@@ -2543,7 +2543,7 @@ checkIndividualConformance(NormalProtocolConformance *conformance) {
25432543 }
25442544
25452545 // Complain if the global-actor-isolated conformances are not enabled.
2546- if (conformance->isGlobalActorIsolated () &&
2546+ if (conformance->isIsolated () &&
25472547 !Context.LangOpts .hasFeature (Feature::IsolatedConformances)) {
25482548 Context.Diags .diagnose (
25492549 ComplainLoc, diag::isolated_conformance_experimental_feature);
@@ -3382,18 +3382,20 @@ ConformanceChecker::checkActorIsolation(ValueDecl *requirement,
33823382 }
33833383
33843384 return std::nullopt ;
3385- case ActorReferenceResult::EntersActor:
3385+ case ActorReferenceResult::EntersActor: {
33863386 // If the conformance itself is isolated to the same isolation domain as
33873387 // the witness, treat this as being in the same concurrency domain.
3388- if (Conformance->isGlobalActorIsolated () &&
3389- refResult.isolation == getConformanceIsolation (Conformance)) {
3388+ auto conformanceIsolation = Conformance->getIsolation ();
3389+ if (conformanceIsolation.isGlobalActor () &&
3390+ refResult.isolation == conformanceIsolation) {
33903391 sameConcurrencyDomain = true ;
33913392 isIsolatedConformance = true ;
33923393 }
33933394
33943395 // Handled below.
33953396 break ;
33963397 }
3398+ }
33973399
33983400 // Keep track of what modifiers are missing from the requirement and witness,
33993401 // so we can decide what to diagnose.
@@ -3572,7 +3574,7 @@ ConformanceChecker::checkActorIsolation(ValueDecl *requirement,
35723574 // Another way to address the issue is to mark the conformance as
35733575 // isolated to the global actor or "@preconcurrency".
35743576 if (Conformance->getSourceKind () == ConformanceEntryKind::Explicit &&
3575- !Conformance->isGlobalActorIsolated () &&
3577+ !Conformance->getIsolation (). isGlobalActor () &&
35763578 !Conformance->isPreconcurrency () &&
35773579 !suggestedPreconcurrencyOrIsolated &&
35783580 !requirementIsolation.isActorIsolated () &&
@@ -5218,20 +5220,22 @@ static void ensureRequirementsAreSatisfied(ASTContext &ctx,
52185220 }
52195221
52205222 if (!diagnosedIsolatedConformanceIssue) {
5223+ auto outerIsolation = conformance->getIsolation ();
52215224 bool foundIssue = ProtocolConformanceRef (assocConf)
52225225 .forEachIsolatedConformance (
52235226 [&](ProtocolConformance *isolatedConformance) {
5227+ auto innerIsolation = isolatedConformance->getIsolation ();
5228+
52245229 // If the conformance we're checking isn't isolated at all, it
52255230 // needs "isolated".
5226- if (!conformance->isGlobalActorIsolated ()) {
5227- auto isolation = getConformanceIsolation (isolatedConformance);
5231+ if (!outerIsolation.isGlobalActor ()) {
52285232 std::string globalActorStr = " @" +
5229- isolation .getGlobalActor ().getString ();
5233+ innerIsolation .getGlobalActor ().getString ();
52305234 ctx.Diags .diagnose (
52315235 conformance->getLoc (),
52325236 diag::nonisolated_conformance_depends_on_isolated_conformance,
52335237 typeInContext, conformance->getProtocol ()->getName (),
5234- getConformanceIsolation (isolatedConformance) ,
5238+ innerIsolation ,
52355239 isolatedConformance->getType (),
52365240 isolatedConformance->getProtocol ()->getName (),
52375241 globalActorStr
@@ -5243,8 +5247,6 @@ static void ensureRequirementsAreSatisfied(ASTContext &ctx,
52435247
52445248 // The conformance is isolated, but we need it to have the same
52455249 // isolation as the other isolated conformance we found.
5246- auto outerIsolation = getConformanceIsolation (conformance);
5247- auto innerIsolation = getConformanceIsolation (isolatedConformance);
52485250 if (outerIsolation != innerIsolation) {
52495251 ctx.Diags .diagnose (
52505252 conformance->getLoc (),
0 commit comments